{"record":{"id":"149d082c437024b2","repo":"skylot/jadx","slug":"failed-to-process-class-cls-getfullname","errorCode":null,"errorMessage":"Failed to process class: ${cls.getFullName()}","messagePattern":"Failed to process class: (.+?)","errorType":"exception","errorClass":"JadxRuntimeException","httpStatus":null,"severity":"error","filePath":"jadx-core/src/main/java/jadx/core/ProcessClass.java","lineNumber":149,"sourceCode":"\t\t\treturn code;\n\t\t} catch (StackOverflowError | Exception e) {\n\t\t\tthrow new JadxRuntimeException(\"Failed to generate code for class: \" + cls.getFullName(), e);\n\t\t}\n\t}\n\n\t/**\n\t * Load and process class without its deps\n\t */\n\tpublic void forceProcess(ClassNode cls) {\n\t\tClassNode topParentClass = cls.getTopParentClass();\n\t\tif (topParentClass != cls) {\n\t\t\tforceProcess(topParentClass);\n\t\t\treturn;\n\t\t}\n\t\ttry {\n\t\t\tprocess(cls, false);\n\t\t} catch (StackOverflowError | Exception e) {\n\t\t\tthrow new JadxRuntimeException(\"Failed to process class: \" + cls.getFullName(), e);\n\t\t}\n\t}\n\n\t/**\n\t * Generate code for class without processing its deps\n\t */\n\tpublic @Nullable ICodeInfo forceGenerateCode(ClassNode cls) {\n\t\ttry {\n\t\t\treturn process(cls, true);\n\t\t} catch (StackOverflowError | Exception e) {\n\t\t\tthrow new JadxRuntimeException(\"Failed to generate code for class: \" + cls.getFullName(), e);\n\t\t}\n\t}\n\n\tprivate final Map<DecompilationMode, ProcessClass> modesMap = new EnumMap<>(DecompilationMode.class);\n\n\tpublic @Nullable ICodeInfo forceGenerateCodeForMode(ClassNode cls, DecompilationMode mode) {\n\t\tsynchronized (modesMap) {","sourceCodeStart":131,"sourceCodeEnd":167,"githubUrl":"https://github.com/skylot/jadx/blob/e738a26571d02919f01df40de93bc9a44dee4e18/jadx-core/src/main/java/jadx/core/ProcessClass.java#L131-L167","documentation":"Thrown by ProcessClass.forceProcess when an exception or StackOverflowError occurs during class processing (running visitor passes) without generating code. forceProcess is used to load and run passes on a class directly, bypassing dependency resolution. Jadx wraps the cause in a JadxRuntimeException with the class's full name.","triggerScenarios":"Calling forceProcess(cls) where processing the top-parent class through its visitor passes throws. The method first delegates to the top-parent class via getTopParentClass(), then runs process(cls, false). Any exception during pass execution (DepthTraversal.visit) is caught and rewrapped. Typical causes are bytecode-level issues in specific passes or StackOverflowError.","commonSituations":"Programmatic API usage that pre-processes classes before code generation. Internal jadx operations that need a class loaded but not decompiled. Obfuscated inputs that trigger bugs in earlier visitor passes (before code generation is reached).","solutions":["Inspect getCause() on the thrown JadxRuntimeException to find the specific visitor pass that failed.","If this is a programmatic workflow, skip the failing class and continue with others rather than aborting the whole batch.","Try the class with a reduced set of passes or a different decompilation mode if the API path supports it.","Report the class and cause as a jadx issue if it reproduces on the latest version."],"exampleFix":null,"handlingStrategy":"try-catch","validationCode":null,"typeGuard":null,"tryCatchPattern":"try {\n    processClass.forceProcess(cls);\n} catch (JadxRuntimeException e) {\n    LOG.warn(\"Failed to process class {}: {}\", cls.getFullName(), e.getCause().getMessage());\n    // skip this class, continue with others\n}","preventionTips":["Wrap forceProcess calls in try-catch when batch-processing to avoid aborting on a single class.","Log the cause exception, not just the wrapper, to identify the failing visitor pass.","Prefer generateCode (with dependency handling) over forceProcess for normal workflows — forceProcess is for advanced use."],"tags":["decompiler","class-processing","core"],"backgroundTag":null,"analyzedSha":"e738a26571d02919f01df40de93bc9a44dee4e18","analyzedAt":"2026-08-14T00:10:24.238Z","schemaVersion":2},"datasetVersion":"2026-08-14T05:17:29.042Z"}