42 lines
1.2 KiB
Markdown
42 lines
1.2 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 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
|
|
|
|
|