// generic type declarations GenericClassDecl : ClassDecl ::= Modifiers IdDecl [SuperClassAccess:Access] Implements:Access* BodyDecl* TypeParameter:TypeVariable* ParTypeDecl:ParClassDecl* [RawType:TypeDecl]; GenericInterfaceDecl : InterfaceDecl ::= Modifiers IdDecl SuperInterfaceId:Access* BodyDecl* TypeParameter:TypeVariable* ParTypeDecl:ParInterfaceDecl* [RawType:TypeDecl]; // parameterized type declarations ParClassDecl : ClassDecl ::= Argument:Access* TypeParameter:TypeVariable*; RawClassDecl : ParClassDecl; ParInterfaceDecl : InterfaceDecl ::= Argument:Access* TypeParameter:TypeVariable*; RawInterfaceDecl : ParInterfaceDecl; // parameterized object instantiation ParClassInstanceExpr : ClassInstanceExpr ::= TypeArgument:Access*; //ParNestedClassInstanceExpr : NestedClassInstanceExpr ::= TypeArgument:Access*; // parameterized type access ParTypeAccess : Access ::= TypeAccess:Access TypeArgument:Access*; ParameterizedTypeAccess : TypeAccess ::= TypeArgument:Access*; RawTypeAccess : ParameterizedTypeAccess; TypeVariable : ReferenceType ::= Modifiers IdDecl BodyDecl* TypeBound:Access*; Wildcard : Access; WildcardExtends : Wildcard ::= Access; WildcardSuper : Wildcard ::= Access; WildcardType : TypeDecl; WildcardExtendsType : WildcardType ::= Access; WildcardSuperType : WildcardType ::= Access;