FindBugs™ 1.3.9

edu.umd.cs.findbugs.ba
Class AnalysisContext

java.lang.Object
  extended by edu.umd.cs.findbugs.ba.AnalysisContext
Direct Known Subclasses:
AnalysisCacheToAnalysisContextAdapter

@NotThreadSafe
public abstract class AnalysisContext
extends java.lang.Object

A context for analysis of a complete project. This serves as the repository for whole-program information and data structures.

NOTE: this class is slated to become obsolete. New code should use the IAnalysisCache object returned by Global.getAnalysisCache() to access all analysis information (global databases, class and method analyses, etc.)

Author:
David Hovemeyer
See Also:
IAnalysisCache, Global

Field Summary
static boolean DEBUG
           
static java.lang.String DEFAULT_CHECK_FOR_NULL_PARAM_DATABASE_FILENAME
           
static java.lang.String DEFAULT_NONNULL_PARAM_DATABASE_FILENAME
           
static java.lang.String DEFAULT_NULL_RETURN_VALUE_ANNOTATION_DATABASE
           
static java.lang.String DEFAULT_NULL_RETURN_VALUE_DB_FILENAME
           
static boolean IGNORE_BUILTIN_MODELS
           
static java.lang.String NONNULL_RETURN_DB_FILENAME
           
static java.lang.String NONNULL_RETURN_DB_RESOURCE
           
protected  Project project
           
static java.lang.String UNCONDITIONAL_DEREF_DB_FILENAME
           
static java.lang.String UNCONDITIONAL_DEREF_DB_RESOURCE
           
 
Constructor Summary
protected AnalysisContext()
           
 
Method Summary
abstract  void addClasspathEntry(java.lang.String url)
          Add an entry to the Repository's classpath.
abstract  void clearClassContextCache()
          Clear the ClassContext cache.
abstract  void clearRepository()
          Clear the BCEL Repository in preparation for analysis.
static AnalysisContext currentAnalysisContext()
          Get the AnalysisContext associated with this thread
static XFactory currentXFactory()
           
abstract  AnnotationRetentionDatabase getAnnotationRetentionDatabase()
           
 boolean getBoolProperty(int prop)
          Get a boolean property.
abstract  CheckReturnAnnotationDatabase getCheckReturnAnnotationDatabase()
           
abstract  ClassContext getClassContext(org.apache.bcel.classfile.JavaClass javaClass)
          Get the ClassContext for a class.
abstract  java.lang.String getClassContextStats()
          Get stats about hit rate for ClassContext cache.
 ClassSummary getClassSummary()
           
 java.lang.String getDatabaseInputDir()
          Get the interprocedural database input directory.
 java.lang.String getDatabaseOutputDir()
          Get the interprocedural database output directory.
abstract  DirectlyRelevantTypeQualifiersDatabase getDirectlyRelevantTypeQualifiersDatabase()
           
 EqualsKindSummary getEqualsKindSummary()
           
abstract  FieldStoreTypeDatabase getFieldStoreTypeDatabase()
          Get the property database recording the types of values stored into fields.
 FieldSummary getFieldSummary()
           
abstract  InnerClassAccessMap getInnerClassAccessMap()
           
abstract  JCIPAnnotationDatabase getJCIPAnnotationDatabase()
           
abstract  RepositoryLookupFailureCallback getLookupFailureCallback()
          Get the lookup failure callback.
abstract  INullnessAnnotationDatabase getNullnessAnnotationDatabase()
           
abstract  ReturnValueNullnessPropertyDatabase getReturnValueNullnessPropertyDatabase()
          Get the property database recording which methods always return nonnull values
abstract  SourceFinder getSourceFinder()
          Get the SourceFinder, for finding source files.
abstract  SourceInfoMap getSourceInfoMap()
          Get the SourceInfoMap.
abstract  Subtypes2 getSubtypes2()
          Get the Subtypes2 inheritance hierarchy database.
