}
@Override
public <E> E getMethodAnalysis(Class<E> analysisClass, @Nonnull MethodDescriptor methodDescriptor) throws CheckedAnalysisException {
requireNonNull(methodDescriptor, "methodDescriptor is null");
ClassContext classContext = getClassAnalysis(ClassContext.class, methodDescriptor.getClassDescriptor());
Object object = classContext.getMethodAnalysis(analysisClass, methodDescriptor);
if (object == null) {
try {
object = analyzeMethod(classContext, analysisClass, methodDescriptor);
if (object == null) {
object = NULL_ANALYSIS_RESULT;
}
} catch (RuntimeException e) {
object = new AbnormalAnalysisResult(e);
} catch (CheckedAnalysisException e) {
object = new AbnormalAnalysisResult(e);
}
classContext.putMethodAnalysis(analysisClass, methodDescriptor, object);
}
if (Debug.VERIFY_INTEGRITY && object == null) {
throw new IllegalStateException("AnalysisFactory failed to produce a result object");
}