JavaCompilerCore/Readme.md

1.4 KiB

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.