[
https://issues.apache.org/jira/browse/GROOVY-9270?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Daniel Sun updated GROOVY-9270:
-------------------------------
Fix Version/s: 3.0.0-rc-1
> Using "instanceof boolean" or using a Trait will cause the compiled code to
> not work with OSGi/maven-bundle-plugin/bnd
> -----------------------------------------------------------------------------------------------------------------------
>
> Key: GROOVY-9270
> URL: https://issues.apache.org/jira/browse/GROOVY-9270
> Project: Groovy
> Issue Type: Bug
> Components: class generator, Compiler
> Affects Versions: 3.0.0-beta-3
> Environment: OSX (Mojave) JDK 11.
> Reporter: Tommy Svensson
> Priority: Major
> Fix For: 3.0.0-rc-1
>
> Time Spent: 40m
> Remaining Estimate: 0h
>
> Using "instanceof boolean" or using a Trait will cause the compiled code to
> not work with OSGi/maven-bundle-plugin/bnd.
> Edited text:
> I made 2 test classes one Ok and one that bnd says has code in default
> package:
> OK:
> {{public void test(Object o) {}}
> {{ CallSite[] var2 = $getCallSiteArray();}}
> {{ if (o instanceof Boolean){ }}
> {{ var2[0].callCurrent(this, "boolean");}}
> }
> }
> Fail:
> public void test(Object o) {
> {{ CallSite[] var2 = $getCallSiteArray();}}
> {{ if (o instanceof boolean) {}}
> {{ var2[0].callCurrent(this, "boolean");}}
> }
> {{}}}
> The rest of the class is identical.
>
> These comes from decompiled .class files and thus are Java, but they were
> compiled from groovy classes. Now the question is, where do java handle
> autoboxing ? If it is the compiler then this would explain the result. The
> "boolean" is a primitive and have no package.
> If the compiler is responsible for handling this, the problem lies with
> Groovy which has clearly not boxed the "boolean" in a "Boolean".
> If its the JDK that handles autoboxing runtime then both cases should behave
> the same, which they are not.
> Bnd ([https://bnd.bndtools.org)|https://bnd.bndtools.org)/] tries to import
> from "." in the "Fail" case and reports: "The default package '.' is not
> permitted by the Import-Package syntax."
> I took these 2 test groovy files and moved them to a Java maven module,
> changed .groovy to .java, added ;, etc to make them valid java. Java will not
> compile the fail case complaining about "o instanceof boolean" no being
> valid. "Inconvertible types, cannot cast boolean to Object" is the message
> you get.
> Running the "if(o instanceof booelan)" code that Groovy have happily
> compiled, results in: java.lang.NoClassDefFoundError: boolean
> I think that Groovy should report the same compilation error, rather than
> accept something clearly incorrect and fail runtime.
> Even with @CompileStatic and @TypeChecked annotations Groovy compiles the
> code without errors.
>
--
This message was sent by Atlassian Jira
(v8.3.4#803005)