LambdaIndy (InvokeDynamicInsnNode indyNode) { Handle bsm = indyNode.bsm; if (LAMBDA_METAFACTORY_CLASS.equals(bsm.getOwner()) && LAMBDA_METAFACTORY_METHOD.equals(bsm.getName()) && LAMBDA_METAFACTORY_DESCRIPTOR.equals(bsm.getDesc()) && indyNode.bsmArgs.length >= 3 && indyNode.bsmArgs[1] instanceof Handle lambdaBody && indyNode.bsmArgs[2] instanceof Type targetType) { Member targetMethod = new Member(lambdaBody.getOwner(), lambdaBody.getName(), lambdaBody.getDesc()); Type retType = Type.getReturnType(indyNode.desc); return new LambdaIndy(lambdaBody.getTag(), targetType, targetMethod, retType); } return null; }