Package javassist.bytecode.analysis
Class MultiType
java.lang.Object
javassist.bytecode.analysis.Type
javassist.bytecode.analysis.MultiType
MultiType represents an unresolved type. Whenever two
Type
instances are merged, if they share more than one super type (either an
interface or a superclass), then a MultiType
is used to
represent the possible super types. The goal of a MultiType
is to reduce the set of possible types down to a single resolved type. This
is done by eliminating non-assignable types from the typeset when the
MultiType
is passed as an argument to
Type.isAssignableFrom(Type)
, as well as removing non-intersecting
types during a merge.
Note: Currently the MultiType
instance is reused as much
as possible so that updates are visible from all frames. In addition, all
MultiType
merge paths are also updated. This is somewhat
hackish, but it appears to handle most scenarios.- Author:
- Jason T. Greene
-
Field Summary
-
Constructor Summary
-
Method Summary
Modifier and TypeMethodDescriptionboolean
Always returns null since this type is never used for an array.Gets the class that corresponds with this type.int
getSize()
Always returns 1, since this type is a reference.int
hashCode()
boolean
isArray()
Always reutnrs false since this type is never used for an arrayboolean
isAssignableFrom
(Type type) Determines whether this type is assignable, to the passed type.boolean
isAssignableTo
(Type type) boolean
Always returns true, since this type is always a reference.Finds the common base type, or interface which both this and the specified type can be assigned.toString()
Methods inherited from class javassist.bytecode.analysis.Type
get, getDimensions, isSpecial
-
Constructor Details
-
MultiType
-
MultiType
-
-
Method Details
-
getCtClass
Gets the class that corresponds with this type. If this information is not yet known, java.lang.Object will be returned.- Overrides:
getCtClass
in classType
- Returns:
- the class for this type, or null if special
-
getComponent
Always returns null since this type is never used for an array.- Overrides:
getComponent
in classType
- Returns:
- the array component if an array, otherwise null
-
getSize
public int getSize()Always returns 1, since this type is a reference. -
isArray
public boolean isArray()Always reutnrs false since this type is never used for an array -
isAssignableFrom
Description copied from class:Type
Determines whether this type is assignable, to the passed type. A type is assignable to another if it is either the same type, or a sub-type.- Overrides:
isAssignableFrom
in classType
- Parameters:
type
- the type to test assignability to- Returns:
- true if this is assignable to type, otherwise false
-
isAssignableTo
-
isReference
public boolean isReference()Always returns true, since this type is always a reference.- Overrides:
isReference
in classType
- Returns:
- true
-
merge
Description copied from class:Type
Finds the common base type, or interface which both this and the specified type can be assigned. If there is more than one possible answer, then aMultiType
, or aMultiArrayType
is returned. Multi-types have special rules, and successive merges and assignment tests on them will alter their internal state, as well as other multi-types they have been merged with. This method is used by the data-flow analyzer to merge the type state from multiple branches. -
hashCode
public int hashCode() -
equals
-
toString
-