ClassFormatError Nest-host class_info_index 16 has bad constant type in class file X on Java 11

See original GitHub issue

Running with OpenJDK11_b28 and Maven 3.5.4 Using powermock-module-junit4:jar:2.0.0-beta.5 See attached powermockrunnertest.zip

λ mvn dependency:tree
[INFO ] --- maven-dependency-plugin:2.8:tree (default-cli) @ powermockrunnertest ---
[INFO ] powermock:powermockrunnertest:jar:1.0-SNAPSHOT
[INFO ] +- org.powermock:powermock-module-junit4:jar:2.0.0-beta.5:test
[INFO ] |  +- org.powermock:powermock-module-junit4-common:jar:2.0.0-beta.5:test
[INFO ] |  |  +- org.powermock:powermock-reflect:jar:2.0.0-beta.5:test
[INFO ] |  |  |  +- org.objenesis:objenesis:jar:2.6:test
[INFO ] |  |  |  +- net.bytebuddy:byte-buddy:jar:1.7.5:test
[INFO ] |  |  |  \- net.bytebuddy:byte-buddy-agent:jar:1.7.5:test
[INFO ] |  |  \- org.powermock:powermock-core:jar:2.0.0-beta.5:test
[INFO ] |  |     \- org.javassist:javassist:jar:3.22.0-CR2:test
[INFO ] |  \- org.hamcrest:hamcrest-core:jar:1.3:test
[INFO ] \- junit:junit:jar:4.12:test
java.lang.ClassFormatError: Nest-host class_info_index 16 has bad constant type in class file org/example/PowerMockRunnerTest$UserWithLoginName

	at java.base/java.lang.ClassLoader.defineClass1(Native Method)
	at java.base/java.lang.ClassLoader.defineClass(ClassLoader.java:1016)
	at org.powermock.core.classloader.MockClassLoader.defineClass(MockClassLoader.java:180)
	at org.powermock.core.classloader.MockClassLoader.loadMockClass(MockClassLoader.java:176)
	at org.powermock.core.classloader.MockClassLoader.loadClassByThisClassLoader(MockClassLoader.java:102)
	at org.powermock.core.classloader.DeferSupportingClassLoader.loadClass1(DeferSupportingClassLoader.java:147)
	at org.powermock.core.classloader.DeferSupportingClassLoader.loadClass(DeferSupportingClassLoader.java:98)
	at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:521)
	at java.base/java.lang.Class.forName0(Native Method)
	at java.base/java.lang.Class.forName(Class.java:315)
	at javassist.runtime.Desc.getClassObject(Desc.java:43)
	at javassist.runtime.Desc.getClassType(Desc.java:152)
	at javassist.runtime.Desc.getType(Desc.java:122)
	at javassist.runtime.Desc.getType(Desc.java:78)
	at org.example.PowerMockRunnerTest.test(PowerMockRunnerTest.java:14)
	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.internal.runners.TestMethod.invoke(TestMethod.java:68)
	at org.powermock.modules.junit4.internal.impl.PowerMockJUnit44RunnerDelegateImpl$PowerMockJUnit44MethodRunner.runTestMethod(PowerMockJUnit44RunnerDelegateImpl.java:326)
	at org.junit.internal.runners.MethodRoadie$2.run(MethodRoadie.java:89)
	at org.junit.internal.runners.MethodRoadie.runBeforesThenTestThenAfters(MethodRoadie.java:97)
	at org.powermock.modules.junit4.internal.impl.PowerMockJUnit44RunnerDelegateImpl$PowerMockJUnit44MethodRunner.executeTest(PowerMockJUnit44RunnerDelegateImpl.java:310)
	at org.powermock.modules.junit4.internal.impl.PowerMockJUnit47RunnerDelegateImpl$PowerMockJUnit47MethodRunner.executeTestInSuper(PowerMockJUnit47RunnerDelegateImpl.java:131)
	at org.powermock.modules.junit4.internal.impl.PowerMockJUnit47RunnerDelegateImpl$PowerMockJUnit47MethodRunner.access$100(PowerMockJUnit47RunnerDelegateImpl.java:59)
	at org.powermock.modules.junit4.internal.impl.PowerMockJUnit47RunnerDelegateImpl$PowerMockJUnit47MethodRunner$TestExecutorStatement.evaluate(PowerMockJUnit47RunnerDelegateImpl.java:147)
	at org.powermock.modules.junit4.internal.impl.PowerMockJUnit47RunnerDelegateImpl$PowerMockJUnit47MethodRunner.evaluateStatement(PowerMockJUnit47RunnerDelegateImpl.java:107)
	at org.powermock.modules.junit4.internal.impl.PowerMockJUnit47RunnerDelegateImpl$PowerMockJUnit47MethodRunner.executeTest(PowerMockJUnit47RunnerDelegateImpl.java:82)
	at org.powermock.modules.junit4.internal.impl.PowerMockJUnit44RunnerDelegateImpl$PowerMockJUnit44MethodRunner.runBeforesThenTestThenAfters(PowerMockJUnit44RunnerDelegateImpl.java:298)
	at org.junit.internal.runners.MethodRoadie.runTest(MethodRoadie.java:87)
	at org.junit.internal.runners.MethodRoadie.run(MethodRoadie.java:50)
	at org.powermock.modules.junit4.internal.impl.PowerMockJUnit44RunnerDelegateImpl.invokeTestMethod(PowerMockJUnit44RunnerDelegateImpl.java:218)
	at org.powermock.modules.junit4.internal.impl.PowerMockJUnit44RunnerDelegateImpl.runMethods(PowerMockJUnit44RunnerDelegateImpl.java:160)
	at org.powermock.modules.junit4.internal.impl.PowerMockJUnit44RunnerDelegateImpl$1.run(PowerMockJUnit44RunnerDelegateImpl.java:134)
	at org.junit.internal.runners.ClassRoadie.runUnprotected(ClassRoadie.java:34)
	at org.junit.internal.runners.ClassRoadie.runProtected(ClassRoadie.java:44)
	at org.powermock.modules.junit4.internal.impl.PowerMockJUnit44RunnerDelegateImpl.run(PowerMockJUnit44RunnerDelegateImpl.java:136)
	at org.powermock.modules.junit4.common.internal.impl.JUnit4TestSuiteChunkerImpl.run(JUnit4TestSuiteChunkerImpl.java:117)
	at org.powermock.modules.junit4.common.internal.impl.AbstractCommonPowerMockRunner.run(AbstractCommonPowerMockRunner.java:57)
	at org.powermock.modules.junit4.PowerMockRunner.run(PowerMockRunner.java:59)
	at org.junit.runner.JUnitCore.run(JUnitCore.java:137)
	at com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:68)
	at com.intellij.rt.execution.junit.IdeaTestRunner$Repeater.startRunnerWithArgs(IdeaTestRunner.java:47)
	at com.intellij.rt.execution.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:242)
	at com.intellij.rt.execution.junit.JUnitStarter.main(JUnitStarter.java:70)

