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