# 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 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