public InvokeOperator(MethodAnalyzer methodAnalyzer, int methodFlag,
			Reference reference) {
		super(Type.tUnknown, 0);
		this.ref = reference;
		this.methodType = Type.tMethod(reference.getType());
		this.methodName = reference.getName();
		this.classType = Type.tType(reference.getClazz());
		this.hints = null;
		Map allHints = (Map) hintTypes.get(methodName + "." + methodType);
		if (allHints != null) {
			for (Iterator i = allHints.entrySet().iterator(); i.hasNext();) {
				Map.Entry e = (Map.Entry) i.next();
				if (classType.isOfType(((Type) e.getKey()).getSubType())) {
					this.hints = (Type[]) e.getValue();
					break;
				}
			}
		}
		if (hints != null && hints[0] != null)
			this.type = hints[0];
		else
			this.type = methodType.getReturnType();
		this.methodAnalyzer = methodAnalyzer;
		this.methodFlag = methodFlag;
		if (methodFlag == STATIC)
			methodAnalyzer.useType(classType);
		skippedArgs = (methodFlag == STATIC ? 0 : 1);
		initOperands(skippedArgs + methodType.getParameterTypes().length);
		checkAnonymousClasses();
	}