|
|||||||||
| PREV CLASS NEXT CLASS | FRAMES NO FRAMES | ||||||||
| SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD | ||||||||
java.lang.Objectcom.google.javascript.rhino.jstype.JSType
public abstract class JSType
Represents JavaScript value types.
Types are split into two separate families: value types and object types.
A special UnknownType exists to represent a wildcard type on which
no information can be gathered. In particular, it can assign to everyone,
is a subtype of everyone (and everyone is a subtype of it).
If you remove the UnknownType, the set of types in the type system
forms a lattice with the isSubtype(com.google.javascript.rhino.jstype.JSType) relation defining the partial
order of types. All types are united at the top of the lattice by the
AllType and at the bottom by the NoType.
| Nested Class Summary | |
|---|---|
static class |
JSType.TypePair
|
| Field Summary | |
|---|---|
static String |
EMPTY_TYPE_COMPONENT
|
static int |
ENUMDECL
|
static String |
NOT_A_CLASS
|
static String |
NOT_A_TYPE
|
static int |
NOT_ENUMDECL
|
protected TemplateTypeMap |
templateTypeMap
|
static String |
UNKNOWN_NAME
|
| Method Summary | ||
|---|---|---|
JSType |
autobox()
Dereference a type for property access. |
|
JSType |
autoboxesTo()
Turn a scalar type to the corresponding object type. |
|
boolean |
canBeCalled()
This predicate is used to test whether a given type can be used as the 'function' in a function call. |
|
boolean |
canCastTo(JSType that)
Tests whether values of this type can be safely assigned
to values of that type. |
|
boolean |
canTestForEqualityWith(JSType that)
Tests whether this and that are meaningfully
comparable. |
|
boolean |
canTestForShallowEqualityWith(JSType that)
Tests whether this and that are meaningfully
comparable using shallow comparison. |
|
void |
clearResolved()
Clears the resolved field. |
|
JSType |
collapseUnion()
Gets the least supertype of this that's not a union. |
|
ObjectType |
dereference()
Dereference a type for property access. |
|
boolean |
differsFrom(JSType that)
Whether this type is meaningfully different from that type for
the purposes of data flow analysis. |
|
boolean |
equals(Object jsType)
|
|
void |
extendTemplateTypeMap(TemplateTypeMap otherMap)
Extends the template type map associated with this type, merging in the keys and values of the specified map. |
|
JSType |
findPropertyType(String propertyName)
Coerces this type to an Object type, then gets the type of the property whose name is given. |
|
JSType |
forceResolve(ErrorReporter t,
StaticScope<JSType> scope)
Force this type to resolve, even if the registry is in a lazy resolving mode. |
|
String |
getDisplayName()
Returns a user meaningful label for the JSType instance. |
|
JSType |
getGreatestSubtype(JSType that)
Gets the greatest subtype of this and that. |
|
JSDocInfo |
getJSDocInfo()
Gets the docInfo for this type. |
|
JSType |
getLeastSupertype(JSType that)
Gets the least supertype of this and that. |
|
abstract BooleanLiteralSet |
getPossibleToBooleanOutcomes()
Computes the set of possible outcomes of the ToBoolean predicate
for this type. |
|
JSType |
getRestrictedTypeGivenToBooleanOutcome(boolean outcome)
Computes the restricted type of this type knowing that the ToBoolean predicate has a specific value. |
|
TemplateTypeMap |
getTemplateTypeMap()
Returns the template type map associated with this type. |
|
JSType.TypePair |
getTypesUnderEquality(JSType that)
Computes the subset of this and that types if equality
is observed. |
|
JSType.TypePair |
getTypesUnderInequality(JSType that)
Computes the subset of this and that types if inequality
is observed. |
|
JSType.TypePair |
getTypesUnderShallowEquality(JSType that)
Computes the subset of this and that types under shallow
equality. |
|
JSType.TypePair |
getTypesUnderShallowInequality(JSType that)
Computes the subset of this and that types under
shallow inequality. |
|
boolean |
hasAnyTemplateTypes()
|
|
boolean |
hasDisplayName()
|
|
int |
hashCode()
|
|
boolean |
hasProperty(String pname)
Checks whether the property is present on the object. |
|
boolean |
isAllType()
|
|
boolean |
isArrayType()
|
|
boolean |
isBooleanObjectType()
|
|
boolean |
isBooleanValueType()
|
|
boolean |
isCheckedUnknownType()
|
|
boolean |
isConstructor()
Whether this type is a FunctionType that is a constructor or a
named type that points to such a type. |
|
boolean |
isDateType()
|
|
boolean |
isDict()
Returns true iff this can be a dict. |
|
boolean |
isEmptyType()
|
|
boolean |
isEnumElementType()
|
|
boolean |
isEnumType()
|
|
static boolean |
isEquivalent(JSType typeA,
JSType typeB)
|
|
boolean |
isEquivalentTo(JSType that)
Checks if two types are equivalent. |
|
boolean |
isFunctionPrototypeType()
Whether this is the prototype of a function. |
|
boolean |
isFunctionType()
Returns true if toMaybeFunctionType returns a non-null FunctionType. |
|
boolean |
isGlobalThisType()
Returns true if this is a global this type. |
|
boolean |
isInstanceType()
Whether this type is an Instance object of some constructor. |
|
boolean |
isInterface()
Whether this type is a FunctionType that is an interface or a named
type that points to such a type. |
|
boolean |
isInvariant(JSType that)
Checks if two types are invariant. |
|
boolean |
isNominalConstructor()
Whether this type is the original constructor of a nominal type. |
|
boolean |
isNominalType()
Whether this type is a nominal type (a named instance object or a named enum). |
|
boolean |
isNoObjectType()
|
|
boolean |
isNoResolvedType()
|
|
boolean |
isNoType()
|
|
boolean |
isNullable()
Tests whether this type is nullable. |
|
boolean |
isNullType()
|
|
boolean |
isNumber()
Tests whether the type is a number (value or Object). |
|
boolean |
isNumberObjectType()
|
|
boolean |
isNumberValueType()
|
|
boolean |
isObject()
Tests whether this type is an Object, or any subtype thereof. |
|
boolean |
isOrdinaryFunction()
Whether this type is a FunctionType that is an ordinary function or
a named type that points to such a type. |
|
boolean |
isRecordType()
|
|
boolean |
isRegexpType()
|
|
boolean |
isResolved()
Whether the type has been resolved. |
|
boolean |
isString()
Tests whether the type is a string (value or Object). |
|
boolean |
isStringObjectType()
|
|
boolean |
isStringValueType()
|
|
boolean |
isStruct()
Returns true iff this can be a struct. |
|
boolean |
isSubtype(JSType that)
Checks whether this is a subtype of that. |
|
boolean |
isTemplateType()
|
|
boolean |
isTemplatizedType()
|
|
boolean |
isUnionType()
|
|
boolean |
isUnknownType()
|
|
boolean |
isVoidType()
|
|
void |
matchConstraint(JSType constraint)
Modify this type so that it matches the specified type. |
|
boolean |
matchesInt32Context()
This predicate is used to test whether a given type can appear in a 'Int32' context. |
|
boolean |
matchesNumberContext()
This predicate is used to test whether a given type can appear in a numeric context, such as an operand of a multiply operator. |
|
boolean |
matchesObjectContext()
This predicate is used to test whether a given type can appear in an Object context, such as the expression in a with statement. |
|
boolean |
matchesStringContext()
This predicate is used to test whether a given type can appear in a String context, such as an operand of a string concat (+) operator. |
|
boolean |
matchesUint32Context()
This predicate is used to test whether a given type can appear in a 'Uint32' context. |
|
JSType |
resolve(ErrorReporter t,
StaticScope<JSType> scope)
Resolve this type in the given scope. |
|
JSType |
restrictByNotNullOrUndefined()
If this is a union type, returns a union type that does not include the null or undefined type. |
|
boolean |
setValidator(com.google.common.base.Predicate<JSType> validator)
Certain types have constraints on them at resolution-time. |
|
TernaryValue |
testForEquality(JSType that)
Compares this and that. |
|
String |
toAnnotationString()
A string representation of this type, suitable for printing in type annotations at code generation time. |
|
String |
toDebugHashCodeString()
A hash code function for diagnosing complicated issues around type-identity. |
|
EnumElementType |
toMaybeEnumElementType()
Downcasts this to an EnumElementType, or returns null if this is not an EnumElementType. |
|
EnumType |
toMaybeEnumType()
Downcasts this to an EnumType, or returns null if this is not an EnumType. |
|
FunctionType |
toMaybeFunctionType()
Downcasts this to a FunctionType, or returns null if this is not a function. |
|
static FunctionType |
toMaybeFunctionType(JSType type)
Null-safe version of toMaybeFunctionType(). |
|
TemplateType |
toMaybeTemplateType()
Downcasts this to a TemplateType, or returns null if this is not a function. |
|
static TemplateType |
toMaybeTemplateType(JSType type)
Null-safe version of toMaybeTemplateType(). |
|
TemplatizedType |
toMaybeTemplatizedType()
Downcasts this to a TemplatizedType, or returns null if this is not a function. |
|
static TemplatizedType |
toMaybeTemplatizedType(JSType type)
Null-safe version of toMaybeTemplatizedType(). |
|
UnionType |
toMaybeUnionType()
Downcasts this to a UnionType, or returns null if this is not a UnionType. |
|
ObjectType |
toObjectType()
Casts this to an ObjectType, or returns null if this is not an ObjectType. |
|
String |
toString()
A string representation of this type, suitable for printing in warnings. |
|
JSType |
unboxesTo()
Turn an object type to its corresponding scalar type. |
|
abstract
|
visit(Visitor<T> visitor)
Visit this type with the given visitor. |
|
| Methods inherited from class java.lang.Object |
|---|
clone, finalize, getClass, notify, notifyAll, wait, wait, wait |
| Field Detail |
|---|
protected TemplateTypeMap templateTypeMap
public static final String UNKNOWN_NAME
public static final String NOT_A_CLASS
public static final String NOT_A_TYPE
public static final String EMPTY_TYPE_COMPONENT
public static final int ENUMDECL
public static final int NOT_ENUMDECL
| Method Detail |
|---|
public JSDocInfo getJSDocInfo()
public String getDisplayName()
public boolean hasDisplayName()
public boolean hasProperty(String pname)
pname - The property name.public boolean isNoType()
public boolean isNoResolvedType()
public boolean isNoObjectType()
public final boolean isEmptyType()
public boolean isNumberObjectType()
public boolean isNumberValueType()
public boolean isFunctionPrototypeType()
public boolean isStringObjectType()
public boolean isStringValueType()
public final boolean isString()
this <: (String, string)public final boolean isNumber()
this <: (Number, number)public boolean isArrayType()
public boolean isBooleanObjectType()
public boolean isBooleanValueType()
public boolean isRegexpType()
public boolean isDateType()
public boolean isNullType()
public boolean isVoidType()
public boolean isAllType()
public boolean isUnknownType()
public boolean isCheckedUnknownType()
public final boolean isUnionType()
public boolean isStruct()
this can be a struct.
UnionType overrides the method, assume this is not a union here.
public boolean isDict()
this can be a dict.
UnionType overrides the method, assume this is not a union here.
public UnionType toMaybeUnionType()
public final boolean isGlobalThisType()
public final boolean isFunctionType()
public FunctionType toMaybeFunctionType()
public static FunctionType toMaybeFunctionType(JSType type)
public final boolean isEnumElementType()
public EnumElementType toMaybeEnumElementType()
public boolean isEnumType()
public EnumType toMaybeEnumType()
public boolean isRecordType()
public final boolean isTemplatizedType()
public TemplatizedType toMaybeTemplatizedType()
public static TemplatizedType toMaybeTemplatizedType(JSType type)
public final boolean isTemplateType()
public TemplateType toMaybeTemplateType()
public static TemplateType toMaybeTemplateType(JSType type)
public boolean hasAnyTemplateTypes()
public TemplateTypeMap getTemplateTypeMap()
public void extendTemplateTypeMap(TemplateTypeMap otherMap)
public boolean isObject()
Object, or any subtype thereof.
this <: Objectpublic boolean isConstructor()
FunctionType that is a constructor or a
named type that points to such a type.
public boolean isNominalType()
public final boolean isNominalConstructor()
public boolean isInstanceType()
InstanceObjectType.
public boolean isInterface()
FunctionType that is an interface or a named
type that points to such a type.
public boolean isOrdinaryFunction()
FunctionType that is an ordinary function or
a named type that points to such a type.
public final boolean isEquivalentTo(JSType that)
public final boolean isInvariant(JSType that)
EquivalenceMethodpublic final boolean differsFrom(JSType that)
that type for
the purposes of data flow analysis.
This is a trickier check than pure equality, because it has to properly
handle unknown types. See EquivalenceMethod for more info.
public static boolean isEquivalent(JSType typeA,
JSType typeB)
public boolean equals(Object jsType)
equals in class Objectpublic int hashCode()
hashCode in class Objectpublic final boolean matchesInt32Context()
Number.
public final boolean matchesUint32Context()
public boolean matchesNumberContext()
public boolean matchesStringContext()
String context, such as an operand of a string concat (+) operator.
All types have at least the potential for converting to String.
When we add externally defined types, such as a browser OM, we may choose
to add types that do not automatically convert to String.
public boolean matchesObjectContext()
Object context, such as the expression in a with statement.
Most types we will encounter, except notably null, have at least
the potential for converting to Object. Host defined objects can
get peculiar.
public JSType findPropertyType(String propertyName)
ObjectType.getPropertyType(java.lang.String), returns null if the property
is not found.
null if the current type cannot
have properties, or if the type is not found.public boolean canBeCalled()
true if this type might be callable.public boolean canCastTo(JSType that)
this type can be safely assigned
to values of that type.
The default implementation verifies that this is a subtype
of that.
public JSType autoboxesTo()
null if this type is not a scalar.public JSType unboxesTo()
null if this type does not unbox.public ObjectType toObjectType()
public JSType autobox()
public final ObjectType dereference()
public final boolean canTestForEqualityWith(JSType that)
this and that are meaningfully
comparable. By meaningfully, we mean compatible types that do not lead
to step 22 of the definition of the Abstract Equality Comparison
Algorithm (11.9.3, page 55–56) of the ECMA-262 specification.
public TernaryValue testForEquality(JSType that)
this and that.
TernaryValue.TRUE if the comparison of values of
this type and that always succeed (such as
undefined compared to null)TernaryValue.FALSE if the comparison of values of
this type and that always fails (such as
undefined compared to number)TernaryValue.UNKNOWN if the comparison can succeed or
fail depending on the concrete valuespublic final boolean canTestForShallowEqualityWith(JSType that)
this and that are meaningfully
comparable using shallow comparison. By meaningfully, we mean compatible
types that are not rejected by step 1 of the definition of the Strict
Equality Comparison Algorithm (11.9.6, page 56–57) of the
ECMA-262 specification.
public boolean isNullable()
public JSType collapseUnion()
public JSType getLeastSupertype(JSType that)
this and that.
The least supertype is the join (∨) or supremum of both types in the
type lattice.Examples:
number ∨ * = *number ∨ Object = (number, Object)Number ∨ Object = Object
this ∨ thatpublic JSType getGreatestSubtype(JSType that)
this and that.
The greatest subtype is the meet (∧) or infimum of both types in the
type lattice.Examples
Number ∧ Any = Anynumber ∧ Object = AnyNumber ∧ Object = Number
this ∨ thatpublic JSType getRestrictedTypeGivenToBooleanOutcome(boolean outcome)
ToBoolean predicate has a specific value. For more information
about the ToBoolean predicate, see
getPossibleToBooleanOutcomes().
outcome - the value of the ToBoolean predicate
public abstract BooleanLiteralSet getPossibleToBooleanOutcomes()
ToBoolean predicate
for this type. The ToBoolean predicate is defined by the ECMA-262
standard, 3rd edition. Its behavior for simple types can be
summarized by the following table:
| type | result |
|---|---|
undefined | {false} |
null | {false} |
boolean | {true, false} |
number | {true, false} |
string | {true, false} |
Object | {true} |
public JSType.TypePair getTypesUnderEquality(JSType that)
this and that types if equality
is observed. If a value v1 of type null is equal to a value
v2 of type (undefined,number), we can infer that the
type of v1 is null and the type of v2 is
undefined.
this as the first
component and the restricted type of that as the second
element. The returned pair is never null even though its
components may be nullpublic JSType.TypePair getTypesUnderInequality(JSType that)
this and that types if inequality
is observed. If a value v1 of type number is not equal to a
value v2 of type (undefined,number), we can infer that the
type of v1 is number and the type of v2 is
number as well.
this as the first
component and the restricted type of that as the second
element. The returned pair is never null even though its
components may be nullpublic JSType.TypePair getTypesUnderShallowEquality(JSType that)
this and that types under shallow
equality.
this as the first
component and the restricted type of that as the second
element. The returned pair is never null even though its
components may be null.public JSType.TypePair getTypesUnderShallowInequality(JSType that)
this and that types under
shallow inequality.
this as the first
component and the restricted type of that as the second
element. The returned pair is never null even though its
components may be nullpublic JSType restrictByNotNullOrUndefined()
public boolean isSubtype(JSType that)
this is a subtype of that.Subtyping rules:
(T<sub>1</sub>, …, T<sub>n</sub>) <: U if and only
T<sub>k</sub> <: U for all k ∈ 1..n.U <: (T<sub>1</sub>, …, T<sub>n</sub>) if and only
if U <: T<sub>k</sub> for some index k.O<sub>1</sub> is a subtype
of an object O<sub>2</sub> if it has more properties
than O<sub>2</sub> and all common properties are
pairwise subtypes.
this <: thatpublic abstract <T> T visit(Visitor<T> visitor)
Visitor
public final JSType forceResolve(ErrorReporter t,
StaticScope<JSType> scope)
resolve(com.google.javascript.rhino.ErrorReporter, com.google.javascript.rhino.jstype.StaticScope)
public final JSType resolve(ErrorReporter t,
StaticScope<JSType> scope)
this, as defined by
isEquivalentTo(com.google.javascript.rhino.jstype.JSType). It may or may not be the same object. This method
may modify the internal state of this, as long as it does
so in a way that preserves Object equality.
For efficiency, we should only resolve a type once per compilation job.
For incremental compilations, one compilation job may need the
artifacts from a previous generation, so we will eventually need
a generational flag instead of a boolean one.
public final boolean isResolved()
public final void clearResolved()
public boolean setValidator(com.google.common.base.Predicate<JSType> validator)
@extends annotation must be an
object. Clients should inject a validator that emits a warning
if the type does not validate, and return false.
public String toString()
toString in class Objectpublic String toDebugHashCodeString()
public final String toAnnotationString()
public void matchConstraint(JSType constraint)
constraint -
|
|||||||||
| PREV CLASS NEXT CLASS | FRAMES NO FRAMES | ||||||||
| SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD | ||||||||