示例#1
0
 /// <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);
     }
 }
示例#2
0
 public T Write <T>(T output, TypeSig type, TypePrinterFlags flags) where T : ITypeOutput
 {
     new TypePrinter(output, flags).Write(type, TypeParameters.ToArray());
     return(output);
 }
示例#3
0
 protected TypeParameterList GetTypeParameterList()
 => Any(TypeParameters)
         ? TypeParameterLists.Create(TypeParameters.ToArray())
         : null;