Next I ran the test with latest sources from powermock (https://github.com/powermock/powermock/tree/release/2.x) (powermock-module-junit4:jar:2.0.0-beta.11) which gives me the same result.

And a run with combination powermock-module-junit4:jar:2.0.0-beta.11 and org.javassist:javassist:3.24-GA (latest sources from https://github.com/jboss-javassist/javassist) gave me this:

[INFO ] --- maven-dependency-plugin:2.8:tree (default-cli) @ powermockrunnertest ---
[INFO ] powermock:powermockrunnertest:jar:1.0-SNAPSHOT
[INFO ] +- org.javassist:javassist:jar:3.24-GA:test
[INFO ] +- org.powermock:powermock-module-junit4:jar:2.0.0-beta.11:test
[INFO ] |  +- org.powermock:powermock-module-junit4-common:jar:2.0.0-beta.11:test
[INFO ] |  |  +- org.powermock:powermock-reflect:jar:2.0.0-beta.11:test
[INFO ] |  |  |  +- org.objenesis:objenesis:jar:2.6:test
[INFO ] |  |  |  +- net.bytebuddy:byte-buddy:jar:1.7.5:test
[INFO ] |  |  |  \- net.bytebuddy:byte-buddy-agent:jar:1.7.5:test
[INFO ] |  |  \- org.powermock:powermock-core:jar:2.0.0-beta.11:test
[INFO ] |  \- org.hamcrest:hamcrest-core:jar:1.3:test
[INFO ] \- junit:junit:jar:4.12:test
java.lang.IllegalStateException: Failed to transform class with name org.example.PowerMockRunnerTest$UserWithLoginName. Reason: null

	at org.powermock.core.classloader.javassist.JavassistMockClassLoader.defineAndTransformClass(JavassistMockClassLoader.java:119)
	at org.powermock.core.classloader.MockClassLoader.loadMockClass(MockClassLoader.java:174)
	at org.powermock.core.classloader.MockClassLoader.loadClassByThisClassLoader(MockClassLoader.java:102)
	at org.powermock.core.classloader.DeferSupportingClassLoader.loadClass1(DeferSupportingClassLoader.java:147)
	at org.powermock.core.classloader.DeferSupportingClassLoader.loadClass(DeferSupportingClassLoader.java:98)
	at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:521)
	at java.base/java.lang.Class.forName0(Native Method)
	at java.base/java.lang.Class.forName(Class.java:315)
	at javassist.runtime.Desc.getClassObject(Desc.java:42)
	at javassist.runtime.Desc.getClassType(Desc.java:151)
	at javassist.runtime.Desc.getType(Desc.java:121)
	at javassist.runtime.Desc.getType(Desc.java:77)
	at org.example.PowerMockRunnerTest.test(PowerMockRunnerTest.java:15)
	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.internal.runners.TestMethod.invoke(TestMethod.java:68)
	at org.powermock.modules.junit4.internal.impl.PowerMockJUnit44RunnerDelegateImpl$PowerMockJUnit44MethodRunner.runTestMethod(PowerMockJUnit44RunnerDelegateImpl.java:326)
	at org.junit.internal.runners.MethodRoadie$2.run(MethodRoadie.java:89)
	at org.junit.internal.runners.MethodRoadie.runBeforesThenTestThenAfters(MethodRoadie.java:97)
	at org.powermock.modules.junit4.internal.impl.PowerMockJUnit44RunnerDelegateImpl$PowerMockJUnit44MethodRunner.executeTest(PowerMockJUnit44RunnerDelegateImpl.java:310)
	at org.powermock.modules.junit4.internal.impl.PowerMockJUnit47RunnerDelegateImpl$PowerMockJUnit47MethodRunner.executeTestInSuper(PowerMockJUnit47RunnerDelegateImpl.java:131)
	at org.powermock.modules.junit4.internal.impl.PowerMockJUnit47RunnerDelegateImpl$PowerMockJUnit47MethodRunner.access$100(PowerMockJUnit47RunnerDelegateImpl.java:59)
	at org.powermock.modules.junit4.internal.impl.PowerMockJUnit47RunnerDelegateImpl$PowerMockJUnit47MethodRunner$TestExecutorStatement.evaluate(PowerMockJUnit47RunnerDelegateImpl.java:147)
	at org.powermock.modules.junit4.internal.impl.PowerMockJUnit47RunnerDelegateImpl$PowerMockJUnit47MethodRunner.evaluateStatement(PowerMockJUnit47RunnerDelegateImpl.java:107)
	at org.powermock.modules.junit4.internal.impl.PowerMockJUnit47RunnerDelegateImpl$PowerMockJUnit47MethodRunner.executeTest(PowerMockJUnit47RunnerDelegateImpl.java:82)
	at org.powermock.modules.junit4.internal.impl.PowerMockJUnit44RunnerDelegateImpl$PowerMockJUnit44MethodRunner.runBeforesThenTestThenAfters(PowerMockJUnit44RunnerDelegateImpl.java:298)
	at org.junit.internal.runners.MethodRoadie.runTest(MethodRoadie.java:87)
	at org.junit.internal.runners.MethodRoadie.run(MethodRoadie.java:50)
	at org.powermock.modules.junit4.internal.impl.PowerMockJUnit44RunnerDelegateImpl.invokeTestMethod(PowerMockJUnit44RunnerDelegateImpl.java:218)
	at org.powermock.modules.junit4.internal.impl.PowerMockJUnit44RunnerDelegateImpl.runMethods(PowerMockJUnit44RunnerDelegateImpl.java:160)
	at org.powermock.modules.junit4.internal.impl.PowerMockJUnit44RunnerDelegateImpl$1.run(PowerMockJUnit44RunnerDelegateImpl.java:134)
	at org.junit.internal.runners.ClassRoadie.runUnprotected(ClassRoadie.java:34)
	at org.junit.internal.runners.ClassRoadie.runProtected(ClassRoadie.java:44)
	at org.powermock.modules.junit4.internal.impl.PowerMockJUnit44RunnerDelegateImpl.run(PowerMockJUnit44RunnerDelegateImpl.java:136)
	at org.powermock.modules.junit4.common.internal.impl.JUnit4TestSuiteChunkerImpl.run(JUnit4TestSuiteChunkerImpl.java:117)
	at org.powermock.modules.junit4.common.internal.impl.AbstractCommonPowerMockRunner.run(AbstractCommonPowerMockRunner.java:57)
	at org.powermock.modules.junit4.PowerMockRunner.run(PowerMockRunner.java:59)
	at org.junit.runner.JUnitCore.run(JUnitCore.java:137)
	at com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:68)
	at com.intellij.rt.execution.junit.IdeaTestRunner$Repeater.startRunnerWithArgs(IdeaTestRunner.java:47)
	at com.intellij.rt.execution.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:242)
	at com.intellij.rt.execution.junit.JUnitStarter.main(JUnitStarter.java:70)