abstract  ParameterNullnessPropertyDatabase getUnconditionalDerefParamDatabase()
          Get the property database recording which methods unconditionally dereference parameters.
 UnreadFields getUnreadFields()
           
 java.util.Collection<XClass> getXClassCollection()
          Get Collection of all XClass objects seen so far.
abstract  void initDatabases()
          Instantiate the CheckReturnAnnotationDatabase.
 boolean isApplicationClass(ClassDescriptor desc)
           
 boolean isApplicationClass(org.apache.bcel.classfile.JavaClass cls)
          Return whether or not the given class is an application class.
 boolean isApplicationClass(java.lang.String className)
          Return whether or not the given class is an application class.
 boolean isTooBig(ClassDescriptor desc)
           
 void loadDefaultInterproceduralDatabases()
          If possible, load default (built-in) interprocedural property databases.
 void loadInterproceduralDatabases()
          If possible, load interprocedural property databases.
<DatabaseType extends PropertyDatabase<KeyType,Property>,KeyType extends FieldOrMethodDescriptor,Property>
DatabaseType
loadPropertyDatabase(DatabaseType database, java.lang.String fileName, java.lang.String description)
          Load an interprocedural property database.
<DatabaseType extends PropertyDatabase<KeyType,Property>,KeyType extends FieldOrMethodDescriptor,Property>
DatabaseType
loadPropertyDatabaseFromResource(DatabaseType database, java.lang.String resourceName, java.lang.String description)
          Load an interprocedural property database.
static void logError(java.lang.String msg)
          Report an error
static void logError(java.lang.String msg, java.lang.Exception e)
          Report an error
 org.apache.bcel.classfile.JavaClass lookupClass(ClassDescriptor classDescriptor)
          Lookup a class.
abstract  org.apache.bcel.classfile.JavaClass lookupClass(java.lang.String className)
          Lookup a class.
 java.lang.String lookupSourceFile(java.lang.String dottedClassName)
          Lookup a class's source file
static org.apache.bcel.classfile.JavaClass lookupSystemClass(java.lang.String className)
          This is equivalent to Repository.lookupClass() or this.lookupClass(), except it uses the original Repository instead of the current one.
static void removeCurrentAnalysisContext()
           
static void reportMissingClass(java.lang.ClassNotFoundException e)
          file a ClassNotFoundException with the lookupFailureCallback
 void setBoolProperty(int prop, boolean value)
          Set a boolean property.
 void setClassSummary(ClassSummary classSummary)
           
static void setCurrentAnalysisContext(AnalysisContext analysisContext)
          Set the current analysis context for this thread.
 void setDatabaseInputDir(java.lang.String databaseInputDir)
          Set the interprocedural database input directory.
 void setDatabaseOutputDir(java.lang.String databaseOutputDir)
          Set the interprocedural database output directory.
 void setFieldSummary(FieldSummary fieldSummary)
           
 boolean setMissingClassWarningsSuppressed(boolean value)
           
 void setProject(Project project)
          Set the source path.
 void setUnreadFields(UnreadFields unreadFields)
           
<DatabaseType extends PropertyDatabase<KeyType,Property>,KeyType extends FieldOrMethodDescriptor,Property>
void
storePropertyDatabase(DatabaseType database, java.lang.String fileName, java.lang.String description)
          Write an interprocedural property database.
 boolean unreadFieldsAvailable()
           
abstract  void updateDatabases(int pass)
          After a pass has been completed, allow the analysis context to update information.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

DEBUG

public static final boolean DEBUG

IGNORE_BUILTIN_MODELS

public static final boolean IGNORE_BUILTIN_MODELS

DEFAULT_NONNULL_PARAM_DATABASE_FILENAME

public static final java.lang.String DEFAULT_NONNULL_PARAM_DATABASE_FILENAME
See Also:
Constant Field Values

DEFAULT_CHECK_FOR_NULL_PARAM_DATABASE_FILENAME

public static final java.lang.String DEFAULT_CHECK_FOR_NULL_PARAM_DATABASE_FILENAME
See Also:
Constant Field Values

