This is an automated email from the ASF dual-hosted git repository.

mariofusco pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/incubator-kie-drools.git


The following commit(s) were added to refs/heads/main by this push:
     new f3a5dafc99 [KIE-627] remove no longer necesary PredicateConstraint 
(#5551)
f3a5dafc99 is described below

commit f3a5dafc99bdda18a3029184a99df0de3da46129
Author: Mario Fusco <[email protected]>
AuthorDate: Wed Oct 11 15:04:27 2023 +0200

    [KIE-627] remove no longer necesary PredicateConstraint (#5551)
---
 .../org/drools/base/rule/PredicateConstraint.java  | 379 ---------------------
 .../base/rule/accessor/PredicateExpression.java    |  38 ---
 .../java/org/drools/compiler/compiler/Dialect.java |  20 +-
 .../compiler/rule/builder/PatternBuilder.java      |  84 ++---
 .../compiler/rule/builder/PredicateBuilder.java    |  35 --
 .../drools/core/rule/JavaDialectRuntimeData.java   |  49 +--
 .../drools/mvel/asm/ASMPredicateStubBuilder.java   | 127 -------
 .../mvel/asm/AbstractASMPredicateBuilder.java      |  58 ----
 .../org/drools/mvel/asm/PredicateGenerator.java    | 124 -------
 .../java/org/drools/mvel/asm/PredicateStub.java    |  26 --
 .../java/org/drools/mvel/builder/MVELDialect.java  |  41 +--
 .../java/org/drools/mvel/java/JavaDialect.java     |   7 -
 .../org/drools/mvel/java/javaInvokers.mvel         |  41 ---
 .../mvel/CompositeObjectSinkAdapterTest.java       |  85 ++++-
 .../java/org/drools/mvel/FieldConstraintTest.java  | 123 +------
 .../compiler/PackageBuilderConfigurationTest.java  |  27 +-
 16 files changed, 160 insertions(+), 1104 deletions(-)

diff --git 
a/drools-base/src/main/java/org/drools/base/rule/PredicateConstraint.java 
b/drools-base/src/main/java/org/drools/base/rule/PredicateConstraint.java
deleted file mode 100644
index 9a78c0ba00..0000000000
--- a/drools-base/src/main/java/org/drools/base/rule/PredicateConstraint.java
+++ /dev/null
@@ -1,379 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.drools.base.rule;
-
-import java.io.Externalizable;
-import java.io.IOException;
-import java.io.ObjectInput;
-import java.io.ObjectOutput;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collections;
-import java.util.List;
-
-import org.drools.base.base.ValueResolver;
-import org.drools.base.rule.accessor.CompiledInvoker;
-import org.drools.base.rule.accessor.Evaluator;
-import org.drools.base.rule.accessor.PredicateExpression;
-import org.drools.base.rule.accessor.Wireable;
-import org.drools.base.reteoo.BaseTuple;
-import org.drools.base.rule.accessor.ReadAccessor;
-import org.kie.api.runtime.rule.FactHandle;
-
-/**
- * A predicate can be written as a top level constraint or be nested
- * inside inside a field constraint (and as so, must implement the
- * Restriction interface).
- */
-public class PredicateConstraint extends MutableTypeConstraint
-    implements
-        Wireable,
-    Externalizable {
-
-    private static final long          serialVersionUID   = 510l;
-
-    private PredicateExpression expression;
-
-    private Declaration[]              requiredDeclarations;
-
-    private Declaration[]              previousDeclarations;
-
-    private Declaration[]              localDeclarations;
-
-    private List<PredicateConstraint>  cloned             = 
Collections.emptyList();
-
-    private static final Declaration[] EMPTY_DECLARATIONS = new Declaration[0];
-
-    public PredicateConstraint() {
-        this( null );
-    }
-
-    public PredicateConstraint(final PredicateExpression evaluator) {
-        this( evaluator,
-              null,
-              null );
-    }
-
-    public PredicateConstraint(final Declaration[] previousDeclarations,
-                               final Declaration[] localDeclarations) {
-        this( null,
-              previousDeclarations,
-              localDeclarations );
-    }
-
-    public PredicateConstraint(final PredicateExpression expression,
-                               final Declaration[] previousDeclarations,
-                               final Declaration[] localDeclarations ) {
-
-        this.expression = expression;
-
-        if ( previousDeclarations == null ) {
-            this.previousDeclarations = PredicateConstraint.EMPTY_DECLARATIONS;
-        } else {
-            this.previousDeclarations = previousDeclarations;
-        }
-
-        if ( localDeclarations == null ) {
-            this.localDeclarations = PredicateConstraint.EMPTY_DECLARATIONS;
-        } else {
-            this.localDeclarations = localDeclarations;
-        }
-
-        this.requiredDeclarations = new 
Declaration[this.previousDeclarations.length + this.localDeclarations.length];
-        System.arraycopy( this.previousDeclarations,
-                          0,
-                          this.requiredDeclarations,
-                          0,
-                          this.previousDeclarations.length );
-        System.arraycopy( this.localDeclarations,
-                          0,
-                          this.requiredDeclarations,
-                          this.previousDeclarations.length,
-                          this.localDeclarations.length );
-    }
-
-    @SuppressWarnings("unchecked")
-    public void readExternal(ObjectInput in) throws IOException,
-                                            ClassNotFoundException {
-        super.readExternal( in );
-        this.expression = (PredicateExpression) in.readObject();
-        this.requiredDeclarations = (Declaration[]) in.readObject();
-        this.previousDeclarations = (Declaration[]) in.readObject();
-        this.localDeclarations = (Declaration[]) in.readObject();
-        this.cloned = (List<PredicateConstraint>) in.readObject();
-    }
-
-    public void writeExternal(ObjectOutput out) throws IOException {
-        super.writeExternal( out );
-        if ( CompiledInvoker.isCompiledInvoker(this.expression) ) {
-            out.writeObject( null );
-        } else {
-            out.writeObject( this.expression );
-        }
-        out.writeObject( this.requiredDeclarations );
-        out.writeObject( this.previousDeclarations );
-        out.writeObject( this.localDeclarations );
-        out.writeObject( this.cloned );
-    }
-
-    public Declaration[] getRequiredDeclarations() {
-        return this.requiredDeclarations;
-    }
-
-    public void replaceDeclaration(Declaration oldDecl,
-                                   Declaration newDecl) {
-        for ( int i = 0; i < this.requiredDeclarations.length; i++ ) {
-            if ( this.requiredDeclarations[i].equals( oldDecl ) ) {
-                this.requiredDeclarations[i] = newDecl;
-            }
-        }
-        for ( int i = 0; i < this.previousDeclarations.length; i++ ) {
-            if ( this.previousDeclarations[i].equals( oldDecl ) ) {
-                this.previousDeclarations[i] = newDecl;
-            }
-        }
-        for ( int i = 0; i < this.localDeclarations.length; i++ ) {
-            if ( this.localDeclarations[i].equals( oldDecl ) ) {
-                this.localDeclarations[i] = newDecl;
-            }
-        }
-    }
-
-    public void wire(Object object) {
-        setPredicateExpression( (PredicateExpression) object );
-        for ( PredicateConstraint clone : this.cloned ) {
-            clone.wire( object );
-        }
-    }
-
-    public void setPredicateExpression(final PredicateExpression expression) {
-        this.expression = expression;
-    }
-
-    public PredicateExpression getPredicateExpression() {
-        return this.expression;
-    }
-    
-    public boolean isTemporal() {
-        return false;
-    }
-
-    public String toString() {
-        return "[PredicateConstraint previousDeclarations=" + 
Arrays.toString(this.previousDeclarations) +
-                " localDeclarations=" + 
Arrays.toString(this.localDeclarations) + "]";
-    }
-
-    public int hashCode() {
-        return this.expression != null ? this.expression.hashCode() : 0;
-    }
-
-    public boolean equals(final Object object) {
-        if ( object == this ) {
-            return true;
-        }
-
-        if ( object == null || object.getClass() != PredicateConstraint.class 
) {
-            return false;
-        }
-
-        final PredicateConstraint other = (PredicateConstraint) object;
-
-        if ( this.previousDeclarations.length != 
other.previousDeclarations.length ) {
-            return false;
-        }
-
-        if ( this.localDeclarations.length != other.localDeclarations.length ) 
{
-            return false;
-        }
-
-        for ( int i = 0, length = this.previousDeclarations.length; i < 
length; i++ ) {
-            if (this.previousDeclarations[i].getTupleIndex() != 
other.previousDeclarations[i].getTupleIndex() ) {
-                return false;
-            }
-
-            if ( !this.previousDeclarations[i].getExtractor().equals( 
other.previousDeclarations[i].getExtractor() ) ) {
-                return false;
-            }
-        }
-
-        for ( int i = 0, length = this.localDeclarations.length; i < length; 
i++ ) {
-            if (this.localDeclarations[i].getTupleIndex() != 
other.localDeclarations[i].getTupleIndex() ) {
-                return false;
-            }
-
-            if ( !this.localDeclarations[i].getExtractor().equals( 
other.localDeclarations[i].getExtractor() ) ) {
-                return false;
-            }
-        }
-
-        return this.expression.equals( other.expression );
-    }
-
-    public ContextEntry createContextEntry() {
-        PredicateContextEntry ctx = new PredicateContextEntry();
-        ctx.dialectContext = this.expression.createContext();
-        return ctx;
-    }
-
-    public boolean isAllowed(final FactHandle handle,
-                             final ValueResolver valueResolver) {
-        try {
-            return this.expression.evaluate( handle,
-                                             null,
-                                             this.previousDeclarations,
-                                             this.localDeclarations,
-                                             valueResolver,
-                                             null ); 
//((PredicateContextEntry) ctx).dialectContext );
-        } catch ( final Exception e ) {
-            throw new RuntimeException( "Exception executing predicate " + 
this.expression,
-                                         e );
-        }
-    }
-
-    public boolean isAllowed(ReadAccessor extractor,
-                             final FactHandle handle,
-                             final ValueResolver valueResolver,
-                             ContextEntry context) {
-        throw new UnsupportedOperationException( "Method not supported. Please 
contact development team." );
-    }
-
-    public boolean isAllowedCachedLeft(final ContextEntry context,
-                                       final FactHandle handle) {
-        try {
-            final PredicateContextEntry ctx = (PredicateContextEntry) context;
-            return this.expression.evaluate( handle,
-                                             ctx.tuple,
-                                             this.previousDeclarations,
-                                             this.localDeclarations,
-                                             ctx.valueResolver,
-                                             ctx.dialectContext );
-        } catch ( final Exception e ) {
-            throw new RuntimeException( "Exception executing predicate " + 
this.expression,
-                                        e );
-        }
-    }
-
-    public boolean isAllowedCachedRight(final BaseTuple tuple,
-                                        final ContextEntry context) {
-        try {
-            final PredicateContextEntry ctx = (PredicateContextEntry) context;
-            return this.expression.evaluate( ctx.rightHandle,
-                                             tuple,
-                                             this.previousDeclarations,
-                                             this.localDeclarations,
-                                             ctx.valueResolver,
-                                             ctx.dialectContext );
-        } catch ( final Exception e ) {
-            throw new RuntimeException( "Exception executing predicate " + 
this.expression,
-                                        e );
-        }
-    }
-
-    public PredicateConstraint clone() {
-        Declaration[] previous = new 
Declaration[this.previousDeclarations.length];
-        for ( int i = 0; i < previous.length; i++ ) {
-            previous[i] = this.previousDeclarations[i].clone();
-        }
-
-        Declaration[] local = new Declaration[this.localDeclarations.length];
-        for ( int i = 0; i < local.length; i++ ) {
-            local[i] = this.localDeclarations[i].clone();
-        }
-
-        PredicateConstraint clone = new PredicateConstraint( this.expression,
-                                                             previous,
-                                                             local );
-
-        if ( this.cloned == Collections.EMPTY_LIST ) {
-            this.cloned = new ArrayList<>( 1 );
-        }
-
-        this.cloned.add( clone );
-
-        return clone;
-
-    }
-
-    public static class PredicateContextEntry
-        implements
-        ContextEntry {
-
-        private static final long    serialVersionUID = 510l;
-
-        public BaseTuple                 tuple;
-        public FactHandle    rightHandle;
-        public ValueResolver valueResolver;
-
-        public Object                dialectContext;
-
-        private ContextEntry         entry;
-
-        public PredicateContextEntry() {
-        }
-
-        public void readExternal(ObjectInput in) throws IOException,
-                                                ClassNotFoundException {
-            tuple = (BaseTuple) in.readObject();
-            rightHandle = (FactHandle) in.readObject();
-            valueResolver = (ValueResolver) in.readObject();
-            dialectContext = in.readObject();
-            entry = (ContextEntry) in.readObject();
-        }
-
-        public void writeExternal(ObjectOutput out) throws IOException {
-            out.writeObject( tuple );
-            out.writeObject( rightHandle );
-            out.writeObject( valueResolver );
-            out.writeObject( dialectContext );
-            out.writeObject( entry );
-        }
-
-        public ContextEntry getNext() {
-            return this.entry;
-        }
-
-        public void setNext(final ContextEntry entry) {
-            this.entry = entry;
-        }
-
-        public void updateFromFactHandle(final ValueResolver valueResolver,
-                                         final FactHandle handle) {
-            this.valueResolver = valueResolver;
-            this.rightHandle = handle;
-        }
-
-        public void updateFromTuple(final ValueResolver valueResolver,
-                                    final BaseTuple tuple) {
-            this.valueResolver = valueResolver;
-            this.tuple = tuple;
-        }
-
-        public void resetTuple() {
-            this.tuple = null;
-        }
-
-        public void resetFactHandle() {
-            this.rightHandle = null;
-        }
-    }
-
-    public Evaluator getEvaluator() {
-        return null;
-    }
-}
diff --git 
a/drools-base/src/main/java/org/drools/base/rule/accessor/PredicateExpression.java
 
b/drools-base/src/main/java/org/drools/base/rule/accessor/PredicateExpression.java
deleted file mode 100644
index 6dd3f6c55e..0000000000
--- 
a/drools-base/src/main/java/org/drools/base/rule/accessor/PredicateExpression.java
+++ /dev/null
@@ -1,38 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.drools.base.rule.accessor;
-
-import org.drools.base.base.ValueResolver;
-import org.drools.base.reteoo.BaseTuple;
-import org.drools.base.rule.Declaration;
-import org.kie.api.runtime.rule.FactHandle;
-
-public interface PredicateExpression
-    extends
-    Invoker {
-
-    Object createContext();
-
-    public boolean evaluate(FactHandle handle,
-                            BaseTuple tuple,
-                            Declaration[] previousDeclarations,
-                            Declaration[] localDeclarations,
-                            ValueResolver valueResolver,
-                            Object context ) throws Exception;
-}
diff --git 
a/drools-compiler/src/main/java/org/drools/compiler/compiler/Dialect.java 
b/drools-compiler/src/main/java/org/drools/compiler/compiler/Dialect.java
index 228c45ccda..c679080d1f 100644
--- a/drools-compiler/src/main/java/org/drools/compiler/compiler/Dialect.java
+++ b/drools-compiler/src/main/java/org/drools/compiler/compiler/Dialect.java
@@ -18,9 +18,8 @@
  */
 package org.drools.compiler.compiler;
 
-import java.util.List;
-import java.util.Map;
-
+import org.drools.base.definitions.InternalKnowledgePackage;
+import org.drools.base.definitions.rule.impl.QueryImpl;
 import org.drools.compiler.rule.builder.AccumulateBuilder;
 import org.drools.compiler.rule.builder.ConsequenceBuilder;
 import org.drools.compiler.rule.builder.EnabledBuilder;
@@ -32,15 +31,11 @@ import org.drools.compiler.rule.builder.GroupElementBuilder;
 import org.drools.compiler.rule.builder.PackageBuildContext;
 import org.drools.compiler.rule.builder.PatternBuilder;
 import org.drools.compiler.rule.builder.PatternBuilderForQuery;
-import org.drools.compiler.rule.builder.PredicateBuilder;
 import org.drools.compiler.rule.builder.RuleBuildContext;
 import org.drools.compiler.rule.builder.RuleClassBuilder;
 import org.drools.compiler.rule.builder.RuleConditionBuilder;
 import org.drools.compiler.rule.builder.SalienceBuilder;
-import org.drools.util.TypeResolver;
-import org.drools.base.definitions.InternalKnowledgePackage;
 import org.drools.core.rule.JavaDialectRuntimeData;
-import org.drools.base.definitions.rule.impl.QueryImpl;
 import org.drools.drl.ast.descr.AndDescr;
 import org.drools.drl.ast.descr.BaseDescr;
 import org.drools.drl.ast.descr.EntryPointDescr;
@@ -52,9 +47,13 @@ import org.drools.drl.ast.descr.OrDescr;
 import org.drools.drl.ast.descr.PatternDescr;
 import org.drools.drl.ast.descr.ProcessDescr;
 import org.drools.drl.ast.descr.RuleDescr;
+import org.drools.util.TypeResolver;
 import org.kie.api.io.Resource;
 import org.kie.internal.builder.KnowledgeBuilderResult;
 
+import java.util.List;
+import java.util.Map;
+
 import static 
org.drools.base.base.CoreComponentsBuilder.throwExceptionForMissingMvel;
 
 /**
@@ -85,8 +84,6 @@ public interface Dialect {
 
     GroupByBuilder getGroupByBuilder();
 
-    PredicateBuilder getPredicateBuilder();
-
     ConsequenceBuilder getConsequenceBuilder();
 
     RuleClassBuilder getRuleClassBuilder();
@@ -259,11 +256,6 @@ public interface Dialect {
             return throwExceptionForMissingMvel();
         }
 
-        @Override
-        public PredicateBuilder getPredicateBuilder() {
-            return throwExceptionForMissingMvel();
-        }
-
         @Override
         public ConsequenceBuilder getConsequenceBuilder() {
             return throwExceptionForMissingMvel();
diff --git 
a/drools-compiler/src/main/java/org/drools/compiler/rule/builder/PatternBuilder.java
 
b/drools-compiler/src/main/java/org/drools/compiler/rule/builder/PatternBuilder.java
index 0fd9d75de1..3f0aec39b7 100644
--- 
a/drools-compiler/src/main/java/org/drools/compiler/rule/builder/PatternBuilder.java
+++ 
b/drools-compiler/src/main/java/org/drools/compiler/rule/builder/PatternBuilder.java
@@ -18,36 +18,8 @@
  */
 package org.drools.compiler.rule.builder;
 
-import java.lang.reflect.Field;
-import java.lang.reflect.Modifier;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-import java.util.regex.Matcher;
-
-import org.drools.compiler.builder.impl.TypeDeclarationContext;
-import org.drools.compiler.compiler.AnalysisResult;
-import org.drools.compiler.compiler.BoundIdentifiers;
-import org.drools.compiler.compiler.DescrBuildError;
-import org.drools.compiler.compiler.Dialect;
-import org.drools.compiler.compiler.DroolsErrorWrapper;
-import org.drools.compiler.compiler.DroolsWarningWrapper;
-import org.drools.compiler.compiler.PackageRegistry;
-import org.drools.compiler.lang.DescrDumper;
-import org.drools.compiler.lang.DumperContext;
-import org.drools.compiler.rule.builder.EvaluatorDefinition.Target;
-import org.drools.compiler.rule.builder.XpathAnalysis.XpathPart;
-import org.drools.compiler.rule.builder.util.ConstraintUtil;
 import org.drools.base.base.AcceptsClassObjectType;
 import org.drools.base.base.ClassObjectType;
-import org.drools.core.base.FieldNameSupplier;
 import org.drools.base.base.ObjectType;
 import org.drools.base.base.ValueType;
 import org.drools.base.definitions.InternalKnowledgePackage;
@@ -60,14 +32,10 @@ import org.drools.base.facttemplates.FactTemplate;
 import org.drools.base.facttemplates.FactTemplateFieldExtractor;
 import org.drools.base.facttemplates.FactTemplateObjectType;
 import org.drools.base.reteoo.SortDeclarations;
-import org.drools.core.rule.BehaviorRuntime;
 import org.drools.base.rule.Declaration;
 import org.drools.base.rule.Pattern;
 import org.drools.base.rule.PatternSource;
-import org.drools.base.rule.PredicateConstraint;
 import org.drools.base.rule.RuleConditionElement;
-import org.drools.core.rule.SlidingLengthWindow;
-import org.drools.core.rule.SlidingTimeWindow;
 import org.drools.base.rule.TypeDeclaration;
 import org.drools.base.rule.XpathBackReference;
 import org.drools.base.rule.accessor.AcceptsReadAccessor;
@@ -80,6 +48,23 @@ import org.drools.base.rule.constraint.NegConstraint;
 import org.drools.base.rule.constraint.XpathConstraint;
 import org.drools.base.time.TimeUtils;
 import org.drools.base.util.index.ConstraintTypeOperator;
+import org.drools.compiler.builder.impl.TypeDeclarationContext;
+import org.drools.compiler.compiler.AnalysisResult;
+import org.drools.compiler.compiler.BoundIdentifiers;
+import org.drools.compiler.compiler.DescrBuildError;
+import org.drools.compiler.compiler.Dialect;
+import org.drools.compiler.compiler.DroolsErrorWrapper;
+import org.drools.compiler.compiler.DroolsWarningWrapper;
+import org.drools.compiler.compiler.PackageRegistry;
+import org.drools.compiler.lang.DescrDumper;
+import org.drools.compiler.lang.DumperContext;
+import org.drools.compiler.rule.builder.EvaluatorDefinition.Target;
+import org.drools.compiler.rule.builder.XpathAnalysis.XpathPart;
+import org.drools.compiler.rule.builder.util.ConstraintUtil;
+import org.drools.core.base.FieldNameSupplier;
+import org.drools.core.rule.BehaviorRuntime;
+import org.drools.core.rule.SlidingLengthWindow;
+import org.drools.core.rule.SlidingTimeWindow;
 import org.drools.drl.ast.descr.AnnotationDescr;
 import org.drools.drl.ast.descr.AtomicExprDescr;
 import org.drools.drl.ast.descr.BaseDescr;
@@ -112,6 +97,20 @@ import org.kie.internal.builder.conf.LanguageLevelOption;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import java.lang.reflect.Field;
+import java.lang.reflect.Modifier;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import java.util.regex.Matcher;
+
 import static org.drools.compiler.lang.DescrDumper.normalizeEval;
 import static 
org.drools.compiler.rule.builder.util.AnnotationFactory.getTypedAnnotation;
 import static 
org.drools.compiler.rule.builder.util.PatternBuilderUtil.getNormalizeDate;
@@ -1521,27 +1520,6 @@ public class PatternBuilder implements 
RuleConditionBuilder<PatternDescr> {
         Arrays.sort(previousDeclarations, SortDeclarations.instance);
         Arrays.sort(localDeclarations, SortDeclarations.instance);
 
-        boolean isJavaEval = isEvalExpression && context.getDialect().isJava();
-
-        if (isJavaEval) {
-            final PredicateConstraint predicateConstraint = new 
PredicateConstraint(null,
-                                                                               
     previousDeclarations,
-                                                                               
     localDeclarations);
-
-            final PredicateBuilder builder = 
context.getDialect().getPredicateBuilder();
-
-            builder.build(context,
-                          usedIdentifiers,
-                          previousDeclarations,
-                          localDeclarations,
-                          predicateConstraint,
-                          predicateDescr,
-                          analysis);
-
-            return predicateConstraint;
-        }
-
-
         String[] requiredGlobals = 
usedIdentifiers.getGlobals().keySet().toArray(new 
String[usedIdentifiers.getGlobals().size()]);
         Declaration[] mvelDeclarations = new 
Declaration[previousDeclarations.length + localDeclarations.length + 
requiredGlobals.length];
         int i = 0;
diff --git 
a/drools-compiler/src/main/java/org/drools/compiler/rule/builder/PredicateBuilder.java
 
b/drools-compiler/src/main/java/org/drools/compiler/rule/builder/PredicateBuilder.java
deleted file mode 100644
index 771f7c1241..0000000000
--- 
a/drools-compiler/src/main/java/org/drools/compiler/rule/builder/PredicateBuilder.java
+++ /dev/null
@@ -1,35 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.drools.compiler.rule.builder;
-
-import org.drools.compiler.compiler.AnalysisResult;
-import org.drools.compiler.compiler.BoundIdentifiers;
-import org.drools.drl.ast.descr.PredicateDescr;
-import org.drools.base.rule.Declaration;
-import org.drools.base.rule.PredicateConstraint;
-
-public interface PredicateBuilder {
-    public void build(final RuleBuildContext context,
-                      final BoundIdentifiers usedIdentifiers,
-                      final Declaration[] previousDeclarations,
-                      final Declaration[] localDeclarations,
-                      final PredicateConstraint predicateConstraint,
-                      final PredicateDescr predicateDescr, 
-                      AnalysisResult analysis);
-}
diff --git 
a/drools-core/src/main/java/org/drools/core/rule/JavaDialectRuntimeData.java 
b/drools-core/src/main/java/org/drools/core/rule/JavaDialectRuntimeData.java
index 0597748a0e..bef6fa7a4c 100644
--- a/drools-core/src/main/java/org/drools/core/rule/JavaDialectRuntimeData.java
+++ b/drools-core/src/main/java/org/drools/core/rule/JavaDialectRuntimeData.java
@@ -18,6 +18,24 @@
  */
 package org.drools.core.rule;
 
+import org.drools.base.definitions.impl.KnowledgePackageImpl;
+import org.drools.base.definitions.rule.impl.QueryImpl;
+import org.drools.base.definitions.rule.impl.RuleImpl;
+import org.drools.base.rule.ConditionalElement;
+import org.drools.base.rule.DialectRuntimeData;
+import org.drools.base.rule.DialectRuntimeRegistry;
+import org.drools.base.rule.EvalCondition;
+import org.drools.base.rule.Function;
+import org.drools.base.rule.GroupElement;
+import org.drools.base.rule.accessor.Wireable;
+import org.drools.core.util.KeyStoreHelper;
+import org.drools.util.StringUtils;
+import org.drools.wiring.api.ComponentsFactory;
+import org.drools.wiring.api.classloader.ProjectClassLoader;
+import org.kie.internal.concurrent.ExecutorProviderFactory;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
 import java.io.ByteArrayInputStream;
 import java.io.ByteArrayOutputStream;
 import java.io.Externalizable;
@@ -40,27 +58,6 @@ import java.util.concurrent.Callable;
 import java.util.concurrent.CompletionService;
 import java.util.concurrent.ConcurrentHashMap;
 
-import org.drools.base.definitions.impl.KnowledgePackageImpl;
-import org.drools.base.definitions.rule.impl.QueryImpl;
-import org.drools.base.definitions.rule.impl.RuleImpl;
-import org.drools.base.rule.ConditionalElement;
-import org.drools.base.rule.DialectRuntimeData;
-import org.drools.base.rule.DialectRuntimeRegistry;
-import org.drools.base.rule.EvalCondition;
-import org.drools.base.rule.Function;
-import org.drools.base.rule.GroupElement;
-import org.drools.base.rule.Pattern;
-import org.drools.base.rule.PredicateConstraint;
-import org.drools.base.rule.constraint.Constraint;
-import org.drools.base.rule.accessor.Wireable;
-import org.drools.core.util.KeyStoreHelper;
-import org.drools.util.StringUtils;
-import org.drools.wiring.api.ComponentsFactory;
-import org.drools.wiring.api.classloader.ProjectClassLoader;
-import org.kie.internal.concurrent.ExecutorProviderFactory;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
 import static org.drools.util.ClassUtils.convertClassToResourcePath;
 import static org.drools.util.ClassUtils.convertResourceToClassName;
 
@@ -392,8 +389,6 @@ public class JavaDialectRuntimeData implements 
DialectRuntimeData, Externalizabl
             for (final Object object : group.getChildren()) {
                 if (object instanceof ConditionalElement) {
                     removeClasses((ConditionalElement) object);
-                } else if (object instanceof Pattern) {
-                    removeClasses((Pattern) object);
                 }
             }
         } else if (ce instanceof EvalCondition) {
@@ -401,14 +396,6 @@ public class JavaDialectRuntimeData implements 
DialectRuntimeData, Externalizabl
         }
     }
 
-    private void removeClasses( final Pattern pattern ) {
-        for (final Constraint object : pattern.getConstraints()) {
-            if (object instanceof PredicateConstraint) {
-                remove(((PredicateConstraint) 
object).getPredicateExpression().getClass().getName());
-            }
-        }
-    }
-
     public byte[] read( final String resourceName ) {
         return getStore().get( resourceName );
     }
diff --git 
a/drools-mvel/src/main/java/org/drools/mvel/asm/ASMPredicateStubBuilder.java 
b/drools-mvel/src/main/java/org/drools/mvel/asm/ASMPredicateStubBuilder.java
deleted file mode 100644
index 50b1071436..0000000000
--- a/drools-mvel/src/main/java/org/drools/mvel/asm/ASMPredicateStubBuilder.java
+++ /dev/null
@@ -1,127 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.drools.mvel.asm;
-
-import java.util.Map;
-
-import org.drools.base.base.ValueResolver;
-import org.drools.compiler.rule.builder.RuleBuildContext;
-import org.drools.base.reteoo.BaseTuple;
-import org.drools.base.rule.Declaration;
-import org.drools.base.rule.accessor.CompiledInvoker;
-import org.drools.base.rule.accessor.PredicateExpression;
-import org.drools.mvel.asm.ClassGenerator.MethodBody;
-import org.kie.api.runtime.rule.FactHandle;
-import org.mvel2.asm.Label;
-import org.mvel2.asm.MethodVisitor;
-
-import static org.mvel2.asm.Opcodes.ACC_PRIVATE;
-import static org.mvel2.asm.Opcodes.ACC_PUBLIC;
-import static org.mvel2.asm.Opcodes.ACC_VOLATILE;
-import static org.mvel2.asm.Opcodes.ACONST_NULL;
-import static org.mvel2.asm.Opcodes.ALOAD;
-import static org.mvel2.asm.Opcodes.ARETURN;
-import static org.mvel2.asm.Opcodes.ASTORE;
-import static org.mvel2.asm.Opcodes.ATHROW;
-import static org.mvel2.asm.Opcodes.DUP;
-import static org.mvel2.asm.Opcodes.GOTO;
-import static org.mvel2.asm.Opcodes.IFNONNULL;
-import static org.mvel2.asm.Opcodes.IRETURN;
-import static org.mvel2.asm.Opcodes.MONITORENTER;
-import static org.mvel2.asm.Opcodes.MONITOREXIT;
-import static org.mvel2.asm.Opcodes.RETURN;
-
-public class ASMPredicateStubBuilder extends AbstractASMPredicateBuilder {
-
-    protected byte[] createPredicateBytecode(final RuleBuildContext 
ruleContext, final Map vars) {
-        final InvokerDataProvider data = new InvokerContext(vars);
-        final ClassGenerator generator = 
InvokerGenerator.createInvokerStubGenerator(data, ruleContext);
-        createStubPredicate(generator, data, vars);
-        return generator.generateBytecode();
-    }
-
-    private void createStubPredicate(final ClassGenerator generator, final 
InvokerDataProvider data, final Map vars) {
-        generator.setInterfaces(PredicateStub.class, CompiledInvoker.class)
-                .addField(ACC_PRIVATE + ACC_VOLATILE, "predicate", 
PredicateExpression.class);
-
-        generator.addMethod(ACC_PUBLIC, "createContext", 
generator.methodDescr(Object.class), new MethodBody() {
-            public void body(MethodVisitor mv) {
-                mv.visitInsn(ACONST_NULL);
-                mv.visitInsn(ARETURN);
-            }
-        }).addMethod(ACC_PUBLIC, "evaluate", 
generator.methodDescr(Boolean.TYPE, FactHandle.class, BaseTuple.class, 
Declaration[].class, Declaration[].class, ValueResolver.class, Object.class), 
new String[]{"java/lang/Exception"}, new MethodBody() {
-            public void body(MethodVisitor mv) {
-                Label syncStart = new Label();
-                Label syncEnd = new Label();
-                Label l1 = new Label();
-                Label l2 = new Label();
-                mv.visitTryCatchBlock(syncStart, l1, l2, null);
-                Label l3 = new Label();
-                mv.visitTryCatchBlock(l2, l3, l2, null);
-                getFieldFromThis("predicate", PredicateExpression.class);
-                mv.visitJumpInsn(IFNONNULL, syncEnd);
-                mv.visitVarInsn(ALOAD, 0);
-                mv.visitInsn(DUP);
-                mv.visitVarInsn(ASTORE, 7);
-                // synchronized(this) {
-                mv.visitInsn(MONITORENTER);
-                mv.visitLabel(syncStart);
-                getFieldFromThis("predicate", PredicateExpression.class);
-                // if (predicate == null) ...
-                Label ifNotInitialized = new Label();
-                mv.visitJumpInsn(IFNONNULL, ifNotInitialized);
-                mv.visitVarInsn(ALOAD, 0);
-                mv.visitVarInsn(ALOAD, 2);
-                mv.visitVarInsn(ALOAD, 3);
-                mv.visitVarInsn(ALOAD, 4);
-                mv.visitVarInsn(ALOAD, 5);
-                // ... PredicateGenerator.generate(this, tuple, declarations, 
declarations, workingMemory)
-                invokeStatic(PredicateGenerator.class, "generate", null, 
PredicateStub.class, BaseTuple.class, Declaration[].class, Declaration[].class, 
ValueResolver.class);
-                mv.visitLabel(ifNotInitialized);
-                mv.visitVarInsn(ALOAD, 7);
-                mv.visitInsn(MONITOREXIT);
-                mv.visitLabel(l1);
-                mv.visitJumpInsn(GOTO, syncEnd);
-                mv.visitLabel(l2);
-                mv.visitVarInsn(ASTORE, 8);
-                mv.visitVarInsn(ALOAD, 7);
-                mv.visitInsn(MONITOREXIT);
-                mv.visitLabel(l3);
-                mv.visitVarInsn(ALOAD, 8);
-                mv.visitInsn(ATHROW);
-                mv.visitLabel(syncEnd);
-                // } end of synchronized
-                getFieldFromThis("predicate", PredicateExpression.class);
-                mv.visitVarInsn(ALOAD, 1);
-                mv.visitVarInsn(ALOAD, 2);
-                mv.visitVarInsn(ALOAD, 3);
-                mv.visitVarInsn(ALOAD, 4);
-                mv.visitVarInsn(ALOAD, 5);
-                mv.visitVarInsn(ALOAD, 6);
-                invokeInterface(PredicateExpression.class, "evaluate", 
Boolean.TYPE, FactHandle.class, BaseTuple.class, Declaration[].class, 
Declaration[].class, ValueResolver.class, Object.class);
-                mv.visitInsn(IRETURN);
-            }
-        }).addMethod(ACC_PUBLIC, "setPredicate", generator.methodDescr(null, 
PredicateExpression.class), new ClassGenerator.MethodBody() {
-            public void body(MethodVisitor mv) {
-                putFieldInThisFromRegistry("predicate", 
PredicateExpression.class, 1);
-                mv.visitInsn(RETURN);
-            }
-        });
-    }
- }
diff --git 
a/drools-mvel/src/main/java/org/drools/mvel/asm/AbstractASMPredicateBuilder.java
 
b/drools-mvel/src/main/java/org/drools/mvel/asm/AbstractASMPredicateBuilder.java
deleted file mode 100644
index e459c97fd5..0000000000
--- 
a/drools-mvel/src/main/java/org/drools/mvel/asm/AbstractASMPredicateBuilder.java
+++ /dev/null
@@ -1,58 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.drools.mvel.asm;
-
-import java.util.Map;
-
-import org.drools.compiler.compiler.AnalysisResult;
-import org.drools.compiler.compiler.BoundIdentifiers;
-import org.drools.drl.ast.descr.PredicateDescr;
-import org.drools.compiler.rule.builder.PredicateBuilder;
-import org.drools.compiler.rule.builder.RuleBuildContext;
-import org.drools.mvel.java.JavaRuleBuilderHelper;
-import org.drools.base.rule.Declaration;
-import org.drools.base.rule.PredicateConstraint;
-
-public abstract class AbstractASMPredicateBuilder implements PredicateBuilder {
-    public void build(final RuleBuildContext context,
-                      final BoundIdentifiers usedIdentifiers,
-                      final Declaration[] previousDeclarations,
-                      final Declaration[] localDeclarations,
-                      final PredicateConstraint predicateConstraint,
-                      final PredicateDescr predicateDescr,
-                      final AnalysisResult analysis) {
-
-        final String className = "predicate" + context.getNextId();
-        predicateDescr.setClassMethodName( className );
-
-        final Map vars = JavaRuleBuilderHelper.createVariableContext(className,
-                (String) predicateDescr.getContent(),
-                context,
-                previousDeclarations,
-                localDeclarations,
-                usedIdentifiers.getGlobals());
-
-        JavaRuleBuilderHelper.generateMethodTemplate("predicateMethod", 
context, vars);
-
-        byte[] bytecode = createPredicateBytecode(context, vars);
-        JavaRuleBuilderHelper.registerInvokerBytecode(context, vars, bytecode, 
predicateConstraint);
-    }
-
-    protected abstract byte[] createPredicateBytecode(RuleBuildContext 
context, Map<String, Object> vars);
-}
diff --git 
a/drools-mvel/src/main/java/org/drools/mvel/asm/PredicateGenerator.java 
b/drools-mvel/src/main/java/org/drools/mvel/asm/PredicateGenerator.java
deleted file mode 100644
index 507af97b89..0000000000
--- a/drools-mvel/src/main/java/org/drools/mvel/asm/PredicateGenerator.java
+++ /dev/null
@@ -1,124 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.drools.mvel.asm;
-
-import java.util.List;
-
-import org.drools.base.base.ValueResolver;
-import org.drools.core.common.InternalFactHandle;
-import org.drools.base.reteoo.BaseTuple;
-import org.drools.core.reteoo.LeftTuple;
-import org.drools.base.rule.Declaration;
-import org.drools.base.rule.accessor.CompiledInvoker;
-import org.drools.base.rule.accessor.PredicateExpression;
-import org.drools.mvel.asm.GeneratorHelper.DeclarationMatcher;
-import org.kie.api.runtime.rule.FactHandle;
-import org.mvel2.asm.MethodVisitor;
-
-import static org.drools.mvel.asm.GeneratorHelper.createInvokerClassGenerator;
-import static org.drools.mvel.asm.GeneratorHelper.matchDeclarationsToTuple;
-import static org.mvel2.asm.Opcodes.AALOAD;
-import static org.mvel2.asm.Opcodes.ACC_PUBLIC;
-import static org.mvel2.asm.Opcodes.ACONST_NULL;
-import static org.mvel2.asm.Opcodes.ALOAD;
-import static org.mvel2.asm.Opcodes.ARETURN;
-import static org.mvel2.asm.Opcodes.ASTORE;
-import static org.mvel2.asm.Opcodes.INVOKESTATIC;
-import static org.mvel2.asm.Opcodes.IRETURN;
-
-public class PredicateGenerator {
-    public static void generate(final PredicateStub stub,
-                                final BaseTuple tuple,
-                                final Declaration[] previousDeclarations,
-                                final Declaration[] localDeclarations,
-                                final ValueResolver valueResolver) {
-
-        final String[] globals = stub.getGlobals();
-        final String[] globalTypes = stub.getGlobalTypes();
-
-        // Sort declarations based on their offset, so it can ascend the 
tuple's parents stack only once
-        final List<DeclarationMatcher> declarationMatchers = 
matchDeclarationsToTuple(previousDeclarations);
-
-        final ClassGenerator generator = createInvokerClassGenerator(stub, 
valueResolver)
-                .setInterfaces(PredicateExpression.class, 
CompiledInvoker.class);
-
-        generator.addMethod(ACC_PUBLIC, "createContext", 
generator.methodDescr(Object.class), new ClassGenerator.MethodBody() {
-            public void body(MethodVisitor mv) {
-                mv.visitInsn(ACONST_NULL);
-                mv.visitInsn(ARETURN);
-            }
-        }).addMethod(ACC_PUBLIC, "evaluate", 
generator.methodDescr(Boolean.TYPE, FactHandle.class, BaseTuple.class, 
Declaration[].class, Declaration[].class, ValueResolver.class, Object.class), 
new String[]{"java/lang/Exception"}, new GeneratorHelper.EvaluateMethod() {
-            public void body(MethodVisitor mv) {
-                objAstorePos = 9;
-
-                int[] previousDeclarationsParamsPos = new 
int[previousDeclarations.length];
-
-                mv.visitVarInsn( ALOAD, 1 );
-                invokeInterface( FactHandle.class, "getObject", Object.class );
-                mv.visitVarInsn( ASTORE, 1 );
-
-
-                mv.visitVarInsn( ALOAD, 2 );
-                cast(LeftTuple.class);
-                mv.visitVarInsn(ASTORE, 7); // LeftTuple
-
-                BaseTuple currentTuple = tuple;
-                for (DeclarationMatcher matcher : declarationMatchers) {
-                    int i = matcher.getMatcherIndex();
-                    previousDeclarationsParamsPos[i] = objAstorePos;
-
-                    currentTuple = 
traverseTuplesUntilDeclaration(currentTuple, matcher.getTupleIndex(), 7);
-
-                    mv.visitVarInsn(ALOAD, 3);
-                    push(i);
-                    mv.visitInsn(AALOAD); // declarations[i]
-                    mv.visitVarInsn(ALOAD, 5); // reteEvaluator
-
-                    mv.visitVarInsn(ALOAD, 7);
-                    invokeInterface(LeftTuple.class, "getFactHandle", 
InternalFactHandle.class);
-                    invokeInterface(FactHandle.class, "getObject", 
Object.class); // tuple.getFactHandle().getObject()
-
-                    storeObjectFromDeclaration(previousDeclarations[i], 
previousDeclarations[i].getTypeName());
-                }
-
-                int[] localDeclarationsParamsPos = 
parseDeclarations(localDeclarations, 4, 2, 5, false);
-
-                // 
@{ruleClassName}.@{methodName}(@foreach{previousDeclarations}, 
@foreach{localDeclarations}, @foreach{globals})
-                StringBuilder predicateMethodDescr = new StringBuilder("(");
-                for (int i = 0; i < previousDeclarations.length; i++) {
-                    load(previousDeclarationsParamsPos[i]); // 
previousDeclarations[i]
-                    
predicateMethodDescr.append(typeDescr(previousDeclarations[i].getTypeName()));
-                }
-                for (int i = 0; i < localDeclarations.length; i++) {
-                    load(localDeclarationsParamsPos[i]); // 
localDeclarations[i]
-                    
predicateMethodDescr.append(typeDescr(localDeclarations[i].getTypeName()));
-                }
-
-                // @foreach{type : globalTypes, identifier : globals} @{type} 
@{identifier} = ( @{type} ) workingMemory.getGlobal( "@{identifier}" );
-                parseGlobals(globals, globalTypes, 5, predicateMethodDescr);
-
-                predicateMethodDescr.append(")Z");
-                mv.visitMethodInsn(INVOKESTATIC, 
stub.getInternalRuleClassName(), stub.getMethodName(), 
predicateMethodDescr.toString());
-                mv.visitInsn(IRETURN);
-            }
-        });
-
-        stub.setPredicate(generator.newInstance());
-    }
-}
diff --git a/drools-mvel/src/main/java/org/drools/mvel/asm/PredicateStub.java 
b/drools-mvel/src/main/java/org/drools/mvel/asm/PredicateStub.java
deleted file mode 100644
index a3c2aab0b1..0000000000
--- a/drools-mvel/src/main/java/org/drools/mvel/asm/PredicateStub.java
+++ /dev/null
@@ -1,26 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.drools.mvel.asm;
-
-import org.drools.base.rule.accessor.PredicateExpression;
-
-public interface PredicateStub extends PredicateExpression, InvokerStub {
-
-    void setPredicate(PredicateExpression predicate);
-}
diff --git a/drools-mvel/src/main/java/org/drools/mvel/builder/MVELDialect.java 
b/drools-mvel/src/main/java/org/drools/mvel/builder/MVELDialect.java
index b6131ce7ad..7cb63bd657 100644
--- a/drools-mvel/src/main/java/org/drools/mvel/builder/MVELDialect.java
+++ b/drools-mvel/src/main/java/org/drools/mvel/builder/MVELDialect.java
@@ -18,20 +18,10 @@
  */
 package org.drools.mvel.builder;
 
-import java.io.Externalizable;
-import java.io.IOException;
-import java.io.ObjectInput;
-import java.io.ObjectOutput;
-import java.lang.reflect.Method;
-import java.lang.reflect.Modifier;
-import java.lang.reflect.Type;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.LinkedHashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.Map.Entry;
-
+import org.drools.base.definitions.InternalKnowledgePackage;
+import org.drools.base.definitions.rule.impl.QueryImpl;
+import org.drools.base.rule.Declaration;
+import org.drools.base.rule.LineMappings;
 import org.drools.compiler.builder.impl.KnowledgeBuilderConfigurationImpl;
 import org.drools.compiler.compiler.AnalysisResult;
 import org.drools.compiler.compiler.BoundIdentifiers;
@@ -56,7 +46,6 @@ import org.drools.compiler.rule.builder.PackageBuildContext;
 import org.drools.compiler.rule.builder.PatternBuilder;
 import org.drools.compiler.rule.builder.PatternBuilderForAbductiveQuery;
 import org.drools.compiler.rule.builder.PatternBuilderForQuery;
-import org.drools.compiler.rule.builder.PredicateBuilder;
 import org.drools.compiler.rule.builder.RuleBuildContext;
 import org.drools.compiler.rule.builder.RuleClassBuilder;
 import org.drools.compiler.rule.builder.RuleConditionBuilder;
@@ -64,10 +53,6 @@ import org.drools.compiler.rule.builder.SalienceBuilder;
 import org.drools.compiler.rule.builder.WindowReferenceBuilder;
 import org.drools.compiler.rule.builder.dialect.DialectUtil;
 import org.drools.core.common.InternalWorkingMemory;
-import org.drools.base.definitions.InternalKnowledgePackage;
-import org.drools.base.definitions.rule.impl.QueryImpl;
-import org.drools.base.rule.Declaration;
-import org.drools.base.rule.LineMappings;
 import org.drools.core.rule.consequence.KnowledgeHelper;
 import org.drools.drl.ast.descr.AccumulateDescr;
 import org.drools.drl.ast.descr.AndDescr;
@@ -103,6 +88,20 @@ import 
org.kie.memorycompiler.resources.MemoryResourceReader;
 import org.mvel2.MVEL;
 import org.mvel2.optimizers.OptimizerFactory;
 
+import java.io.Externalizable;
+import java.io.IOException;
+import java.io.ObjectInput;
+import java.io.ObjectOutput;
+import java.lang.reflect.Method;
+import java.lang.reflect.Modifier;
+import java.lang.reflect.Type;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.LinkedHashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Map.Entry;
+
 import static org.drools.compiler.lang.DescrDumper.WM_ARGUMENT;
 
 public class MVELDialect
@@ -711,10 +710,6 @@ public class MVELDialect
         return ENTRY_POINT_BUILDER;
     }
 
