className = ClassName.toDottedClassName(className);
	public static MethodAnnotation fromForeignMethod(			String className, String methodName, String methodSig, boolean isStatic) {		// Create MethodAnnotation.		// It won't have source lines yet.		MethodAnnotation methodAnnotation =			new MethodAnnotation(className, methodName, methodSig, isStatic);				// Try to find source lines by looking up the exact class and method.		SourceLineAnnotation sourceLines = null;		try {			JavaClass targetClass = AnalysisContext.currentAnalysisContext()				.lookupClass(className);			JavaClassAndMethod targetMethod = Hierarchy.findMethod(targetClass, methodName, methodSig);			if (targetMethod != null) {				sourceLines = SourceLineAnnotation.forEntireMethod(						targetMethod.getJavaClass(), targetMethod.getMethod());			}		} catch (ClassNotFoundException e) {			// Can't find the class		}				// Try consulting the SourceInfoMap		if (sourceLines == null) {			SourceInfoMap.SourceLineRange range = AnalysisContext.currentAnalysisContext()				.getSourceInfoMap()				.getMethodLine(className, methodName, methodSig);			if (range != null) {				sourceLines = new SourceLineAnnotation(						className,						AnalysisContext.currentAnalysisContext().lookupSourceFile(className),						range.getStart(),						range.getEnd(),						-1,						-1);			}		}				// If we couldn't find the source lines,		// create an unknown source line annotation referencing		// the class and source file.		if (sourceLines == null) {			sourceLines = SourceLineAnnotation.createUnknown(className);		}				methodAnnotation.setSourceLines(sourceLines);				return methodAnnotation;	}