|
|||||||||
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
|
static String |
UNKNOWN_NAME
|
Method Summary | ||
---|---|---|
JSType |
autobox()
Dereference a type for property access. |
|
JSType |
autoboxesTo()
Gets the type to which this type auto-boxes. |
|
boolean |
canAssignTo(JSType that)
Tests whether values of this type can be safely assigned
to values of that type. |
|
boolean |
canBeCalled()
This predicate is used to test whether a given type can be used as the 'function' in a function call. |
|
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. |
|
boolean |
equals(Object jsType)
|
|
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. |
|
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 |
hasDisplayName()
|
|
int |
hashCode()
|
|
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 |
isEmptyType()
|
|
boolean |
isEnumElementType()
|
|
boolean |
isEnumType()
|
|
static boolean |
isEquivalent(JSType typeA,
JSType typeB)
|
|
boolean |
isEquivalentTo(JSType jsType)
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 |
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 |
isSubtype(JSType that)
Checks whether this is a subtype of that . |
|
boolean |
isTemplateType()
|
|
boolean |
isUnionType()
|
|
boolean |
isUnknownType()
|
|
boolean |
isVoidType()
|
|
void |
matchConstraint(ObjectType contraint)
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(). |
|
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()
Gets the type to which this type unboxes. |
|
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 |
---|
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 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 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 boolean isTemplateType()
public boolean isObject()
Object
, or any subtype thereof.
this <: Object
public 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 boolean isEquivalentTo(JSType jsType)
public static boolean isEquivalent(JSType typeA, JSType typeB)
public boolean equals(Object jsType)
equals
in class Object
public int hashCode()
hashCode
in class Object
public 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 canAssignTo(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 does not auto-boxpublic 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 ∨ that
public 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
= Any
number ∧ Object
= Any
Number ∧ Object
= Number
this ∨ that
public 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 null
public 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 null
public 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 null
public 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 <: that
public boolean differsFrom(JSType that)
that
type.
This is a trickier check than pure equality, because it has to properly
handle unknown types.
public 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 Object
public String toDebugHashCodeString()
public final String toAnnotationString()
public void matchConstraint(ObjectType contraint)
|
|||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | ||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |