JavaCompilerCore/vorgehen.md

3.4 KiB

  • Parser um Packages erweitern
    • Schätzung: 0 h
    • Parser kann Java 8 und daher auch packages
  • Convertierung zu AST
    • AST kann schon Packages im Namen
    • Es muss geprüft werden, ob geparste Datei im richtigen Ordner ist
  • Constraints erstellen
    • macht es hier einen Unterschied?
    • es ändert sich nur der Namen der Typen
    • das ist schon in JavaClassName enthalten

Java verhalten

  • das verhalten von Java soll kopiert werden

  • Java kompiliert in den gleichen Ordner wie die source file

  • Java erhält eine liste von Source Files, die es kompilieren soll

  • anhand von deren Standort lassen sich relativ die Position von kompilierten Class-files bestimmen

    • macht der javac Compiler allerdings nicht
    • er nimmt sein Running Directory als classPath standardmäßig, falls keiner angegeben
    • javac geht davon aus, dass CP richtig gesetzt wird, oder javac im Source-Root ausgeführt wird
  • -cp path or -classpath path Specifies where to find user class files, and (optionally) annotation processors and source files. This class path overrides the user class path in the CLASSPATH environment variable. If neither CLASSPATH, -cp nor -classpath is specified, then the user class path is the current directory. See Setting the Class Path.

  • Compiler kontrolliert nicht, ob package im korrekten Ordner ist

    • auch keine Warnung
    • unser kompiler könnte aber trotzdem zumindes eine Warnung ausgeben

-d Parameter

  • Optional
  • damit lässt sich ein andere ort zur Ausgabe der Class-files bestimmen

Tasks

  • Es steht nur noch ein Task aus:

Klassen aus Default Package laden

  • Das kann für jede SourceFile anders sein
  • Momentan funktioniert der Compiler sowieso nur mit einer SourceFile!
  • an allen Stellen, an denen die Imports der SourceFile beachtet werden, müssen jetzt auch alle Klassen aus dem gleichen Ordner beachtet werden

Stand

  • CompilationEnvironment wurde erweitert und kann alle Klassen aus einem Ordner laden
  • Allerdings funktionieren manche Tests noch nicht
  • Die Bytecode-Tests funktionieren nicht, da sich kaputte Klassen im Bytecode-Jav-Ordner befinden

Class files in richtigen Ordner legen

  • Wenn Pfad übergeben, dann in Pfad + packageName
  • Ohne Pfad, direkt neben die Source File legen
  • wenn Source File nicht in richtigem Ordner -> Warnung ausgeben

Stand

  • Beinahe abgeschlossen
  • TODO: Tests schreiben

Class files einlesen

  • Wenn Classpath übergeben
    • Suchen in Classpath + packageName
    • Müsste eigentlich UTLClassLoader automatisch machen (also packageNamen anfügen)
  • Wenn nichts übergeben
    • dann currentDirectory + packageName
  • Für die Tests muss korrekter Classpath gesetzt werden

Stand

TODO:

  • es muss überall wo im Quellcode ClassLoader.getSystemClassLoader() oder ein andere Classloader verwendet wird,
    • dieser ausgetauscht werden mit dem classLaoder, welcher bei der Instanzierung von JavaTXCompiler erstellt wird

Class files mit packageNamen versehen

  • In die Class file muss noch der korrekte name geschrieben werden
    • kann möglicherweise ASM
    • Kann ASM mittesl cw.visit("name/mit/slashe/Getrennt"..
    • wurde bereits erledigt -> TODO: Testen

Console Interface um Parameter -classpath und -output directory erweitern

TODO 11.1.20 :

  • Es muss überall, wo der URLClassloader mit einem Pfad instantiert wird, gecheckt werden, ob der Pfad mit "/" aufhört.
    • Am besten eine Hilfsmethode schreiben