Primitiver Typ wird bei super() call nicht substituiert #328
Labels
No Label
Codegen
confirmed
duplicate
Eclipse-Plugin
Feature Request
generics
in progress
invalid
JavaCompilerCore
needs info
Parser
Trash
Type
Unify
won't fix
works for me
No Milestone
No project
No Assignees
3 Participants
Notifications
Due Date
No due date set.
Dependencies
No dependencies set.
Reference: JavaTX/JavaCompilerCore#328
Loading…
Reference in New Issue
Block a user
No description provided.
Delete Branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Analog zu #294
Beispiel im Anhang.
Bytecode vom Standardkonstruktor von Sub sieht folgendermaßen aus:
Hier wird also der Superkonstruktor mit java.lang.Integer aufgerufen, erwartet wird aber int
@pl Ich glaube die signature constraints werden nie ausgewertet. Ich generiere die hier:
71dfe5d9e1
lost das Problemsrc/main/java/de/dhbwstuttgart/typeinference/unify/TypeUnifyTask.java
in der Methode copute wurden die methodSignatureConstraints der bereits zu Beginn
aufegloesten einer Oder Constraints in die Methodconstraints der Unifikation geschrieben
Elementtyp der linken Seiten der methodSignatureConstraints wurden von RefTypeOrTPHOrWildcardOrGeneric auf
TypePlaceholder geaendert, weil dort nur TypePlaceholder geaendert.
src/main/java/de/dhbwstuttgart/parser/SyntaxTreeGenerator/SyntaxTreeGenerator.java
in der Methode prepareBlock wurde der Typ des Rückgabewerts des supercalls von Void auf eine
Freshtpevar gesetzt.
src/main/java/de/dhbwstuttgart/typeinference/unify/TypeUnifyTask.java
in der unify2-Methode wurde am Ende der Aufruf der Substitution nach Hinzufuegen der
Methodconstraints auskommentiert -> hat zu nicht geloesten Constraints gefuehrt.
Das Problem besteht weiterhin
hierzu folgendes Beispiel:
Datei Super.java
Datei Sub.jav
Der Bytecode (decompiled) von Sub.jav sieht nachher so aus:
Es für den Parameter a wird also java.lang.Integer statt int inferiert.