Compiler in "Endlosschleife" wenn target type von Lambda Expression nicht importiert #321

Open
opened 2024-04-13 15:19:46 +00:00 by i21023 · 2 comments
Collaborator

Wenn der Target Type einer Lambda Funktion nicht importiert ist, scheint es, dass der Compiler irgendwo festzuhängen anstatt einen Fehler auszugeben.

Beispiel

//Bar.jav
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Stream;
import java.lang.Integer;
//import java.util.function.Predicate; 
//Predicate, wir von Stream.filter erwartet und müsste daher importiert werden

class Bar{
    public main(){
        var i = new ArrayList<Integer>(List.of(1,2,3,4,5,6,7,8,9));
        i.stream().filter(x -> x == 5);
    }
}

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.

Wenn der Target Type einer Lambda Funktion nicht importiert ist, scheint es, dass der Compiler irgendwo festzuhängen anstatt einen Fehler auszugeben. ### Beispiel ```java //Bar.jav import java.util.ArrayList; import java.util.List; import java.util.stream.Stream; import java.lang.Integer; //import java.util.function.Predicate; //Predicate, wir von Stream.filter erwartet und müsste daher importiert werden class Bar{ public main(){ var i = new ArrayList<Integer>(List.of(1,2,3,4,5,6,7,8,9)); i.stream().filter(x -> x == 5); } } ``` 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.
Owner

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.

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.
pl was assigned by dholle 2024-04-15 15:17:01 +00:00
dholle added the
Unify
confirmed
labels 2024-04-15 15:17:08 +00:00
Owner

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.

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.
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#321
No description provided.