Skip to content

Commit 7038153

Browse files
joschibernd
authored andcommitted
Use friendlier error message in case of invalid expressions (Graylog2#196)
Closes Graylog2#185
1 parent 86c7e69 commit 7038153

File tree

4 files changed

+36
-3
lines changed

4 files changed

+36
-3
lines changed

plugin/src/main/java/org/graylog/plugins/pipelineprocessor/ast/expressions/UnaryExpression.java

+15-1
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,8 @@
1717
package org.graylog.plugins.pipelineprocessor.ast.expressions;
1818

1919
import org.antlr.v4.runtime.Token;
20+
import org.graylog.plugins.pipelineprocessor.parser.ParseException;
21+
import org.graylog.plugins.pipelineprocessor.parser.errors.SyntaxError;
2022

2123
import java.util.Collections;
2224

@@ -26,7 +28,19 @@ public abstract class UnaryExpression extends BaseExpression {
2628

2729
public UnaryExpression(Token start, Expression right) {
2830
super(start);
29-
this.right = right;
31+
this.right = requireNonNull(right, start);
32+
}
33+
34+
private static Expression requireNonNull(Expression expression, Token token) {
35+
if (expression != null) {
36+
return expression;
37+
} else {
38+
final int line = token.getLine();
39+
final int positionInLine = token.getCharPositionInLine();
40+
final String msg = "Invalid expression (line: " + line + ", column: " + positionInLine + ")";
41+
final SyntaxError syntaxError = new SyntaxError(token.getText(), line, positionInLine, msg, null);
42+
throw new ParseException(Collections.singleton(syntaxError));
43+
}
3044
}
3145

3246
@Override

plugin/src/main/java/org/graylog/plugins/pipelineprocessor/parser/errors/SyntaxError.java

+3-1
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,8 @@
2020
import org.antlr.v4.runtime.ParserRuleContext;
2121
import org.antlr.v4.runtime.RecognitionException;
2222

23+
import javax.annotation.Nullable;
24+
2325
public class SyntaxError extends ParseError {
2426

2527
private final Object offendingSymbol;
@@ -28,7 +30,7 @@ public class SyntaxError extends ParseError {
2830
private final String msg;
2931
private final RecognitionException e;
3032

31-
public SyntaxError(Object offendingSymbol, int line, int charPositionInLine, String msg, RecognitionException e) {
33+
public SyntaxError(@Nullable Object offendingSymbol, int line, int charPositionInLine, String msg, @Nullable RecognitionException e) {
3234
super("syntax_error", new ParserRuleContext());
3335

3436
this.offendingSymbol = offendingSymbol;

plugin/src/test/java/org/graylog/plugins/pipelineprocessor/parser/PipelineRuleParserTest.java

+12-1
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,6 @@
2020
import com.google.common.collect.Iterables;
2121
import com.google.common.collect.Lists;
2222
import com.google.common.collect.Ordering;
23-
2423
import org.graylog.plugins.pipelineprocessor.BaseParserTest;
2524
import org.graylog.plugins.pipelineprocessor.EvaluationContext;
2625
import org.graylog.plugins.pipelineprocessor.ast.Pipeline;
@@ -56,6 +55,7 @@
5655
import org.graylog.plugins.pipelineprocessor.parser.errors.NonIndexableType;
5756
import org.graylog.plugins.pipelineprocessor.parser.errors.OptionalParametersMustBeNamed;
5857
import org.graylog.plugins.pipelineprocessor.parser.errors.ParseError;
58+
import org.graylog.plugins.pipelineprocessor.parser.errors.SyntaxError;
5959
import org.graylog.plugins.pipelineprocessor.parser.errors.UndeclaredFunction;
6060
import org.graylog.plugins.pipelineprocessor.parser.errors.UndeclaredVariable;
6161
import org.graylog2.plugin.InstantMillisProvider;
@@ -413,6 +413,17 @@ public void invalidDateAddition() {
413413
}
414414
}
415415

416+
@Test
417+
public void issue185() {
418+
try {
419+
parseRuleWithOptionalCodegen();
420+
fail("Should have thrown parse exception");
421+
} catch (ParseException e) {
422+
assertEquals(1, e.getErrors().size());
423+
assertEquals(SyntaxError.class, Iterables.getOnlyElement(e.getErrors()).getClass());
424+
}
425+
}
426+
416427

417428
public static class CustomObject {
418429
private final String id;
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
rule "issue-185"
2+
when
3+
true
4+
then
5+
let a = "\s+$"
6+
end

0 commit comments

Comments
 (0)