DEFAULT_NULL_RETURN_VALUE_ANNOTATION_DATABASE

public static final java.lang.String DEFAULT_NULL_RETURN_VALUE_ANNOTATION_DATABASE
See Also:
Constant Field Values

UNCONDITIONAL_DEREF_DB_FILENAME

public static final java.lang.String UNCONDITIONAL_DEREF_DB_FILENAME
See Also:
Constant Field Values

NONNULL_RETURN_DB_FILENAME

public static final java.lang.String NONNULL_RETURN_DB_FILENAME
See Also:
Constant Field Values

UNCONDITIONAL_DEREF_DB_RESOURCE

public static final java.lang.String UNCONDITIONAL_DEREF_DB_RESOURCE
See Also:
Constant Field Values

NONNULL_RETURN_DB_RESOURCE

public static final java.lang.String NONNULL_RETURN_DB_RESOURCE
See Also:
Constant Field Values

DEFAULT_NULL_RETURN_VALUE_DB_FILENAME

public static final java.lang.String DEFAULT_NULL_RETURN_VALUE_DB_FILENAME
See Also:
Constant Field Values

project

protected Project project
Constructor Detail

AnalysisContext

protected AnalysisContext()
Method Detail

getNullnessAnnotationDatabase

public abstract INullnessAnnotationDatabase getNullnessAnnotationDatabase()

getCheckReturnAnnotationDatabase

public abstract CheckReturnAnnotationDatabase getCheckReturnAnnotationDatabase()

getAnnotationRetentionDatabase

public abstract AnnotationRetentionDatabase getAnnotationRetentionDatabase()

getJCIPAnnotationDatabase

public abstract JCIPAnnotationDatabase getJCIPAnnotationDatabase()

initDatabases

public abstract void initDatabases()
Instantiate the CheckReturnAnnotationDatabase. Do this after the repository has been set up.


updateDatabases

public abstract void updateDatabases(int pass)
After a pass has been completed, allow the analysis context to update information.

Parameters:
pass - -- the first pass is pass 0

currentAnalysisContext

public static AnalysisContext currentAnalysisContext()
Get the AnalysisContext associated with this thread


currentXFactory

public static XFactory currentXFactory()

getClassSummary

public ClassSummary getClassSummary()

setClassSummary

public void setClassSummary(@NonNull
                            ClassSummary classSummary)

getEqualsKindSummary

public EqualsKindSummary getEqualsKindSummary()

getFieldSummary

public FieldSummary getFieldSummary()

setFieldSummary

public void setFieldSummary(@NonNull
                            FieldSummary fieldSummary)

getUnreadFields

public UnreadFields getUnreadFields()

unreadFieldsAvailable

public boolean unreadFieldsAvailable()

setUnreadFields

public void setUnreadFields(@NonNull
                            UnreadFields unreadFields)

getDirectlyRelevantTypeQualifiersDatabase

public abstract DirectlyRelevantTypeQualifiersDatabase getDirectlyRelevantTypeQualifiersDatabase()

reportMissingClass

public static void reportMissingClass(java.lang.ClassNotFoundException e)
file a ClassNotFoundException with the lookupFailureCallback

See Also:
getLookupFailureCallback()

logError

public static void logError(java.lang.String msg,
                            java.lang.Exception e)
Report an error


logError

public static void logError(java.lang.String msg)
Report an error


setMissingClassWarningsSuppressed

public boolean setMissingClassWarningsSuppressed(boolean value)

getLookupFailureCallback

public abstract RepositoryLookupFailureCallback getLookupFailureCallback()
Get the lookup failure callback.


setProject

public final void setProject(Project project)
Set the source path.


getSourceFinder

public abstract SourceFinder getSourceFinder()
Get the SourceFinder, for finding source files.


clearRepository

public abstract void clearRepository()
Clear the BCEL Repository in preparation for analysis.


clearClassContextCache