-    public PredicateBuilder getPredicateBuilder() {
-        throw new RuntimeException("mvel PredicateBuilder is no longer in 
use");
-    }
-
     public SalienceBuilder getSalienceBuilder() {
         return SALIENCE_BUILDER;
     }
diff --git a/drools-mvel/src/main/java/org/drools/mvel/java/JavaDialect.java 
b/drools-mvel/src/main/java/org/drools/mvel/java/JavaDialect.java
index ae2ec1f294..81584f6d2f 100644
--- a/drools-mvel/src/main/java/org/drools/mvel/java/JavaDialect.java
+++ b/drools-mvel/src/main/java/org/drools/mvel/java/JavaDialect.java
@@ -81,7 +81,6 @@ import org.drools.compiler.rule.builder.JavaRuleClassBuilder;
 import org.drools.compiler.rule.builder.NamedConsequenceBuilder;
 import org.drools.compiler.rule.builder.PackageBuildContext;
 import org.drools.compiler.rule.builder.PatternBuilder;
-import org.drools.compiler.rule.builder.PredicateBuilder;
 import org.drools.compiler.rule.builder.PatternBuilderForQuery;
 import org.drools.compiler.rule.builder.RuleBuildContext;
 import org.drools.compiler.rule.builder.RuleClassBuilder;
@@ -102,7 +101,6 @@ import org.drools.util.IoUtils;
 import org.drools.util.StringUtils;
 import org.drools.mvel.asm.ASMConsequenceStubBuilder;
 import org.drools.mvel.asm.ASMEvalStubBuilder;
-import org.drools.mvel.asm.ASMPredicateStubBuilder;
 import org.drools.mvel.builder.MVELEnabledBuilder;
 import org.drools.mvel.builder.MVELFromBuilder;
 import org.drools.mvel.builder.MVELSalienceBuilder;
@@ -133,7 +131,6 @@ public class JavaDialect implements Dialect {
     protected static final JavaGroupByBuilder GROUP_BY_BUILDER = new 
JavaGroupByBuilder();
 
     protected static final RuleConditionBuilder EVAL_BUILDER = new 
ASMEvalStubBuilder();
-    protected static final PredicateBuilder PREDICATE_BUILDER = new 
ASMPredicateStubBuilder();
     protected static final ConsequenceBuilder CONSEQUENCE_BUILDER = new 
ASMConsequenceStubBuilder();
 
     protected static final JavaRuleClassBuilder RULE_CLASS_BUILDER = new 
JavaRuleClassBuilder();
@@ -379,10 +376,6 @@ public class JavaDialect implements Dialect {
         return EVAL_BUILDER;
     }
 
-    public PredicateBuilder getPredicateBuilder() {
-        return PREDICATE_BUILDER;
-    }
-
     public ConsequenceBuilder getConsequenceBuilder() {
         return CONSEQUENCE_BUILDER;
     }
diff --git 
a/drools-mvel/src/main/resources/org/drools/mvel/java/javaInvokers.mvel 
b/drools-mvel/src/main/resources/org/drools/mvel/java/javaInvokers.mvel
index 0129c77379..fa76eb26f4 100644
--- a/drools-mvel/src/main/resources/org/drools/mvel/java/javaInvokers.mvel
+++ b/drools-mvel/src/main/resources/org/drools/mvel/java/javaInvokers.mvel
@@ -78,47 +78,6 @@ public class @{invokerClassName} implements 
org.drools.base.rule.accessor.Return
 }
 @end{}
 
-@declare{"predicateInvoker"}
-package @{package};
-
-public class @{invokerClassName} implements 
org.drools.base.rule.accessor.PredicateExpression, 
org.drools.base.rule.accessor.CompiledInvoker
-{
-    private static final long serialVersionUID  = 510l;
-
-    public Object createContext() { return null; }
-
-    public boolean evaluate(org.kie.api.runtime.rule.FactHandle handle,
-                            org.drools.base.reteoo.BaseTuple tuple,
-                            org.drools.base.rule.Declaration[] 
previousDeclarations,
-                            org.drools.base.rule.Declaration[] 
localDeclarations,
-                            org.drools.base.base.ValueResolver valueResolver,
-                            Object context ) throws Exception {
-
-        @code{i0=0}@foreach{declr : declarations} @{declr.typeName} 
@{declr.identifier} = ( @{declr.boxedTypeName} ) 
previousDeclarations[@{i0}].getValue( valueResolver, tuple ) );
-          @code{i0++}
-        @end{}
-        @code{i0=0}@foreach{declr : localDeclarations} @{declr.typeName} 
@{declr.identifier} = ( @{declr.boxedTypeName} ) 
localDeclarations[@{i0}].getValue( valueResolver, handle );
-          @code{i0++}
-        @end{}
-        @foreach{type : globalTypes, identifier : globals} @{type} 
@{identifier} = ( @{type} ) valueResolver.getGlobal( "@{identifier}" );
-        @end{}
-
-        return @{ruleClassName}.@{methodName}(
-            @foreach{declr : declarations} @{declr.identifier}
-            @end{","}  @if{localDeclarations != empty && declarations != 
empty},@end{}
-            @foreach{declr : localDeclarations} @{declr.identifier}
-            @end{","}@if{globals != empty && (localDeclarations != empty || 
declarations != empty)},@end{}
-            @foreach{identifier : globals}@{identifier}
-            @end{","} );
-    }
-
-    @includeNamed{"hashCode"}
-
-    @includeNamed{"getMethodBytecode"}
-
-    @includeNamed{"equals"}
-}
-@end{}
 
 @declare{"evalInvoker"}
 package @{package};
