String className = inv.getClassName(cpg); String methodName = inv.getName(cpg); String methodSig = inv.getSignature(cpg);
if (DEBUG_METHOD_LOOKUP) { System.out.println("Find prototype method for " + SignatureConverter.convertMethodSignature(inv,cpg)); }
	public static Method findPrototypeMethod(InvokeInstruction inv, ConstantPoolGen cpg)	        throws ClassNotFoundException {		Method m = null;		String className = inv.getClassName(cpg);		String methodName = inv.getName(cpg);		String methodSig = inv.getSignature(cpg);				short opcode = inv.getOpcode();		// Find the method		if (inv instanceof INVOKESPECIAL) {			// Non-virtual dispatch			m = findExactMethod(inv, cpg, INSTANCE_METHOD);		} else {			// Dispatch where the class hierarchy is searched			if (opcode == Constants.INVOKEVIRTUAL || opcode == Constants.INVOKESTATIC) {				// Check superclasses				MethodChooser methodChooser = (opcode == Constants.INVOKESTATIC)						? STATIC_METHOD : INSTANCE_METHOD;				m = findMethod(Repository.lookupClass(className), methodName, methodSig, methodChooser);				if (m == null) {					JavaClass[] superClassList = Repository.getSuperClasses(className);					m = findMethod(superClassList, methodName, methodSig, methodChooser);				}			} else {				// Check superinterfaces				m = findMethod(Repository.lookupClass(className), methodName, methodSig, INSTANCE_METHOD);				if (m == null) {					JavaClass[] interfaceList = Repository.getInterfaces(className);					m = findMethod(interfaceList, methodName, methodSig, INSTANCE_METHOD);				}			}		}		return m;	}