Id.jav falscher MethodType #175
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
2 Participants
Notifications
Due Date
No due date set.
Dependencies
No dependencies set.
Reference: JavaTX/JavaCompilerCore#175
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?
javap -v Id.class liefert
...
#15 = MethodType #8 // (-Ljava/lang/Integer;)Ljava/lang/Integer;
...
Das "-" bei (-Ljava/lang/Integer;)Ljava/lang/Integer
dürfte falsch sein.
Im unifizierten ResultSet steht:
(TPH ABH = java.lang.Integer),
(TPH B = java.lang.Integer),
(TPH ABG = Fun1< ? extends TPH ABH, ? super TPH B >),
Problem teilweise gelöst.
In der Angabe des MethodenTyps des LambdaAusdrucks für die InvokeDynamic Instruktion werden keine WildcardTypen verwendet. Typ wird somit zu:
(Ljava/lang/Integer;)Ljava/lang/Integer
Dennoch ist die Typisierung des Lambda-Ausdrucks streng genommen nicht korrekt.
Beispiel:
op = (Integer x)->x;
Der Typinferenzalgorithmus berechnet den allgemeinsten Typ für das Feld op:
Fun1<? extends Integer, ? super Integer>
Dies ist allerdings nicht der Typ des Lambda-Ausdrucks, welcher schlicht:
(Ljava/lang/Integer;)Ljava/lang/Integer ist.
OLD BUG