@Override public void sawOpcode(int seen) { if (seen == Const.PUTFIELD) { if (clsName.equals(getDottedClassConstantOperand())) { String methodDesc = getMethodName() + getMethodSig(); Set<String> fields = mfModifiers.get(methodDesc); if (fields == null) { fields = new HashSet<>(); mfModifiers.put(methodDesc, fields); } fields.add(getNameConstantOperand()); } } else if ((seen == Const.INVOKEVIRTUAL) && clsName.equals(getDottedClassConstantOperand())) { String methodDesc = getMethodName() + getMethodSig(); Set<String> methods = methodCallChain.get(methodDesc); if (methods == null) { methods = new HashSet<>(); methodCallChain.put(methodDesc, methods); } methods.add(getNameConstantOperand() + getSigConstantOperand()); } }
@Override public void sawOpcode(int seen) { if (seen == PUTFIELD) { if (clsName.equals(getDottedClassConstantOperand())) { String methodDesc = getMethodName() + getMethodSig(); Set<String> fields = mfModifiers.get(methodDesc); if (fields == null) { fields = new HashSet<>(); mfModifiers.put(methodDesc, fields); } fields.add(getNameConstantOperand()); } } else if ((seen == INVOKEVIRTUAL) && clsName.equals(getDottedClassConstantOperand())) { String methodDesc = getMethodName() + getMethodSig(); Set<String> methods = methodCallChain.get(methodDesc); if (methods == null) { methods = new HashSet<>(); methodCallChain.put(methodDesc, methods); } methods.add(getNameConstantOperand() + getSigConstantOperand()); } }
/** * builds up the method to field map of what method write to which fields this is one recursively so that if method A calls method B, and method B writes to * field C, then A modifies F. * * @param classContext * the context object of the currently parsed class */ private void buildMethodFieldModifiers(ClassContext classContext) { FieldModifier fm = new FieldModifier(); fm.visitClassContext(classContext); methodFieldModifiers = fm.getMethodFieldModifiers(); }
/** * builds up the method to field map of what method write to which fields this is one recursively so that if method A calls method B, and method B writes to * field C, then A modifies F. * * @param classContext * the context object of the currently parsed class */ private void buildMethodFieldModifiers(ClassContext classContext) { FieldModifier fm = new FieldModifier(); fm.visitClassContext(classContext); methodFieldModifiers = fm.getMethodFieldModifiers(); }