Details
-
Bug
-
Status: Closed
-
Minor
-
Resolution: Fixed
-
3.0.5
-
None
Description
I've encountered a problem with type checking if a method reference is used.
In following (stripped down from the original production case) code in the line with the error variable the following error is reported:
> Task :compileTestGroovy startup failed: /home/foobar.../MethodReferenceProblemWithType.groovy: 15: [Static type checking] - Cannot assign value of type java.lang.Object to variable of type java.util.List <Integer> @ line 15, column 31. List<Integer> error = opt.map(this::just).get()
@CompileStatic class MethodReferenceProblemWithType { static void reproduce() { Optional<Integer> opt = Optional.ofNullable(Integer.valueOf(1)) List<Integer> ok = opt.map(o -> just(o)).get() //ok List<Integer> error = opt.map(this::just).get() //problem } private static <T> List<T> just(T data) { return new ArrayList<T>(); } }
If `@CompileStatic` is removed, I still see a type incompatibility warning in Idea. Switching to lambda is a workaround, therefore it's just a minor glitch. Tested with Groovy 3.0.5.
Attachments
Issue Links
- is related to
-
GROOVY-7992 Sort methods that accept a comparator should accept Comparator<? super T> (fix type checker ability to cope with super in DGM methods)
- Closed