From c76ee355d8f6ed44b83fd99749a6b8aa5247b75f Mon Sep 17 00:00:00 2001 From: Daniel Holle Date: Mon, 29 Apr 2024 10:25:01 +0200 Subject: [PATCH] Add bug for #328 --- resources/bytecode/javFiles/Bug328.jav | 8 ++++++++ resources/bytecode/javFiles/Bug328B.java | 3 +++ .../dhbwstuttgart/syntaxtree/visual/OutputGenerator.java | 2 ++ .../target/generate/StatementToTargetExpression.java | 2 +- .../dhbwstuttgart/typeinference/typeAlgo/TYPEStmt.java | 4 +++- src/test/java/TestComplete.java | 9 +++++++++ 6 files changed, 26 insertions(+), 2 deletions(-) create mode 100644 resources/bytecode/javFiles/Bug328.jav create mode 100644 resources/bytecode/javFiles/Bug328B.java diff --git a/resources/bytecode/javFiles/Bug328.jav b/resources/bytecode/javFiles/Bug328.jav new file mode 100644 index 00000000..c2cc1dbb --- /dev/null +++ b/resources/bytecode/javFiles/Bug328.jav @@ -0,0 +1,8 @@ +import java.lang.Integer; +import Bug328B; + +public class Bug328 extends Bug328B { + public Bug328() { + super(1); + } +} \ No newline at end of file diff --git a/resources/bytecode/javFiles/Bug328B.java b/resources/bytecode/javFiles/Bug328B.java new file mode 100644 index 00000000..1859d218 --- /dev/null +++ b/resources/bytecode/javFiles/Bug328B.java @@ -0,0 +1,3 @@ +public class Bug328B { + public Bug328B(int a) {} +} diff --git a/src/main/java/de/dhbwstuttgart/syntaxtree/visual/OutputGenerator.java b/src/main/java/de/dhbwstuttgart/syntaxtree/visual/OutputGenerator.java index c84b95a1..bb24aae3 100644 --- a/src/main/java/de/dhbwstuttgart/syntaxtree/visual/OutputGenerator.java +++ b/src/main/java/de/dhbwstuttgart/syntaxtree/visual/OutputGenerator.java @@ -380,6 +380,7 @@ public class OutputGenerator implements ASTVisitor { out.append("super("); superCall.arglist.accept(this); out.append(")"); + out.append(" Signature: " + superCall.signature); } @Override @@ -387,6 +388,7 @@ public class OutputGenerator implements ASTVisitor { out.append("this("); thisCall.arglist.accept(this); out.append(")"); + out.append(" Signature: " + thisCall.signature); } @Override diff --git a/src/main/java/de/dhbwstuttgart/target/generate/StatementToTargetExpression.java b/src/main/java/de/dhbwstuttgart/target/generate/StatementToTargetExpression.java index 87cb243c..9851cd8e 100644 --- a/src/main/java/de/dhbwstuttgart/target/generate/StatementToTargetExpression.java +++ b/src/main/java/de/dhbwstuttgart/target/generate/StatementToTargetExpression.java @@ -301,7 +301,7 @@ public class StatementToTargetExpression implements ASTVisitor { var aSuper = converter.convert(superCall.receiver.getType()); var type = converter.convert(superCall.getType()); var receiverName = new JavaClassName(converter.convert(superCall.receiver.getType()).name()); - var clazz = converter.compiler.getClass(converter.compiler.getClass(receiverName).getSuperClass().getName()); + var clazz = converter.compiler.getClass(receiverName); var signature = superCall.signatureArguments().stream().map(converter::convert).toList(); var method = converter.findConstructor(clazz, signature); var params = superCall.getArgumentList().getArguments().stream().map(converter::convert).toList(); diff --git a/src/main/java/de/dhbwstuttgart/typeinference/typeAlgo/TYPEStmt.java b/src/main/java/de/dhbwstuttgart/typeinference/typeAlgo/TYPEStmt.java index 417c44a8..86b390e7 100644 --- a/src/main/java/de/dhbwstuttgart/typeinference/typeAlgo/TYPEStmt.java +++ b/src/main/java/de/dhbwstuttgart/typeinference/typeAlgo/TYPEStmt.java @@ -592,6 +592,7 @@ public class TYPEStmt implements StatementVisitor { var params = convertParams(ctor.getParameterList(), info); if (params.size() != superCall.arglist.getArguments().size()) continue; var assumption = new MethodAssumption(null, new Void(new NullToken()), params, createTypeScope(clazz, ctor), ctor.isInherited); + System.out.println(params); GenericsResolver resolver = getResolverInstance(); Set> oneMethodConstraints = generateConstraint(superCall, assumption, info, resolver); @@ -682,6 +683,7 @@ public class TYPEStmt implements StatementVisitor { extendsMethodConstraint.addAll(parameterContraints); Set methodSignatureConstraint = generatemethodSignatureConstraint(forMethod, assumption, info, resolver); + System.out.println(methodSignatureConstraint); //System.out.println("methodSignatureConstraint: " + methodSignatureConstraint); //System.out.println("methodConstraint: " + methodConstraint); @@ -716,7 +718,7 @@ public class TYPEStmt implements StatementVisitor { Set ret = new HashSet<>(); for (int i = 0; i < foMethod.arglist.getArguments().size(); i++) { - + System.out.println(foMethod.signature); // Zuordnung von MethoCall.signature (Argumenttypen) zu der Argumenttypen der ausgewaehlten Methode (assumption.params) ret.add(new Pair(foMethod.signature.get(i), assumption.getArgTypes().get(i), PairOperator.EQUALSDOT)); diff --git a/src/test/java/TestComplete.java b/src/test/java/TestComplete.java index 93cfb387..399b587b 100644 --- a/src/test/java/TestComplete.java +++ b/src/test/java/TestComplete.java @@ -1084,4 +1084,13 @@ public class TestComplete { var res = clazz.getDeclaredMethod("convert", List.class).invoke(instance, list); assertEquals(res, List.of(6, 7, 8)); } + + @Test + public void testBug328() throws Exception { + var loader = new ByteArrayClassLoader(); + loader.loadClass(TestCodegen.path.resolve("Bug328B.class")); + var classFiles = generateClassFiles(loader, "Bug328.jav"); + var clazz = classFiles.get("Bug328"); + var instance = clazz.getDeclaredConstructor().newInstance(); + } }