{"record":{"id":"44935481b36a4a57","repo":"skylot/jadx","slug":"not-yet-supported","errorCode":null,"errorMessage":"Not yet supported","messagePattern":"Not yet supported","errorType":"exception","errorClass":"JadxRuntimeException","httpStatus":null,"severity":"warning","filePath":"jadx-core/src/main/java/jadx/core/dex/instructions/invokedynamic/CustomLambdaCall.java","lineNumber":57,"sourceCode":"\t\tif (mthRef.getType() != EncodedType.ENCODED_METHOD_HANDLE) {\n\t\t\treturn false;\n\t\t}\n\t\tIMethodHandle methodHandle = (IMethodHandle) mthRef.getValue();\n\t\tif (methodHandle.getType() != MethodHandleType.INVOKE_STATIC) {\n\t\t\treturn false;\n\t\t}\n\t\tIMethodRef methodRef = methodHandle.getMethodRef();\n\t\tif (!methodRef.getParentClassType().equals(\"Ljava/lang/invoke/LambdaMetafactory;\")) {\n\t\t\treturn false;\n\t\t}\n\t\tString mthName = methodRef.getName();\n\t\treturn mthName.equals(\"metafactory\") || mthName.equals(\"altMetafactory\");\n\t}\n\n\tpublic static InvokeCustomNode buildLambdaMethodCall(MethodNode mth, InsnData insn, boolean isRange, List<EncodedValue> values) {\n\t\tIMethodHandle callMthHandle = (IMethodHandle) values.get(4).getValue();\n\t\tif (callMthHandle.getType().isField()) {\n\t\t\tthrow new JadxRuntimeException(\"Not yet supported\");\n\t\t}\n\t\tInvokeCustomNode resNode = buildMethodCall(mth, insn, isRange, values, callMthHandle);\n\t\tint resReg = insn.getResultReg();\n\t\tif (resReg != -1) {\n\t\t\tresNode.setResult(InsnArg.reg(resReg, mth.getReturnType()));\n\t\t}\n\t\treturn resNode;\n\t}\n\n\t@NotNull\n\tprivate static InvokeCustomNode buildMethodCall(MethodNode mth, InsnData insn, boolean isRange,\n\t\t\tList<EncodedValue> values, IMethodHandle callMthHandle) {\n\t\tRootNode root = mth.root();\n\t\tIMethodProto lambdaProto = (IMethodProto) values.get(2).getValue();\n\t\tMethodInfo lambdaInfo = MethodInfo.fromMethodProto(root, mth.getParentClass().getClassInfo(), \"\", lambdaProto);\n\n\t\tMethodHandleType methodHandleType = callMthHandle.getType();\n\t\tInvokeCustomNode invokeCustomNode = new InvokeCustomNode(lambdaInfo, insn, false, isRange);","sourceCodeStart":39,"sourceCodeEnd":75,"githubUrl":"https://github.com/skylot/jadx/blob/e738a26571d02919f01df40de93bc9a44dee4e18/jadx-core/src/main/java/jadx/core/dex/instructions/invokedynamic/CustomLambdaCall.java#L39-L75","documentation":"In CustomLambdaCall.buildLambdaMethodCall(), the lambda's implementation method handle (values[4]) is a field handle rather than a method handle. JADX currently only implements method-based lambda metafactory calls, so a field handle (e.g. a field-based functional interface target) is explicitly unsupported.","triggerScenarios":"An invoke-custom / LambdaMetafactory bootstrap where the 5th call-site value (the actual implementation member) is a field handle (STATIC_GET/PUT or INSTANCE_GET/PUT) instead of an invoke handle.","commonSituations":"Bytecode produced by newer Java toolchains that emit field-based lambda targets, or unusual generated code. This is a feature gap, not a corruption error.","solutions":["Upgrade JADX — field-handle lambda support may be added in future releases.","Check the JADX issue tracker / changelog for field-based lambda support.","Use --show-bad-code to get the rest of the method; the lambda site will appear as an error comment.","Request the feature upstream with the offending class as a sample."],"exampleFix":null,"handlingStrategy":"fallback","validationCode":null,"typeGuard":"// Detect a field-based lambda before calling buildLambdaMethodCall (internal use).\nIMethodHandle h = (IMethodHandle) values.get(4).getValue();\nboolean unsupported = h.getType().isField();","tryCatchPattern":"try {\n    jadx.load();\n} catch (JadxRuntimeException e) {\n    if (e.getMessage().equals(\"Not yet supported\")) {\n        log.warn(\"Field-based lambda not yet supported by JADX; use --show-bad-code\", e);\n    } else throw e;\n}","preventionTips":["Use --show-bad-code so field-handle lambdas degrade to a comment instead of aborting.","Track JADX releases for field-based lambda support.","Decompile per-class to isolate affected classes."],"tags":["invoke-custom","lambda","feature-gap","method-handle"],"backgroundTag":null,"analyzedSha":"e738a26571d02919f01df40de93bc9a44dee4e18","analyzedAt":"2026-08-14T00:10:24.238Z","schemaVersion":2},"datasetVersion":"2026-08-14T05:17:29.042Z"}