diff --git a/.classpath b/.classpath index 38eed00a..4f24f94b 100755 --- a/.classpath +++ b/.classpath @@ -4,6 +4,6 @@ - + diff --git a/README.me b/README.me deleted file mode 100644 index dfe0d318..00000000 --- a/README.me +++ /dev/null @@ -1,15 +0,0 @@ -# Typinferenz für Java 8 - -## Programmablauf - -1. SourceFile parst die Java-Dateien -2. SourceFile erstellt die Basic/Global Assumptions -3. Das Globale AssumptionSet wird anschließend jeder Klasse im Syntaxbaum mit dem TRProg aufruf übergeben -4. Jede Klasse verwaltet lokale Variablen in ihrem eigenen AssumptionSet. Das Globale ist Klassenübergreifend und jede AssumptionType darf darin nur einmalig gesetzt werden. -5. Haben alle Klassen ihrer Constraints erstellt können diese Unifiziert werden. - -## Overloading - -* Die Overloading Klasse generiert Constraints aus einem Methodenaufruf. - - diff --git a/Readme.md b/Readme.md deleted file mode 100644 index 641d10f1..00000000 --- a/Readme.md +++ /dev/null @@ -1,42 +0,0 @@ -# Typinferenz - -## ResultSet - -* Spezifisch für jedes SourceFile (nicht für jede Klasse) -* mehrere ResultSets pro Klasse -* - -* Enthält: - * constraintPairs - * unifiedConstraints - -## TypeInsertSet -* Stellt die Typeinsetzung für eine der generierten Lösungen dar -* Setzt alle Typen und generischen Variablen ein, welche zu dieser Lösung gehören - -## Ablauf Typinferenz: - -1. Parsen - * (Parser postProcessing) -2. Typinferenz - * Anfangspunkt SourceFile - * löst geparste Typen zu richtigen Typen auf (RefTypes, GenericVar) - * setzt TPHs ein - * bildet Constraints, welche in ResultSet gesammelt werden. ResultSet wird durch Syntaxbaum gereicht. - * Assumptions generieren - * Wird im Syntaxbaum für jeden Knoten ausgeführt und die Assumptions für darunterliegende Knoten gebildet - * -3. Unifizierung - * wird im SourceFile aufgerufen - * unifiziert Constraints aller im SourceFile vorkommenden Klassen - -4. Erstellen von TypeInsertSet - * Durchlaufen des Syntaxbaumes - * Jeder Knoten erstellt TypeInsertSets anhand des ResultSets. - * Bei Knoten, welche Generische Variablen beinhalten können werden GenericTypeInsertPoints erstellt - -5. Einsetzen eines TypeInsertSet (optional) - 1. Auf allen TypeInsertPoints die getUnresolvedTPHs-Methoden aufrufen - 2. Alle Abhängigkeiten dieser - - \ No newline at end of file diff --git a/src/de/dhbwstuttgart/syntaxtree/FieldDeclaration.java b/src/de/dhbwstuttgart/syntaxtree/FieldDeclaration.java index 3fb4cf61..0ddb10b1 100644 --- a/src/de/dhbwstuttgart/syntaxtree/FieldDeclaration.java +++ b/src/de/dhbwstuttgart/syntaxtree/FieldDeclaration.java @@ -137,6 +137,7 @@ public class FieldDeclaration extends Field{ //TypeCheck, falls es sich um einen RefType handelt: ConstraintType thisType = this.getType().TYPE(localAssumptions, this); + this.setType(thisType.getType()); /* if(this.getType()!=null && (this.getType() instanceof RefType)){ Type replaceType = null; diff --git a/src/de/dhbwstuttgart/syntaxtree/statement/LocalOrFieldVar.java b/src/de/dhbwstuttgart/syntaxtree/statement/LocalOrFieldVar.java index 3266d67a..85a636a6 100755 --- a/src/de/dhbwstuttgart/syntaxtree/statement/LocalOrFieldVar.java +++ b/src/de/dhbwstuttgart/syntaxtree/statement/LocalOrFieldVar.java @@ -185,7 +185,6 @@ public class LocalOrFieldVar extends Expr public String getTypeInformation(){ return this.getType()+" "+this.get_Name(); - } @Override diff --git a/src/de/dhbwstuttgart/typeinference/assumptions/FieldAssumption.java b/src/de/dhbwstuttgart/typeinference/assumptions/FieldAssumption.java index 11f7caa1..fd226de3 100644 --- a/src/de/dhbwstuttgart/typeinference/assumptions/FieldAssumption.java +++ b/src/de/dhbwstuttgart/typeinference/assumptions/FieldAssumption.java @@ -4,6 +4,7 @@ import de.dhbwstuttgart.parser.JavaClassName; import de.dhbwstuttgart.syntaxtree.Class; import de.dhbwstuttgart.syntaxtree.Field; import de.dhbwstuttgart.syntaxtree.type.RefType; +import de.dhbwstuttgart.syntaxtree.type.Type; public class FieldAssumption extends Assumption { @@ -38,5 +39,4 @@ public class FieldAssumption extends Assumption { return true; } - } diff --git a/src/de/dhbwstuttgart/typeinference/assumptions/TypeAssumptions.java b/src/de/dhbwstuttgart/typeinference/assumptions/TypeAssumptions.java index 14b2ab48..48830f1f 100755 --- a/src/de/dhbwstuttgart/typeinference/assumptions/TypeAssumptions.java +++ b/src/de/dhbwstuttgart/typeinference/assumptions/TypeAssumptions.java @@ -327,6 +327,8 @@ public class TypeAssumptions { for(GenericVarAssumption ass : this.genericVarAssumptions){ //if(ass.inheritsType(t))return t; if(ass.getIdentifier().equals(t.getName())){ + //Generische Variable gefunden! + if(! ass.getAssumedType().getParentClass().equals(inNode.getParentClass())){ //hier muss nach der ParentClass von inNode gefragt werden, da die ParentClass von t nicht immer korrekt ist! (TODO: Überprüfen) TypeAssumptions.log.debug(t+" ist NICHT in Klasse: "+ass.getAssumedType().getParentClass(), Section.ASSUMPTIONS); //Ist die Generische Variable nicht aus dieser Klasse, so muss sie zu einem TPH umgewandelt werden: