From 315b6172a006fb46ab1f460c3b5defbf9efa3f9b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Martin=20Pl=C3=BCmicke?= Date: Wed, 19 Sep 2018 22:21:07 +0200 Subject: [PATCH] modified: src/de/dhbwstuttgart/core/JavaTXCompiler.java modified: src/de/dhbwstuttgart/parser/SyntaxTreeGenerator/FCGenerator.java MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Die Anzahl der mehrfachen Lösungen bei sorting.jav reduziert --- src/de/dhbwstuttgart/core/JavaTXCompiler.java | 10 ++++++++-- .../parser/SyntaxTreeGenerator/FCGenerator.java | 11 ++++++++++- src/de/dhbwstuttgart/syntaxtree/type/RefType.java | 2 +- .../type/RefTypeOrTPHOrWildcardOrGeneric.java | 1 + .../syntaxtree/type/TypePlaceholder.java | 1 + 5 files changed, 21 insertions(+), 4 deletions(-) diff --git a/src/de/dhbwstuttgart/core/JavaTXCompiler.java b/src/de/dhbwstuttgart/core/JavaTXCompiler.java index f65f909c..38c0c7f2 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 c4fc5b58..29c53981 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 3c9a5907..3e86275a 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 8a573d16..d20d451d 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 ab4414fd..6f0fa3ff 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;