IllegalAccessError in $jacocoInit using Java 9

392 views
Skip to first unread message

awilk...@pivotal.io

unread,
Jul 26, 2016, 8:47:15 AM7/26/16
to JaCoCo and EclEmma Users
I realise I'm right on the bleeding edge, but hope this may be useful in getting Jacoco ready for Java 9.

I'm trying to use Jacoco (0.7.7.201606060606) with Java 9 (9-ea+128) and every test is failing with an IllegalAccessError thrown from $jacocoInit. Each exception looks like this:

java.lang.IllegalAccessError: Update to static final field org.springframework.restdocs.RestDocumentationGeneratorTests.$jacocoData attempted from a different method (org.springframework.restdocs.RestDocumentationGeneratorTests) than the initializer method <clinit>
at org.springframework.restdocs.RestDocumentationGeneratorTests.$jacocoInit(RestDocumentationGeneratorTests.java)
at org.springframework.restdocs.RestDocumentationGeneratorTests.<init>(RestDocumentationGeneratorTests.java)
at jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(java.base@9-ea/Native Method)
at jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(java.base@9-ea/NativeConstructorAccessorImpl.java:62)
at jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(java.base@9-ea/DelegatingConstructorAccessorImpl.java:45)
at java.lang.reflect.Constructor.newInstance(java.base@9-ea/Constructor.java:453)
at org.junit.runners.BlockJUnit4ClassRunner.createTest(BlockJUnit4ClassRunner.java:217)
at org.junit.runners.BlockJUnit4ClassRunner$1.runReflectiveCall(BlockJUnit4ClassRunner.java:266)
at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
at org.junit.runners.BlockJUnit4ClassRunner.methodBlock(BlockJUnit4ClassRunner.java:263)
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.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecuter.runTestClass(JUnitTestClassExecuter.java:114)
at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecuter.execute(JUnitTestClassExecuter.java:57)
at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassProcessor.processTestClass(JUnitTestClassProcessor.java:66)
at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.processTestClass(SuiteTestClassProcessor.java:51)
at jdk.internal.reflect.GeneratedMethodAccessor6.invoke(Unknown Source)
at jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(java.base@9-ea/DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(java.base@9-ea/Method.java:533)
at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:35)
at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24)
at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:32)
at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:93)
at com.sun.proxy.$Proxy2.processTestClass(Unknown Source)
at org.gradle.api.internal.tasks.testing.worker.TestWorker.processTestClass(TestWorker.java:109)
at jdk.internal.reflect.GeneratedMethodAccessor5.invoke(Unknown Source)
at jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(java.base@9-ea/DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(java.base@9-ea/Method.java:533)
at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:35)
at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24)
at org.gradle.internal.remote.internal.hub.MessageHub$Handler.run(MessageHub.java:377)
at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:54)
at org.gradle.internal.concurrent.StoppableExecutorImpl$1.run(StoppableExecutorImpl.java:40)
at java.util.concurrent.ThreadPoolExecutor.runWorker(java.base@9-ea/ThreadPoolExecutor.java:1158)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(java.base@9-ea/ThreadPoolExecutor.java:632)
at java.lang.Thread.run(java.base@9-ea/Thread.java:843)

The project is OSS and, if it would be useful, I could push a branch that recreates the problem.

Thanks,
Andy

Evgeny Mandrikov

unread,
Jul 26, 2016, 9:19:17 AM7/26/16
to JaCoCo and EclEmma Users, awilk...@pivotal.io
Hi Andy,

First of all - thank you for your report.

JaCoCo project participating in https://wiki.openjdk.java.net/display/quality/Quality+Outreach constantly testing JaCoCo on latest builds of JDK 9.
And you are right - tests with b128 are currently failing ( https://travis-ci.org/jacoco/jacoco/jobs/142424723 ) and we are investigating what happened in comparison to previously tested b120 ( https://travis-ci.org/jacoco/jacoco/jobs/137605309 ).

bjk...@gmail.com

unread,
Jul 26, 2016, 11:01:52 AM7/26/16
to JaCoCo and EclEmma Users, awilk...@pivotal.io
https://bugs.openjdk.java.net/browse/JDK-8157181 was included in b127 (http://download.java.net/java/jdk9/changes/jdk-9+127.html). I guess InstrSupport.DATAFIELD_INTF_ACC should not include ACC_FINAL?

Evgeny Mandrikov

unread,
Jul 26, 2016, 11:08:08 AM7/26/16
to JaCoCo and EclEmma Users, awilk...@pivotal.io, bjk...@gmail.com
Nice catch Brett! I come across the same issue and to the same conclusion.

Evgeny Mandrikov

unread,
Jul 28, 2016, 12:05:33 PM7/28/16
to JaCoCo and EclEmma Users, awilk...@pivotal.io, bjk...@gmail.com
For the record: Unfortunately this is a bit more complex than just removal of "final" - all the details are in https://github.com/jacoco/jacoco/pull/434
Anyway ticket was created and work on this subject started.
Thanks all.
Reply all
Reply to author
Forward
This conversation is locked
You cannot reply and perform actions on locked conversations.
0 new messages