{"record":{"id":"fd35cf95b91b2824","repo":"pxb1988/dex2jar","slug":"not-support-yet-fd35cf","errorCode":null,"errorMessage":"not support yet!","messagePattern":"not support yet!","errorType":"exception","errorClass":"RuntimeException","httpStatus":null,"severity":"error","filePath":"dex-translator/src/main/java/com/googlecode/d2j/converter/J2IRConverter.java","lineNumber":987,"sourceCode":"    }\n\n    static class JvmFrame extends Frame<JvmValue> {\n\n        public JvmFrame(int nLocals, int nStack) {\n            super(nLocals, nStack);\n        }\n\n        @Override\n        public void execute(AbstractInsnNode insn, Interpreter<JvmValue> interpreter) throws AnalyzerException {\n            if (insn.getType() == AbstractInsnNode.FRAME || insn.getType() == AbstractInsnNode.LINE || insn.getType() == AbstractInsnNode.LABEL) {\n                return;\n            }\n            if (insn.getOpcode() == Opcodes.RETURN) {\n                interpreter.returnOperation(insn, null, null);\n            } else if (insn.getOpcode() == Opcodes.GOTO) {\n                interpreter.unaryOperation(insn, null);\n            } else if (insn.getOpcode() == RET) {\n                throw new RuntimeException(\"not support yet!\");\n            } else {\n                super.execute(insn, interpreter);\n            }\n        }\n    }\n\n    public static class JvmValue implements Value {\n        private final int size;\n        public JvmValue parent;\n        public Set<JvmValue> otherParent;\n        Local local;\n\n        public JvmValue(int size, Local local) {\n            this.size = size;\n            this.local = local;\n        }\n\n        public JvmValue(int size) {","sourceCodeStart":969,"sourceCodeEnd":1005,"githubUrl":"https://github.com/pxb1988/dex2jar/blob/b5bda4fb4935ae8b3869b422454ae3b3896c7bc1/dex-translator/src/main/java/com/googlecode/d2j/converter/J2IRConverter.java#L969-L1005","documentation":"Thrown from J2IRConverter.JvmFrame.execute() when the analyzer encounters the JVM RET opcode during Java-to-IR conversion. RET (return from subroutine, used by pre-1.0 javac with the old jsr/ret try-finally pattern) is not modeled by the converter, so it refuses to continue rather than produce an incorrect IR.","triggerScenarios":"Converting a class file whose bytecode contains JSR/RET subroutine instructions — only produced by very old compilers (pre-Java 6 style try/finally) or hand-assembled code; modern javac inlines finally blocks and never emits RET.","commonSituations":"Translating legacy libraries compiled with ancient javac versions, or deobfuscating old Android-era jars that still contain jsr/ret, in jar-to-dex conversion.","solutions":["Recompile the offending class from source with a modern JDK (Java 6+) so jsr/ret is replaced by inlined finally blocks","Run the jar through an ASM-based ClassRemapper/jsr-inlining pass (ASM's JSRInlinerAdapter) before feeding it to dex-translator","Upgrade the class files (e.g. re-target bytecode version >= 50) to eliminate subroutines"],"exampleFix":"// before: direct conversion of legacy class\nClassReader cr = new ClassReader(bytes); cr.accept(converter, 0);\n// after: inline jsr/ret with ASM first\nClassReader cr = new ClassReader(bytes);\nClassWriter cw = new ClassWriter(cr, 0);\ncr.accept(new JSRInlinerAdapter(cw, access, name, desc, signature, exceptions), 0);\nbyte[] inlined = cw.toByteArray();","handlingStrategy":"validation","validationCode":"// Scan class files for JSR/RET before conversion\nfor (MethodNode m : classNode.methods)\n    for (AbstractInsnNode i : m.instructions)\n        if (i.getOpcode() == Opcodes.JSR || i.getOpcode() == Opcodes.RET)\n            throw new IllegalStateException(\"legacy jsr/ret: inline first\");","typeGuard":null,"tryCatchPattern":"try {\n    dexTranslator.convert(inJar, outDex);\n} catch (RuntimeException e) {\n    if (\"not support yet!\".equals(e.getMessage())) {\n        bytes = inlineJsrRetWithAsm(bytes); // JSRInlinerAdapter, then retry\n    } else throw e;\n}","preventionTips":["Compile input code with Java 6+ so jsr/ret is never emitted","Run ASM JSRInlinerAdapter over legacy jars before conversion","Watch for pre-2005 third-party libraries in dependency trees","Keep class-file versions >= 50 in build configuration"],"tags":["java","bytecode","jsr-ret","legacy-compiler"],"backgroundTag":"unsupported-operation","analyzedSha":"b5bda4fb4935ae8b3869b422454ae3b3896c7bc1","analyzedAt":"2026-09-08T00:44:01.258Z","contentChangedAt":"2026-09-08T00:44:01.258Z","schemaVersion":2},"datasetVersion":"2026-09-16T09:17:16.951Z"}