Created
January 7, 2020 15:23
-
-
Save lucamolteni/e898cfdd56089c8852a1384add16777d to your computer and use it in GitHub Desktop.
refactor patch
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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