Skip to content

Commit d81f0ec

Browse files
committed
Improve Error Message For Missing Method
1 parent 702fe17 commit d81f0ec

File tree

1 file changed

+16
-2
lines changed

1 file changed

+16
-2
lines changed

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

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,9 @@
33
import java.util.Arrays;
44
import java.util.List;
55
import java.util.Optional;
6+
import java.util.stream.Collectors;
7+
import java.util.stream.Stream;
8+
69
import liquidjava.errors.ErrorEmitter;
710
import liquidjava.errors.ErrorHandler;
811
import liquidjava.processor.context.Context;
@@ -92,8 +95,19 @@ public <R> void visitCtMethod(CtMethod<R> method) {
9295
}
9396
} else {
9497
if (!methodExists(targetType, method)) {
95-
ErrorHandler.printCustomError(method, String.format("Could not find method '%s %s' for '%s'",
96-
method.getType().getSimpleName(), method.getSignature(), prefix), errorEmitter);
98+
String matchingNames = targetType.getMethods().stream()
99+
.filter(m -> m.getSimpleName().equals(method.getSimpleName())).map(m -> m.getSignature())
100+
.collect(Collectors.joining("\n\t"));
101+
102+
StringBuilder sb = new StringBuilder();
103+
sb.append(String.format("Could not find method '%s %s' for '%s'", method.getType().getSimpleName(),
104+
method.getSignature(), prefix));
105+
106+
if (!matchingNames.isEmpty()) {
107+
sb.append("\nPossible matches:\n\t");
108+
sb.append(matchingNames);
109+
}
110+
ErrorHandler.printCustomError(method, sb.toString(), errorEmitter);
97111
return;
98112
}
99113
}

0 commit comments

Comments
 (0)