[
https://issues.apache.org/jira/browse/GROOVY-9270?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Tommy Svensson updated GROOVY-9270:
-----------------------------------
Affects Version/s: 3.0.0-beta-3
> 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
> Time Spent: 20m
> 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
> compile 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)