diff --git 
a/drools-test-coverage/test-compiler-integration/src/test/java/org/drools/mvel/CompositeObjectSinkAdapterTest.java
 
b/drools-test-coverage/test-compiler-integration/src/test/java/org/drools/mvel/CompositeObjectSinkAdapterTest.java
index ccf0c42d9e..afd7692759 100644
--- 
a/drools-test-coverage/test-compiler-integration/src/test/java/org/drools/mvel/CompositeObjectSinkAdapterTest.java
+++ 
b/drools-test-coverage/test-compiler-integration/src/test/java/org/drools/mvel/CompositeObjectSinkAdapterTest.java
@@ -18,19 +18,14 @@
  */
 package org.drools.mvel;
 
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.List;
-
-import org.drools.core.base.ClassFieldAccessorCache;
+import org.drools.base.base.ValueResolver;
+import org.drools.base.definitions.rule.impl.RuleImpl;
+import org.drools.base.rule.Declaration;
 import org.drools.base.rule.accessor.ReadAccessor;
-import org.drools.kiesession.rulebase.InternalKnowledgeBase;
-import org.drools.mvel.accessors.ClassFieldAccessorStore;
-import org.drools.kiesession.entrypoints.DisconnectedWorkingMemoryEntryPoint;
+import org.drools.base.rule.constraint.AlphaNodeFieldConstraint;
+import org.drools.base.rule.constraint.Constraint;
+import org.drools.core.base.ClassFieldAccessorCache;
 import org.drools.core.common.InternalFactHandle;
