Class JSTypeRegistry
java.lang.Object
com.google.javascript.rhino.jstype.JSTypeRegistry
- All Implemented Interfaces:
Serializable
The type registry is used to resolve named types.
This class is not thread-safe.
- See Also:
-
Nested Class Summary
Modifier and TypeClassDescriptionstatic enum
The type registry has three modes, which control how type ASTs are converted to types increateFromTypeNodes(com.google.javascript.rhino.Node, java.lang.String, com.google.javascript.rhino.jstype.StaticScope<com.google.javascript.rhino.jstype.JSType>)
. -
Field Summary
Modifier and TypeFieldDescriptionstatic final String
The name associated with the template variable corresponding to the property value type for Javascript Objects and Arrays.static final String
The name associated with the template variable corresponding to the property key type of the built-in Javascript object. -
Constructor Summary
ConstructorDescriptionJSTypeRegistry
(ErrorReporter reporter) Constructs a new type registry populated with the built-in types.JSTypeRegistry
(ErrorReporter reporter, boolean tolerateUndefinedValues) Constructs a new type registry populated with the built-in types. -
Method Summary
Modifier and TypeMethodDescriptionboolean
canPropertyBeDefined
(JSType type, String propertyName) Returns whether the given property can possibly be set on the given type.void
Flushes out the current resolved and unresolved Named Types from the type registry.void
Clears the template type name.Create an anonymous object type.createConstructorType
(JSType returnType, boolean lastVarArgs, JSType... parameterTypes) Creates a function type which can act as a constructor.createConstructorType
(JSType returnType, JSType... parameterTypes) Creates a function type which can act as a constructor.createConstructorType
(String name, Node source, Node parameters, JSType returnType, com.google.common.collect.ImmutableList<String> templateKeyNames) Creates a constructor function type.Creates a type representing nullable values of the given type.createEnumType
(String name, Node source, JSType elementsType) Creates an enum type.createFromTypeNodes
(Node n, String sourceName, StaticScope<JSType> scope) Creates a JSType from the nodes representing a type.createFunctionType
(JSType returnType, boolean lastVarArgs, JSType... parameterTypes) Creates a function type.createFunctionType
(JSType returnType, JSType... parameterTypes) Creates a function type.createFunctionType
(JSType returnType, Node parameters) createFunctionType
(JSType returnType, List<JSType> parameterTypes) Creates a function type.createFunctionType
(ObjectType instanceType, JSType returnType, List<JSType> parameterTypes) Creates a function type in whichthis
refers to an object instance.createFunctionTypeWithNewReturnType
(FunctionType existingFunctionType, JSType returnType) Creates a new function type based on an existing function type but with a new return type.createFunctionTypeWithNewThisType
(FunctionType existingFunctionType, ObjectType thisType) Creates a new function type based on an existing function type but with a newthis
type.createFunctionTypeWithVarArgs
(JSType returnType, JSType... parameterTypes) Creates a function type.createFunctionTypeWithVarArgs
(JSType returnType, List<JSType> parameterTypes) Creates a function type.createFunctionTypeWithVarArgs
(ObjectType instanceType, JSType returnType, List<JSType> parameterTypes) Creates a function type in whichthis
refers to an object instance.createInterfaceType
(String name, Node source) Creates an interface function type.createNamedType
(String reference, String sourceName, int lineno, int charno) Creates a named type.createNullableType
(JSType type) Creates a type representing nullable values of the given type.createObjectType
(ObjectType implicitPrototype) Create an object type.createObjectType
(String name, Node n, ObjectType implicitPrototype) Create an object type.Creates a nullable and undefine-able value of the given type.createOptionalParameters
(JSType... parameterTypes) Creates a tree hierarchy representing a typed parameter list in which every parameter is optional.createOptionalType
(JSType type) Creates a type representing optional values of the given type.createParameters
(JSType... parameterTypes) Creates a tree hierarchy representing a typed argument list.createParameters
(List<JSType> parameterTypes) Creates a tree hierarchy representing a typed argument list.createParametersWithVarArgs
(JSType... parameterTypes) Creates a tree hierarchy representing a typed argument list.createParametersWithVarArgs
(List<JSType> parameterTypes) Creates a tree hierarchy representing a typed argument list.com.google.javascript.rhino.jstype.RecordType
createRecordType
(Map<String, com.google.javascript.rhino.jstype.RecordTypeBuilder.RecordProperty> properties) Creates a record type.createTemplateType
(String name) createTemplateTypeMap
(com.google.common.collect.ImmutableList<TemplateType> templateKeys, com.google.common.collect.ImmutableList<JSType> templateValues) Creates a template type map from the specified list of template keys and template value types.createTemplatizedType
(ObjectType baseType, com.google.common.collect.ImmutableList<JSType> templatizedTypes) Creates a templatized instance of the specified type.createTemplatizedType
(ObjectType baseType, JSType... templatizedTypes) Creates a templatized instance of the specified type.createUnionType
(JSType... variants) Creates a union type whose variants are the arguments.createUnionType
(JSTypeNative... variants) Creates a union type whose variants are the built-in types specified by the arguments.boolean
declareType
(String name, JSType t) Records declared global type names.void
forwardDeclareType
(String name) Records a forward-declared type name.getDirectImplementors
(ObjectType interfaceInstance) Returns a collection of types that directly implementinterfaceInstance
.getEachReferenceTypeWithProperty
(String propertyName) Returns each reference type that has a propertypropertyName
defined on it.getGreatestSubtypeWithProperty
(JSType type, String propertyName) Gets the greatest subtype of thetype
that has a propertypropertyName
defined on it.getNativeFunctionType
(JSTypeNative typeId) getNativeObjectType
(JSTypeNative typeId) getNativeType
(JSTypeNative typeId) getType
(StaticScope<JSType> scope, String jsTypeName, String sourceName, int lineno, int charno) Looks up a type by name.Looks up a type by name.getTypesWithProperty
(String propertyName) Returns each type that has a propertypropertyName
defined on it.boolean
hasNamespace
(String name) Determines whether the given JS package exists.void
Identifies the name of a typedef or enum before we actually declare it.void
Increments the current generation.boolean
isForwardDeclaredType
(String name) Whether this is a forward-declared type name.void
overwriteDeclaredType
(String name, JSType t) Overrides a declared global type name.void
registerPropertyOnType
(String propertyName, JSType type) Tells the type system thatowner
may have a property namedpropertyName
.void
Reset to run the TypeCheck pass.boolean
resetImplicitPrototype
(JSType type, ObjectType newImplicitProto) Set the implicit prototype if it's possible to do so.void
resolveTypesInScope
(StaticScope<JSType> scope) Resolve all the unresolved types in the given scope.void
setLastGeneration
(boolean lastGeneration) Sets whether this is the last generation.void
Set the current resolving mode of the type registry.void
setTemplateTypeNames
(List<TemplateType> keys) Sets the template type name.boolean
void
unregisterPropertyOnType
(String propertyName, JSType type) Removes the index's reference to a property on the given type (if it is currently registered).
-
Field Details
-
OBJECT_INDEX_TEMPLATE
The name associated with the template variable corresponding to the property key type of the built-in Javascript object.- See Also:
-
OBJECT_ELEMENT_TEMPLATE
The name associated with the template variable corresponding to the property value type for Javascript Objects and Arrays.- See Also:
-
-
Constructor Details
-
JSTypeRegistry
Constructs a new type registry populated with the built-in types. -
JSTypeRegistry
Constructs a new type registry populated with the built-in types.
-
-
Method Details
-
getObjectElementKey
- Returns:
- The template variable corresponding to the property value type for Javascript Objects and Arrays.
-
getObjectIndexKey
- Returns:
- The template variable corresponding to the property key type of the built-in Javascript object.
-
setResolveMode
Set the current resolving mode of the type registry.- See Also:
-
getErrorReporter
-
shouldTolerateUndefinedValues
public boolean shouldTolerateUndefinedValues() -
resetForTypeCheck
public void resetForTypeCheck()Reset to run the TypeCheck pass. -
registerPropertyOnType
Tells the type system thatowner
may have a property namedpropertyName
. This allows the registry to keep track of what types a property is defined upon. This is NOT the same as saying thatowner
must have a property named type. ObjectType#hasProperty attempts to minimize false positives ("if we're not sure, then don't type check this property"). The type registry, on the other hand, should attempt to minimize false negatives ("if this property is assigned anywhere in the program, it must show up in the type registry"). -
unregisterPropertyOnType
Removes the index's reference to a property on the given type (if it is currently registered). If the property is not registered on the type yet, this method will not change internal state.- Parameters:
propertyName
- the name of the property to unregistertype
- the type to unregister the property on.
-
getGreatestSubtypeWithProperty
Gets the greatest subtype of thetype
that has a propertypropertyName
defined on it. -
canPropertyBeDefined
Returns whether the given property can possibly be set on the given type. -
getTypesWithProperty
Returns each type that has a propertypropertyName
defined on it. Like most types in our type system, the collection of types returned will be collapsed. This means that if a type is defined onObject
and onArray
, it would be reasonable for this method to return either[Object, Array]
or just[Object]
. -
getEachReferenceTypeWithProperty
Returns each reference type that has a propertypropertyName
defined on it. Unlike most types in our type system, the collection of types returned will not be collapsed. This means that if a type is defined onObject
and onArray
, this method must return[Object, Array]
. It would not be correct to collapse them to[Object]
. -
incrementGeneration
public void incrementGeneration()Increments the current generation. Clients must call this in order to move to the next generation of type resolution, allowing types to attempt resolution again. -
setLastGeneration
public void setLastGeneration(boolean lastGeneration) Sets whether this is the last generation. In the last generation,NamedType
warns about unresolved types. -
getDirectImplementors
Returns a collection of types that directly implementinterfaceInstance
. Subtypes of implementing types are not guaranteed to be returned.interfaceInstance
must be an ObjectType for the instance of the interface. -
declareType
Records declared global type names. This makes resolution faster and more robust in the common case.- Parameters:
name
- The name of the type to be recorded.t
- The actual type being associated with the name.- Returns:
- True if this name is not already defined, false otherwise.
-
overwriteDeclaredType
Overrides a declared global type name. Throws an exception if this type name hasn't been declared yet. -
forwardDeclareType
Records a forward-declared type name. We will not emit errors if this type name never resolves to anything. -
isForwardDeclaredType
Whether this is a forward-declared type name. -
hasNamespace
Determines whether the given JS package exists. -
getType
Looks up a type by name.- Parameters:
jsTypeName
- The name string.- Returns:
- the corresponding JSType object or
null
it cannot be found
-
getNativeType
-
getNativeObjectType
-
getNativeFunctionType
-
getType
public JSType getType(StaticScope<JSType> scope, String jsTypeName, String sourceName, int lineno, int charno) Looks up a type by name. To allow for forward references to types, an unrecognized string has to be bound to a NamedType object that will be resolved later.- Parameters:
scope
- A scope for doing type name resolution.jsTypeName
- The name string.sourceName
- The name of the source file where this reference appears.lineno
- The line number of the reference.- Returns:
- a NamedType if the string argument is not one of the known types, otherwise the corresponding JSType object.
-
clearNamedTypes
public void clearNamedTypes()Flushes out the current resolved and unresolved Named Types from the type registry. This is intended to be used ONLY before a compile is run. -
resolveTypesInScope
Resolve all the unresolved types in the given scope. -
createOptionalType
Creates a type representing optional values of the given type.- Returns:
- the union of the type and the void type
-
createDefaultObjectUnion
Creates a type representing nullable values of the given type.- Returns:
- the union of the type and the Null type
-
createNullableType
Creates a type representing nullable values of the given type.- Returns:
- the union of the type and the Null type
-
createOptionalNullableType
Creates a nullable and undefine-able value of the given type.- Returns:
- The union of the type and null and undefined.
-
createUnionType
Creates a union type whose variants are the arguments. -
createUnionType
Creates a union type whose variants are the built-in types specified by the arguments. -
createEnumType
Creates an enum type. -
createFunctionType
Creates a function type.- Parameters:
returnType
- the function's return typeparameterTypes
- the parameters' types
-
createFunctionTypeWithVarArgs
Creates a function type. The last parameter type of the function is considered a variable length argument.- Parameters:
returnType
- the function's return typeparameterTypes
- the parameters' types
-
createFunctionType
Creates a function type.- Parameters:
returnType
- the function's return typeparameterTypes
- the parameters' types
-
createFunctionTypeWithVarArgs
Creates a function type. The last parameter type of the function is considered a variable length argument.- Parameters:
returnType
- the function's return typeparameterTypes
- the parameters' types
-
createConstructorType
Creates a function type which can act as a constructor.- Parameters:
returnType
- the function's return typeparameterTypes
- the parameters' types
-
createFunctionType
public JSType createFunctionType(ObjectType instanceType, JSType returnType, List<JSType> parameterTypes) Creates a function type in whichthis
refers to an object instance.- Parameters:
instanceType
- the type ofthis
returnType
- the function's return typeparameterTypes
- the parameters' types
-
createFunctionTypeWithVarArgs
public JSType createFunctionTypeWithVarArgs(ObjectType instanceType, JSType returnType, List<JSType> parameterTypes) Creates a function type in whichthis
refers to an object instance. The last parameter type of the function is considered a variable length argument.- Parameters:
instanceType
- the type ofthis
returnType
- the function's return typeparameterTypes
- the parameters' types
-
createParameters
Creates a tree hierarchy representing a typed argument list.- Parameters:
parameterTypes
- the parameter types.- Returns:
- a tree hierarchy representing a typed argument list.
-
createParametersWithVarArgs
Creates a tree hierarchy representing a typed argument list. The last parameter type is considered a variable length argument.- Parameters:
parameterTypes
- the parameter types. The last element of this array is considered a variable length argument.- Returns:
- a tree hierarchy representing a typed argument list.
-
createParameters
Creates a tree hierarchy representing a typed argument list.- Parameters:
parameterTypes
- the parameter types.- Returns:
- a tree hierarchy representing a typed argument list.
-
createParametersWithVarArgs
Creates a tree hierarchy representing a typed argument list. The last parameter type is considered a variable length argument.- Parameters:
parameterTypes
- the parameter types. The last element of this array is considered a variable length argument.- Returns:
- a tree hierarchy representing a typed argument list.
-
createOptionalParameters
Creates a tree hierarchy representing a typed parameter list in which every parameter is optional. -
createFunctionType
public FunctionType createFunctionType(JSType returnType, boolean lastVarArgs, JSType... parameterTypes) Creates a function type.- Parameters:
returnType
- the function's return typelastVarArgs
- whether the last parameter type should be considered as an extensible var_args parameterparameterTypes
- the parameters' types
-
createFunctionTypeWithNewReturnType
public FunctionType createFunctionTypeWithNewReturnType(FunctionType existingFunctionType, JSType returnType) Creates a new function type based on an existing function type but with a new return type.- Parameters:
existingFunctionType
- the existing function type.returnType
- the new return type.
-
createFunctionTypeWithNewThisType
public FunctionType createFunctionTypeWithNewThisType(FunctionType existingFunctionType, ObjectType thisType) Creates a new function type based on an existing function type but with a newthis
type.- Parameters:
existingFunctionType
- the existing function type.thisType
- the new this type.
-
createFunctionType
- Parameters:
parameters
- the function's parameters ornull
to indicate that the parameter types are unknown.returnType
- the function's return type ornull
to indicate that the return type is unknown.
-
createConstructorType
public FunctionType createConstructorType(JSType returnType, boolean lastVarArgs, JSType... parameterTypes) Creates a function type which can act as a constructor.- Parameters:
returnType
- the function's return typelastVarArgs
- whether the last parameter type should be considered as an extensible var_args parameterparameterTypes
- the parameters' types
-
createObjectType
Create an object type. -
createRecordType
public com.google.javascript.rhino.jstype.RecordType createRecordType(Map<String, com.google.javascript.rhino.jstype.RecordTypeBuilder.RecordProperty> properties) Creates a record type. -
createObjectType
Create an object type. -
createAnonymousObjectType
Create an anonymous object type.- Parameters:
info
- Used to mark object literals as structs; can benull
-
resetImplicitPrototype
Set the implicit prototype if it's possible to do so.- Returns:
- True if we were able to set the implicit prototype successfully, false if it was not possible to do so for some reason. There are a few different reasons why this could fail: for example, numbers can't be implicit prototypes, and we don't want to change the implicit prototype if other classes have already subclassed this one.
-
createConstructorType
public FunctionType createConstructorType(String name, Node source, Node parameters, JSType returnType, com.google.common.collect.ImmutableList<String> templateKeyNames) Creates a constructor function type.- Parameters:
name
- the function's name ornull
to indicate that the function is anonymous.source
- the node defining this function. Its type (Node.getType()
) must beToken.FUNCTION
.parameters
- the function's parameters ornull
to indicate that the parameter types are unknown.returnType
- the function's return type ornull
to indicate that the return type is unknown.templateKeyNames
- the templatized type keys for the class.
-
createInterfaceType
Creates an interface function type.- Parameters:
name
- the function's namesource
- the node defining this function. Its type (Node.getType()
) must beToken.FUNCTION
.
-
createTemplateType
-
createTemplateTypeMap
public TemplateTypeMap createTemplateTypeMap(com.google.common.collect.ImmutableList<TemplateType> templateKeys, com.google.common.collect.ImmutableList<JSType> templateValues) Creates a template type map from the specified list of template keys and template value types. -
createTemplatizedType
public TemplatizedType createTemplatizedType(ObjectType baseType, com.google.common.collect.ImmutableList<JSType> templatizedTypes) Creates a templatized instance of the specified type. Only ObjectTypes can currently be templatized; extend the logic in this function when more types can be templatized.- Parameters:
baseType
- the type to be templatized.templatizedTypes
- a list of the template JSTypes. Will be matched by list order to the template keys on the base type.
-
createTemplatizedType
Creates a templatized instance of the specified type. Only ObjectTypes can currently be templatized; extend the logic in this function when more types can be templatized.- Parameters:
baseType
- the type to be templatized.templatizedTypes
- a list of the template JSTypes. Will be matched by list order to the template keys on the base type.
-
createNamedType
Creates a named type. -
identifyNonNullableName
Identifies the name of a typedef or enum before we actually declare it. -
createFromTypeNodes
Creates a JSType from the nodes representing a type.- Parameters:
n
- The node with type info.sourceName
- The source file name.scope
- A scope for doing type name lookups.
-
setTemplateTypeNames
Sets the template type name. -
clearTemplateTypeNames
public void clearTemplateTypeNames()Clears the template type name.
-