modified: src/de/dhbwstuttgart/core/JavaTXCompiler.java

modified:   src/de/dhbwstuttgart/parser/SyntaxTreeGenerator/FCGenerator.java

Die Anzahl der mehrfachen Lösungen bei sorting.jav reduziert
This commit is contained in:
Martin Plümicke 2018-09-19 22:21:07 +02:00
parent 5768783828
commit 315b6172a0
5 changed files with 21 additions and 4 deletions

View File

@ -79,10 +79,16 @@ public class JavaTXCompiler {
} }
public List<ClassOrInterface> getAvailableClasses(SourceFile forSourceFile) throws ClassNotFoundException { public List<ClassOrInterface> getAvailableClasses(SourceFile forSourceFile) throws ClassNotFoundException {
List<ClassOrInterface> allClasses = new ArrayList<>();//environment.getAllAvailableClasses(); //PL 2018-09-18: List durch Set ersetzt, damit die Klassen nur einmal hinzugefuegt werden
//List<ClassOrInterface> allClasses = new ArrayList<>();//environment.getAllAvailableClasses();
Set<ClassOrInterface> allClasses = new HashSet<>();
/* PL 2018-09-19 geloescht werden bereits in typeInference hinzugefuegt
for (SourceFile sf : sourceFiles.values()) { for (SourceFile sf : sourceFiles.values()) {
allClasses.addAll(sf.getClasses()); allClasses.addAll(sf.getClasses());
} }
*/
List<ClassOrInterface> importedClasses = new ArrayList<>(); List<ClassOrInterface> importedClasses = new ArrayList<>();
for (JavaClassName name : forSourceFile.getImports()) { for (JavaClassName name : forSourceFile.getImports()) {
//TODO: Hier werden imports von eigenen (.jav) Klassen nicht beachtet //TODO: Hier werden imports von eigenen (.jav) Klassen nicht beachtet
@ -91,7 +97,7 @@ public class JavaTXCompiler {
importedClasses.add(importedClass); importedClasses.add(importedClass);
allClasses.addAll(importedClasses); allClasses.addAll(importedClasses);
} }
return allClasses; return new ArrayList<>(allClasses);
} }
public List<ResultSet> typeInference() throws ClassNotFoundException { public List<ResultSet> typeInference() throws ClassNotFoundException {

View File

@ -13,6 +13,8 @@ import de.dhbwstuttgart.typeinference.unify.model.*;
import java.util.*; import java.util.*;
import java.util.stream.Collectors; import java.util.stream.Collectors;
import org.antlr.v4.runtime.Token;
public class FCGenerator { public class FCGenerator {
/** /**
* Baut die FiniteClosure aus availableClasses. * Baut die FiniteClosure aus availableClasses.
@ -26,12 +28,19 @@ public class FCGenerator {
public static Set<Pair> toFC(Collection<ClassOrInterface> availableClasses) throws ClassNotFoundException { public static Set<Pair> toFC(Collection<ClassOrInterface> availableClasses) throws ClassNotFoundException {
HashSet<Pair> pairs = new HashSet<>(); HashSet<Pair> pairs = new HashSet<>();
//PL 2018-09-18: gtvs vor die for-Schleife gezogen, damit immer die gleichen Typeplaceholder eingesetzt werden.
HashMap<String, RefTypeOrTPHOrWildcardOrGeneric> gtvs = new HashMap<>();
for(ClassOrInterface cly : availableClasses){ for(ClassOrInterface cly : availableClasses){
pairs.addAll(getSuperTypes(cly, availableClasses)); pairs.addAll(getSuperTypes(cly, availableClasses, gtvs));
} }
return pairs; return pairs;
} }
/** /**
* Bildet eine Kette vom übergebenen Typ bis hin zum höchsten bekannten Typ * Bildet eine Kette vom übergebenen Typ bis hin zum höchsten bekannten Typ
* Als Generics werden TPHs benutzt, welche der Unifikationsalgorithmus korrekt interpretieren muss. * Als Generics werden TPHs benutzt, welche der Unifikationsalgorithmus korrekt interpretieren muss.

View File

@ -15,4 +15,5 @@ public abstract class RefTypeOrTPHOrWildcardOrGeneric extends SyntaxTreeNode{
public abstract <A> A acceptTV(TypeVisitor<A> visitor); public abstract <A> A acceptTV(TypeVisitor<A> visitor);
public abstract void accept(ResultSetVisitor visitor); public abstract void accept(ResultSetVisitor visitor);
} }

View File

@ -59,6 +59,7 @@ public class TypePlaceholder extends RefTypeOrTPHOrWildcardOrGeneric
} }
} }
public String toString() public String toString()
{ {
return "TPH " + this.name; return "TPH " + this.name;