Uploaded image for project: 'Groovy'
  1. Groovy
  2. GROOVY-9762

Wrong type resolved if method reference used with typed method

    XMLWordPrintableJSON

Details

    • Bug
    • Status: Closed
    • Minor
    • Resolution: Fixed
    • 3.0.5
    • 3.0.7, 4.0.0-alpha-2, 2.5.19
    • Compiler
    • 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

          Activity

            People

              emilles Eric Milles
              szpak Marcin Zajaczkowski
              Votes:
              0 Vote for this issue
              Watchers:
              3 Start watching this issue

              Dates

                Created:
                Updated:
                Resolved:

                Time Tracking

                  Estimated:
                  Original Estimate - Not Specified
                  Not Specified
                  Remaining:
                  Remaining Estimate - 0h
                  0h
                  Logged:
                  Time Spent - 0.5h
                  0.5h