diff --git a/src/de/dhbwstuttgart/core/JavaTXCompiler.java b/src/de/dhbwstuttgart/core/JavaTXCompiler.java index f65f909c0..38c0c7f2a 100644 --- a/src/de/dhbwstuttgart/core/JavaTXCompiler.java +++ b/src/de/dhbwstuttgart/core/JavaTXCompiler.java @@ -79,10 +79,16 @@ public class JavaTXCompiler { } public List getAvailableClasses(SourceFile forSourceFile) throws ClassNotFoundException { - List allClasses = new ArrayList<>();//environment.getAllAvailableClasses(); + //PL 2018-09-18: List durch Set ersetzt, damit die Klassen nur einmal hinzugefuegt werden + //List allClasses = new ArrayList<>();//environment.getAllAvailableClasses(); + Set allClasses = new HashSet<>(); + + /* PL 2018-09-19 geloescht werden bereits in typeInference hinzugefuegt for (SourceFile sf : sourceFiles.values()) { allClasses.addAll(sf.getClasses()); } + */ + List importedClasses = new ArrayList<>(); for (JavaClassName name : forSourceFile.getImports()) { //TODO: Hier werden imports von eigenen (.jav) Klassen nicht beachtet @@ -91,7 +97,7 @@ public class JavaTXCompiler { importedClasses.add(importedClass); allClasses.addAll(importedClasses); } - return allClasses; + return new ArrayList<>(allClasses); } public List typeInference() throws ClassNotFoundException { diff --git a/src/de/dhbwstuttgart/parser/SyntaxTreeGenerator/FCGenerator.java b/src/de/dhbwstuttgart/parser/SyntaxTreeGenerator/FCGenerator.java index c4fc5b580..29c539817 100644 --- a/src/de/dhbwstuttgart/parser/SyntaxTreeGenerator/FCGenerator.java +++ b/src/de/dhbwstuttgart/parser/SyntaxTreeGenerator/FCGenerator.java @@ -13,6 +13,8 @@ import de.dhbwstuttgart.typeinference.unify.model.*; import java.util.*; import java.util.stream.Collectors; +import org.antlr.v4.runtime.Token; + public class FCGenerator { /** * Baut die FiniteClosure aus availableClasses. @@ -26,11 +28,18 @@ public class FCGenerator { public static Set toFC(Collection availableClasses) throws ClassNotFoundException { HashSet pairs = new HashSet<>(); + //PL 2018-09-18: gtvs vor die for-Schleife gezogen, damit immer die gleichen Typeplaceholder eingesetzt werden. + HashMap gtvs = new HashMap<>(); for(ClassOrInterface cly : availableClasses){ - pairs.addAll(getSuperTypes(cly, availableClasses)); + pairs.addAll(getSuperTypes(cly, availableClasses, gtvs)); } return pairs; } + + + + + /** * Bildet eine Kette vom übergebenen Typ bis hin zum höchsten bekannten Typ diff --git a/src/de/dhbwstuttgart/syntaxtree/type/RefType.java b/src/de/dhbwstuttgart/syntaxtree/type/RefType.java index 3c9a59073..3e86275af 100644 --- a/src/de/dhbwstuttgart/syntaxtree/type/RefType.java +++ b/src/de/dhbwstuttgart/syntaxtree/type/RefType.java @@ -105,7 +105,7 @@ public class RefType extends RefTypeOrTPHOrWildcardOrGeneric return false; } } - + @Override public void accept(ASTVisitor visitor) { diff --git a/src/de/dhbwstuttgart/syntaxtree/type/RefTypeOrTPHOrWildcardOrGeneric.java b/src/de/dhbwstuttgart/syntaxtree/type/RefTypeOrTPHOrWildcardOrGeneric.java index 8a573d160..d20d451d3 100644 --- a/src/de/dhbwstuttgart/syntaxtree/type/RefTypeOrTPHOrWildcardOrGeneric.java +++ b/src/de/dhbwstuttgart/syntaxtree/type/RefTypeOrTPHOrWildcardOrGeneric.java @@ -15,4 +15,5 @@ public abstract class RefTypeOrTPHOrWildcardOrGeneric extends SyntaxTreeNode{ public abstract A acceptTV(TypeVisitor visitor); public abstract void accept(ResultSetVisitor visitor); + } diff --git a/src/de/dhbwstuttgart/syntaxtree/type/TypePlaceholder.java b/src/de/dhbwstuttgart/syntaxtree/type/TypePlaceholder.java index ab4414fd2..6f0fa3ffa 100644 --- a/src/de/dhbwstuttgart/syntaxtree/type/TypePlaceholder.java +++ b/src/de/dhbwstuttgart/syntaxtree/type/TypePlaceholder.java @@ -59,6 +59,7 @@ public class TypePlaceholder extends RefTypeOrTPHOrWildcardOrGeneric } } + public String toString() { return "TPH " + this.name;