Compilation error: JSR / RET are not supported using the computeFrames parameter

Getting this error in an IntelliJ project when compiling java files. No specific source file specified, but it does not work with this error.

Removing the following compiler flags resolves the error:

-source 1.5 -target 1.5 

However, they should be there, since we focus on Java 5. Is there any specific code (possibly a try/catch ) that causes this error?

 2013-10-15 16:21:50,556 [26947209] INFO - ompiler.BackendCompilerWrapper - JSR/RET are not supported with computeFrames option java.lang.RuntimeException: JSR/RET are not supported with computeFrames option at org.objectweb.asm.Frame.a(Unknown Source) at org.objectweb.asm.MethodWriter.visitJumpInsn(Unknown Source) at org.objectweb.asm.MethodAdapter.visitJumpInsn(Unknown Source) at org.objectweb.asm.ClassReader.accept(Unknown Source) at org.objectweb.asm.ClassReader.accept(Unknown Source) at com.intellij.compiler.impl.javaCompiler.BackendCompilerWrapper$ClassParsingThread.a(BackendCompilerWrapper.java:893) at com.intellij.compiler.impl.javaCompiler.BackendCompilerWrapper$ClassParsingThread.run(BackendCompilerWrapper.java:846) at com.intellij.openapi.application.impl.ApplicationImpl$7.run(ApplicationImpl.java:386) at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:439) at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303) at java.util.concurrent.FutureTask.run(FutureTask.java:138) at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:895) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:918) at java.lang.Thread.run(Thread.java:680) at com.intellij.openapi.application.impl.ApplicationImpl$1$1.run(ApplicationImpl.java:130) 
+6
source share
1 answer

JSR / RET commands are displayed in byte code when try / finally fragments appear in the source. Javac 1.6+ doesn't seem to highlight them even with -target 1.5, but the Eclipse java compiler does.

Example

 public class JSRDemo { public static void main(String[] args) { try { bodyOfTry(); } finally { bodyOfFinally(); } } ... 

Bytecodes

  // access flags 0x9 public static main([Ljava/lang/String;)V TRYCATCHBLOCK L0 L1 L1 null TRYCATCHBLOCK L2 L3 L1 null L0 LINENUMBER 4 L0 INVOKESTATIC JSRDemo.bodyOfTry ()V L4 LINENUMBER 5 L4 GOTO L2 L1 LINENUMBER 6 L1 ASTORE 2 JSR L5 // JSR jumps to the finally block L6 LINENUMBER 8 L6 ALOAD 2 ATHROW L5 LINENUMBER 6 L5 ASTORE 1 L7 LINENUMBER 7 L7 INVOKESTATIC JSRDemo.bodyOfFinally ()V L8 LINENUMBER 8 L8 RET 1 // RET returns from the finally block L2 JSR L5 // Jump to the same finally block from another execution path L3 LINENUMBER 9 L3 RETURN L9 LOCALVARIABLE args [Ljava/lang/String; L0 L9 0 MAXSTACK = 1 MAXLOCALS = 3 
+1
source

Source: https://habr.com/ru/post/955983/


All Articles