forked from JavaTX/JavaCompilerCore
Fehler in FCGenerator beheben
This commit is contained in:
parent
bcee5e5209
commit
7ff3f22db5
@ -43,8 +43,16 @@ public class FCGenerator {
|
|||||||
return getSuperTypes(forType, availableClasses, new HashMap<>());
|
return getSuperTypes(forType, availableClasses, new HashMap<>());
|
||||||
}
|
}
|
||||||
|
|
||||||
//TODO: implements Interface auch als superklassen beachten
|
/**
|
||||||
private static List<Pair> getSuperTypes(ClassOrInterface forType, Collection<ClassOrInterface> availableClasses, HashMap<String, RefTypeOrTPHOrWildcardOrGeneric> gtvs) throws ClassNotFoundException {
|
*
|
||||||
|
* @param forType
|
||||||
|
* @param availableClasses
|
||||||
|
* @param gtvs
|
||||||
|
* @return
|
||||||
|
* @throws ClassNotFoundException
|
||||||
|
*/
|
||||||
|
private static List<Pair> getSuperTypes(ClassOrInterface forType, Collection<ClassOrInterface> availableClasses,
|
||||||
|
HashMap<String, RefTypeOrTPHOrWildcardOrGeneric> gtvs) throws ClassNotFoundException {
|
||||||
List<RefTypeOrTPHOrWildcardOrGeneric> params = new ArrayList<>();
|
List<RefTypeOrTPHOrWildcardOrGeneric> params = new ArrayList<>();
|
||||||
//Die GTVs, die in forType hinzukommen:
|
//Die GTVs, die in forType hinzukommen:
|
||||||
HashMap<String, RefTypeOrTPHOrWildcardOrGeneric> newGTVs = new HashMap<>();
|
HashMap<String, RefTypeOrTPHOrWildcardOrGeneric> newGTVs = new HashMap<>();
|
||||||
@ -78,7 +86,7 @@ public class FCGenerator {
|
|||||||
Beispie: Matrix<A> extends Vector<Vector<A>>
|
Beispie: Matrix<A> extends Vector<Vector<A>>
|
||||||
Den ersten Parameter mit Vector<A> austauschen und dort alle Generics zu den Typplaceholdern in gtvs austauschen
|
Den ersten Parameter mit Vector<A> 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<GenericTypeVar> itGenParams = superClass.getGenerics().iterator();
|
Iterator<GenericTypeVar> itGenParams = superClass.getGenerics().iterator();
|
||||||
Iterator<RefTypeOrTPHOrWildcardOrGeneric> itSetParams = superType.getParaList().iterator();
|
Iterator<RefTypeOrTPHOrWildcardOrGeneric> itSetParams = superType.getParaList().iterator();
|
||||||
while(itSetParams.hasNext()){
|
while(itSetParams.hasNext()){
|
||||||
@ -88,7 +96,9 @@ public class FCGenerator {
|
|||||||
newGTVs.put(itGenParams.next().getName(), setSetType);
|
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 t1 = new RefType(forType.getClassName(), params, new NullToken());
|
||||||
RefTypeOrTPHOrWildcardOrGeneric t2 = superRefType;
|
RefTypeOrTPHOrWildcardOrGeneric t2 = superRefType;
|
||||||
|
Loading…
Reference in New Issue
Block a user