Caused by: java.util.ConcurrentModificationException
	at java.base/java.util.ArrayList$Itr.checkForComodification(ArrayList.java:1042)
	at java.base/java.util.ArrayList$Itr.next(ArrayList.java:996)
	at javassist.CtClassType.instrument(CtClassType.java:1540)
	at org.powermock.core.transformers.javassist.InstrumentMockTransformer.transform(InstrumentMockTransformer.java:41)
	at org.powermock.core.transformers.javassist.AbstractJavaAssistMockTransformer.transform(AbstractJavaAssistMockTransformer.java:40)
	at org.powermock.core.transformers.support.DefaultMockTransformerChain.transform(DefaultMockTransformerChain.java:43)
	at org.powermock.core.classloader.MockClassLoader.transformClass(MockClassLoader.java:184)
	at org.powermock.core.classloader.javassist.JavassistMockClassLoader.defineAndTransformClass(JavassistMockClassLoader.java:102)
	... 43 more

It seems that the second scenario is similar as the one reported in https://github.com/powermock/powermock/issues/924

Issue Analytics

  • State:closed
  • Created 5 years ago
  • Reactions:1
  • Comments:13

github_iconTop GitHub Comments

5reactions
makholincommented, Jul 30, 2020

updating javassist version to 3.27.0-GA resolves same problem