-import org.drools.base.definitions.rule.impl.RuleImpl;
 import org.drools.core.reteoo.AlphaNode;
 import org.drools.core.reteoo.BetaNode;
 import org.drools.core.reteoo.CompositeObjectSinkAdapter;
@@ -38,15 +33,26 @@ import 
org.drools.core.reteoo.CompositeObjectSinkAdapter.HashKey;
 import org.drools.core.reteoo.ObjectSink;
 import org.drools.core.reteoo.ReteooFactHandleFactory;
 import org.drools.core.reteoo.builder.BuildContext;
-import org.drools.base.rule.PredicateConstraint;
-import org.drools.base.rule.constraint.AlphaNodeFieldConstraint;
+import org.drools.kiesession.entrypoints.DisconnectedWorkingMemoryEntryPoint;
+import org.drools.kiesession.rulebase.InternalKnowledgeBase;
 import org.drools.kiesession.rulebase.KnowledgeBaseFactory;
+import org.drools.mvel.accessors.ClassFieldAccessorStore;
 import org.drools.mvel.model.Cheese;
 import org.drools.mvel.model.MockObjectSource;
 import org.junit.Before;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.junit.runners.Parameterized;
+import org.kie.api.runtime.rule.FactHandle;
+
+import java.io.IOException;
+import java.io.ObjectInput;
+import java.io.ObjectOutput;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.List;
 
 import static org.assertj.core.api.Assertions.assertThat;
 import static org.assertj.core.api.Assertions.fail;
