[jira] [Comment Edited] (GROOVY-8871) Long Constants Defined in Groovy 2.5.3 Under OpenJDK 11 Cause an IllegalAccessError

2018-11-08 Thread Paul King (JIRA)


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

Paul King edited comment on GROOVY-8871 at 11/8/18 10:13 AM:
-

This is to do with the {{targetCompatibility}} setting you have in your build 
file. Can you set that version to an earlier one while still running on JDK11? 
Also what happens when using primitive 'long'?


was (Author: paulk):
I am wondering if we are seeing the right error. Compiling and using your class 
under JDK11 and Groovy2.5.3 works fine in the GroovyConsole. I noticed in your 
build file you have sourceCompatibility and targetCompatibility set to 
JavaVersion.VERSION_11. We don't support that in 2.5.3 even though running is 
fine. What happens if you set those to JavaVersion.VERSION_1_10 but still run 
under JDK11 obviously? Also what happens when using primitive 'long'?

> Long Constants Defined in Groovy 2.5.3 Under OpenJDK 11 Cause an 
> IllegalAccessError
> ---
>
> Key: GROOVY-8871
> URL: https://issues.apache.org/jira/browse/GROOVY-8871
> Project: Groovy
>  Issue Type: Bug
>Affects Versions: 2.5.3
> Environment: OpenJDK11 on MacOSX 10.14 and Debian Linux (through 
> docker)
>Reporter: Kevin Brown
>Priority: Blocker
> Attachments: example-for-groovy-long-bug.zip
>
>
> The following groovy code:
> {code:java}
> class SomeBadClass {
>  SomeBadClass() {
>  Long a = 1_457_366_400_000L
>  }
> }
> new SomeBadClass(){code}
> causes the following exception to be thrown:
> {code:java}
> java.lang.IllegalAccessError: Update to static final field 
> com.example.SomeBadClass.$const$0 attempted from a different method 
> (__$swapInit) than the initializer method  
>at com.example.SomeBadClass.__$swapInit(SomeBadClass.groovy)
>at com.example.SomeBadClass.(SomeBadClass.groovy)
>at 
> java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native
>  Method)
>at 
> java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
>at 
> java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
>at 
> java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:490)
>at 
> org.codehaus.groovy.reflection.CachedConstructor.invoke(CachedConstructor.java:83)
>at 
> org.codehaus.groovy.runtime.callsite.ConstructorSite$ConstructorSiteNoUnwrapNoCoerce.callConstructor(ConstructorSite.java:105)
>at 
> org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCallConstructor(CallSiteArray.java:59)
>at 
> org.codehaus.groovy.runtime.callsite.AbstractCallSite.callConstructor(AbstractCallSite.java:237)
>at 
> org.codehaus.groovy.runtime.callsite.AbstractCallSite.callConstructor(AbstractCallSite.java:241)
>at 
> com.example.SomeClassFailsTest_3.testSomething(SomeClassFailsTest_3.groovy:37)
>at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native 
> Method)
>at 
> java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
>at 
> java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
>at java.base/java.lang.reflect.Method.invoke(Method.java:566)
>at 
> org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50)
>at 
> org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
>at 
> org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47)
>at 
> org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
>at 
> org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:26)
>at 
> org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:27)
>at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325)
>at 
> org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:78)
>at 
> org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:57)
>at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
>at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
>at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
>at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
>at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
>at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
>at org.junit.runners.Suite.runChild(Suite.java:128)
>at org.junit.runners.Suite.runChild(Suite.java:27)
>at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
>at 

[jira] [Comment Edited] (GROOVY-8871) Long Constants Defined in Groovy 2.5.3 Under OpenJDK 11 Cause an IllegalAccessError

2018-11-08 Thread Kevin Brown (JIRA)


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

Kevin Brown edited comment on GROOVY-8871 at 11/8/18 5:27 PM:
--

[~paulk]

When I set targetCompatibility to JavaVersion.VERSION_1_10 everything works 
fine while still running under JDK11 (both osx and linux/docker).

Using the primitive long seems to have the same behavior:

Doesn't work:
{code}
long doesntWork1 = 1_000L
long doesntWork2 = 1_457_366_400_000L
long doesntWork3 = 1_457_366_400_000
{code}

Does work:
{code}
long doesWork1 = 1_000
long doesWork2 = new Long("145736640")
{code}

Another note: if you notice creating the long from the string seems to work and 
could be a viable workaround for now (it worked in my actual code).


was (Author: silentkevin):
[~paulk]

When I set targetCompatibility to JavaVersion.VERSION_1_10 everything works 
fine while still running under JDK11 (both osx and linux/docker).

Using the primitive long seems to have the same behavior:

Doesn't work:
{code}
long doesntWork1 = 1_000L
long doesntWork2 = 1_457_366_400_000L
long doesntWork3 = 1_457_366_400_000
{code}

Does work:
{code}
long doesWork1 = 1_000
long doesWork2 = new Long("145736640")
{code}

> Long Constants Defined in Groovy 2.5.3 Under OpenJDK 11 Cause an 
> IllegalAccessError
> ---
>
> Key: GROOVY-8871
> URL: https://issues.apache.org/jira/browse/GROOVY-8871
> Project: Groovy
>  Issue Type: Bug
>Affects Versions: 2.5.3
> Environment: OpenJDK11 on MacOSX 10.14 and Debian Linux (through 
> docker)
>Reporter: Kevin Brown
>Priority: Critical
> Attachments: example-for-groovy-long-bug.zip
>
>
> The following groovy code:
> {code:java}
> class SomeBadClass {
>  SomeBadClass() {
>  Long a = 1_457_366_400_000L
>  }
> }
> new SomeBadClass(){code}
> causes the following exception to be thrown:
> {code:java}
> java.lang.IllegalAccessError: Update to static final field 
> com.example.SomeBadClass.$const$0 attempted from a different method 
> (__$swapInit) than the initializer method  
>at com.example.SomeBadClass.__$swapInit(SomeBadClass.groovy)
>at com.example.SomeBadClass.(SomeBadClass.groovy)
>at 
> java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native
>  Method)
>at 
> java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
>at 
> java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
>at 
> java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:490)
>at 
> org.codehaus.groovy.reflection.CachedConstructor.invoke(CachedConstructor.java:83)
>at 
> org.codehaus.groovy.runtime.callsite.ConstructorSite$ConstructorSiteNoUnwrapNoCoerce.callConstructor(ConstructorSite.java:105)
>at 
> org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCallConstructor(CallSiteArray.java:59)
>at 
> org.codehaus.groovy.runtime.callsite.AbstractCallSite.callConstructor(AbstractCallSite.java:237)
>at 
> org.codehaus.groovy.runtime.callsite.AbstractCallSite.callConstructor(AbstractCallSite.java:241)
>at 
> com.example.SomeClassFailsTest_3.testSomething(SomeClassFailsTest_3.groovy:37)
>at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native 
> Method)
>at 
> java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
>at 
> java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
>at java.base/java.lang.reflect.Method.invoke(Method.java:566)
>at 
> org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50)
>at 
> org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
>at 
> org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47)
>at 
> org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
>at 
> org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:26)
>at 
> org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:27)
>at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325)
>at 
> org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:78)
>at 
> org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:57)
>at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
>at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
>at