Shil Sinha created GROOVY-8069:
----------------------------------

             Summary: Annotation based logging of complex expression in closure 
throws GroovyCastException when statically compiled
                 Key: GROOVY-8069
                 URL: https://issues.apache.org/jira/browse/GROOVY-8069
             Project: Groovy
          Issue Type: Bug
          Components: Static compilation
    Affects Versions: 2.4.8
            Reporter: Shil Sinha
            Assignee: Shil Sinha


Example:
{code}
@groovy.util.logging.Log
@groovy.transform.CompileStatic
class Foo {
    void bar() {
        def callable = {
            log.info('a' + 1)
        }
        callable.call()
    }
}
new Foo().bar()
{code}

The log statement in the code above results in the following runtime exception:

{code}
org.codehaus.groovy.runtime.typehandling.GroovyCastException: Cannot cast 
object 'Foo@14ec4505' with class 'Foo' to class 'java.util.logging.Logger'
{code}

The case where the closure is in a static method is similar; the object being 
cast to a Logger is a Class instead. 

This appears to be due to the implicitThis field being set incorrectly on the 
guard method call expression (log.isLoggable(Level) in the default case) 
created in implementations of LoggingStrategy.wrapLoggingMethodCall.
 
Prior to Groovy 2.4.8, log statements inside closures were not guarded 
(https://issues.apache.org/jira/browse/GROOVY-6932), so this bug wasn't 
visible. 



--
This message was sent by Atlassian JIRA
(v6.3.15#6346)

Reply via email to