Skip to content

Commit d906b45

Browse files
authored
Handle Alias Syntax Errors (#79)
1 parent 31b657d commit d906b45

File tree

5 files changed

+27
-21
lines changed

5 files changed

+27
-21
lines changed
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
package testSuite;
2+
3+
import liquidjava.specification.RefinementAlias;
4+
5+
@RefinementAlias("Positive(v) { v > 0 }")
6+
public class ErrorMissingAliasTypeParameter {}

liquidjava-verifier/src/main/java/liquidjava/processor/facade/AliasDTO.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ public AliasDTO(String name, List<CtTypeReference<?>> varTypes, List<String> var
2222
this.expression = expression;
2323
}
2424

25-
public AliasDTO(String name2, List<String> varTypes2, List<String> varNames2, String ref) throws ParsingException {
25+
public AliasDTO(String name2, List<String> varTypes2, List<String> varNames2, String ref) {
2626
super();
2727
this.name = name2;
2828
this.varTypes = varTypes2;

liquidjava-verifier/src/main/java/liquidjava/processor/refinement_checker/TypeChecker.java

Lines changed: 14 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -234,25 +234,22 @@ protected void getGhostFunction(String value, CtElement element) {
234234
protected void handleAlias(String value, CtElement element) {
235235
try {
236236
AliasDTO a = RefinementsParser.getAliasDeclaration(value);
237-
238-
if (a != null) {
239-
String klass = null;
240-
String path = null;
241-
if (element instanceof CtClass) {
242-
klass = ((CtClass<?>) element).getSimpleName();
243-
path = ((CtClass<?>) element).getQualifiedName();
244-
} else if (element instanceof CtInterface<?>) {
245-
klass = ((CtInterface<?>) element).getSimpleName();
246-
path = ((CtInterface<?>) element).getQualifiedName();
247-
}
248-
if (klass != null && path != null) {
249-
a.parse(path);
250-
AliasWrapper aw = new AliasWrapper(a, factory, WILD_VAR, context, klass, path);
251-
context.addAlias(aw);
252-
}
237+
String klass = null;
238+
String path = null;
239+
if (element instanceof CtClass) {
240+
klass = ((CtClass<?>) element).getSimpleName();
241+
path = ((CtClass<?>) element).getQualifiedName();
242+
} else if (element instanceof CtInterface<?>) {
243+
klass = ((CtInterface<?>) element).getSimpleName();
244+
path = ((CtInterface<?>) element).getQualifiedName();
245+
}
246+
if (klass != null && path != null) {
247+
a.parse(path);
248+
AliasWrapper aw = new AliasWrapper(a, factory, WILD_VAR, context, klass, path);
249+
context.addAlias(aw);
253250
}
254251
} catch (ParsingException e) {
255-
ErrorHandler.printCustomError(element, e.getMessage(), errorEmitter);
252+
ErrorHandler.printSyntaxError(e.getMessage(), value, element, errorEmitter);
256253
return;
257254
// e.printStackTrace();
258255
}

liquidjava-verifier/src/main/java/liquidjava/rj_language/parsing/RefinementsParser.java

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ public static GhostDTO getGhostDeclaration(String s) throws ParsingException {
3636
ParseTree rc = compile(s);
3737
GhostDTO g = GhostVisitor.getGhostDecl(rc);
3838
if (g == null)
39-
throw new ParsingException(" The ghost should be in format <type> <name> (<parameters>)");
39+
throw new ParsingException("Ghost declarations should be in format <type> <name> (<parameters>)");
4040
return g;
4141
}
4242

@@ -59,7 +59,10 @@ public static AliasDTO getAliasDeclaration(String s) throws ParsingException {
5959

6060
RuleContext rc = parser.prog();
6161
AliasVisitor av = new AliasVisitor(input);
62-
return av.getAlias(rc);
62+
AliasDTO alias = av.getAlias(rc);
63+
if (alias == null)
64+
throw new ParsingException("Alias definitions should be in format <name>(<parameters>) { <definition> }");
65+
return alias;
6366
}
6467

6568
private static ParseTree compile(String toParse) throws ParsingException {

liquidjava-verifier/src/main/java/liquidjava/rj_language/visitors/AliasVisitor.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ public AliasVisitor(CodePointCharStream input) {
3131
*
3232
* @throws ParsingException
3333
*/
34-
public AliasDTO getAlias(ParseTree rc) throws ParsingException {
34+
public AliasDTO getAlias(ParseTree rc) {
3535
if (rc instanceof AliasContext) {
3636
AliasContext ac = (AliasContext) rc;
3737
String name = ac.ID_UPPER().getText();

0 commit comments

Comments
 (0)