forked from JavaTX/JavaCompilerCore
44 lines
1.4 KiB
Markdown
44 lines
1.4 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
|
|
* j
|
|
* Durchlaufen des Syntaxbaumes
|
|
* Jeder Knoten erstellt TypeInsertSets anhand des ResultSets.
|
|
* Bei nichtauflösung eines TPH muss GenericVar eingesetzt werden:
|
|
* Im Syntaxbaum wird dazu die addGenericVar-Methode aufgerufen, welche einen TypeInsertPoint generiert.
|
|
* Mit dem Einsetzen einer Generischen Variablen müssen auch alle anderen Knoten im Syntaxbaum, deren
|
|
Typ ebenfalls dieser TypePlaceholder ist.
|
|
* Dies entsteht allerdings automatisch, da das gesamte ermittelte ResultSet als TIS eingesetzt wird.
|
|
|
|
|
|
|