diff --git a/liquidjava-verifier/src/main/java/liquidjava/processor/refinement_checker/ExternalRefinementTypeChecker.java b/liquidjava-verifier/src/main/java/liquidjava/processor/refinement_checker/ExternalRefinementTypeChecker.java index 5773a548..154e94d0 100644 --- a/liquidjava-verifier/src/main/java/liquidjava/processor/refinement_checker/ExternalRefinementTypeChecker.java +++ b/liquidjava-verifier/src/main/java/liquidjava/processor/refinement_checker/ExternalRefinementTypeChecker.java @@ -14,6 +14,8 @@ import liquidjava.rj_language.Predicate; import liquidjava.rj_language.parsing.RefinementsParser; import liquidjava.utils.Utils; +import spoon.reflect.code.CtLiteral; +import spoon.reflect.declaration.CtAnnotation; import spoon.reflect.declaration.CtClass; import spoon.reflect.declaration.CtElement; import spoon.reflect.declaration.CtField; @@ -38,12 +40,14 @@ public void visitCtClass(CtClass ctClass) { @Override public void visitCtInterface(CtInterface intrface) { - Optional externalRefinements = getExternalRefinement(intrface); - if (externalRefinements.isPresent()) { - this.prefix = externalRefinements.get(); + Optional> externalRef = getExternalRefinement(intrface); + if (externalRef.isPresent()) { + @SuppressWarnings("unchecked") + CtLiteral literal = (CtLiteral) externalRef.get().getAllValues().get("value"); + this.prefix = literal.getValue(); if (!classExists(prefix)) { String message = String.format("Could not find class '%s'", prefix); - diagnostics.add(new ExternalClassNotFoundWarning(intrface.getPosition(), message, prefix)); + diagnostics.add(new ExternalClassNotFoundWarning(externalRef.get().getPosition(), message, prefix)); return; } getRefinementFromAnnotation(intrface); diff --git a/liquidjava-verifier/src/main/java/liquidjava/processor/refinement_checker/TypeChecker.java b/liquidjava-verifier/src/main/java/liquidjava/processor/refinement_checker/TypeChecker.java index 0078f89f..b0d1eda2 100644 --- a/liquidjava-verifier/src/main/java/liquidjava/processor/refinement_checker/TypeChecker.java +++ b/liquidjava-verifier/src/main/java/liquidjava/processor/refinement_checker/TypeChecker.java @@ -238,16 +238,13 @@ protected void handleAlias(String ref, CtElement element) throws LJError { } } - Optional getExternalRefinement(CtInterface intrface) { - Optional ref = Optional.empty(); + Optional> getExternalRefinement(CtInterface intrface) { for (CtAnnotation ann : intrface.getAnnotations()) if (ann.getActualAnnotation().annotationType().getCanonicalName() .contentEquals("liquidjava.specification.ExternalRefinementsFor")) { - @SuppressWarnings("unchecked") - CtLiteral s = (CtLiteral) ann.getAllValues().get("value"); - ref = Optional.of(s.getValue()); + return Optional.of(ann); } - return ref; + return Optional.empty(); } public void checkVariableRefinements(Predicate refinementFound, String simpleName, CtTypeReference type,