Skip to content

Commit 5533ae4

Browse files
committed
Use Annotation Position in ExternalClassNotFoundWarning
1 parent 883171c commit 5533ae4

File tree

2 files changed

+11
-10
lines changed

2 files changed

+11
-10
lines changed

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

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,8 @@
1414
import liquidjava.rj_language.Predicate;
1515
import liquidjava.rj_language.parsing.RefinementsParser;
1616
import liquidjava.utils.Utils;
17+
import spoon.reflect.code.CtLiteral;
18+
import spoon.reflect.declaration.CtAnnotation;
1719
import spoon.reflect.declaration.CtClass;
1820
import spoon.reflect.declaration.CtElement;
1921
import spoon.reflect.declaration.CtField;
@@ -38,12 +40,14 @@ public <T> void visitCtClass(CtClass<T> ctClass) {
3840

3941
@Override
4042
public <T> void visitCtInterface(CtInterface<T> intrface) {
41-
Optional<String> externalRefinements = getExternalRefinement(intrface);
42-
if (externalRefinements.isPresent()) {
43-
this.prefix = externalRefinements.get();
43+
Optional<CtAnnotation<?>> externalRef = getExternalRefinement(intrface);
44+
if (externalRef.isPresent()) {
45+
@SuppressWarnings("unchecked")
46+
CtLiteral<String> literal = (CtLiteral<String>) externalRef.get().getAllValues().get("value");
47+
this.prefix = literal.getValue();
4448
if (!classExists(prefix)) {
4549
String message = String.format("Could not find class '%s'", prefix);
46-
diagnostics.add(new ExternalClassNotFoundWarning(intrface.getPosition(), message, prefix));
50+
diagnostics.add(new ExternalClassNotFoundWarning(externalRef.get().getPosition(), message, prefix));
4751
return;
4852
}
4953
getRefinementFromAnnotation(intrface);

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

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -238,16 +238,13 @@ protected void handleAlias(String ref, CtElement element) throws LJError {
238238
}
239239
}
240240

241-
Optional<String> getExternalRefinement(CtInterface<?> intrface) {
242-
Optional<String> ref = Optional.empty();
241+
Optional<CtAnnotation<?>> getExternalRefinement(CtInterface<?> intrface) {
243242
for (CtAnnotation<? extends Annotation> ann : intrface.getAnnotations())
244243
if (ann.getActualAnnotation().annotationType().getCanonicalName()
245244
.contentEquals("liquidjava.specification.ExternalRefinementsFor")) {
246-
@SuppressWarnings("unchecked")
247-
CtLiteral<String> s = (CtLiteral<String>) ann.getAllValues().get("value");
248-
ref = Optional.of(s.getValue());
245+
return Optional.of(ann);
249246
}
250-
return ref;
247+
return Optional.empty();
251248
}
252249

253250
public void checkVariableRefinements(Predicate refinementFound, String simpleName, CtTypeReference<?> type,

0 commit comments

Comments
 (0)