stringComparison = null;
	private void analyzeMethod(ClassContext classContext, Method method)	        throws CFGBuilderException, DataflowAnalysisException {		boolean sawCallToEquals = false;		JavaClass jclass = classContext.getJavaClass();		ConstantPoolGen cpg = classContext.getConstantPoolGen();		MethodGen methodGen = classContext.getMethodGen(method);		// Report at most one String comparison per method.		// We report the first highest priority warning.		stringComparison = null;		refComparison = null;		CFG cfg = classContext.getCFG(method);		DepthFirstSearch dfs = classContext.getDepthFirstSearch(method);		ExceptionSetFactory exceptionSetFactory =		        classContext.getExceptionSetFactory(method);		// Perform type analysis using our special type merger		// (which handles String types specially, keeping track of		// which ones appear to be dynamically created)		RefComparisonTypeMerger typeMerger =		        new RefComparisonTypeMerger(bugReporter, exceptionSetFactory);		RefComparisonTypeFrameModelingVisitor visitor =		        new RefComparisonTypeFrameModelingVisitor(methodGen.getConstantPool(), bugReporter);		TypeAnalysis typeAnalysis =		        new TypeAnalysis(methodGen, cfg, dfs, typeMerger, visitor, bugReporter, exceptionSetFactory);		TypeDataflow typeDataflow = new TypeDataflow(cfg, typeAnalysis);		typeDataflow.execute();		for (Iterator<Location> i = cfg.locationIterator(); i.hasNext();) {			Location location = i.next();			Instruction ins = location.getHandle().getInstruction();			short opcode = ins.getOpcode();			if (opcode == Constants.IF_ACMPEQ || opcode == Constants.IF_ACMPNE) {				checkRefComparison(location, jclass, methodGen, visitor, typeDataflow);			} else if (invokeInstanceSet.get(opcode)) {				InvokeInstruction inv = (InvokeInstruction) ins;				String methodName = inv.getMethodName(cpg);				String methodSig = inv.getSignature(cpg);				if ((methodName.equals("equals") && methodSig.equals("(Ljava/lang/Object;)Z"))				        || (methodName.equals("equalIgnoreCases") && methodSig.equals("(Ljava/lang/String;)Z"))) {					sawCallToEquals = true;					checkEqualsComparison(location, jclass, methodGen, typeDataflow);				}			}		}		// If a String reference comparison was found in the method,		// report it		if (stringComparison != null) {			if (sawCallToEquals &&			        stringComparison.getPriority() >= NORMAL_PRIORITY) {				// System.out.println("Reducing priority of " + stringComparison);				stringComparison.setPriority(1 + stringComparison.getPriority());			}			if (stringComparison.getPriority() >= NORMAL_PRIORITY			        && !(method.isPublic() ||			        method.isProtected())) {				// System.out.print("private/packed");				stringComparison.setPriority(1 + stringComparison.getPriority());			}			if (stringComparison.getPriority() <= LOW_PRIORITY) {				bugReporter.reportBug(stringComparison);			}		}		if (refComparison != null) {			if (false && sawCallToEquals) {				// System.out.println("Reducing priority of " + refComparison);				refComparison.setPriority(1 + refComparison.getPriority());			}			if (refComparison.getPriority() <= LOW_PRIORITY)				bugReporter.reportBug(refComparison);		}	}