Source:
<code>public void visitEnd() { try { Analyzer analyzer = new Analyzer(new SourceInterpreter()); Frame[] frames = analyzer.analyze(_classToAnalyze, this); int index = findMethodCall(this.instructions); if (index == -1) { <START> LOGGER.error("Unable to find method call in instruction list, debug as this case is not expected"); <END> return; } Frame f = frames[index]; List<String> localVariables = new ArrayList<>(); String fieldDesc = ""; for (int j = 0; j < f.getStackSize(); ++j) { SourceValue stack = (SourceValue) f.getStack(j); Object insn = stack.insns.iterator().next(); if (insn instanceof VarInsnNode) { VarInsnNode vinsn = (VarInsnNode) insn; if (vinsn.var < this.localVariables.size()) { String variable = ((LocalVariableNode) this.localVariables.get(vinsn.var)).name; if (!"this".equals(variable)) { localVariables.add(variable); } } } else if (insn instanceof FieldInsnNode) { FieldInsnNode fieldInstr = (FieldInsnNode) insn; fieldDesc = fieldInstr.name; } else if (insn instanceof TypeInsnNode) { TypeInsnNode typeInsnNode = (TypeInsnNode) insn; fieldDesc = "new " + Util.extractSimpleName(typeInsnNode.desc, "/") + "()"; } else if (insn instanceof MethodInsnNode) { MethodInsnNode methodInstr = (MethodInsnNode) insn; if (methodInstr.getOpcode() == Opcodes.INVOKESPECIAL && methodInstr.name.equals("<init>")) { fieldDesc = "new " + Util.extractSimpleName(methodInstr.owner, "/") + "()"; } else { Type methodType = Type.getMethodType(methodInstr.desc); int retSize = methodType.getArgumentsAndReturnSizes() & 0x03; if (retSize > 0) { fieldDesc = methodInstr.name + Util.getArgumentsInformation(methodInstr.desc); } } } } _inferredOperation = getInferredOperation(localVariables, fieldDesc); } catch (AnalyzerException e) { LOGGER.error("Unable to analyze class, could not infer operation", e.getMessage()); } }</code><technical_language>DEBUG</technical_language>

Target:
public void visitEnd() { try { Analyzer analyzer = new Analyzer(new SourceInterpreter()); Frame[] frames = analyzer.analyze(_classToAnalyze, this); int index = findMethodCall(this.instructions); if (index == -1) { return; } Frame f = frames[index]; String fieldDesc = ""; for (int j = 0; j < f.getStackSize(); ++j) { SourceValue stack = (SourceValue) f.getStack(j); Object insn = stack.insns.iterator().next(); if (insn instanceof FieldInsnNode) { FieldInsnNode fieldInstr = (FieldInsnNode) insn; fieldDesc = fieldInstr.name; } else if (insn instanceof TypeInsnNode) { TypeInsnNode typeInsnNode = (TypeInsnNode) insn; fieldDesc = "new " + Util.extractSimpleName(typeInsnNode.desc, "/") + "()"; } else if (insn instanceof MethodInsnNode) { MethodInsnNode methodInstr = (MethodInsnNode) insn; if (methodInstr.getOpcode() == Opcodes.INVOKESPECIAL && methodInstr.name.equals("<init>")) { fieldDesc = "new " + Util.extractSimpleName(methodInstr.owner, "/") + "()"; } else { Type methodType = Type.getMethodType(methodInstr.desc); int retSize = methodType.getArgumentsAndReturnSizes() & 0x03; if (retSize > 0) { fieldDesc = methodInstr.name + Util.getArgumentsInformation(methodInstr.desc); } } } } _inferredOperation = getInferredOperation(fieldDesc); } catch (AnalyzerException e) { System.out.println("Unable to analyze class, could not infer operation"); } }