analysisResult = new AbnormalAnalysisResult(e); } catch (RuntimeException e) { analysisResult = new AbnormalAnalysisResult(e); } finally { profiler.end(engine.getClass()); return checkedCast(analysisClass, ((AbnormalAnalysisResult) analysisResult).returnOrThrow());
analysisResult = new AbnormalAnalysisResult(e); } catch (RuntimeException e) { analysisResult = new AbnormalAnalysisResult(e); } finally { profiler.end(engine.getClass()); return checkedCast(analysisClass, ((AbnormalAnalysisResult) analysisResult).returnOrThrow());
public <E> E getDatabase(Class<E> databaseClass, boolean optional) { Object database = databaseMap.get(databaseClass); if (database == null) { try { // Find the database factory IDatabaseFactory<?> databaseFactory = databaseFactoryMap.get(databaseClass); if (databaseFactory == null) { if (optional) { return null; } throw new IllegalArgumentException("No database factory registered for " + databaseClass.getName()); } // Create the database database = databaseFactory.createDatabase(); } catch (CheckedAnalysisException e) { // Error - record the analysis error database = new AbnormalAnalysisResult(e); } // FIXME: should catch and re-throw RuntimeExceptions? databaseMap.put(databaseClass, database); } if (database instanceof AbnormalAnalysisResult) { throw new UncheckedAnalysisException("Error instantiating " + databaseClass.getName() + " database", ((AbnormalAnalysisResult) database).checkedAnalysisException); } return databaseClass.cast(database); }
@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"); } if (object instanceof AbnormalAnalysisResult) { return checkedCast(analysisClass, ((AbnormalAnalysisResult) object).returnOrThrow()); } return checkedCast(analysisClass, object); }
public <E> E getDatabase(Class<E> databaseClass, boolean optional) { Object database = databaseMap.get(databaseClass); if (database == null) { try { // Find the database factory IDatabaseFactory<?> databaseFactory = databaseFactoryMap.get(databaseClass); if (databaseFactory == null) { if (optional) { return null; } throw new IllegalArgumentException("No database factory registered for " + databaseClass.getName()); } // Create the database database = databaseFactory.createDatabase(); } catch (CheckedAnalysisException e) { // Error - record the analysis error database = new AbnormalAnalysisResult(e); } // FIXME: should catch and re-throw RuntimeExceptions? databaseMap.put(databaseClass, database); } if (database instanceof AbnormalAnalysisResult) { throw new UncheckedAnalysisException("Error instantiating " + databaseClass.getName() + " database", ((AbnormalAnalysisResult) database).checkedAnalysisException); } return databaseClass.cast(database); }
@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"); } if (object instanceof AbnormalAnalysisResult) { return checkedCast(analysisClass, ((AbnormalAnalysisResult) object).returnOrThrow()); } return checkedCast(analysisClass, object); }