You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@groovy.apache.org by "Shil Sinha (JIRA)" <ji...@apache.org> on 2017/02/02 06:34:51 UTC
[jira] [Created] (GROOVY-8069) Annotation based logging of complex
expression in closure throws GroovyCastException when statically compiled
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)