Skip to content

Commit a8be75f

Browse files
collect all methods
1 parent ebcff8e commit a8be75f

File tree

2 files changed

+15
-26
lines changed

2 files changed

+15
-26
lines changed

src/main/java/io/github/bldl/astParsing/AstManipulator.java

Lines changed: 8 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -181,18 +181,16 @@ public static String appendPackageDeclaration(String existing, String toAppend)
181181
private Map<String, Map<Integer, Type>> collectMethodParams(CompilationUnit cu, ClassData classData) {
182182
Map<String, Map<Integer, Type>> methodParams = new HashMap<>();
183183
cu.findAll(MethodDeclaration.class).forEach(dec -> {
184+
String methodName = dec.getNameAsString();
185+
if (methodParams.containsKey(methodName)) {
186+
messager.printMessage(Kind.ERROR, "Duplicate methods inside a class. Can't handle polymorphism.");
187+
return;
188+
}
189+
methodParams.put(methodName, new HashMap<>());
184190
NodeList<Parameter> params = dec.getParameters();
185191
for (int i = 0; i < params.size(); ++i) {
186-
Parameter param = params.get(i);
187-
if (!(param.getType() instanceof ClassOrInterfaceType))
188-
continue;
189-
ClassOrInterfaceType type = ((ClassOrInterfaceType) param.getType());
190-
String methodName = dec.getNameAsString();
191-
if (type.getNameAsString().equals(classData.className())) {
192-
methodParams.putIfAbsent(methodName, new HashMap<>());
193-
methodParams.get(methodName).put(i,
194-
type);
195-
}
192+
Type type = params.get(i).getType();
193+
methodParams.get(methodName).put(i, type);
196194
}
197195
});
198196
return methodParams;

src/main/java/io/github/bldl/astParsing/visitors/SubtypingCheckVisitor.java

Lines changed: 7 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -38,25 +38,16 @@ public SubtypingCheckVisitor(Map<String, Map<Integer, Type>> methodParams,
3838

3939
public void visit(MethodCallExpr methodCall, Void arg) {
4040
super.visit(methodCall, arg);
41-
if (!methodParams.containsKey(methodCall.getNameAsString())) {
42-
messager.printMessage(Kind.NOTE, "Don't have key for method: " + methodCall.getNameAsString());
41+
if (!methodParams.containsKey(methodCall.getNameAsString()))
4342
return;
44-
}
4543
// ResolvedMethodDeclaration methodDeclaration = methodCall.resolve();
4644
for (int i = 0; i < methodCall.getArguments().size(); ++i) {
47-
try {
48-
ResolvedType argumentType = methodCall.getArgument(i).calculateResolvedType(),
49-
parameterType = methodParams.get(methodCall.getNameAsString()).get(i).resolve();
50-
if (!argumentType.isReferenceType() || !parameterType.isReferenceType())
51-
continue;
52-
boolean valid = isValidSubtype(parameterType, argumentType);
53-
if (!valid)
54-
messager.printMessage(Kind.ERROR,
55-
String.format("Invalid subtype for method call: %s", methodCall.toString()));
56-
} catch (Exception e) {
57-
messager.printMessage(Kind.NOTE, methodCall.getArguments().toString());
58-
messager.printMessage(Kind.NOTE, methodParams.get(methodCall.getNameAsString()).toString());
59-
}
45+
ResolvedType argumentType = methodCall.getArgument(i).calculateResolvedType(),
46+
parameterType = methodParams.get(methodCall.getNameAsString()).get(i).resolve();
47+
boolean valid = isValidSubtype(parameterType, argumentType);
48+
if (!valid)
49+
messager.printMessage(Kind.ERROR,
50+
String.format("Invalid subtype for method call: %s", methodCall.toString()));
6051
}
6152
}
6253

0 commit comments

Comments
 (0)