public abstract void clearClassContextCache()
Clear the ClassContext cache. This should be done between analysis passes.


addClasspathEntry

public abstract void addClasspathEntry(java.lang.String url)
                                throws java.io.IOException
Add an entry to the Repository's classpath.

Parameters:
url - the classpath entry URL
Throws:
java.io.IOException

isApplicationClass

public boolean isApplicationClass(org.apache.bcel.classfile.JavaClass cls)
Return whether or not the given class is an application class.

Parameters:
cls - the class to lookup
Returns:
true if the class is an application class, false if not an application class or if the class cannot be located

isApplicationClass

public boolean isApplicationClass(@DottedClassName
                                  java.lang.String className)
Return whether or not the given class is an application class.

Parameters:
className - name of a class
Returns:
true if the class is an application class, false if not an application class or if the class cannot be located

isApplicationClass

public boolean isApplicationClass(ClassDescriptor desc)

isTooBig

public boolean isTooBig(ClassDescriptor desc)

lookupClass

public abstract org.apache.bcel.classfile.JavaClass lookupClass(@NonNull@DottedClassName
                                                                java.lang.String className)
                                                         throws java.lang.ClassNotFoundException
Lookup a class. Use this method instead of Repository.lookupClass().

Parameters:
className - the name of the class
Returns:
the JavaClass representing the class
Throws:
java.lang.ClassNotFoundException - (but not really)

lookupClass

public org.apache.bcel.classfile.JavaClass lookupClass(@NonNull
                                                       ClassDescriptor classDescriptor)
                                                throws java.lang.ClassNotFoundException
Lookup a class. Use this method instead of Repository.lookupClass().

Parameters:
classDescriptor - descriptor specifying the class to look up
Returns:
the class
Throws:
java.lang.ClassNotFoundException - if the class can't be found

lookupSystemClass

public static org.apache.bcel.classfile.JavaClass lookupSystemClass(@NonNull
                                                                    java.lang.String className)
                                                             throws java.lang.ClassNotFoundException
This is equivalent to Repository.lookupClass() or this.lookupClass(), except it uses the original Repository instead of the current one. This can be important because URLClassPathRepository objects are closed after an analysis, so JavaClass objects obtained from them are no good on subsequent runs.

Parameters:
className - the name of the class
Returns:
the JavaClass representing the class
Throws:
java.lang.ClassNotFoundException

lookupSourceFile

public final java.lang.String lookupSourceFile(@NonNull@DottedClassName
                                               java.lang.String dottedClassName)
Lookup a class's source file

Parameters:
dottedClassName - the name of the class
Returns:
the source file for the class, or SourceLineAnnotation.UNKNOWN_SOURCE_FILE if unable to determine

getClassContext

public abstract ClassContext getClassContext(org.apache.bcel.classfile.JavaClass javaClass)
Get the ClassContext for a class.

Parameters:
javaClass - the class
Returns:
the ClassContext for that class

getClassContextStats

public abstract java.lang.String getClassContextStats()
Get stats about hit rate for ClassContext cache.

Returns:
stats about hit rate for ClassContext cache

loadInterproceduralDatabases

public final void loadInterproceduralDatabases()
If possible, load interprocedural property databases.


loadDefaultInterproceduralDatabases

public final void loadDefaultInterproceduralDatabases()
If possible, load default (built-in) interprocedural property databases. These are the databases for things like Java core APIs that unconditional dereference parameters.


setBoolProperty

public final void setBoolProperty(int prop,
                                  boolean value)
Set a boolean property.

Parameters:
prop - the property to set
value - the value of the property

getBoolProperty

public final boolean getBoolProperty(int prop)
Get a boolean property.

Parameters:
prop - the property
Returns:
value of the property; defaults to false if the property has not had a value assigned explicitly

getSourceInfoMap

public abstract SourceInfoMap getSourceInfoMap()
Get the SourceInfoMap.


setDatabaseInputDir

public final void setDatabaseInputDir(java.lang.String databaseInputDir)
Set the interprocedural database input directory.

