forked from JavaTX/JavaCompilerCore
Dokumentation angefangen
This commit is contained in:
parent
dc6cd6cdd0
commit
d72a803027
69
doc/documentation.md
Normal file
69
doc/documentation.md
Normal file
@ -0,0 +1,69 @@
|
||||
|
||||
# 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 überprü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ä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
|
||||
|
||||
# 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ßend jeder Klasse im Syntaxbaum mit dem TRProg aufruf übergeben
|
||||
4. Jede Klasse verwaltet lokale Variablen in ihrem eigenen AssumptionSet. Das Globale ist Klassenü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.
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user