Doppelte Code Generierung und doppelte Typinferenz bei Field-Initialisierung #203

Open
opened 2018-11-26 10:48:57 +00:00 by pl · 3 comments
Owner

ClassOrInterface.java:

Einfuegen eines Attributes

private Optional fieldInitializations;

Hierin werden alle Initialisierungen als Block:
{
f1 = exp_1
f2 = exp_2
...
fn = exp_n
}

in einem Konstruktor Constructor.java gespeichert.

SyntaxTreeGenerator.java, Construtor.java:

In der Methode convert(int modifiers, Java8Parser.MethodHeaderContext header, Java8Parser.MethodBodyContext body, JavaClassName parentClass, RefType superClass, GenericsRegistry localGenerics)

wurde das Argument fieldInitializations aus dem Aufruf des Konstruktor Constructor entfernt.

Damit sind die fieldInitializations nicht mehr in den Konstruktoren der abstrakten Syntax enthalten.

TYPE.java:

In getConstraintsClass wird die Methode getConstraintsConstructor für den Konstruktur der Initialisierungen aufgerufen, um die Type-Constraints der Initialierungen zu bestimmen.

ClassOrInterface.java: Einfuegen eines Attributes private Optional<Constructor> fieldInitializations; Hierin werden alle Initialisierungen als Block: { f1 = exp_1 f2 = exp_2 ... fn = exp_n } in einem Konstruktor Constructor.java gespeichert. SyntaxTreeGenerator.java, Construtor.java: In der Methode convert(int modifiers, Java8Parser.MethodHeaderContext header, Java8Parser.MethodBodyContext body, JavaClassName parentClass, RefType superClass, GenericsRegistry localGenerics) wurde das Argument fieldInitializations aus dem Aufruf des Konstruktor Constructor entfernt. Damit sind die fieldInitializations nicht mehr in den Konstruktoren der abstrakten Syntax enthalten. TYPE.java: In getConstraintsClass wird die Methode getConstraintsConstructor für den Konstruktur der Initialisierungen aufgerufen, um die Type-Constraints der Initialierungen zu bestimmen.
Author
Owner

Nun muss noch die Bytecode-Generierung an die Veränderung angepasst werden:

  • Für den Konstruktor fieldInitializations muss der Bytecode einmal erzeugt werden
  • Dieser Bytecode muss in jeden Konstruktor eingefügt werden.
Nun muss noch die Bytecode-Generierung an die Veränderung angepasst werden: - Für den Konstruktor fieldInitializations muss der Bytecode einmal erzeugt werden - Dieser Bytecode muss in jeden Konstruktor eingefügt werden.

In fieldInitializations werden nicht nur die Initialisierungen gespeichert sondern auch SuperCalls.

SuperCalls müssen von fieldInitializations entfernt werden.

In fieldInitializations werden nicht nur die Initialisierungen gespeichert sondern auch SuperCalls. SuperCalls müssen von fieldInitializations entfernt werden.
Author
Owner

branch: bytecode2
commit: 964b73e8c4

Ich habe nun die SuperCalls aus den fieldInitializations entfernt.
Zusätzlich habe ich noch die SuperCalls aus allen Constructoren entfernt.

Diese Müssen nun bei der Bytecodegenerierung eingefügt werden, obwohl sie nicht in der abstrakten Syntax stehen.

Im Momnet funktionieren daher alle Unittest nicht.

branch: bytecode2 commit: 964b73e8c4728faa7b8439b5847ca044f2cb200c Ich habe nun die SuperCalls aus den fieldInitializations entfernt. Zusätzlich habe ich noch die SuperCalls aus allen Constructoren entfernt. Diese Müssen nun bei der Bytecodegenerierung eingefügt werden, obwohl sie nicht in der abstrakten Syntax stehen. Im Momnet funktionieren daher alle Unittest nicht.
Sign in to join this conversation.
No Milestone
No project
No Assignees
2 Participants
Notifications
Due Date
The due date is invalid or out of range. Please use the format 'yyyy-mm-dd'.

No due date set.

Dependencies

No dependencies set.

Reference: JavaTX/JavaCompilerCore#203
No description provided.