} else if (mayReturnNullDatabase != null) {
} else if (mayReturnNullDatabase != null || nullReturnAnnotationDatabase != null) {
	private void handleInvoke(InvokeInstruction obj) {		Type callType = obj.getLoadClassType(getCPG());		Type returnType = obj.getReturnType(getCPG());		String methodName = obj.getMethodName(getCPG());				boolean stringMethodCall = callType.equals(Type.STRING) && returnType.equals(Type.STRING);		boolean isReadLine =  false && methodName.equals("readLine");		// Determine if we are going to model the return value of this call.		boolean modelCallReturnValue =			  isReadLine			  || stringMethodCall			|| (mayReturnNullDatabase != null)			|| IsNullValueAnalysis.UNKNOWN_VALUES_ARE_NSP;					if( !modelCallReturnValue) {			// Normal case: Assume returned values are non-reporting non-null.			handleNormalInstruction(obj);		} else {			// Special case: some special value is pushed on the stack for the return value			IsNullValue pushValue = null;			if (isReadLine) {				// String methods always return a non-null value				pushValue = IsNullValue.nullOnSimplePathValue();			} else if (stringMethodCall) {				// String methods always return a non-null value				pushValue = IsNullValue.nonNullValue();			} else if (mayReturnNullDatabase != null) {				// Check to see if this method is in the database				XMethod calledMethod = XMethodFactory.createXMethod(obj, getCPG());				if (IsNullValueAnalysis.DEBUG) System.out.println("Check " + calledMethod + " for null return...");				//MayReturnNullProperty prop = mayReturnNullDatabase.getProperty(calledMethod);				Boolean prop = mayReturnNullDatabase.getProperty(calledMethod);				if (prop != null && prop.booleanValue()) {					// Method may return null!					if (IsNullValueAnalysis.DEBUG) {						System.out.println("Null value returned from " + calledMethod);					}					pushValue = IsNullValue.nullOnSimplePathValue().toMayReturnNullValue();				} else {					pushValue = IsNullValue.nonReportingNotNullValue();				}			} else if (IsNullValueAnalysis.UNKNOWN_VALUES_ARE_NSP) {				pushValue = (returnType instanceof ReferenceType)					? IsNullValue.nullOnSimplePathValue()					: IsNullValue.nonReportingNotNullValue();			}						modelInstruction(obj, getNumWordsConsumed(obj), getNumWordsProduced(obj), pushValue);		}		if (!NO_ASSERT_HACK) {			if (assertionMethods.isAssertionCall(obj)) {				IsNullValueFrame frame = getFrame();				for (int i = 0; i < frame.getNumSlots(); ++i) {					IsNullValue value = frame.getValue(i);					if (value.isDefinitelyNull() || value.isNullOnSomePath()) {						frame.setValue(i, IsNullValue.nonReportingNotNullValue());					}				}			}		}	}