Compiler in "Endlosschleife" wenn target type von Lambda Expression nicht importiert #321
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#321
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?
Wenn der Target Type einer Lambda Funktion nicht importiert ist, scheint es, dass der Compiler irgendwo festzuhängen anstatt einen Fehler auszugeben.
Beispiel
Hier wird das funktionale Interface, das die Lambda Funktion implementieren sollte (java.util.function.Predicate), nicht importiert. Dann scheint der Compiler in einem komischen, eventuell nicht terminierenden Zustand zu landen, statt einen Fehler zu werfen.
Ich glaube es liegt daran, dass hier https://gitea.hb.dhbw-stuttgart.de/JavaTX/JavaCompilerCore/src/branch/targetBytecode/src/main/java/de/dhbwstuttgart/typeinference/unify/RuleSet.java#L892
einfach ein leeres Optional zurückgegeben wird. Ich kann es leider nicht ändern weil sonst auch nicht mehr die Fälle funktionieren wo der Import vorhanden ist. Ich glaube die Typinferenz macht einfach ab einem bestimmten Punkt keinen Fortschritt mehr.
Vielleicht kann sich das mal @pl anschauen.
Also es liegt anscheinend daran, dass in den Constraints
Predicate
vorkommt, es aber nicht importiert ist. Der Compiler terminiert schon, es dauert aber leider sehr lange. Die Lösung die @pl vorgeschlagen hat, ist diese "falschen" Constraints vorher rauszufiltern. Dann sollte die Unifizierung vorher abbrechen.