forked from JavaTX/JavaCompilerCore
45 lines
1.5 KiB
Markdown
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
|
|
|
|
|