This is an automated email from the ASF dual-hosted git repository.
tkobayas pushed a commit to branch dev-new-parser
in repository https://gitbox.apache.org/repos/asf/incubator-kie-drools.git
The following commit(s) were added to refs/heads/dev-new-parser by this push:
new 674ebd62b5 Populate AST descriptors with line numbers (#5804)
674ebd62b5 is described below
commit 674ebd62b5994c6879dee2958c0e7c1fe72e045b
Author: Jiří Locker <[email protected]>
AuthorDate: Tue Mar 26 11:26:15 2024 +0100
Populate AST descriptors with line numbers (#5804)
---
.../drl/parser/antlr4/MiscDRLParserTest.java | 9 ++---
.../drools/drl/parser/antlr4/DRLVisitorImpl.java | 41 ++++++++++++++++++++--
2 files changed, 42 insertions(+), 8 deletions(-)
diff --git
a/drools-drl/drools-drl-parser-tests/src/test/java/org/drools/drl/parser/antlr4/MiscDRLParserTest.java
b/drools-drl/drools-drl-parser-tests/src/test/java/org/drools/drl/parser/antlr4/MiscDRLParserTest.java
index f4418f1bef..53eda685ad 100644
---
a/drools-drl/drools-drl-parser-tests/src/test/java/org/drools/drl/parser/antlr4/MiscDRLParserTest.java
+++
b/drools-drl/drools-drl-parser-tests/src/test/java/org/drools/drl/parser/antlr4/MiscDRLParserTest.java
@@ -864,7 +864,6 @@ class MiscDRLParserTest {
// Failing tests are annotated with @Disabled. We can fix issues one by one
//-------------------------------------------------------------------------
- @Disabled("Priority : Mid | implement Descr lineNumber")
@Test
public void parse_LineNumberInAST() throws Exception {
// also see testSimpleExpander to see how this works with an expander
@@ -1687,7 +1686,6 @@ class MiscDRLParserTest {
assertThat(fld.getExpression()).isEqualToIgnoringWhitespace("type ==
$likes");
}
- @Disabled("Priority : Mid | Implement Descr lineNumber")
@Test
public void parse_Functions() throws Exception {
final PackageDescr pkg = parseAndGetPackageDescrFromFile(
@@ -1703,7 +1701,7 @@ class MiscDRLParserTest {
assertThat(func.getReturnType()).isEqualTo("String");
assertThat(func.getParameterNames().size()).isEqualTo(2);
assertThat(func.getParameterTypes().size()).isEqualTo(2);
- assertThat(func.getLine()).isEqualTo(19);
+ assertThat(func.getLine()).isEqualTo(21);
assertThat(func.getColumn()).isEqualTo(0);
assertThat(func.getParameterTypes().get(0)).isEqualTo("String");
@@ -2070,15 +2068,14 @@ class MiscDRLParserTest {
assertThat(parser.hasErrors()).as(parser.getErrors().toString()).isFalse();
}
- @Disabled("Priority : Mid | implement Descr lineNumber")
@Test
public void parse_EndPosition() throws Exception {
final PackageDescr pkg = parseAndGetPackageDescrFromFile(
"test_EndPosition.drl" );
final RuleDescr rule = (RuleDescr) pkg.getRules().get( 0 );
final PatternDescr col = (PatternDescr) rule.getLhs().getDescrs().get(
0 );
- assertThat(col.getLine()).isEqualTo(21);
- assertThat(col.getEndLine()).isEqualTo(23);
+ assertThat(col.getLine()).isEqualTo(23);
+ assertThat(col.getEndLine()).isEqualTo(25);
}
@Test
diff --git
a/drools-drl/drools-drl-parser/src/main/java/org/drools/drl/parser/antlr4/DRLVisitorImpl.java
b/drools-drl/drools-drl-parser/src/main/java/org/drools/drl/parser/antlr4/DRLVisitorImpl.java
index 9ab53768f7..8fa0be743d 100644
---
a/drools-drl/drools-drl-parser/src/main/java/org/drools/drl/parser/antlr4/DRLVisitorImpl.java
+++
b/drools-drl/drools-drl-parser/src/main/java/org/drools/drl/parser/antlr4/DRLVisitorImpl.java
@@ -93,6 +93,7 @@ public class DRLVisitorImpl extends
DRLParserBaseVisitor<Object> {
}
List<BaseDescr> descrList = visitDescrChildren(ctx);
applyChildrenDescrs(packageDescr, descrList);
+ populateStartEnd(packageDescr, ctx);
return packageDescr;
}
@@ -139,7 +140,9 @@ public class DRLVisitorImpl extends
DRLParserBaseVisitor<Object> {
@Override
public UnitDescr visitUnitdef(DRLParser.UnitdefContext ctx) {
- return new UnitDescr(ctx.name.getText());
+ UnitDescr unitDescr = new UnitDescr(ctx.name.getText());
+ populateStartEnd(unitDescr, ctx);
+ return unitDescr;
}
@Override
@@ -170,6 +173,7 @@ public class DRLVisitorImpl extends
DRLParserBaseVisitor<Object> {
AccumulateImportDescr accumulateImportDescr = new
AccumulateImportDescr();
accumulateImportDescr.setTarget(ctx.drlQualifiedName().getText());
accumulateImportDescr.setFunctionName(ctx.IDENTIFIER().getText());
+ populateStartEnd(accumulateImportDescr, ctx);
return accumulateImportDescr;
}
@@ -195,6 +199,7 @@ public class DRLVisitorImpl extends
DRLParserBaseVisitor<Object> {
});
}
functionDescr.setBody(getTextPreservingWhitespace(ctx.drlBlock().drlBlockStatement()));
+ populateStartEnd(functionDescr, ctx);
return functionDescr;
}
@@ -215,6 +220,7 @@ public class DRLVisitorImpl extends
DRLParserBaseVisitor<Object> {
ctx.field().stream()
.map(this::visitField)
.forEach(typeDeclarationDescr::addField);
+ populateStartEnd(typeDeclarationDescr, ctx);
return typeDeclarationDescr;
}
@@ -225,6 +231,7 @@ public class DRLVisitorImpl extends
DRLParserBaseVisitor<Object> {
ctx.drlAnnotation().stream()
.map(this::visitDrlAnnotation)
.forEach(entryPointDeclarationDescr::addAnnotation);
+ populateStartEnd(entryPointDeclarationDescr, ctx);
return entryPointDeclarationDescr;
}
@@ -236,6 +243,7 @@ public class DRLVisitorImpl extends
DRLParserBaseVisitor<Object> {
.map(this::visitDrlAnnotation)
.forEach(windowDeclarationDescr::addAnnotation);
windowDeclarationDescr.setPattern((PatternDescr)
visitLhsPatternBind(ctx.lhsPatternBind()));
+ populateStartEnd(windowDeclarationDescr, ctx);
return windowDeclarationDescr;
}
@@ -315,6 +323,7 @@ public class DRLVisitorImpl extends
DRLParserBaseVisitor<Object> {
slimLhsRootDescr(queryDescr.getLhs());
+ populateStartEnd(queryDescr, ctx);
return queryDescr;
}
@@ -329,6 +338,7 @@ public class DRLVisitorImpl extends
DRLParserBaseVisitor<Object> {
// A chunk that is neither a single value nor a list of key-value
pairs. For example `!*, age` in `@watch(!*, age)`.
annotationDescr.setValue(getTextPreservingWhitespace(ctx.chunk()));
}
+ populateStartEnd(annotationDescr, ctx);
return annotationDescr;
}
@@ -343,6 +353,7 @@ public class DRLVisitorImpl extends
DRLParserBaseVisitor<Object> {
ctx.drlAnnotation().stream()
.map(this::visitDrlAnnotation)
.forEach(typeFieldDescr::addAnnotation);
+ populateStartEnd(typeFieldDescr, ctx);
return typeFieldDescr;
}
@@ -359,6 +370,7 @@ public class DRLVisitorImpl extends
DRLParserBaseVisitor<Object> {
AttributeDescr attributeDescr = new AttributeDescr(ctx.name.getText());
attributeDescr.setValue(getTextPreservingWhitespace(ctx.conditionalOrExpression()));
attributeDescr.setType(AttributeDescr.Type.EXPRESSION);
+ populateStartEnd(attributeDescr, ctx);
return attributeDescr;
}
@@ -367,6 +379,7 @@ public class DRLVisitorImpl extends
DRLParserBaseVisitor<Object> {
AttributeDescr attributeDescr = new AttributeDescr(ctx.name.getText());
attributeDescr.setValue(ctx.BOOL_LITERAL() != null ?
ctx.BOOL_LITERAL().getText() : "true");
attributeDescr.setType(AttributeDescr.Type.BOOLEAN);
+ populateStartEnd(attributeDescr, ctx);
return attributeDescr;
}
@@ -375,6 +388,7 @@ public class DRLVisitorImpl extends
DRLParserBaseVisitor<Object> {
AttributeDescr attributeDescr = new AttributeDescr(ctx.name.getText());
attributeDescr.setValue(unescapeJava(safeStripStringDelimiters(ctx.DRL_STRING_LITERAL().getText())));
attributeDescr.setType(AttributeDescr.Type.STRING);
+ populateStartEnd(attributeDescr, ctx);
return attributeDescr;
}
@@ -386,6 +400,7 @@ public class DRLVisitorImpl extends
DRLParserBaseVisitor<Object> {
.collect(Collectors.toList());
attributeDescr.setValue(createStringList(valueList));
attributeDescr.setType(AttributeDescr.Type.LIST);
+ populateStartEnd(attributeDescr, ctx);
return attributeDescr;
}
@@ -412,6 +427,7 @@ public class DRLVisitorImpl extends
DRLParserBaseVisitor<Object> {
attributeDescr.setValue(getTextPreservingWhitespace(ctx.chunk()));
attributeDescr.setType(AttributeDescr.Type.EXPRESSION);
}
+ populateStartEnd(attributeDescr, ctx);
return attributeDescr;
}
@@ -425,6 +441,7 @@ public class DRLVisitorImpl extends
DRLParserBaseVisitor<Object> {
attributeDescr.setValue(unescapeJava(safeStripStringDelimiters(ctx.TIME_INTERVAL().getText())));
attributeDescr.setType(AttributeDescr.Type.EXPRESSION);
}
+ populateStartEnd(attributeDescr, ctx);
return attributeDescr;
}
@@ -480,6 +497,7 @@ public class DRLVisitorImpl extends
DRLParserBaseVisitor<Object> {
orDescr.addDescr(patternDescr);
});
+ populateStartEnd(orDescr, ctx);
return orDescr;
}
@@ -500,6 +518,9 @@ public class DRLVisitorImpl extends
DRLParserBaseVisitor<Object> {
patternSourceDescr.setResource(patternDescr.getResource());
patternDescr.setSource(patternSourceDescr);
}
+
+ populateStartEnd(patternDescr, ctx);
+
ctx.drlAnnotation().stream().map(this::visitDrlAnnotation).forEach(patternDescr::addAnnotation);
List<ExprConstraintDescr> constraintDescrList =
visitConstraints(ctx.positionalConstraints(), ctx.constraints());
constraintDescrList.forEach(descr -> addToPatternDescr(patternDescr,
descr));
@@ -515,6 +536,7 @@ public class DRLVisitorImpl extends
DRLParserBaseVisitor<Object> {
public ForallDescr visitLhsForall(DRLParser.LhsForallContext ctx) {
ForallDescr forallDescr = new ForallDescr();
visitDescrChildren(ctx).forEach(forallDescr::addDescr);
+ populateStartEnd(forallDescr, ctx);
return forallDescr;
}
@@ -532,6 +554,8 @@ public class DRLVisitorImpl extends
DRLParserBaseVisitor<Object> {
patternDescr.setSource(accumulateDescr);
List<ExprConstraintDescr> constraintDescrList =
visitConstraints(ctx.constraints());
constraintDescrList.forEach(patternDescr::addConstraint);
+
+ populateStartEnd(accumulateDescr, ctx);
return patternDescr;
}
@@ -543,6 +567,7 @@ public class DRLVisitorImpl extends
DRLParserBaseVisitor<Object> {
List<DRLParser.DrlExpressionContext> drlExpressionContexts =
ctx.expressionList().drlExpression();
List<String> parameters =
drlExpressionContexts.stream().map(Antlr4ParserStringUtils::getTextPreservingWhitespace).collect(Collectors.toList());
behaviorDescr.setParameters(parameters);
+ populateStartEnd(behaviorDescr, ctx);
return behaviorDescr;
}
@@ -550,6 +575,7 @@ public class DRLVisitorImpl extends
DRLParserBaseVisitor<Object> {
public FromDescr visitFromExpression(DRLParser.FromExpressionContext ctx) {
FromDescr fromDescr = new FromDescr();
fromDescr.setDataSource(new
MVELExprDescr(getTextPreservingWhitespace(ctx)));
+ populateStartEnd(fromDescr, ctx);
return fromDescr;
}
@@ -557,6 +583,7 @@ public class DRLVisitorImpl extends
DRLParserBaseVisitor<Object> {
public CollectDescr visitFromCollect(DRLParser.FromCollectContext ctx) {
CollectDescr collectDescr = new CollectDescr();
collectDescr.setInputPattern((PatternDescr)
visitLhsPatternBind(ctx.lhsPatternBind()));
+ populateStartEnd(collectDescr, ctx);
return collectDescr;
}
@@ -576,6 +603,7 @@ public class DRLVisitorImpl extends
DRLParserBaseVisitor<Object> {
// accumulate function
accumulateDescr.addFunction(visitAccumulateFunction(ctx.accumulateFunction()));
}
+ populateStartEnd(accumulateDescr, ctx);
return accumulateDescr;
}
@@ -648,6 +676,7 @@ public class DRLVisitorImpl extends
DRLParserBaseVisitor<Object> {
if (!constraint.isEmpty()) {
ExprConstraintDescr constraintDescr = new
ExprConstraintDescr(constraint);
constraintDescr.setType(ExprConstraintDescr.Type.NAMED);
+ populateStartEnd(constraintDescr, ctx);
descrList.add(constraintDescr);
return descrList;
}
@@ -692,6 +721,7 @@ public class DRLVisitorImpl extends
DRLParserBaseVisitor<Object> {
BaseDescr descr = visitLhsPatternBind(ctx.lhsPatternBind());
existsDescr.addDescr(descr);
}
+ populateStartEnd(existsDescr, ctx);
return existsDescr;
}
@@ -711,12 +741,15 @@ public class DRLVisitorImpl extends
DRLParserBaseVisitor<Object> {
BaseDescr descr = visitLhsPatternBind(ctx.lhsPatternBind());
notDescr.addDescr(descr);
}
+ populateStartEnd(notDescr, ctx);
return notDescr;
}
@Override
public EvalDescr visitLhsEval(DRLParser.LhsEvalContext ctx) {
- return new
EvalDescr(getTextPreservingWhitespace(ctx.conditionalOrExpression()));
+ EvalDescr evalDescr = new
EvalDescr(getTextPreservingWhitespace(ctx.conditionalOrExpression()));
+ populateStartEnd(evalDescr, ctx);
+ return evalDescr;
}
@Override
@@ -744,6 +777,7 @@ public class DRLVisitorImpl extends
DRLParserBaseVisitor<Object> {
// So, we need to flatten it so that OrDescr has A(), B() and C()
as children.
List<BaseDescr> flattenedDescrs = flattenOrDescr(descrList);
flattenedDescrs.forEach(orDescr::addDescr);
+ populateStartEnd(orDescr, ctx);
return orDescr;
}
}
@@ -786,6 +820,7 @@ public class DRLVisitorImpl extends
DRLParserBaseVisitor<Object> {
// So, we need to flatten it so that AndDescr has A(), B() and C()
as children.
List<BaseDescr> flattenedDescrs = flattenAndDescr(descrList);
flattenedDescrs.forEach(andDescr::addDescr);
+ populateStartEnd(andDescr, ctx);
return andDescr;
}
}
@@ -820,6 +855,8 @@ public class DRLVisitorImpl extends
DRLParserBaseVisitor<Object> {
// TODO: Current DRL6Parser adds +1 for EndCharacter but it doesn't
look reasonable. At the moment, I don't add. Instead, I fix unit tests.
// I will revisit if this is the right approach.
descr.setEndCharacter(ctx.getStop().getStopIndex());
+ descr.setLocation(ctx.getStart().getLine(),
ctx.getStart().getCharPositionInLine());
+ descr.setEndLocation(ctx.getStop().getLine(),
ctx.getStop().getCharPositionInLine());
}
/**
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]