From 7ff3f22db50341243a76670e3d78c9d5efa2f320 Mon Sep 17 00:00:00 2001 From: JanUlrich Date: Fri, 23 Mar 2018 17:20:15 +0100 Subject: [PATCH 1/2] Fehler in FCGenerator beheben --- .../SyntaxTreeGenerator/FCGenerator.java | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/src/de/dhbwstuttgart/parser/SyntaxTreeGenerator/FCGenerator.java b/src/de/dhbwstuttgart/parser/SyntaxTreeGenerator/FCGenerator.java index 1714570e..0dfd64e9 100644 --- a/src/de/dhbwstuttgart/parser/SyntaxTreeGenerator/FCGenerator.java +++ b/src/de/dhbwstuttgart/parser/SyntaxTreeGenerator/FCGenerator.java @@ -43,8 +43,16 @@ public class FCGenerator { return getSuperTypes(forType, availableClasses, new HashMap<>()); } - //TODO: implements Interface auch als superklassen beachten - private static List getSuperTypes(ClassOrInterface forType, Collection availableClasses, HashMap gtvs) throws ClassNotFoundException { + /** + * + * @param forType + * @param availableClasses + * @param gtvs + * @return + * @throws ClassNotFoundException + */ + private static List getSuperTypes(ClassOrInterface forType, Collection availableClasses, + HashMap gtvs) throws ClassNotFoundException { List params = new ArrayList<>(); //Die GTVs, die in forType hinzukommen: HashMap newGTVs = new HashMap<>(); @@ -78,7 +86,7 @@ public class FCGenerator { Beispie: Matrix extends Vector> Den ersten Parameter mit Vector austauschen und dort alle Generics zu den Typplaceholdern in gtvs austauschen */ - //Hier vermerken, welche Typen im der Superklasse ausgetauscht werden müssen + //Hier vermerken, welche Typen in der Superklasse ausgetauscht werden müssen Iterator itGenParams = superClass.getGenerics().iterator(); Iterator itSetParams = superType.getParaList().iterator(); while(itSetParams.hasNext()){ @@ -88,7 +96,9 @@ public class FCGenerator { newGTVs.put(itGenParams.next().getName(), setSetType); } - RefTypeOrTPHOrWildcardOrGeneric superRefType = superType.acceptTV(new TypeExchanger(newGTVs)); + //Für den superType kann man nun zum Austauschen der Generics wieder die gtvs nehmen: + //Die newGTVs sind nur für den superClass ClassOrInterface welches möglicherweise per reflection geladen wurde abgestimmt + RefTypeOrTPHOrWildcardOrGeneric superRefType = superType.acceptTV(new TypeExchanger(gtvs)); RefTypeOrTPHOrWildcardOrGeneric t1 = new RefType(forType.getClassName(), params, new NullToken()); RefTypeOrTPHOrWildcardOrGeneric t2 = superRefType; From 3e829eee542e95d6fbb21870179d21f5d782540c Mon Sep 17 00:00:00 2001 From: JanUlrich Date: Fri, 23 Mar 2018 17:45:41 +0100 Subject: [PATCH 2/2] Tests anpassen --- test/javFiles/Lambda2.jav | 1 + test/javFiles/Lambda3.jav | 1 + 2 files changed, 2 insertions(+) diff --git a/test/javFiles/Lambda2.jav b/test/javFiles/Lambda2.jav index fbcdaf55..cf1e910b 100644 --- a/test/javFiles/Lambda2.jav +++ b/test/javFiles/Lambda2.jav @@ -1,3 +1,4 @@ +import java.lang.String; public class Lambda2 { diff --git a/test/javFiles/Lambda3.jav b/test/javFiles/Lambda3.jav index 9c4e960c..9e22f302 100644 --- a/test/javFiles/Lambda3.jav +++ b/test/javFiles/Lambda3.jav @@ -1,3 +1,4 @@ +import java.lang.String; public class Lambda2 {