FieldDeclaration wurde der Typ in der TYPE methode nicht angepasst. Fehler behoben

This commit is contained in:
JanUlrich 2015-02-24 15:25:56 +01:00
parent 4e61ba736d
commit dc6cd6cdd0
7 changed files with 5 additions and 60 deletions

View File

@ -4,6 +4,6 @@
<classpathentry excluding=".classpath|.cvsignore|.externalToolBuilders/|.project|.settings/|Papers/|bin/|doc/|examples/|lib/|notizen/|src/|test/|tools/" including="log4j.xml" kind="src" path=""/>
<classpathentry kind="src" path="test"/>
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/CDC-1.0%Foundation-1.0"/>
<classpathentry kind="lib" path="lib/junit-4.0.jar"/>
<classpathentry kind="lib" path="lib/junit-4.0.jar" sourcepath="/home/janulrich/.m2/repository/junit/junit/4.0/junit-4.0-sources.jar"/>
<classpathentry kind="output" path="bin"/>
</classpath>

View File

@ -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.

View File

@ -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

View File

@ -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;

View File

@ -185,7 +185,6 @@ public class LocalOrFieldVar extends Expr
public String getTypeInformation(){
return this.getType()+" "+this.get_Name();
}
@Override

View File

@ -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;
}
}

View File

@ -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: