ebean-orm / ebean-agent

Enhancer Agent for EbeanORM
Apache License 2.0
12 stars 13 forks source link

java.lang.IllegalArgumentException: JSR/RET are not supported with computeFrames option #130

Closed rbygrave closed 4 years ago

rbygrave commented 4 years ago
java.lang.IllegalArgumentException: JSR/RET are not supported with computeFrames option
    at io.ebean.enhance.asm.Frame.execute(Frame.java:1023)
    at io.ebean.enhance.asm.MethodWriter.visitJumpInsn(MethodWriter.java:1142)
    at io.ebean.enhance.asm.MethodVisitor.visitJumpInsn(MethodVisitor.java:467)
    at io.ebean.enhance.asm.ClassReader.readCode(ClassReader.java:2048)
    at io.ebean.enhance.asm.ClassReader.readMethod(ClassReader.java:1283)
    at io.ebean.enhance.asm.ClassReader.accept(ClassReader.java:688)
    at io.ebean.enhance.asm.ClassReader.accept(ClassReader.java:400)
    at io.ebean.enhance.Transformer.enhanceQueryBean(Transformer.java:343)
    at io.ebean.enhance.Transformer.transform(Transformer.java:186)
    at sun.instrument.TransformerManager.transform(TransformerManager.java:188)
    at sun.instrument.InstrumentationImpl.transform(InstrumentationImpl.java:428)
    at java.lang.ClassLoader.defineClass1(Native Method)
    at java.lang.ClassLoader.defineClass(ClassLoader.java:763)
    at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
    at java.net.URLClassLoader.defineClass(URLClassLoader.java:468)
    at java.net.URLClassLoader.access$100(URLClassLoader.java:74)
    at java.net.URLClassLoader$1.run(URLClassLoader.java:369)
    at java.net.URLClassLoader$1.run(URLClassLoader.java:363)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:362)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:349)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
    at java.lang.Class.forName0(Native Method)
    at java.lang.Class.forName(Class.java:264)
    at org.testng.internal.Dynamic.hasBsh(Dynamic.java:10)
    at org.testng.internal.XmlMethodSelector.<init>(XmlMethodSelector.java:40)
    at org.testng.TestRunner.<init>(TestRunner.java:111)
    at org.testng.SuiteRunner$DefaultTestRunnerFactory.newTestRunner(SuiteRunner.java:556)
    at org.testng.SuiteRunner.init(SuiteRunner.java:168)
    at org.testng.SuiteRunner.<init>(SuiteRunner.java:117)

Just started getting this when running a test via the IDE - I think it's related to intellij update and the shell plugin (the bsh/Interpreter class) .

The issue is when the querybean enhancement is reading the bsh/Interpreter. The fix is to ignore that class as part of enhancement.

awestwell commented 4 years ago

I am getting a similar error in IntelliJ Ultimate 2019.3 I am using the latest ebean enhancement plugin

java.lang.IllegalArgumentException: JSR/RET are not supported with computeFrames option at io.ebean.enhance.asm.Frame.execute(Frame.java:1017) at io.ebean.enhance.asm.MethodWriter.visitJumpInsn(MethodWriter.java:1145) at io.ebean.enhance.asm.MethodVisitor.visitJumpInsn(MethodVisitor.java:477) at io.ebean.enhance.asm.commons.AdviceAdapter.visitJumpInsn(AdviceAdapter.java:505) at io.ebean.enhance.asm.ClassReader.readCode(ClassReader.java:2253) at io.ebean.enhance.asm.ClassReader.readMethod(ClassReader.java:1488) at io.ebean.enhance.asm.ClassReader.accept(ClassReader.java:718) at io.ebean.enhance.asm.ClassReader.accept(ClassReader.java:401) at io.ebean.enhance.Transformer.transactionalEnhancement(Transformer.java:304) at io.ebean.enhance.Transformer.enhanceEntityAndTransactional(Transformer.java:235) at io.ebean.enhance.Transformer.transform(Transformer.java:183) at java.instrument/java.lang.instrument.ClassFileTransformer.transform(ClassFileTransformer.java:246) at java.instrument/sun.instrument.TransformerManager.transform(TransformerManager.java:188) at java.instrument/sun.instrument.InstrumentationImpl.transform(InstrumentationImpl.java:563) at java.base/java.lang.ClassLoader.defineClass1(Native Method) at java.base/java.lang.ClassLoader.defineClass(ClassLoader.java:1016) at java.base/java.security.SecureClassLoader.defineClass(SecureClassLoader.java:174) at java.base/jdk.internal.loader.BuiltinClassLoader.defineClass(BuiltinClassLoader.java:800) at java.base/jdk.internal.loader.BuiltinClassLoader.findClassOnClassPathOrNull(BuiltinClassLoader.java:698) at java.base/jdk.internal.loader.BuiltinClassLoader.loadClassOrNull(BuiltinClassLoader.java:621) at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:579) at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:178) at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:521) at com.stevesoft.pat.Regex.mkMulti(Regex.java:1126) at com.stevesoft.pat.Regex.addMulti(Regex.java:1120) at com.stevesoft.pat.Regex.compile1(Regex.java:1002) at com.stevesoft.pat.Regex._compile(Regex.java:1079) at com.stevesoft.pat.Regex._compile(Regex.java:1070) at com.stevesoft.pat.Regex.compile(Regex.java:480) at com.stevesoft.pat.Regex.(Regex.java:295) at org.rythmengine.internal.parser.build_in.ExtendsParser.(ExtendsParser.java:83) 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.rythmengine.internal.dialect.DialectBase.registerBuildInParsers(DialectBase.java:49) at org.rythmengine.internal.dialect.DialectBase.(DialectBase.java:20) at org.rythmengine.internal.dialect.Rythm.(Rythm.java:21) at org.rythmengine.internal.dialect.Rythm.(Rythm.java:19) at org.rythmengine.internal.dialect.DialectManager.(DialectManager.java:20) at org.rythmengine.RythmEngine.(RythmEngine.java:296) at io.appvision.commons.rythm.core.RythmEngineFactory.engine(RythmEngineFactory.java:32)

rbygrave commented 4 years ago

Thanks @awestwell - I have logged this as https://github.com/ebean-orm/ebean-agent/issues/151 ... should be able to fix by moving the catch for this exception to a higher/broader level.

That is this 130 change fixed this for Transformer.enhanceQueryBean() but not Transformer.enhanceEntityAndTransactional() so with 151 we should move the associated catch block to catch both cases.

The underlying issue is that some byte code being read has this invalid state (like the bsh/Interpreter class)

rbygrave commented 4 years ago

Hi @awestwell , I have published an update IntelliJ plugin to Jetbrains. It usually takes a couple of days for them to approve and then it should be available. Cheers, Rob.