Skip to content

Commit d4ef259

Browse files
authored
Java Compilation Warning (#124)
1 parent 08af804 commit d4ef259

File tree

5 files changed

+35
-10
lines changed

5 files changed

+35
-10
lines changed

liquidjava-verifier/src/main/java/liquidjava/api/CommandLineLauncher.java

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66

77
import liquidjava.diagnostics.Diagnostics;
88
import liquidjava.diagnostics.errors.CustomError;
9+
import liquidjava.diagnostics.warnings.CustomWarning;
910
import liquidjava.processor.RefinementProcessor;
1011
import spoon.Launcher;
1112
import spoon.processing.ProcessingManager;
@@ -54,7 +55,11 @@ public static void launch(String... paths) {
5455
}
5556
launcher.getEnvironment().setNoClasspath(true);
5657
launcher.getEnvironment().setComplianceLevel(8);
57-
launcher.run();
58+
59+
boolean buildSuccess = launcher.getModelBuilder().build();
60+
if (!buildSuccess) {
61+
diagnostics.add(new CustomWarning("Java compilation error detected. Verification might be affected."));
62+
}
5863

5964
final Factory factory = launcher.getFactory();
6065
final ProcessingManager processingManager = new QueueProcessingManager(factory);
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
package liquidjava.diagnostics.warnings;
2+
3+
import spoon.reflect.cu.SourcePosition;
4+
5+
/**
6+
* Custom warning with a message
7+
*
8+
* @see LJWarning
9+
*/
10+
public class CustomWarning extends LJWarning {
11+
12+
public CustomWarning(SourcePosition position, String message) {
13+
super(message, position);
14+
}
15+
16+
public CustomWarning(String message) {
17+
super(message, null);
18+
}
19+
20+
}

liquidjava-verifier/src/main/java/liquidjava/diagnostics/warnings/ExternalClassNotFoundWarning.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
package liquidjava.diagnostics.warnings;
22

3-
import spoon.reflect.declaration.CtElement;
3+
import spoon.reflect.cu.SourcePosition;
44

55
/**
66
* Warning indicating that a class referenced in an external refinement was not found
@@ -11,8 +11,8 @@ public class ExternalClassNotFoundWarning extends LJWarning {
1111

1212
private final String className;
1313

14-
public ExternalClassNotFoundWarning(CtElement element, String message, String className) {
15-
super(message, element.getPosition());
14+
public ExternalClassNotFoundWarning(SourcePosition position, String message, String className) {
15+
super(message, position);
1616
this.className = className;
1717
}
1818

liquidjava-verifier/src/main/java/liquidjava/diagnostics/warnings/ExternalMethodNotFoundWarning.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
package liquidjava.diagnostics.warnings;
22

3-
import spoon.reflect.declaration.CtElement;
3+
import spoon.reflect.cu.SourcePosition;
44

55
/**
66
* Warning indicating that a method referenced in an external refinement was not found
@@ -13,9 +13,9 @@ public class ExternalMethodNotFoundWarning extends LJWarning {
1313
private final String className;
1414
private final String[] overloads;
1515

16-
public ExternalMethodNotFoundWarning(CtElement element, String message, String methodName, String className,
16+
public ExternalMethodNotFoundWarning(SourcePosition position, String message, String methodName, String className,
1717
String[] overloads) {
18-
super(message, element.getPosition());
18+
super(message, position);
1919
this.methodName = methodName;
2020
this.className = className;
2121
this.overloads = overloads;

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

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ public <T> void visitCtInterface(CtInterface<T> intrface) {
4343
this.prefix = externalRefinements.get();
4444
if (!classExists(prefix)) {
4545
String message = String.format("Could not find class '%s'", prefix);
46-
diagnostics.add(new ExternalClassNotFoundWarning(intrface, message, prefix));
46+
diagnostics.add(new ExternalClassNotFoundWarning(intrface.getPosition(), message, prefix));
4747
return;
4848
}
4949
getRefinementFromAnnotation(intrface);
@@ -72,15 +72,15 @@ public <R> void visitCtMethod(CtMethod<R> method) {
7272
prefix);
7373
String[] overloads = getOverloads(targetType, method);
7474
diagnostics.add(
75-
new ExternalMethodNotFoundWarning(method, message, method.getSignature(), prefix, overloads));
75+
new ExternalMethodNotFoundWarning(method.getPosition(), message, method.getSignature(), prefix, overloads));
7676
}
7777
} else {
7878
if (!methodExists(targetType, method)) {
7979
String message = String.format("Could not find method '%s %s' for '%s'",
8080
method.getType().getSimpleName(), method.getSignature(), prefix);
8181
String[] overloads = getOverloads(targetType, method);
8282
diagnostics.add(
83-
new ExternalMethodNotFoundWarning(method, message, method.getSignature(), prefix, overloads));
83+
new ExternalMethodNotFoundWarning(method.getPosition(), message, method.getSignature(), prefix, overloads));
8484
return;
8585
}
8686
}

0 commit comments

Comments
 (0)