Skip to content

Instantly share code, notes, and snippets.

@lucamolteni
Created January 7, 2020 15:23
Show Gist options
  • Save lucamolteni/e898cfdd56089c8852a1384add16777d to your computer and use it in GitHub Desktop.
Save lucamolteni/e898cfdd56089c8852a1384add16777d to your computer and use it in GitHub Desktop.
refactor patch
Index: drools-model/drools-model-compiler/src/main/java/org/drools/modelcompiler/util/lambdareplace/ExecModelLambdaPostProcessor.java
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>UTF-8
===================================================================
--- drools-model/drools-model-compiler/src/main/java/org/drools/modelcompiler/util/lambdareplace/ExecModelLambdaPostProcessor.java (revision ef99c4aa364699c1c17ffa5468ee9f57ab241177)
+++ drools-model/drools-model-compiler/src/main/java/org/drools/modelcompiler/util/lambdareplace/ExecModelLambdaPostProcessor.java (revision 353b46ed16a0d7dd0a988a0293eafb5ed1cc9011)
@@ -29,6 +29,7 @@
import com.github.javaparser.ast.CompilationUnit;
import com.github.javaparser.ast.body.MethodDeclaration;
import com.github.javaparser.ast.body.VariableDeclarator;
+import com.github.javaparser.ast.expr.AssignExpr;
import com.github.javaparser.ast.expr.Expression;
import com.github.javaparser.ast.expr.FieldAccessExpr;
import com.github.javaparser.ast.expr.LambdaExpr;
@@ -86,7 +87,10 @@
.forEach(this::convertIndexedByCall);
clone.findAll(MethodCallExpr.class, this::isExecuteNonNestedCall)
- .forEach(methodCallExpr -> extractLambdaFromMethodCall(methodCallExpr, () -> new MaterializedLambdaConsequence(packageName, ruleClassName)));
+ .forEach(methodCallExpr -> {
+ List<MaterializedLambda.BitMaskVariable> bitMaskVariables = findBitMaskFields(methodCallExpr);
+ extractLambdaFromMethodCall(methodCallExpr, () -> new MaterializedLambdaConsequence(packageName, ruleClassName, bitMaskVariables));
+ });
}
private boolean isExecuteNonNestedCall(MethodCallExpr mc) {
@@ -119,22 +123,46 @@
return new FieldAccessExpr(new NameExpr(type.asString()), "INSTANCE");
}
- private void extractLambdaFromMethodCall(MethodCallExpr methodCallExpr, Supplier<MaterializedLambda> lambdaExtractor) {
- List<VariableDeclarator> bitMaskVariables = new ArrayList<>();
- if (lambdaExtractor.get() instanceof MaterializedLambdaConsequence) {
- methodCallExpr.findAncestor(MethodDeclaration.class).ifPresent(node -> {
- bitMaskVariables.addAll(node.findAll(VariableDeclarator.class).stream()
- .filter(vd -> vd.getType().asString().equals(BitMask.class.getCanonicalName()))
- .collect(Collectors.toList()));
- });
- }
+ private List<MaterializedLambda.BitMaskVariable> findBitMaskFields(MethodCallExpr methodCallExpr) {
+ List<MaterializedLambda.BitMaskVariable> bitMaskVariables = new ArrayList<>();
+ methodCallExpr.findAncestor(MethodDeclaration.class).ifPresent(node -> {
+
+ List<MaterializedLambda.BitMaskVariable> collect =
+ node.findAll(VariableDeclarator.class)
+ .stream()
+ .filter(vd -> vd.getType().asString().equals(BitMask.class.getCanonicalName()))
+ .flatMap(vd -> {
+ ArrayList<AssignExpr> result = new ArrayList<>();
+ vd.findAncestor(AssignExpr.class)
+ .ifPresent(result::add);
+ return result.stream();
+ })
+ .map(ae -> {
+ String maskName = ae.getTarget().asVariableDeclarationExpr().getVariables().iterator().next().getNameAsString();
+ MethodCallExpr maskInit = ae.getValue().asMethodCallExpr();
+ if(maskInit.getArguments().isEmpty()) {
+ return new MaterializedLambda.AllSetButLastBitMask(maskName);
+ } else {
+ String domainClassMetadata = maskInit.getArgument(0).toString();
+ String field = maskInit.getArgument(1).toString();
+ return new MaterializedLambda.BitMaskVariableWithField(domainClassMetadata, field, maskName);
+ }
+ })
+ .collect(Collectors.toList());
+
+ bitMaskVariables.addAll(collect);
+ });
+ return bitMaskVariables;
+ }
+
+ private void extractLambdaFromMethodCall(MethodCallExpr methodCallExpr, Supplier<MaterializedLambda> lambdaExtractor) {
methodCallExpr.getArguments().forEach(a -> {
if (a.isLambdaExpr()) {
LambdaExpr lambdaExpr = a.asLambdaExpr();
try {
- CreatedClass aClass = lambdaExtractor.get().create(lambdaExpr.toString(), imports, staticImports, bitMaskVariables);
+ CreatedClass aClass = lambdaExtractor.get().create(lambdaExpr.toString(), imports, staticImports);
lambdaClasses.put(aClass.getClassNameWithPackage(), aClass);
ClassOrInterfaceType type = StaticJavaParser.parseClassOrInterfaceType(aClass.getClassNameWithPackage());
Index: drools-model/drools-model-compiler/src/main/java/org/drools/modelcompiler/util/lambdareplace/MaterializedLambda.java
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>UTF-8
===================================================================
--- drools-model/drools-model-compiler/src/main/java/org/drools/modelcompiler/util/lambdareplace/MaterializedLambda.java (revision ef99c4aa364699c1c17ffa5468ee9f57ab241177)
+++ drools-model/drools-model-compiler/src/main/java/org/drools/modelcompiler/util/lambdareplace/MaterializedLambda.java (revision 353b46ed16a0d7dd0a988a0293eafb5ed1cc9011)
@@ -24,22 +24,26 @@
import com.github.javaparser.StaticJavaParser;
import com.github.javaparser.ast.CompilationUnit;
+import com.github.javaparser.ast.Modifier;
import com.github.javaparser.ast.NodeList;
import com.github.javaparser.ast.body.EnumConstantDeclaration;
import com.github.javaparser.ast.body.EnumDeclaration;
import com.github.javaparser.ast.body.MethodDeclaration;
import com.github.javaparser.ast.body.Parameter;
-import com.github.javaparser.ast.body.VariableDeclarator;
import com.github.javaparser.ast.expr.Expression;
import com.github.javaparser.ast.expr.LambdaExpr;
+import com.github.javaparser.ast.expr.MethodCallExpr;
+import com.github.javaparser.ast.expr.NameExpr;
+import com.github.javaparser.ast.nodeTypes.NodeWithMembers;
import com.github.javaparser.ast.type.ClassOrInterfaceType;
import com.github.javaparser.ast.type.Type;
import com.github.javaparser.ast.type.UnknownType;
+import static com.github.javaparser.StaticJavaParser.parseType;
+
abstract class MaterializedLambda {
final List<LambdaParameter> lambdaParameters = new ArrayList<>();
- final List<VariableDeclarator> bitMaskVariables = new ArrayList<>();
protected final String packageName;
protected String className;
@@ -53,10 +57,6 @@
}
public CreatedClass create(String expressionString, Collection<String> imports, Collection<String> staticImports) {
- return create(expressionString, imports, staticImports, new ArrayList<>());
- }
-
- public CreatedClass create(String expressionString, Collection<String> imports, Collection<String> staticImports, List<VariableDeclarator> bitMaskVariables) {
Expression expression = StaticJavaParser.parseExpression(expressionString);
if (!expression.isLambdaExpr()) {
@@ -68,8 +68,6 @@
parseParameters();
- this.bitMaskVariables.addAll(bitMaskVariables);
-
CompilationUnit compilationUnit = new CompilationUnit(packageName);
addImports(imports, staticImports, compilationUnit);
@@ -82,12 +80,12 @@
private void addImports(Collection<String> imports, Collection<String> staticImports, CompilationUnit compilationUnit) {
compilationUnit.addImport(ruleClassName, true, true);
- for(String i : imports) {
+ for (String i : imports) {
compilationUnit.addImport(i);
}
- for(String si : staticImports) {
+ for (String si : staticImports) {
String replace = si;
- if(si.endsWith(".*")) { // JP doesn't want the * in the import
+ if (si.endsWith(".*")) { // JP doesn't want the * in the import
replace = si.replace(".*", "");
compilationUnit.addImport(replace, true, true);
} else {
@@ -126,7 +124,7 @@
ClassOrInterfaceType functionType = functionType();
List<Type> typeArguments = lambdaParametersToType();
- if(!typeArguments.isEmpty()) {
+ if (!typeArguments.isEmpty()) {
functionType.setTypeArguments(NodeList.nodeList(typeArguments));
}
return NodeList.nodeList(functionType);
@@ -154,4 +152,51 @@
this.type = type;
}
}
+
+ interface BitMaskVariable {
+
+ void generateBitMaskField(NodeWithMembers clazz);
+ }
+
+ static class AllSetButLastBitMask implements BitMaskVariable {
+
+ String maskName;
+ String bitMaskString = "org.drools.model.bitmask.AllSetButLastBitMask";
+
+ public AllSetButLastBitMask(String maskName) {
+ this.maskName = maskName;
+ }
+
+ @Override
+ public void generateBitMaskField(NodeWithMembers clazz) {
+ Type bitMaskType = parseType(bitMaskString);
+
+ MethodCallExpr methodCallExpr = new MethodCallExpr(new NameExpr(bitMaskString), "get");
+ clazz.addFieldWithInitializer(bitMaskType, maskName, methodCallExpr, Modifier.Keyword.PRIVATE, Modifier.Keyword.FINAL);
+ }
+ }
+
+ static class BitMaskVariableWithField implements BitMaskVariable {
+
+ String bitMaskString = "org.drools.model.BitMask";
+
+ String domainClassMetadata;
+ String field;
+ String maskName;
+
+ public BitMaskVariableWithField(String domainClassMetadata, String field, String maskName) {
+ this.domainClassMetadata = domainClassMetadata;
+ this.field = field;
+ this.maskName = maskName;
+ }
+
+ @Override
+ public void generateBitMaskField(NodeWithMembers clazz) {
+ Type bitMaskType = parseType(bitMaskString);
+
+ NameExpr domainClassMetadataName = new NameExpr(domainClassMetadata);
+ MethodCallExpr methodCallExpr = new MethodCallExpr(new NameExpr(bitMaskString), "getPatternMask", NodeList.nodeList(domainClassMetadataName, new NameExpr(field)));
+ clazz.addFieldWithInitializer(bitMaskType, maskName, methodCallExpr, Modifier.Keyword.PRIVATE, Modifier.Keyword.FINAL);
+ }
+ }
}
Index: drools-model/drools-model-compiler/src/main/java/org/drools/modelcompiler/util/lambdareplace/MaterializedLambdaConsequence.java
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>UTF-8
===================================================================
--- drools-model/drools-model-compiler/src/main/java/org/drools/modelcompiler/util/lambdareplace/MaterializedLambdaConsequence.java (revision ef99c4aa364699c1c17ffa5468ee9f57ab241177)
+++ drools-model/drools-model-compiler/src/main/java/org/drools/modelcompiler/util/lambdareplace/MaterializedLambdaConsequence.java (revision 353b46ed16a0d7dd0a988a0293eafb5ed1cc9011)
@@ -17,16 +17,14 @@
package org.drools.modelcompiler.util.lambdareplace;
-import java.util.Optional;
+import java.util.List;
import com.github.javaparser.ast.CompilationUnit;
import com.github.javaparser.ast.Modifier;
import com.github.javaparser.ast.NodeList;
import com.github.javaparser.ast.body.EnumDeclaration;
import com.github.javaparser.ast.body.MethodDeclaration;
-import com.github.javaparser.ast.expr.MethodCallExpr;
import com.github.javaparser.ast.stmt.BlockStmt;
-import com.github.javaparser.ast.stmt.ExpressionStmt;
import com.github.javaparser.ast.stmt.Statement;
import com.github.javaparser.ast.type.ClassOrInterfaceType;
import com.github.javaparser.ast.type.VoidType;
@@ -37,9 +35,12 @@
public class MaterializedLambdaConsequence extends MaterializedLambda {
private final static String CLASS_NAME_PREFIX = "LambdaConsequence";
+ private final List<BitMaskVariable> bitMaskVariables;
- MaterializedLambdaConsequence(String packageName, String ruleClassName) {
+
+ MaterializedLambdaConsequence(String packageName, String ruleClassName, List<BitMaskVariable> bitMaskVariables) {
super(packageName, ruleClassName);
+ this.bitMaskVariables = bitMaskVariables;
}
protected String className(String expressionString) {
@@ -71,13 +72,7 @@
boolean hasDroolsParameter = lambdaParameters.stream().anyMatch(this::isDroolsParameter);
if (hasDroolsParameter) {
- bitMaskVariables.stream().forEach(vd -> {
- Optional<ExpressionStmt> expressionStmt = vd.findAncestor(ExpressionStmt.class);
- MethodCallExpr methodCallExpr = expressionStmt.flatMap(a -> a.findFirst(MethodCallExpr.class))
- .orElseThrow(() -> new IllegalStateException("MethodCallExpr is not found"));
- lambdaClass.addFieldWithInitializer(vd.getType(), vd.getName().asString(), methodCallExpr,
- Modifier.Keyword.PRIVATE, Modifier.Keyword.FINAL);
- });
+ bitMaskVariables.forEach(vd -> vd.generateBitMaskField(lambdaClass));
}
return lambdaClass;
}
Index: drools-model/drools-model-compiler/src/test/java/org/drools/modelcompiler/util/lambdareplace/MaterializedLambdaConsequenceTest.java
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>UTF-8
===================================================================
--- drools-model/drools-model-compiler/src/test/java/org/drools/modelcompiler/util/lambdareplace/MaterializedLambdaConsequenceTest.java (revision ef99c4aa364699c1c17ffa5468ee9f57ab241177)
+++ drools-model/drools-model-compiler/src/test/java/org/drools/modelcompiler/util/lambdareplace/MaterializedLambdaConsequenceTest.java (revision 353b46ed16a0d7dd0a988a0293eafb5ed1cc9011)
@@ -1,13 +1,9 @@
package org.drools.modelcompiler.util.lambdareplace;
import java.util.ArrayList;
-import java.util.List;
-import java.util.stream.Collectors;
+import java.util.Arrays;
+import java.util.Collections;
-import com.github.javaparser.StaticJavaParser;
-import com.github.javaparser.ast.CompilationUnit;
-import com.github.javaparser.ast.body.VariableDeclarator;
-import org.drools.model.BitMask;
import org.junit.Test;
import static org.hamcrest.Matchers.equalToIgnoringWhiteSpace;
@@ -17,8 +13,8 @@
@Test
public void createConsequence() {
- CreatedClass aClass = new MaterializedLambdaConsequence("org.drools.modelcompiler.util.lambdareplace", "rulename")
- .create("(org.drools.modelcompiler.domain.Person p1, org.drools.modelcompiler.domain.Person p2) -> result.setValue( p1.getName() + \" is older than \" + p2.getName())", new ArrayList<>(), new ArrayList<>(), new ArrayList<>());
+ CreatedClass aClass = new MaterializedLambdaConsequence("org.drools.modelcompiler.util.lambdareplace", "rulename", new ArrayList<>())
+ .create("(org.drools.modelcompiler.domain.Person p1, org.drools.modelcompiler.domain.Person p2) -> result.setValue( p1.getName() + \" is older than \" + p2.getName())", new ArrayList<>(), new ArrayList<>());
//language=JAVA
String expectedResult = "" +
@@ -41,58 +37,10 @@
@Test
public void createConsequenceWithDrools() {
- String originalJavaSource = "package defaultpkg;\n" +
- "\n" +
- "import java.util.*;\n" +
- "import org.drools.model.*;\n" +
- "import org.drools.modelcompiler.dsl.pattern.D;\n" +
- "import org.drools.model.Index.ConstraintType;\n" +
- "import java.time.*;\n" +
- "import java.time.format.*;\n" +
- "import java.text.*;\n" +
- "import org.drools.core.util.*;\n" +
- "import org.drools.modelcompiler.domain.Person;\n" +
- "import static defaultpkg.RulesA3B8DE4BEBF13D94572A10FD20BBE729.*;\n" +
- "\n" +
- "public class RulesA3B8DE4BEBF13D94572A10FD20BBE729RuleMethods0 {\n" +
- "\n" +
- " /**\n" +
- " * Rule name: R\n" +
- " */\n" +
- " public static org.drools.model.Rule rule_R() {\n" +
- " final org.drools.model.Variable<org.drools.modelcompiler.domain.Person> var_$p = D.declarationOf(org.drools.modelcompiler.domain.Person.class,\n" +
- " DomainClassesMetadataA3B8DE4BEBF13D94572A10FD20BBE729.org_drools_modelcompiler_domain_Person_Metadata_INSTANCE,\n" +
- " \"$p\");\n" +
- " final org.drools.model.BitMask mask_$p = org.drools.model.BitMask.getPatternMask(" +
- " DomainClassesMetadataA3B8DE4BEBF13D94572A10FD20BBE729.org_drools_modelcompiler_domain_Person_Metadata_INSTANCE,\n" +
- " \"age\");\n" +
- " org.drools.model.Rule rule = D.rule(\"R\").build(D.pattern(var_$p).expr(\"593440B7603CA900F1A34F18497AB0EA\",\n" +
- " (org.drools.modelcompiler.domain.Person _this) -> org.drools.modelcompiler.util.EvaluationUtil.areNullSafeEquals(_this.getName(),\n" +
- " \"Mario\"),\n" +
- " D.alphaIndexedBy(java.lang.String.class,\n" +
- " org.drools.model.Index.ConstraintType.EQUAL,\n" +
- " DomainClassesMetadataA3B8DE4BEBF13D94572A10FD20BBE729.org_drools_modelcompiler_domain_Person_Metadata_INSTANCE.getPropertyIndex(\"name\"),\n" +
- " (org.drools.modelcompiler.domain.Person _this) -> _this.getName(),\n" +
- " \"Mario\"),\n" +
- " D.reactOn(\"name\")),\n" +
- " D.on(var_$p).execute((org.drools.model.Drools drools, org.drools.modelcompiler.domain.Person $p) -> {\n" +
- " {\n" +
- " ($p).setAge($p.getAge() + 1);\n" +
- " drools.update($p,\n" +
- " mask_$p);\n" +
- " }\n" +
- " }));\n" +
- " return rule;\n" +
- " }\n" +
- "}";
+ MaterializedLambda.BitMaskVariable bitMaskVariable = new MaterializedLambda.BitMaskVariableWithField("DomainClassesMetadataA3B8DE4BEBF13D94572A10FD20BBE729.org_drools_modelcompiler_domain_Person_Metadata_INSTANCE", "\"age\"", "mask_$p");
- CompilationUnit compilationUnit = StaticJavaParser.parse(originalJavaSource);
- List<VariableDeclarator> bitMaskVariables = compilationUnit.findAll(VariableDeclarator.class).stream()
- .filter(vd -> vd.getType().asString().equals(BitMask.class.getCanonicalName()))
- .collect(Collectors.toList());
-
- CreatedClass aClass = new MaterializedLambdaConsequence("defaultpkg", "defaultpkg.RulesA3B8DE4BEBF13D94572A10FD20BBE729")
- .create("(org.drools.model.Drools drools, org.drools.modelcompiler.domain.Person $p) -> {{($p).setAge($p.getAge() + 1); drools.update($p, mask_$p);}}", new ArrayList<>(), new ArrayList<>(), bitMaskVariables);
+ CreatedClass aClass = new MaterializedLambdaConsequence("defaultpkg", "defaultpkg.RulesA3B8DE4BEBF13D94572A10FD20BBE729", Collections.singletonList(bitMaskVariable))
+ .create("(org.drools.model.Drools drools, org.drools.modelcompiler.domain.Person $p) -> {{($p).setAge($p.getAge() + 1); drools.update($p, mask_$p);}}", new ArrayList<>(), new ArrayList<>());
//language=JAVA
String expectedResult = "" +
@@ -113,86 +61,19 @@
" }\n" +
" }\n";
- assertThat(aClass.getCompilationUnitAsString(), equalToIgnoringWhiteSpace(expectedResult));
+ assertThat(aClass.getCompilationUnitAsString(), equalToIgnoringWhiteSpace(expectedResult));
}
@Test
public void createConsequenceWithMultipleUpdate() {
- String originalJavaSource = "package defaultpkg;\n" +
- "\n" +
- "import java.util.*;\n" +
- "import org.drools.model.*;\n" +
- "import org.drools.modelcompiler.dsl.pattern.D;\n" +
- "import org.drools.model.Index.ConstraintType;\n" +
- "import java.time.*;\n" +
- "import java.time.format.*;\n" +
- "import java.text.*;\n" +
- "import org.drools.core.util.*;\n" +
- "import org.drools.modelcompiler.domain.Pet;\n" +
- "import org.drools.modelcompiler.domain.Person;\n" +
- "import static defaultpkg.RulesB45236F6195B110E0FA3A5447BC53274.*;\n" +
- "\n" +
- "public class RulesB45236F6195B110E0FA3A5447BC53274RuleMethods0 {\n" +
- "\n" +
- " /**\n" +
- " * Rule name: R1\n" +
- " */\n" +
- " public static org.drools.model.Rule rule_R1() {\n" +
- " final org.drools.model.Variable<org.drools.modelcompiler.domain.Person> var_$person = D.declarationOf(org.drools.modelcompiler.domain.Person.class,\n" +
- " DomainClassesMetadataB45236F6195B110E0FA3A5447BC53274.org_drools_modelcompiler_domain_Person_Metadata_INSTANCE,\n" +
- " \"$person\");\n" +
- " final org.drools.model.Variable<org.drools.modelcompiler.domain.Pet> var_$pet = D.declarationOf(org.drools.modelcompiler.domain.Pet.class,\n" +
- " DomainClassesMetadataB45236F6195B110E0FA3A5447BC53274.org_drools_modelcompiler_domain_Pet_Metadata_INSTANCE,\n" +
- " \"$pet\");\n" +
- " final org.drools.model.BitMask mask_$person = org.drools.model.BitMask.getPatternMask(" +
- " DomainClassesMetadataB45236F6195B110E0FA3A5447BC53274.org_drools_modelcompiler_domain_Person_Metadata_INSTANCE,\n" +
- " \"name\");\n" +
- " final org.drools.model.BitMask mask_$pet = org.drools.model.BitMask.getPatternMask(" +
- " DomainClassesMetadataB45236F6195B110E0FA3A5447BC53274.org_drools_modelcompiler_domain_Pet_Metadata_INSTANCE,\n" +
- " \"age\");\n" +
- " org.drools.model.Rule rule = D.rule(\"R1\").build(D.pattern(var_$person).expr(\"81A9307B330BF40012FABC742C070603\",\n" +
- " (org.drools.modelcompiler.domain.Person _this) -> org.drools.modelcompiler.util.EvaluationUtil.areNullSafeEquals(_this.getName(),\n" +
- " \"John\"),\n" +
- " D.alphaIndexedBy(java.lang.String.class,\n" +
- " org.drools.model.Index.ConstraintType.EQUAL,\n" +
- " DomainClassesMetadataB45236F6195B110E0FA3A5447BC53274.org_drools_modelcompiler_domain_Person_Metadata_INSTANCE.getPropertyIndex(\"name\"),\n" +
- " (org.drools.modelcompiler.domain.Person _this) -> _this.getName(),\n" +
- " \"John\"),\n" +
- " D.reactOn(\"name\")),\n" +
- " D.pattern(var_$pet).expr(\"5EA866DDEA34EC11B38AAB5E427D25FA\",\n" +
- " var_$person,\n" +
- " (_this, $person) -> org.drools.modelcompiler.util.EvaluationUtil.areNullSafeEquals(_this.getOwner(),\n" +
- " $person),\n" +
- " D.betaIndexedBy(org.drools.modelcompiler.domain.Person.class,\n" +
- " org.drools.model.Index.ConstraintType.EQUAL,\n" +
- " DomainClassesMetadataB45236F6195B110E0FA3A5447BC53274.org_drools_modelcompiler_domain_Pet_Metadata_INSTANCE.getPropertyIndex(\"owner\"),\n" +
- " (org.drools.modelcompiler.domain.Pet _this) -> _this.getOwner(),\n" +
- " (org.drools.modelcompiler.domain.Person $person) -> $person),\n" +
- " D.reactOn(\"owner\")),\n" +
- " D.on(var_$pet,\n" +
- " var_$person).execute((org.drools.model.Drools drools, org.drools.modelcompiler.domain.Pet $pet, org.drools.modelcompiler.domain.Person $person) -> {\n" +
- " {\n" +
- " ($person).setName(\"George\");\n" +
- " drools.update($person,\n" +
- " mask_$person);\n" +
- " ($pet).setAge($pet.getAge() + 1);\n" +
- " drools.update($pet,\n" +
- " mask_$pet);\n" +
- " }\n" +
- " }));\n" +
- " return rule;\n" +
- " }" +
- "}";
+ MaterializedLambda.BitMaskVariable bitMaskPerson = new MaterializedLambda.BitMaskVariableWithField("DomainClassesMetadataB45236F6195B110E0FA3A5447BC53274.org_drools_modelcompiler_domain_Person_Metadata_INSTANCE", "\"name\"", "mask_$person");
+ MaterializedLambda.BitMaskVariable bitMaskPet = new MaterializedLambda.BitMaskVariableWithField("DomainClassesMetadataB45236F6195B110E0FA3A5447BC53274.org_drools_modelcompiler_domain_Pet_Metadata_INSTANCE", "\"age\"", "mask_$pet");
- CompilationUnit compilationUnit = StaticJavaParser.parse(originalJavaSource);
- List<VariableDeclarator> bitMaskVariables = compilationUnit.findAll(VariableDeclarator.class).stream()
- .filter(vd -> vd.getType().asString().equals(BitMask.class.getCanonicalName()))
- .collect(Collectors.toList());
-
- CreatedClass aClass = new MaterializedLambdaConsequence("defaultpkg", "defaultpkg.RulesB45236F6195B110E0FA3A5447BC53274")
- .create("(org.drools.model.Drools drools, org.drools.modelcompiler.domain.Pet $pet, org.drools.modelcompiler.domain.Person $person)" +
- " -> {{ ($person).setName(\"George\");drools.update($person, mask_$person); ($pet).setAge($pet.getAge() + 1); drools.update($pet, mask_$pet); }}"
- , new ArrayList<>(), new ArrayList<>(), bitMaskVariables);
+ String consequenceBlock = "(org.drools.model.Drools drools, org.drools.modelcompiler.domain.Pet $pet, org.drools.modelcompiler.domain.Person $person) -> {{ ($person).setName(\"George\");drools.update($person, mask_$person); ($pet).setAge($pet.getAge() + 1); drools.update($pet, mask_$pet); }}";
+ CreatedClass aClass = new MaterializedLambdaConsequence("defaultpkg",
+ "defaultpkg.RulesB45236F6195B110E0FA3A5447BC53274",
+ Arrays.asList(bitMaskPerson, bitMaskPet))
+ .create(consequenceBlock, new ArrayList<>(), new ArrayList<>());
//language=JAVA
String expectedResult = "" +
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment