Records landen doppelt in den verfügbaren Klassen. #342

Closed
opened 2024-08-01 14:33:37 +00:00 by RubenKraft · 2 comments
Collaborator

In der Klasse TYPEStmt gibt es das Feld info vom Typ TypeInferenceBlockInformation. Dieses Feld enthält neben anderen Informationen auch alle bekannten Klassen.

Bei meinen Tests mit Records ist mir aufgefallen, dass die Record-Klassen doppelt in der Liste availableClasses vorkommen. (siehe Screenshot) Sowohl die Felder als auch die Namen sind identisch. Bei allen anderen Klassen ist dies nicht der Fall.

image

Dies ist höchstwahrscheinlich ein Bug, der sich negativ auf die Laufzeit auswirken kann.

Steps to Reproduce:

Um den Fehler zu reproduzieren, können folgende Schritte befolgt werden:

  1. Auf die Branch patternMatching wechseln.
  2. Den Test testSwitchInfered ausführen.
  3. Einen Breakpoint in Zeile 868 oder 867 setzen. (IntelliJ zeigt Variablen in der Debug-Variablen-Liste erst nach initialisierung an, daher macht ein Breakpoint in Zeile 868 mehr Sinn)
  4. Inspektiere die Variable allClasses, die die Liste der Klassen enthält.
In der Klasse TYPEStmt gibt es das Feld info vom Typ TypeInferenceBlockInformation. Dieses Feld enthält neben anderen Informationen auch alle bekannten Klassen. Bei meinen Tests mit Records ist mir aufgefallen, dass die Record-Klassen doppelt in der Liste `availableClasses` vorkommen. (siehe Screenshot) Sowohl die Felder als auch die Namen sind identisch. Bei allen anderen Klassen ist dies nicht der Fall. <img width="275" alt="image" src="attachments/85047a35-dac9-4a42-b4a5-3851f0edb831"> Dies ist höchstwahrscheinlich ein Bug, der sich negativ auf die Laufzeit auswirken kann. ## Steps to Reproduce: Um den Fehler zu reproduzieren, können folgende Schritte befolgt werden: 1. Auf die Branch patternMatching wechseln. 2. Den Test `testSwitchInfered` ausführen. 3. Einen Breakpoint in Zeile 868 oder 867 setzen. (IntelliJ zeigt Variablen in der Debug-Variablen-Liste erst nach initialisierung an, daher macht ein Breakpoint in Zeile 868 mehr Sinn) 4. Inspektiere die Variable `allClasses`, die die Liste der Klassen enthält.
RubenKraft added the
Parser
label 2024-08-01 14:33:37 +00:00
Owner

Sollte in 7785c2d0aa gefixt sein. Konnte es leider nicht testen wegen dem hier:

try (FileOutputStream fos = new FileOutputStream("C:\\Users\\ruben\\Desktop\\asd\\test.class")) {

Sollte in 7785c2d0aa gefixt sein. Konnte es leider nicht testen wegen dem hier: https://gitea.hb.dhbw-stuttgart.de/JavaTX/JavaCompilerCore/src/commit/cc8f36d3ecfc87f5c909b428c67ed1c6ae83b5a9/src/test/java/targetast/TestCodegen.java#L87
Author
Collaborator

ah, sorry, das hatte ich noch zum Debuggen drin.
Ich teste das nachher kurz.

Falls alles passt schließe ich den Issue dann.

ah, sorry, das hatte ich noch zum Debuggen drin. Ich teste das nachher kurz. Falls alles passt schließe ich den Issue dann.
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#342
No description provided.