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&:(= ?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]