forked from JavaTX/JavaCompilerCore
70 lines
2.5 KiB
Markdown
70 lines
2.5 KiB
Markdown
|
|
|||
|
# Typinferenz
|
|||
|
|
|||
|
## Generische Variablen
|
|||
|
### GTVs in Constraints
|
|||
|
* GTVs k<>nnen in Constraints auf 2 Arten auftauchen.
|
|||
|
* Als GTZ und als TPH
|
|||
|
* In folgenden F<>llen als TPH:
|
|||
|
* Die Generische Variable ist nicht in dem Bereich definiert, in dem sie benutzt wird.
|
|||
|
* Es kann auch vorkommen, dass die Generische Variable in der gleichen Klasse definiert wurde, aber f<>r eine andere Methode gilt.
|
|||
|
* In folgenden F<>llen als GTV:
|
|||
|
* Die Generische Variable ist f<>r den Bereich definiert, in dem der Constraint generiert wird.
|
|||
|
* In der selben Methode oder der selben Klasse. Dies l<>sst sich <20>berpr<70>fen, indem man die Klasse in welcher die GTV deklariert wurde mit der Klasse in welcher deren Typ benutzt wird vergleicht.
|
|||
|
|
|||
|
|
|||
|
## ResultSet
|
|||
|
|
|||
|
* Spezifisch f<>r jedes SourceFile (nicht f<>r jede Klasse)
|
|||
|
* mehrere ResultSets pro Klasse
|
|||
|
*
|
|||
|
|
|||
|
* Enth<74>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<65>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<65>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<62>ngigkeiten dieser
|
|||
|
|
|||
|
# 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<69>end jeder Klasse im Syntaxbaum mit dem TRProg aufruf <20>bergeben
|
|||
|
4. Jede Klasse verwaltet lokale Variablen in ihrem eigenen AssumptionSet. Das Globale ist Klassen<65>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.
|
|||
|
|
|||
|
|