Parameters:
databaseInputDir - the interprocedural database input directory

getDatabaseInputDir

public final java.lang.String getDatabaseInputDir()
Get the interprocedural database input directory.

Returns:
the interprocedural database input directory

setDatabaseOutputDir

public final void setDatabaseOutputDir(java.lang.String databaseOutputDir)
Set the interprocedural database output directory.

Parameters:
databaseOutputDir - the interprocedural database output directory

getDatabaseOutputDir

public final java.lang.String getDatabaseOutputDir()
Get the interprocedural database output directory.

Returns:
the interprocedural database output directory

getFieldStoreTypeDatabase

public abstract FieldStoreTypeDatabase getFieldStoreTypeDatabase()
Get the property database recording the types of values stored into fields.

Returns:
the database, or null if there is no database available

getUnconditionalDerefParamDatabase

public abstract ParameterNullnessPropertyDatabase getUnconditionalDerefParamDatabase()
Get the property database recording which methods unconditionally dereference parameters.

Returns:
the database, or null if there is no database available

getReturnValueNullnessPropertyDatabase

public abstract ReturnValueNullnessPropertyDatabase getReturnValueNullnessPropertyDatabase()
Get the property database recording which methods always return nonnull values

Returns:
the database, or null if there is no database available

loadPropertyDatabase

public <DatabaseType extends PropertyDatabase<KeyType,Property>,KeyType extends FieldOrMethodDescriptor,Property> DatabaseType loadPropertyDatabase(DatabaseType database,
                                                                                                                                                    java.lang.String fileName,
                                                                                                                                                    java.lang.String description)
Load an interprocedural property database.

Type Parameters:
DatabaseType - actual type of the database
KeyType - type of key (e.g., method or field)
Property - type of properties stored in the database
Parameters:
database - the empty database object
fileName - file to load database from
description - description of the database (for diagnostics)
Returns:
the database object, or null if the database couldn't be loaded

loadPropertyDatabaseFromResource

public <DatabaseType extends PropertyDatabase<KeyType,Property>,KeyType extends FieldOrMethodDescriptor,Property> DatabaseType loadPropertyDatabaseFromResource(DatabaseType database,
                                                                                                                                                                java.lang.String resourceName,
                                                                                                                                                                java.lang.String description)
Load an interprocedural property database.

Type Parameters:
DatabaseType - actual type of the database
KeyType - type of key (e.g., method or field)
Property - type of properties stored in the database
Parameters:
database - the empty database object
resourceName - name of resource to load the database from
description - description of the database (for diagnostics)
Returns:
the database object, or null if the database couldn't be loaded

storePropertyDatabase

public <DatabaseType extends PropertyDatabase<KeyType,Property>,KeyType extends FieldOrMethodDescriptor,Property> void storePropertyDatabase(DatabaseType database,
                                                                                                                                             java.lang.String fileName,
                                                                                                                                             java.lang.String description)
Write an interprocedural property database.

Type Parameters:
DatabaseType - actual type of the database
KeyType - type of key (e.g., method or field)
Property - type of properties stored in the database
Parameters:
database - the database
fileName - name of database file
description - description of the database

getInnerClassAccessMap

public abstract InnerClassAccessMap getInnerClassAccessMap()

setCurrentAnalysisContext

public static void setCurrentAnalysisContext(AnalysisContext analysisContext)
Set the current analysis context for this thread.

Parameters:
analysisContext - the current analysis context for this thread

removeCurrentAnalysisContext

public static void removeCurrentAnalysisContext()

getSubtypes2

public abstract Subtypes2 getSubtypes2()
Get the Subtypes2 inheritance hierarchy database.


getXClassCollection

public java.util.Collection<XClass> getXClassCollection()
Get Collection of all XClass objects seen so far.

Returns:
Collection of all XClass objects seen so far

FindBugs™ 1.3.9

FindBugs™ is licenced under the LGPL. Copyright © 2006 University of Maryland.