Package edu.umd.cs.findbugs.ba.type
Class StandardTypeMerger
- java.lang.Object
-
- edu.umd.cs.findbugs.ba.type.StandardTypeMerger
-
- All Implemented Interfaces:
ExtendedTypes
,TypeMerger
- Direct Known Subclasses:
FindRefComparison.RefComparisonTypeMerger
public class StandardTypeMerger extends java.lang.Object implements TypeMerger, ExtendedTypes
A TypeMerger which applies standard Java semantics when merging Types. Subclasses may override mergeReferenceTypes() in order to implement special typing rules for reference types.- See Also:
TypeMerger
-
-
Field Summary
Fields Modifier and Type Field Description private ExceptionSetFactory
exceptionSetFactory
private RepositoryLookupFailureCallback
lookupFailureCallback
-
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
Constructors Constructor Description StandardTypeMerger(RepositoryLookupFailureCallback lookupFailureCallback, ExceptionSetFactory exceptionSetFactory)
Constructor.
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description protected 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.private boolean
isThrowable(org.apache.bcel.generic.ReferenceType ref)
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.private static void
updateExceptionSet(ExceptionSet exceptionSet, org.apache.bcel.generic.ObjectType type)
-
-
-
Field Detail
-
lookupFailureCallback
private final RepositoryLookupFailureCallback lookupFailureCallback
-
exceptionSetFactory
private final ExceptionSetFactory exceptionSetFactory
-
-
Constructor Detail
-
StandardTypeMerger
public StandardTypeMerger(RepositoryLookupFailureCallback lookupFailureCallback, ExceptionSetFactory exceptionSetFactory)
Constructor.- Parameters:
lookupFailureCallback
- object used to report Repository lookup failuresexceptionSetFactory
- factory for creating ExceptionSet objects
-
-
Method Detail
-
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.
-
updateExceptionSet
private static void updateExceptionSet(ExceptionSet exceptionSet, org.apache.bcel.generic.ObjectType type)
-
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
-
isThrowable
private boolean isThrowable(org.apache.bcel.generic.ReferenceType ref)
-
-