IAnalysisCache analysisCache, Map<DescriptorType, Map<Class<?>, Object>> descriptorToAnalysisCacheMap, Map<Class<?>, ? extends IAnalysisEngine<DescriptorType>> engineMap, DescriptorType descriptor, Class<E> analysisClass
final AnalysisCache analysisCache, final Map<Class<?>, Map<DescriptorType, Object>> analysisClassToDescriptorMapMap, final Map<Class<?>, ? extends IAnalysisEngine<DescriptorType>> engineMap, final DescriptorType descriptor, final Class<E> analysisClass
	static<DescriptorType, E> E analyzeClassOrMethod(			IAnalysisCache analysisCache,			Map<DescriptorType, Map<Class<?>, Object>> descriptorToAnalysisCacheMap,			Map<Class<?>, ? extends IAnalysisEngine<DescriptorType>> engineMap,			DescriptorType descriptor,			Class<E> analysisClass	) throws CheckedAnalysisException {		// Get the analysis map for the class/method descriptor		Map<Class<?>, Object> analysisMap = descriptorToAnalysisCacheMap.get(descriptor);		if (analysisMap == null) {			// Create empty analysis map and save it			analysisMap = new HashMap<Class<?>, Object>();			descriptorToAnalysisCacheMap.put(descriptor, analysisMap);		}				// See if the analysis has already been performed		Object analysisResult = analysisMap.get(analysisClass);		if (analysisResult == null) {			// Analysis hasn't been performed yet.			// Find an appropriate analysis engine.			IAnalysisEngine<DescriptorType> engine = engineMap.get(analysisClass);			if (engine == null) {				throw new IllegalArgumentException(						"No analysis engine registered to produce " + analysisClass.getName());			}						// Perform the analysis			try {				analysisResult = engine.analyze(analysisCache, descriptor);			} catch (CheckedAnalysisException e) {				// Whoops, an error occurred when performing the analysis.				// Make a note.				analysisResult = new AnalysisError(e);			}			// Save the result			analysisMap.put(analysisClass, analysisResult);		}				// Error occurred?		if (analysisResult instanceof AnalysisError) {			throw ((AnalysisError) analysisResult).exception;		}				// If we could assume a 1.5 or later JVM, the Class.cast()		// method could do this cast without a warning.		return (E) analysisResult;			}