if (!isSerializable && !isProbablySerializable)
if (isSerializable < 0.9)
	private void analyzeMethod(ClassContext classContext, Method method) throws CFGBuilderException, DataflowAnalysisException {		CFG cfg = classContext.getCFG(method);		TypeDataflow typeDataflow = classContext.getTypeDataflow(method);		ValueNumberDataflow vnaDataflow = classContext.getValueNumberDataflow(method);		 // get the ValueNumberFrame at entry to a method:		 ValueNumberFrame vnaFrameAtEntry 			= vnaDataflow.getStartFact(cfg.getEntry());		// get Set of parameter values		 Set<ValueNumber> paramValueNumberSet = new HashSet<ValueNumber>();		 int firstParam = method.isStatic() ? 0 : 1;		 for (int i = firstParam; i < vnaFrameAtEntry.getNumLocals(); ++i) {		   paramValueNumberSet.add(vnaFrameAtEntry.getValue(i));		 }		 					ConstantPoolGen cpg = classContext.getConstantPoolGen();		MethodGen methodGen = classContext.getMethodGen(method);		String methodName = methodGen.getClassName() + "." +					methodGen.getName();                String sourceFile = classContext.getJavaClass().getSourceFileName();		 if (DEBUG) {			System.out.println("Checking " + methodName);			}			for (Iterator<Location> i = cfg.locationIterator(); i.hasNext(); ) {			Location location = i.next();			InstructionHandle handle = location.getHandle();			int pc = handle.getPosition();			Instruction ins = handle.getInstruction();			if (!(ins instanceof INVOKEINTERFACE))				continue;			INVOKEINTERFACE invoke = (INVOKEINTERFACE) ins;			String mName = invoke.getMethodName(cpg);			if (!mName.equals("setAttribute")) continue;			String cName = invoke.getClassName(cpg);			if (!cName.equals("javax.servlet.http.HttpSession")) continue;		      TypeFrame frame = typeDataflow.getFactAtLocation(location);                        if (!frame.isValid()) {                                // This basic block is probably dead                                continue;                        }			Type operandType = frame.getTopValue();			if (operandType.equals(TopType.instance()))  {				// unreachable				continue;			}			if (!(operandType instanceof ReferenceType)) {				// Shouldn't happen - illegal bytecode				continue;			}			ReferenceType refType = (ReferenceType) operandType;			if (refType.equals(NullType.instance())) {				continue;				}			String refSig = refType.getSignature();			if (refSig.charAt(0) == '[') 				continue;			String refName = refSig.substring(1,refSig.length()-1)				.replace('/','.');			if (refName.equals("java.lang.Object"))				continue;			SourceLineAnnotation sourceLineAnnotation = SourceLineAnnotation.fromVisitedInstruction(methodGen, sourceFile, handle);			ValueNumberFrame vFrame = vnaDataflow.getFactAtLocation(location);			boolean isParameter = paramValueNumberSet.contains(vFrame.getTopValue());			try {			JavaClass refJavaClass = Repository.lookupClass(refName);			boolean isSerializable				= Repository.instanceOf( refJavaClass, serializable);			boolean isProbablySerializable				= Repository.instanceOf( refJavaClass, collection)				    || Repository.instanceOf( refJavaClass, map);			if (!isSerializable && !isProbablySerializable)			     bugReporter.reportBug(new BugInstance(this,                                "J2EE_STORE_OF_NON_SERIALIZABLE_OBJECT_INTO_SESSION",				refJavaClass.isFinal() ? HIGH_PRIORITY :				refJavaClass.isAbstract() ? LOW_PRIORITY :				NORMAL_PRIORITY)                                  .addClassAndMethod(methodGen, sourceFile)                                  .addSourceLine(sourceLineAnnotation)				  .addClass(refName)				  );      			} catch (ClassNotFoundException e) {				// ignore				}			}		}