protected ParameterDeclaration MapParamType(ParameterDeclaration parameter) { if (parameter.Type.NodeType == NodeType.GenericTypeReference) { var gen = (GenericTypeReference)parameter.Type; var genEntityType = gen.Entity as IConstructedTypeInfo; if (genEntityType == null) { return(parameter); } var trc = new TypeReferenceCollection(); foreach (var genArg in gen.GenericArguments) { var replacement = genArg; foreach (var genParam in _genericParams) { if (genParam.Name.Equals(genArg.Entity.Name)) { replacement = new SimpleTypeReference(genParam.Name) { Entity = genParam.Entity }; break; } } trc.Add(replacement); } parameter = parameter.CloneNode(); gen = (GenericTypeReference)parameter.Type; gen.GenericArguments = trc; gen.Entity = new GenericConstructedType(genEntityType.GenericDefinition, trc.Select(a => a.Entity).Cast <IType>().ToArray()); } return(parameter); }
protected void type_list( TypeReferenceCollection types ) //throws RecognitionException, TokenStreamException { TypeReference tr = null; try { // for error handling tr = type_name_def(); types.Add(tr); { // ( ... )* for (;;) { if ((LA(1) == SEMI)) { match(SEMI); tr = type_name_def(); types.Add(tr); } else { goto _loop38_breakloop; } } _loop38_breakloop :; } // ( ... )* } catch (RecognitionException ex) { reportError(ex); consume(); consumeUntil(tokenSet_9_); } }