diff --git a/pom.xml b/pom.xml
index d9dbc114..120f4204 100644
--- a/pom.xml
+++ b/pom.xml
@@ -54,8 +54,8 @@ http://maven.apache.org/maven-v4_0_0.xsd">
3.11.0--enable-preview
-
- 22
+
+ 21
diff --git a/resources/AllgemeinTest/Foo.jav b/resources/AllgemeinTest/Foo.jav
new file mode 100644
index 00000000..d8195c0f
--- /dev/null
+++ b/resources/AllgemeinTest/Foo.jav
@@ -0,0 +1,6 @@
+public class Foo{
+
+ public accept(Bar b){
+ b.visit(this);
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/de/dhbwstuttgart/parser/SyntaxTreeGenerator/FCGenerator.java b/src/main/java/de/dhbwstuttgart/parser/SyntaxTreeGenerator/FCGenerator.java
index 4f4474a5..37df41fa 100644
--- a/src/main/java/de/dhbwstuttgart/parser/SyntaxTreeGenerator/FCGenerator.java
+++ b/src/main/java/de/dhbwstuttgart/parser/SyntaxTreeGenerator/FCGenerator.java
@@ -158,7 +158,8 @@ public class FCGenerator {
}
/**
- * Tauscht die GTVs in einem Typ gegen die entsprechenden Typen in der übergebenen Map aus.
+ * Tauscht die GTVs in einem Typ gegen die entsprechenden Typen in der übergebenen Map aus auf der direkten Argumentebene.
+ * Hier sind keine Wildcards zulässig
*/
private static class TypeExchanger implements TypeVisitor{
@@ -172,6 +173,7 @@ public class FCGenerator {
public RefTypeOrTPHOrWildcardOrGeneric visit(RefType refType) {
List params = new ArrayList<>();
for(RefTypeOrTPHOrWildcardOrGeneric param : refType.getParaList()){
+ //params.add(param.acceptTV(new TypeExchangerInner(gtvs)));
params.add(param.acceptTV(this));
}
RefTypeOrTPHOrWildcardOrGeneric ret = new RefType(refType.getName(), params, new NullToken());
@@ -201,4 +203,51 @@ public class FCGenerator {
}
}
+
+ /**
+ * Tauscht die GTVs in einem Typ gegen die entsprechenden Typen in der übergebenen Map aus auf den Argumenten der Argumente.
+ * Hier sind Wildcards zulässig
+ */
+ private static class TypeExchangerInner implements TypeVisitor{
+
+ private final HashMap gtvs;
+
+ TypeExchangerInner(HashMap gtvs){
+ this.gtvs = gtvs;
+ }
+
+ @Override
+ public RefTypeOrTPHOrWildcardOrGeneric visit(RefType refType) {
+ List params = new ArrayList<>();
+ for(RefTypeOrTPHOrWildcardOrGeneric param : refType.getParaList()){
+ params.add(param.acceptTV(this));
+ }
+ RefTypeOrTPHOrWildcardOrGeneric ret = new RefType(refType.getName(), params, new NullToken());
+ return ret;
+ }
+
+ @Override
+ public RefTypeOrTPHOrWildcardOrGeneric visit(SuperWildcardType superWildcardType) {
+ return superWildcardType;
+ }
+
+ @Override
+ public RefTypeOrTPHOrWildcardOrGeneric visit(TypePlaceholder typePlaceholder) {
+ throw new DebugException("Dieser Fall darf nicht auftreten");
+ }
+
+ @Override
+ public RefTypeOrTPHOrWildcardOrGeneric visit(ExtendsWildcardType extendsWildcardType) {
+ return extendsWildcardType;
+ }
+
+ @Override
+ public RefTypeOrTPHOrWildcardOrGeneric visit(GenericRefType genericRefType) {
+ if(! gtvs.containsKey(genericRefType.getParsedName()))
+ throw new DebugException("Dieser Fall darf nicht auftreten");
+ return gtvs.get(genericRefType.getParsedName());
+ }
+
+ }
+
}