/// <summary> /// Returns the <see cref="CodeTypeReference"/> which links back to the /// <see cref="TypeInstance"/>. /// </summary> /// <returns>A <see cref="CodeTypeReference"/> which links back to the <see cref="TypeInstance"/>.</returns> public virtual CodeTypeReference GenerateCodeDom(ICodeDOMTranslationOptions options) { if (this.ArrayElementType != null && this.ArrayRank > 0) { return(new CodeTypeReference(this.ArrayElementType.GenerateCodeDom(options), this.ArrayRank)); } else { CodeTypeReference ctr = new CodeTypeReference(); CodeTypeReference n = null; if (nullable) { n = new CodeTypeReference(typeof(Nullable <>)); } bool autoResolve = false; if ((this.resolutionOptions & TypeReferenceResolveOptions.GlobalType) == TypeReferenceResolveOptions.GlobalType) { ctr.Options |= CodeTypeReferenceOptions.GlobalReference; } if ((this.resolutionOptions & TypeReferenceResolveOptions.FullType) == TypeReferenceResolveOptions.FullType || (this.resolutionOptions & TypeReferenceResolveOptions.GlobalType) == TypeReferenceResolveOptions.GlobalType) { autoResolve = options.AutoResolveReferences; if (autoResolve) { options.AutoResolveReferences = false; } } if ((this.resolutionOptions & TypeReferenceResolveOptions.TypeParameter) == TypeReferenceResolveOptions.TypeParameter) { ctr.Options |= CodeTypeReferenceOptions.GenericTypeParameter; } ctr.BaseType = this.TypeInstance.GetTypeName(options, TypeParameters.ToArray()); if (autoResolve && ((this.resolutionOptions & TypeReferenceResolveOptions.FullType) == TypeReferenceResolveOptions.FullType || (this.resolutionOptions & TypeReferenceResolveOptions.GlobalType) == TypeReferenceResolveOptions.GlobalType)) { options.AutoResolveReferences = autoResolve; } //Clear auto-inferred entries. ctr.TypeArguments.Clear(); foreach (ITypeReference itr in this.TypeParameters) { if (itr != null) { ctr.TypeArguments.Add(itr.GenerateCodeDom(options)); } } if (nullable) { n.TypeArguments.Add(ctr); ctr = n; } //Pointers: Not supported by CodeDOM. return(ctr); } }
public T Write <T>(T output, TypeSig type, TypePrinterFlags flags) where T : ITypeOutput { new TypePrinter(output, flags).Write(type, TypeParameters.ToArray()); return(output); }
protected TypeParameterList GetTypeParameterList() => Any(TypeParameters) ? TypeParameterLists.Create(TypeParameters.ToArray()) : null;