This class encapsulates generic type variables declarations on classes and fields. Different uses of this class:
When used for definition before 'extends' (in ClassDescriptor): name + constraintClassDescriptor (+ constraintGenericTypeVarArgs) | constraintGenericTypeVar:
name: the name of the new generic type var,
constraintClassDescriptor: when the constraint is a concrete class, this holds the class descriptor;
constraintGenericTypeVar: when the constraint is another generic type var, this refers to the definition of that generic type var;
constraintGenericTypeVarArgs: when the constraint is parameterized, this holds type arguments.
When used with field types (in FieldDescriptor):
if the field is purely generic, name + referredGenericTypeVar: name: the generic type var name used as the type, referredGenericTypeVar: refers to the definition of this generic type var in class definition.
if the field is parameterized, the FieldDescriptor should already have the class part of the field type, and its genericTypeVars field should have a list of type arguments. each type argument has classDescriptor / referredGenericTypeVar: classDescriptor: if the argument is a concrete class, referredGenericTypeVar: if the argument is parameterized or another generic type var. it should refer to the definition of that generic type var in class definition.
When used with base type after 'extends' (in ClassDescriptor): similar to the parameterized case when it is used for field type.
@author quyin