2014-05-07 09:36:31 +02:00

45 lines
1.5 KiB
Markdown

# 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 nichtauflösung eines TPH muss GenericVar eingesetzt werden:
* Dazu alle Abhängigkeite in Form von Pairs aus dem ResultSet ermitteln.
* GenericVarTypeInsertPoints generieren und in TypeInsertSet speichern.
* Beim Hinzufügen von GenericVarTypeInsertPoints wird kontrolliert, ob diese bereits (auch in Teilen) schon vorhanden sind.
5. Einsetzen eines TypeInsertSet (optional)
1. Auf allen TypeInsertPoints die getUnresolvedTPHs-Methoden aufrufen
2. Alle Abhängigkeiten dieser