Package edu.umd.cs.findbugs.ba.type
Class StandardTypeMerger
java.lang.Object
edu.umd.cs.findbugs.ba.type.StandardTypeMerger
- All Implemented Interfaces:
ExtendedTypes
,TypeMerger
A TypeMerger which applies standard Java semantics when merging Types.
Subclasses may override mergeReferenceTypes() in order to implement special
typing rules for reference types.
- Author:
- David Hovemeyer
- See Also:
-
Field Summary
Fields inherited from interface edu.umd.cs.findbugs.ba.type.ExtendedTypes
T_AVAIL_TYPE, T_BOTTOM, T_DOUBLE_EXTRA, T_EXCEPTION, T_LONG_EXTRA, T_NULL, T_TOP
-
Constructor Summary
ConstructorDescriptionStandardTypeMerger
(RepositoryLookupFailureCallback lookupFailureCallback, ExceptionSetFactory exceptionSetFactory) Constructor. -
Method Summary
Modifier and TypeMethodDescriptionprotected boolean
isIntegerType
(byte type) Determine if the given typecode refers to an Integer type (other than long).protected boolean
isObjectType
(byte type) Determine if the given typecode refers to an Object type.protected boolean
isReferenceType
(byte type) Determine if the given typecode refers to a reference type.protected org.apache.bcel.generic.ReferenceType
mergeReferenceTypes
(org.apache.bcel.generic.ReferenceType aRef, org.apache.bcel.generic.ReferenceType bRef) Default implementation of merging reference types.org.apache.bcel.generic.Type
mergeTypes
(org.apache.bcel.generic.Type a, org.apache.bcel.generic.Type b) Merge type Types.
-
Constructor Details
-
StandardTypeMerger
public StandardTypeMerger(RepositoryLookupFailureCallback lookupFailureCallback, ExceptionSetFactory exceptionSetFactory) Constructor.- Parameters:
lookupFailureCallback
- object used to report Repository lookup failuresexceptionSetFactory
- factory for creating ExceptionSet objects
-
-
Method Details
-
mergeTypes
public org.apache.bcel.generic.Type mergeTypes(org.apache.bcel.generic.Type a, org.apache.bcel.generic.Type b) throws DataflowAnalysisException Description copied from interface:TypeMerger
Merge type Types.- Specified by:
mergeTypes
in interfaceTypeMerger
- Parameters:
a
- a Typeb
- a Type- Returns:
- the result of merging the two Types
- Throws:
DataflowAnalysisException
-
isReferenceType
protected boolean isReferenceType(byte type) Determine if the given typecode refers to a reference type. This implementation just checks that the type code is T_OBJECT, T_ARRAY, T_NULL, or T_EXCEPTION. Subclasses should override this if they have defined new object types with different type codes. -
isObjectType
protected boolean isObjectType(byte type) Determine if the given typecode refers to an Object type. Subclasses should override with any new object types. -
isIntegerType
protected boolean isIntegerType(byte type) Determine if the given typecode refers to an Integer type (other than long). This implementation checks that the type code is T_INT, T_BYTE, T_BOOLEAN, T_CHAR, or T_SHORT. Subclasses should override this if they have defined new integer types with different type codes. -
mergeReferenceTypes
protected org.apache.bcel.generic.ReferenceType mergeReferenceTypes(org.apache.bcel.generic.ReferenceType aRef, org.apache.bcel.generic.ReferenceType bRef) throws DataflowAnalysisException Default implementation of merging reference types. This just returns the first common superclass, which is compliant with the JVM Spec. Subclasses may override this method in order to implement extended type rules.- Parameters:
aRef
- a ReferenceTypebRef
- a ReferenceType- Returns:
- the merged Type
- Throws:
DataflowAnalysisException
-