Inf.jav: Typvariable wird doppelt deklariert #90
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#90
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?
commit:
6fc70db481
Man erhält
javap Inf.class
public class Inf {
public Inf();
public <DDX, DDV, P extends DDX, N extends DDX, DDX extends DDV> void m(N, DDX, P);
}
DDX darf aber vorne nicht stehen, weil "DDX extends DDV" ebenfalls enthalten ist.
[targetBytecode]
Ich hab einfach einen weiteren Pass zu eliminateCyclesAndInfima hinzugefügt der diese doppelten bounds rausfiltert. Ich bin mir nicht sicher ob das der richtige Weg ist aber es funktioniert zumindest für diesen Fall.
Die Lösung begeistert mich nun nicht gerade.
In dem Moment wo Sie einen Upper-Bound für eine Typvariable T generieren,
müssen Sie eben den Contraint T extends Object entfernen. Alle andern
Constraints T extends T1 dürfen Sie aber nicht entfernen.
Ich hab es jetzt so geändert, dass T = Object entfernt wird wenn T < E hinzugefügt wird.
Das scheint noch nicht so ganz zu funktionieren. Ich habe das Beispiel Inf.jav noch etwas erweitert und bekomme nun Folgendes raus:
public <P extends DEA, DDX, N extends DEA, DEA extends DDY, DEA, DDY extends DDX> void m(N, DEA, P);
DEA extends DDY und DEA extends Object
Der Fehler lässt dich gerade nicht reproduzieren. Versuchen Sie es bitte mal bei sich