public Detector createDetector(BugReporter bugReporter) { try { Constructor<?> constructor = detectorClass.getConstructor(constructorArgTypes); Detector detector = (Detector) constructor.newInstance(new Object[] { bugReporter }); if (setAnalysisContext != null) { setAnalysisContext.invoke(detector, new Object[] { AnalysisContext.currentAnalysisContext() }); } return detector; } catch (Exception e) { throw new RuntimeException("Could not instantiate " + detectorClass.getName() + " as Detector", e); } }
/** * Constructor. * * @param reporter * the BugReporter to which warnings should eventually be * reported */ public BugAccumulator(BugReporter reporter) { this.reporter = reporter; performAccumulation = AnalysisContext.currentAnalysisContext().getBoolProperty(AnalysisFeatures.MERGE_SIMILAR_WARNINGS); }
public static void setAppClassList(List<ClassDescriptor> appClassList) { AnalysisContext analysisContext = AnalysisContext .currentAnalysisContext(); analysisContext.setAppClassList(appClassList); }
@Override public void report() { AnalysisContext.currentAnalysisContext().storePropertyDatabase( AnalysisContext.currentAnalysisContext().getUnconditionalDerefParamDatabase(), AnalysisContext.UNCONDITIONAL_DEREF_DB_FILENAME, "unconditional deref database"); AnalysisContext.currentAnalysisContext().storePropertyDatabase( AnalysisContext.currentAnalysisContext().getReturnValueNullnessPropertyDatabase(), AnalysisContext.NONNULL_RETURN_DB_FILENAME, "nonnull return database"); }
public IntCast2LongAsInstant(BugReporter bugReporter) { this.bugReporter = bugReporter; AnalysisContext.currentAnalysisContext().loadPropertyDatabaseFromResource(database, "longInstant.db", "long instant database"); }
/** * Configure analysis feature settings. */ private void configureAnalysisFeatures() { for (AnalysisFeatureSetting setting : analysisOptions.analysisFeatureSettingList) { setting.configure(AnalysisContext.currentAnalysisContext()); } AnalysisContext.currentAnalysisContext().setBoolProperty(AnalysisFeatures.MERGE_SIMILAR_WARNINGS, analysisOptions.mergeSimilarWarnings); }
public ExplicitSerialization(BugReporter bugReporter) { AnalysisContext context = AnalysisContext.currentAnalysisContext(); unreadFields = context.getUnreadFieldsData(); this.bugReporter = bugReporter; }
private static String computeSourceFile(String className) { AnalysisContext context = AnalysisContext.currentAnalysisContext(); if (context != null) { return context.lookupSourceFile(className); } return SourceLineAnnotation.UNKNOWN_SOURCE_FILE; }
@Override public void report() { database.purgeBoringEntries(); AnalysisContext.currentAnalysisContext().storePropertyDatabase(database, FieldStoreTypeDatabase.DEFAULT_FILENAME, "store type database"); }
@Override public void visitJavaClass(JavaClass obj) { if (AnalysisContext.currentAnalysisContext().isApplicationClass(obj)) { super.visitJavaClass(obj); } }
static public boolean isCollection(ReferenceType target) throws ClassNotFoundException { Subtypes2 subtypes2 = AnalysisContext.currentAnalysisContext().getSubtypes2(); return subtypes2.isSubtype(target, COLLECTION_TYPE); } /** A collection, a map, or some other container */
@Override public ClassContext analyze(IAnalysisCache analysisCache, ClassDescriptor descriptor) throws CheckedAnalysisException { JavaClass javaClass = analysisCache.getClassAnalysis(JavaClass.class, descriptor); ClassContext classContext = new ClassContext(javaClass, AnalysisContext.currentAnalysisContext()); return classContext; }
private String fileNameFor(final String packageName, final String sourceName) { String result; SourceFinder sourceFinder = AnalysisContext.currentAnalysisContext().getSourceFinder(); try { result = sourceFinder.findSourceFile(packageName, sourceName).getFullFileName(); } catch (IOException e) { result = packageName.replace('.', File.separatorChar) + File.separatorChar + sourceName; } return result; }
@Override public void visitAfter(JavaClass obj) { for (String i : obj.getInterfaceNames()) { if ("java.lang.annotation.Annotation".equals(i)) { AnalysisContext.currentAnalysisContext().getAnnotationRetentionDatabase() .setRuntimeRetention(getDottedClassName(), runtimeRetention); } } }
private boolean strongEvidenceForIntendedSerialization() { return implementsSerializableDirectly || sawReadObject || sawReadResolve || sawWriteObject || seenTransientField || AnalysisContext.currentAnalysisContext().getUnreadFieldsData() .existsStrongEvidenceForIntendedSerialization(this.getClassDescriptor()); }
/** * Factory method to create an unknown source line annotation. This variant * looks up the source filename automatically based on the class using best * effort. * * @param className * the class name * @return the SourceLineAnnotation */ public static SourceLineAnnotation createUnknown(@DottedClassName String className) { return createUnknown(className, AnalysisContext.currentAnalysisContext().lookupSourceFile(className), -1, -1); }
/** A collection, a map, or some other container */ static public boolean isContainer(ReferenceType target) throws ClassNotFoundException { Subtypes2 subtypes2 = AnalysisContext.currentAnalysisContext().getSubtypes2(); return subtypes2.isSubtype(target, COLLECTION_TYPE) || subtypes2.isSubtype(target, MAP_TYPE); }
@Override public void visitClassContext(ClassContext classContext) { if (qualifiers == null) { qualifiers = AnalysisContext.currentAnalysisContext().getDirectlyRelevantTypeQualifiersDatabase(); } JavaClass javaClass = classContext.getJavaClass(); if (!BCELUtil.preTiger(javaClass)) { javaClass.accept(this); } }
@Override public void observeClass(ClassDescriptor classDescriptor) { try { JavaClass javaClass = AnalysisContext.currentAnalysisContext().lookupClass(classDescriptor.toDottedClassName()); String sourceFileName = fileNameFor(javaClass.getPackageName(), javaClass.getSourceFileName()); sourceFileNameCache.put(javaClass.getClassName(), sourceFileName); } catch (ClassNotFoundException e) { // Ignore - should not happen } }
public static boolean instanceOf(@DottedClassName String dottedSubtype, @DottedClassName String dottedSupertype) { Subtypes2 subtypes2 = AnalysisContext.currentAnalysisContext().getSubtypes2(); ClassDescriptor subDescriptor = DescriptorFactory.createClassDescriptorFromDottedClassName(dottedSubtype); ClassDescriptor superDescriptor = DescriptorFactory.createClassDescriptorFromDottedClassName(dottedSupertype); try { return subtypes2.isSubtype(subDescriptor, superDescriptor); } catch (ClassNotFoundException e) { AnalysisContext.reportMissingClass(e); return false; } }