Class StandardTypeMerger

java.lang.Object
edu.umd.cs.findbugs.ba.type.StandardTypeMerger
All Implemented Interfaces:
ExtendedTypes, TypeMerger

public class StandardTypeMerger extends 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.
Author:
David Hovemeyer
See Also:
  • Constructor Details

    • StandardTypeMerger

      public StandardTypeMerger(RepositoryLookupFailureCallback lookupFailureCallback, ExceptionSetFactory exceptionSetFactory)
      Constructor.
      Parameters:
      lookupFailureCallback - object used to report Repository lookup failures
      exceptionSetFactory - 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 interface TypeMerger
      Parameters:
      a - a Type
      b - 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 ReferenceType
      bRef - a ReferenceType
      Returns:
      the merged Type
      Throws:
      DataflowAnalysisException