@@ -113,7 +119,7 @@ public class CompositeObjectSinkAdapterTest {
 
     @Test
     public void testAddOneAlphaNotHashable() {
-        final AlphaNode al = createAlphaNode(new PredicateConstraint( null, 
null ));
+        final AlphaNode al = createAlphaNode(new 
AlphaNodeFieldConstraintMock());
         ad.addObjectSink( al );
 
         sinksAre(al);
@@ -122,7 +128,7 @@ public class CompositeObjectSinkAdapterTest {
     
     @Test
     public void testAddOneAlphaNotHashableRemoveOneAlpha() {
-        final AlphaNode al = createAlphaNode(new PredicateConstraint( null, 
null ));
+        final AlphaNode al = createAlphaNode(new 
AlphaNodeFieldConstraintMock());
         ad.addObjectSink( al );
 
         ad.removeObjectSink( al );
@@ -417,7 +423,54 @@ public class CompositeObjectSinkAdapterTest {
                                             new MockObjectSource( 
buildContext.getNextNodeId() ),
                                             buildContext );
        }
-   
+
+    private static class AlphaNodeFieldConstraintMock implements 
AlphaNodeFieldConstraint {
+
+        @Override
+        public boolean isAllowed(FactHandle handle, ValueResolver 
valueResolver) {
+            return false;
+        }
+
+        @Override
+        public AlphaNodeFieldConstraint cloneIfInUse() {
+            return this;
+        }
+
+        @Override
+        public Declaration[] getRequiredDeclarations() {
+            return new Declaration[0];
+        }
+
+        @Override
+        public void replaceDeclaration(Declaration oldDecl, Declaration 
newDecl) {
+
+        }
+
+        @Override
+        public Constraint clone() {
+            return this;
+        }
+
+        @Override
+        public ConstraintType getType() {
+            return null;
+        }
+
+        @Override
+        public boolean isTemporal() {
+            return false;
+        }
+
+        @Override
+        public void writeExternal(ObjectOutput out) throws IOException {
+
+        }
+
+        @Override
+        public void readExternal(ObjectInput in) throws IOException, 
ClassNotFoundException {
+
+        }
+    }
 
        private MockBetaNode createBetaNode() {
                return new MockBetaNode( buildContext.getNextNodeId(),
diff --git 
a/drools-test-coverage/test-compiler-integration/src/test/java/org/drools/mvel/FieldConstraintTest.java
 
b/drools-test-coverage/test-compiler-integration/src/test/java/org/drools/mvel/FieldConstraintTest.java
index 0b1440c456..75c6e9f9c9 100644
--- 
a/drools-test-coverage/test-compiler-integration/src/test/java/org/drools/mvel/FieldConstraintTest.java
+++ 
b/drools-test-coverage/test-compiler-integration/src/test/java/org/drools/mvel/FieldConstraintTest.java
@@ -18,37 +18,22 @@
  */
 package org.drools.mvel;
 
-import java.io.IOException;
-import java.io.ObjectInput;
-import java.io.ObjectOutput;
-import java.util.ArrayList;
-import java.util.Collection;
-
-import org.drools.base.base.ValueResolver;
+import org.drools.base.rule.constraint.AlphaNodeFieldConstraint;
 import org.drools.core.base.ClassFieldAccessorCache;
-import org.drools.base.reteoo.BaseTuple;
-import org.drools.kiesession.rulebase.InternalKnowledgeBase;
-import org.drools.mvel.accessors.ClassFieldAccessorStore;
-import org.drools.mvel.accessors.ClassFieldReader;
-import org.drools.base.base.ClassObjectType;
 import org.drools.core.common.InternalFactHandle;
-import org.drools.core.reteoo.JoinNodeLeftTuple;
-import org.drools.core.reteoo.RightTupleImpl;
-import org.drools.base.rule.Declaration;
-import org.drools.base.rule.Pattern;
-import org.drools.base.rule.PredicateConstraint;
-import org.drools.base.rule.PredicateConstraint.PredicateContextEntry;
-import org.drools.base.rule.constraint.AlphaNodeFieldConstraint;
-import org.drools.base.rule.accessor.ReadAccessor;
-import org.drools.base.rule.accessor.PredicateExpression;
+import org.drools.kiesession.rulebase.InternalKnowledgeBase;
 import org.drools.kiesession.rulebase.KnowledgeBaseFactory;
 import org.drools.kiesession.session.StatefulKnowledgeSessionImpl;
+import org.drools.mvel.accessors.ClassFieldAccessorStore;
+import org.drools.mvel.accessors.ClassFieldReader;
 import org.drools.mvel.model.Cheese;
 import org.junit.Before;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.junit.runners.Parameterized;
-import org.kie.api.runtime.rule.FactHandle;
+
+import java.util.ArrayList;
+import java.util.Collection;
 
 import static org.assertj.core.api.Assertions.assertThat;
 
@@ -155,98 +140,4 @@ public class FieldConstraintTest {
         assertThat(constraint.isAllowed(stiltonHandle,
                 ksession)).isFalse();
     }
-
-    /**
-     * <pre>
-     *
-     *
-     *                (Cheese (price ?price1 )
-     *                (Cheese (price ?price2&amp;:(= ?price2 (* 2 ?price1) )
-     *
-     *
-     * </pre>
-     */
-    @Test
-    public void testPredicateConstraint() {
-        InternalKnowledgeBase kBase = KnowledgeBaseFactory.newKnowledgeBase();;
-        StatefulKnowledgeSessionImpl ksession = 
(StatefulKnowledgeSessionImpl)kBase.newKieSession();
-
-        final ReadAccessor priceExtractor = store.getReader( Cheese.class,
-                                                                     "price" );
-
-        Pattern pattern = new Pattern( 0,
-                                       new ClassObjectType( Cheese.class ) );
-
-        // Bind the extractor to a decleration
-        // Declarations know the pattern they derive their value form
-        final Declaration price1Declaration = new Declaration( "price1",
-                                                               priceExtractor,
-                                                               pattern );
-
-        pattern = new Pattern( 1,
-                               new ClassObjectType( Cheese.class ) );
-
-        // Bind the extractor to a decleration
-        // Declarations know the pattern they derive their value form
-        final Declaration price2Declaration = new Declaration( "price2",
-                                                               priceExtractor,
-                                                               pattern );
-
-        final PredicateExpression evaluator = new PredicateExpression() {
-
-            private static final long serialVersionUID = 510l;
-
-            public boolean evaluate(FactHandle handle,
-                                    BaseTuple tuple,
-                                    Declaration[] previousDeclarations,
-                                    Declaration[] localDeclarations,
-                                    ValueResolver valueResolver,
-                                    Object context) {
-                int price1 = previousDeclarations[0].getIntValue( 
valueResolver,
-                                                                  
tuple.getObject( previousDeclarations[0] ) );
-                int price2 = localDeclarations[0].getIntValue( valueResolver,
-                                                               
handle.getObject() );
-
-                return (price2 == (price1 * 2));
-
-            }
-
-            public Object createContext() {
-                return null;
-            }
-
-            public void readExternal(ObjectInput in) throws IOException,
-                                                    ClassNotFoundException {
-            }
-
-            public void writeExternal(ObjectOutput out) throws IOException {
-            }
-        };
-
-        final PredicateConstraint constraint1 = new PredicateConstraint( 
evaluator,
-                                                                         new 
Declaration[]{price1Declaration},
-                                                                         new 
Declaration[]{price2Declaration} );
-
-        final Cheese cheddar0 = new Cheese( "cheddar",
-                                            5 );
-        final InternalFactHandle f0 = (InternalFactHandle) ksession.insert( 
cheddar0 );
-        JoinNodeLeftTuple tuple = new JoinNodeLeftTuple( f0,
-                                         null,
-                                         true );
-
-        final Cheese cheddar1 = new Cheese( "cheddar",
-                                            10 );
-        final InternalFactHandle f1 = (InternalFactHandle) ksession.insert( 
cheddar1 );
-
-        tuple = new JoinNodeLeftTuple( tuple,
-                               new RightTupleImpl( f1, null ),
-                               null,
-                               true );
-
-        final PredicateContextEntry context = (PredicateContextEntry) 
constraint1.createContextEntry();
-        context.updateFromTuple(ksession,
-                tuple);
-        assertThat(constraint1.isAllowedCachedLeft(context,
-                f1)).isTrue();
-    }
 }
diff --git 
a/drools-test-coverage/test-compiler-integration/src/test/java/org/drools/mvel/compiler/compiler/PackageBuilderConfigurationTest.java
 
b/drools-test-coverage/test-compiler-integration/src/test/java/org/drools/mvel/compiler/compiler/PackageBuilderConfigurationTest.java
index 013bac852b..579f1a4841 100644
--- 
a/drools-test-coverage/test-compiler-integration/src/test/java/org/drools/mvel/compiler/compiler/PackageBuilderConfigurationTest.java
+++ 
b/drools-test-coverage/test-compiler-integration/src/test/java/org/drools/mvel/compiler/compiler/PackageBuilderConfigurationTest.java
@@ -18,11 +18,11 @@
  */
 package org.drools.mvel.compiler.compiler;
 
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Map;
-import java.util.Properties;
-
+import org.drools.base.definitions.InternalKnowledgePackage;
+import org.drools.base.definitions.rule.impl.QueryImpl;
+import org.drools.base.definitions.rule.impl.RuleImpl;
+import org.drools.base.rule.Pattern;
+import org.drools.base.rule.RuleConditionElement;
 import org.drools.compiler.builder.impl.KnowledgeBuilderConfigurationImpl;
 import org.drools.compiler.builder.impl.KnowledgeBuilderImpl;
 import org.drools.compiler.compiler.AnalysisResult;
@@ -42,18 +42,11 @@ import org.drools.compiler.rule.builder.GroupElementBuilder;
 import org.drools.compiler.rule.builder.PackageBuildContext;
 import org.drools.compiler.rule.builder.PatternBuilder;
 import org.drools.compiler.rule.builder.PatternBuilderForQuery;
-import org.drools.compiler.rule.builder.PredicateBuilder;
 import org.drools.compiler.rule.builder.RuleBuildContext;
 import org.drools.compiler.rule.builder.RuleClassBuilder;
 import org.drools.compiler.rule.builder.RuleConditionBuilder;
 import org.drools.compiler.rule.builder.SalienceBuilder;
-import org.drools.util.TypeResolver;
-import org.drools.base.definitions.InternalKnowledgePackage;
-import org.drools.base.definitions.rule.impl.RuleImpl;
 import org.drools.core.reteoo.CoreComponentFactory;
-import org.drools.base.rule.Pattern;
-import org.drools.base.definitions.rule.impl.QueryImpl;
-import org.drools.base.rule.RuleConditionElement;
 import org.drools.drl.ast.descr.AndDescr;
 import org.drools.drl.ast.descr.AttributeDescr;
 import org.drools.drl.ast.descr.BaseDescr;
@@ -65,6 +58,7 @@ import org.drools.drl.ast.descr.PackageDescr;
 import org.drools.drl.ast.descr.ProcessDescr;
 import org.drools.drl.ast.descr.RuleDescr;
 import org.drools.mvel.java.JavaForMvelDialectConfiguration;
+import org.drools.util.TypeResolver;
 import org.junit.After;
 import org.junit.AfterClass;
 import org.junit.Before;
@@ -77,6 +71,11 @@ import org.kie.internal.builder.ResultSeverity;
 import org.kie.internal.builder.conf.DefaultDialectOption;
 import org.kie.internal.builder.conf.KBuilderSeverityOption;
 
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+import java.util.Properties;
+
 import static org.assertj.core.api.Assertions.assertThat;
 
 public class PackageBuilderConfigurationTest {
@@ -347,10 +346,6 @@ public class PackageBuilderConfigurationTest {
             return null;
         }
 
-        public PredicateBuilder getPredicateBuilder() {
-            return null;
-        }
-
         public PatternBuilderForQuery getPatternBuilderForQuery(QueryImpl 
query) {
             return null;
         }


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to