4reactions
patrickjamesbarrycommented, Feb 1, 2019

For powermock version 1.7.4, I added this dependency and it works now:

<dependency>
                <groupId>org.javassist</groupId>
                <artifactId>javassist</artifactId>
                <version>3.24.1-GA</version>
            </dependency>
Read more comments on GitHub >

github_iconTop Results From Across the Web

TeamCity 2018.2 EAP + java 11: ClassFormatError: Nest ...
TeamCity 2018.2 EAP + java 11: ClassFormatError: Nest member class_info_index has bad constant type (Maven + IntelliJ IDEA code coverage).
Read more >
ClassFormatError Nest-host class_info_index 16 has bad ...
ClassFormatError Nest-host class_info_index 16 has bad constant type in class file X on Java 11.
Read more >
PowerMock library issue when using JDK 11
ClassFormatError : Nest member class_info_index 39 has bad constant type in class file com/sample/SampleTest at java.base/java.lang.
Read more >
ClassFormatError in java 8? - Stack Overflow
Your code is valid, and the ClassFormatError is due to a bug in the Java 8 compiler. I think you have uncovered an...
Read more >
jdk/sandbox: 843695160574
(Constant NOT_IMPLEMENTED =99 "The functionality is not implemented in " "this ... subclass class_info_index %u has bad constant type in class file %s", ......
Read more >

github_iconTop Related Medium Post

No results found

github_iconTop Related StackOverflow Question

No results found

github_iconTroubleshoot Live Code

Lightrun enables developers to add logs, metrics and snapshots to live code - no restarts or redeploys required.
Start Free

github_iconTop Related Reddit Thread

No results found

github_iconTop Related Hackernoon Post

No results found

github_iconTop Related Tweet

No results found

github_iconTop Related Dev.to Post

No results found

github_iconTop Related Hashnode Post

No results found