[ 
https://issues.apache.org/jira/browse/GROOVY-11079?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17729466#comment-17729466
 ] 

Eric Milles commented on GROOVY-11079:
--------------------------------------

Thanks for sending the extra information.  I am able to recreate like this:
{code:groovy}
@Grab('io.vavr:vavr:0.10.4')
import io.vavr.control.Try
import io.vavr.Tuple2

Map<String,Object> getSpec() { [:] }

Try<Tuple2<String,Object>> tuple() {
  Try.success( new Tuple2("",null) )
}

@CompileStatic // GROOVY-11079
void test(List list) {
  list.forEach {
    def map = getSpec()
    tuple().onSuccess {
      map.foo = it._1
    }
  //.map(Tuple2::_2)
  }
}

test( [null] )
{code}

> GroovyCastException on closure implementing Consumer
> ----------------------------------------------------
>
>                 Key: GROOVY-11079
>                 URL: https://issues.apache.org/jira/browse/GROOVY-11079
>             Project: Groovy
>          Issue Type: Bug
>          Components: Static compilation
>    Affects Versions: 4.0.12
>            Reporter: Christopher Smith
>            Assignee: Eric Milles
>            Priority: Major
>
> I'm having trouble making a minimal repro for this one, but here's the actual 
> code. Libraries are PDFBox (PDDocument) and Vavr. The bytecode problem seems 
> to be that although 31 pushes {{null}} onto the stack, it's popped before 
> being cast to {{Void}}, leaving the {{String}} on top. Shouldn't these be 
> reversed?
> {code}
> loadOriginal(ep.payload)
>   .onSuccess { sps.envelope.filename = it._1 }  // exception thrown at the 
> end of this closure
>   .<PDDocument> map(Tuple2::_2)
> {code}
> {code}
> org.codehaus.groovy.runtime.typehandling.GroovyCastException: Cannot cast 
> object 'dummy.pdf' with class 'java.lang.String' to class 'java.lang.Void'
>       at 
> org.codehaus.groovy.runtime.typehandling.DefaultTypeTransformation.continueCastOnSAM(DefaultTypeTransformation.java:424)
>       at 
> org.codehaus.groovy.runtime.typehandling.DefaultTypeTransformation.continueCastOnNumber(DefaultTypeTransformation.java:335)
>       at 
> org.codehaus.groovy.runtime.typehandling.DefaultTypeTransformation.castToType(DefaultTypeTransformation.java:255)
>       at 
> org.codehaus.groovy.vmplugin.v8.IndyInterface.fromCache(IndyInterface.java:321)
>       at 
> com.example.EsignFinisherImpl$_notifySignatureApplied_closure2$_closure11.doCall(EsignFinisherImpl.groovy:70)
> {code}
> {code}
>   public java.lang.Void doCall(java.lang.Object);
>     descriptor: (Ljava/lang/Object;)Ljava/lang/Void;
>     flags: (0x0001) ACC_PUBLIC
>     Code:
>       stack=3, locals=3, args_size=2
>          0: aload_1
>          1: checkcast     #35                 // class io/vavr/Tuple2
>          4: getfield      #38                 // Field 
> io/vavr/Tuple2._1:Ljava/lang/Object;
>          7: dup
>          8: astore_2
>          9: aload_0
>         10: getfield      #27                 // Field 
> sps:Lgroovy/lang/Reference;
>         13: invokevirtual #44                 // Method 
> groovy/lang/Reference.get:()Ljava/lang/Object;
>         16: checkcast     #46                 // class SignaturePageSpec
>         19: invokevirtual #50                 // Method 
> SignaturePageSpec.getEnvelope:()LSignaturePageSpec$Envelope;
>         22: aload_2
>         23: invokedynamic #64,  0             // InvokeDynamic 
> #0:cast:(Ljava/lang/Object;)Ljava/lang/String;
>         28: invokevirtual #70                 // Method 
> SignaturePageSpec$Envelope.setFilename:(Ljava/lang/String;)V
>         31: aconst_null
>         32: pop
>         33: invokedynamic #72,  0             // InvokeDynamic 
> #0:cast:(Ljava/lang/Object;)Ljava/lang/Void;
>         38: areturn
> {code}



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to