Package gw.internal.gosu.parser
Class TypeVariableType
- java.lang.Object
-
- gw.lang.reflect.AbstractType
-
- gw.internal.gosu.parser.TypeVariableType
-
- All Implemented Interfaces:
INonLoadableType
,IType
,ITypeVariableType
,Serializable
public class TypeVariableType extends AbstractType implements ITypeVariableType
- See Also:
- Serialized Form
-
-
Field Summary
-
Fields inherited from interface gw.lang.reflect.IType
EMPTY_ARRAY, EMPTY_TYPE_ARRAY, EMPTY_TYPE_LIST
-
-
Constructor Summary
Constructors Constructor Description TypeVariableType(ITypeVariableDefinition typeVarDef, boolean forFunction)
TypeVariableType(IType ownersType, IGenericTypeVariable typeVar)
-
Method Summary
-
Methods inherited from class gw.lang.reflect.AbstractType
getLiteralMetaType, getMetaType, getTheRef
-
Methods inherited from class java.lang.Object
clone, finalize, getClass, notify, notifyAll, wait, wait, wait
-
Methods inherited from interface gw.lang.reflect.IType
compile, getFunctionalInterface, getLiteralMetaType, getMetaType, getSourceFiles, isCompilable, isDynamic
-
-
-
-
Constructor Detail
-
TypeVariableType
public TypeVariableType(ITypeVariableDefinition typeVarDef, boolean forFunction)
-
TypeVariableType
public TypeVariableType(IType ownersType, IGenericTypeVariable typeVar)
-
-
Method Detail
-
getTypeVarDef
public ITypeVariableDefinition getTypeVarDef()
- Specified by:
getTypeVarDef
in interfaceITypeVariableType
-
getDisplayName
public String getDisplayName()
- Specified by:
getDisplayName
in interfaceIType
-
getRelativeName
public String getRelativeName()
- Specified by:
getRelativeName
in interfaceIType
-
getNameWithEnclosingType
public String getNameWithEnclosingType()
- Specified by:
getNameWithEnclosingType
in interfaceITypeVariableType
-
getNameWithBoundingType
public String getNameWithBoundingType()
-
getNamespace
public String getNamespace()
- Specified by:
getNamespace
in interfaceIType
-
getTypeLoader
public ITypeLoader getTypeLoader()
- Specified by:
getTypeLoader
in interfaceIType
-
getBoundingType
public IType getBoundingType()
- Specified by:
getBoundingType
in interfaceITypeVariableType
-
isInterface
public boolean isInterface()
- Specified by:
isInterface
in interfaceIType
-
getInterfaces
public IType[] getInterfaces()
- Specified by:
getInterfaces
in interfaceIType
-
getSupertype
public IType getSupertype()
- Specified by:
getSupertype
in interfaceIType
-
getEnclosingType
public IType getEnclosingType()
- Specified by:
getEnclosingType
in interfaceIType
-
getGenericType
public IType getGenericType()
- Specified by:
getGenericType
in interfaceIType
-
isParameterizedType
public boolean isParameterizedType()
- Specified by:
isParameterizedType
in interfaceIType
-
isGenericType
public boolean isGenericType()
- Specified by:
isGenericType
in interfaceIType
-
getGenericTypeVariables
public GenericTypeVariable[] getGenericTypeVariables()
- Specified by:
getGenericTypeVariables
in interfaceIType
-
getParameterizedType
public IType getParameterizedType(IType... ofType)
- Specified by:
getParameterizedType
in interfaceIType
-
getTypeParameters
public IType[] getTypeParameters()
- Specified by:
getTypeParameters
in interfaceIType
-
getAllTypesInHierarchy
public Set<IType> getAllTypesInHierarchy()
- Specified by:
getAllTypesInHierarchy
in interfaceIType
-
isPrimitive
public boolean isPrimitive()
- Specified by:
isPrimitive
in interfaceIType
-
getArrayType
public IType getArrayType()
- Specified by:
getArrayType
in interfaceIType
-
makeArrayInstance
public Object makeArrayInstance(int iLength)
- Specified by:
makeArrayInstance
in interfaceIType
-
getArrayComponent
public Object getArrayComponent(Object array, int iIndex) throws IllegalArgumentException, ArrayIndexOutOfBoundsException
- Specified by:
getArrayComponent
in interfaceIType
- Throws:
IllegalArgumentException
ArrayIndexOutOfBoundsException
-
setArrayComponent
public void setArrayComponent(Object array, int iIndex, Object value) throws IllegalArgumentException, ArrayIndexOutOfBoundsException
- Specified by:
setArrayComponent
in interfaceIType
- Throws:
IllegalArgumentException
ArrayIndexOutOfBoundsException
-
getArrayLength
public int getArrayLength(Object array) throws IllegalArgumentException
- Specified by:
getArrayLength
in interfaceIType
- Throws:
IllegalArgumentException
-
getComponentType
public IType getComponentType()
- Specified by:
getComponentType
in interfaceIType
-
isAssignableFrom
public boolean isAssignableFrom(IType type)
A type variable type is assignable only to/from itself or a reference thereof.For example:
function foo
( t: T, s: S ) { t = s // illegal, T and S may not have the same type at runtime t = "hello" // illegal, T may not be a String var x: T = t // ok, x and t are both of type T } - Specified by:
isAssignableFrom
in interfaceIType
-
equals
public boolean equals(Object obj)
Ok, here's the deal. By all rights type variable types should have identity equality. That's not the case right now for at least these two reasons:- We compile in multiple phases (header, decl, def). Each phase recompiles the header, including type vars. Each time a new type var type is created for the type var definition. It's not too hard to re-use the prior type var type, but then there's this problem...
- If a subclass is generic and parameterizes its super with its type vars the super parameterizd type retains whatever the type var type from the first phase of the subclass' compilation. And, in studio, we don't refresh the type system, just the type we're editing. So the super class parameterized with the subclass' type vars and whatever else stemming from there that refs the type vars remains. So the subclass can be edited and refreshed a zillion time, but the super parameterized class will still have the type var from way back.
-
getTypeInfo
public ITypeInfo getTypeInfo()
- Specified by:
getTypeInfo
in interfaceIType
-
unloadTypeInfo
public void unloadTypeInfo()
- Specified by:
unloadTypeInfo
in interfaceIType
-
readResolve
public Object readResolve() throws ObjectStreamException
- Specified by:
readResolve
in interfaceIType
- Throws:
ObjectStreamException
-
getModifiers
public int getModifiers()
- Specified by:
getModifiers
in interfaceIType
-
isAbstract
public boolean isAbstract()
- Specified by:
isAbstract
in interfaceIType
-
isFunctionStatement
public boolean isFunctionStatement()
- Specified by:
isFunctionStatement
in interfaceITypeVariableType
-
isDiscarded
public boolean isDiscarded()
- Specified by:
isDiscarded
in interfaceIType
-
setDiscarded
public void setDiscarded(boolean bDiscarded)
- Specified by:
setDiscarded
in interfaceIType
-
isCompoundType
public boolean isCompoundType()
- Specified by:
isCompoundType
in interfaceIType
-
getCompoundTypeComponents
public Set<IType> getCompoundTypeComponents()
- Specified by:
getCompoundTypeComponents
in interfaceIType
-
-