JavaCompilerCore/doc/documentation.md

70 lines
2.5 KiB
Markdown
Raw Normal View History

2015-02-24 14:26:19 +00:00
# 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.