void TypeToString(IDecompilerOutput output, ConvertTypeOptions options, ITypeDefOrRef?type, IHasCustomAttribute?typeAttributes = null) { if (type is null) { return; } var envProvider = new ILSpyEnvironmentProvider(); var converter = new CSharpToVBConverterVisitor(type.Module, envProvider); var astType = AstBuilder.ConvertType(type, new StringBuilder(), typeAttributes, options); if (type.TryGetByRefSig() is not null) { output.Write("ByRef", BoxedTextColor.Keyword); output.Write(" ", BoxedTextColor.Text); if (astType is ICSharpCode.NRefactory.CSharp.ComposedType && ((ICSharpCode.NRefactory.CSharp.ComposedType)astType).PointerRank > 0) { ((ICSharpCode.NRefactory.CSharp.ComposedType)astType).PointerRank--; } } var vbAstType = astType.AcceptVisitor(converter, null); var settings = GetDecompilerSettings(); var ctx = new DecompilerContext(settings.SettingsVersion, type.Module, MetadataTextColorProvider); vbAstType.AcceptVisitor(new OutputVisitor(new VBTextOutputFormatter(output, ctx), CreateVBFormattingOptions(settings)), null); }
string TypeToString(ConvertTypeOptions options, TypeReference type, ICustomAttributeProvider typeAttributes = null) { AstType astType = AstBuilder.ConvertType(type, typeAttributes, options); StringWriter w = new StringWriter(); if (type.IsByReference) { ParameterDefinition pd = typeAttributes as ParameterDefinition; if (pd != null && (!pd.IsIn && pd.IsOut)) { w.Write("out "); } else { w.Write("ref "); } if (astType is ComposedType && ((ComposedType)astType).PointerRank > 0) { ((ComposedType)astType).PointerRank--; } } astType.AcceptVisitor(new CSharpOutputVisitor(w, FormattingOptionsFactory.CreateAllman())); return(w.ToString()); }
void TypeToString(ITextOutput output, ConvertTypeOptions options, ITypeDefOrRef type, IHasCustomAttribute typeAttributes = null) { if (type == null) { return; } AstType astType = AstBuilder.ConvertType(type, typeAttributes, options); if (WriteRefIfByRef(output, type.TryGetByRefSig(), typeAttributes as ParamDef)) { if (astType is ComposedType && ((ComposedType)astType).PointerRank > 0) { ((ComposedType)astType).PointerRank--; } } var module = type.Module; if (module == null && type is TypeSpec && ((TypeSpec)type).TypeSig.RemovePinnedAndModifiers() is GenericSig) { var sig = (GenericSig)((TypeSpec)type).TypeSig.RemovePinnedAndModifiers(); if (sig.OwnerType != null) { module = sig.OwnerType.Module; } if (module == null && sig.OwnerMethod != null && sig.OwnerMethod.DeclaringType != null) { module = sig.OwnerMethod.DeclaringType.Module; } } var ctx = new DecompilerContext(type.Module); astType.AcceptVisitor(new CSharpOutputVisitor(new TextTokenWriter(output, ctx), FormattingOptionsFactory.CreateAllman())); }
string TypeToString(ConvertTypeOptions options, ITypeDefOrRef type, IHasCustomAttribute typeAttributes = null) { AstType astType = AstBuilder.ConvertType(null, null, type, typeAttributes, options); StringWriter w = new StringWriter(); if (type.TryGetByRefSig() != null) { ParamDef pd = typeAttributes as ParamDef; if (pd != null && (!pd.IsIn && pd.IsOut)) { w.Write("out "); } else { w.Write("ref "); } if (astType is ComposedType && ((ComposedType)astType).PointerRank > 0) { ((ComposedType)astType).PointerRank--; } } astType.AcceptVisitor(new CSharpOutputVisitor(w, FormattingOptionsFactory.CreateAllman())); return(w.ToString()); }
public override string TypeToString(TypeReference type, bool includeNamespace, ICustomAttributeProvider typeAttributes = null) { ConvertTypeOptions options = ConvertTypeOptions.IncludeTypeParameterDefinitions; if (includeNamespace) { options |= ConvertTypeOptions.IncludeNamespace; } AstType astType = AstBuilder.ConvertType(type, typeAttributes, options); StringWriter w = new StringWriter(); if (type.IsByReference) { ParameterDefinition pd = typeAttributes as ParameterDefinition; if (pd != null && (!pd.IsIn && pd.IsOut)) { w.Write("out "); } else { w.Write("ref "); } if (astType is ComposedType && ((ComposedType)astType).PointerRank > 0) { ((ComposedType)astType).PointerRank--; } } astType.AcceptVisitor(new OutputVisitor(w, new CSharpFormattingOptions()), null); return(w.ToString()); }
public override string TypeToString(TypeReference type, bool includeNamespace, ICustomAttributeProvider typeAttributes = null) { ConvertTypeOptions options = ConvertTypeOptions.IncludeTypeParameterDefinitions; if (includeNamespace) options |= ConvertTypeOptions.IncludeNamespace; return TypeToString(options, type, typeAttributes); }
protected override void TypeToString(IDecompilerOutput output, ITypeDefOrRef type, bool includeNamespace, IHasCustomAttribute typeAttributes = null) { ConvertTypeOptions options = ConvertTypeOptions.IncludeTypeParameterDefinitions; if (includeNamespace) { options |= ConvertTypeOptions.IncludeNamespace; } TypeToString(output, options, type, typeAttributes); }
public override string TypeToString(ITypeDefOrRef type, bool includeNamespace, IHasCustomAttribute typeAttributes = null) { ConvertTypeOptions options = ConvertTypeOptions.IncludeTypeParameterDefinitions; if (includeNamespace) { options |= ConvertTypeOptions.IncludeNamespace; } return(TypeToString(options, type, typeAttributes)); }
string TypeToString(ConvertTypeOptions options, TypeReference type, ICustomAttributeProvider typeAttributes = null) { var envProvider = new ILSpyEnvironmentProvider(); var converter = new CSharpToVBConverterVisitor(envProvider); var astType = AstBuilder.ConvertType(type, typeAttributes, options); StringWriter w = new StringWriter(); if (type.IsByReference) { w.Write("ByRef "); if (astType is NRefactory.CSharp.ComposedType && ((NRefactory.CSharp.ComposedType)astType).PointerRank > 0) ((NRefactory.CSharp.ComposedType)astType).PointerRank--; } var vbAstType = astType.AcceptVisitor(converter, null); vbAstType.AcceptVisitor(new OutputVisitor(w, new VBFormattingOptions()), null); return w.ToString(); }
void TypeToString(IDecompilerOutput output, ConvertTypeOptions options, ITypeDefOrRef type, IHasCustomAttribute typeAttributes = null) { var envProvider = new ILSpyEnvironmentProvider(); var converter = new CSharpToVBConverterVisitor(type.Module, envProvider); var astType = AstBuilder.ConvertType(type, new StringBuilder(), typeAttributes, options); if (type.TryGetByRefSig() != null) { output.Write("ByRef", BoxedTextColor.Keyword); output.Write(" ", BoxedTextColor.Text); if (astType is ICSharpCode.NRefactory.CSharp.ComposedType && ((ICSharpCode.NRefactory.CSharp.ComposedType)astType).PointerRank > 0) { ((ICSharpCode.NRefactory.CSharp.ComposedType)astType).PointerRank--; } } var vbAstType = astType.AcceptVisitor(converter, null); vbAstType.AcceptVisitor(new OutputVisitor(new VBTextOutputFormatter(output), new VBFormattingOptions()), null); }
string TypeToString(ConvertTypeOptions options, TypeReference type, ICustomAttributeProvider typeAttributes = null) { var astType = AstBuilder .ConvertType(type, typeAttributes, options) .AcceptVisitor(new CSharpToVBConverterVisitor(new ILSpyEnvironmentProvider(CreateResolveContext(type.Resolve().Module))), null); StringWriter w = new StringWriter(); // TODO // if (type.IsByReference) { // ParameterDefinition pd = typeAttributes as ParameterDefinition; // if (pd != null && (!pd.IsIn && pd.IsOut)) // w.Write("out "); // else // w.Write("ref "); // // if (astType is ComposedType && ((ComposedType)astType).PointerRank > 0) // ((ComposedType)astType).PointerRank--; // } astType.AcceptVisitor(new OutputVisitor(w, new VBFormattingOptions()), null); return(w.ToString()); }
/// <summary> /// Converts a type reference. /// </summary> /// <param name="type">The Cecil type reference that should be converted into /// a type system type reference.</param> /// <param name="typeAttributes">Attributes associated with the Cecil type reference. /// This is used to support the 'dynamic' type.</param> public static AstType ConvertType(TypeReference type, ICustomAttributeProvider typeAttributes = null, ConvertTypeOptions options = ConvertTypeOptions.None) { int typeIndex = 0; return ConvertType(type, typeAttributes, ref typeIndex, options); }
void TypeToString(ITextOutput output, ConvertTypeOptions options, ITypeDefOrRef type, IHasCustomAttribute typeAttributes = null) { var envProvider = new ILSpyEnvironmentProvider(); var converter = new CSharpToVBConverterVisitor(envProvider); var astType = AstBuilder.ConvertType(type, typeAttributes, options); if (type.TryGetByRefSig() != null) { output.Write("ByRef", TextTokenType.Keyword); output.WriteSpace(); if (astType is NRefactory.CSharp.ComposedType && ((NRefactory.CSharp.ComposedType)astType).PointerRank > 0) ((NRefactory.CSharp.ComposedType)astType).PointerRank--; } var vbAstType = astType.AcceptVisitor(converter, null); vbAstType.AcceptVisitor(new OutputVisitor(new VBTextOutputFormatter(output), new VBFormattingOptions()), null); }
string TypeToString(ConvertTypeOptions options, TypeReference type, ICustomAttributeProvider typeAttributes = null) { var astType = AstBuilder .ConvertType(type, typeAttributes, options) .AcceptVisitor(new CSharpToVBConverterVisitor(new ILSpyEnvironmentProvider(CreateResolveContext(type.Resolve().Module))), null); StringWriter w = new StringWriter(); // TODO // if (type.IsByReference) { // ParameterDefinition pd = typeAttributes as ParameterDefinition; // if (pd != null && (!pd.IsIn && pd.IsOut)) // w.Write("out "); // else // w.Write("ref "); // // if (astType is ComposedType && ((ComposedType)astType).PointerRank > 0) // ((ComposedType)astType).PointerRank--; // } astType.AcceptVisitor(new OutputVisitor(w, new VBFormattingOptions()), null); return w.ToString(); }
void TypeToString(ITextOutput output, ConvertTypeOptions options, ITypeDefOrRef type, IHasCustomAttribute typeAttributes = null) { if (type == null) return; AstType astType = AstBuilder.ConvertType(type, typeAttributes, options); if (WriteRefIfByRef(output, type.TryGetByRefSig(), typeAttributes as ParamDef)) { if (astType is ComposedType && ((ComposedType)astType).PointerRank > 0) ((ComposedType)astType).PointerRank--; } var module = type.Module; if (module == null && type is TypeSpec && ((TypeSpec)type).TypeSig.RemovePinnedAndModifiers() is GenericSig) { var sig = (GenericSig)((TypeSpec)type).TypeSig.RemovePinnedAndModifiers(); if (sig.OwnerType != null) module = sig.OwnerType.Module; if (module == null && sig.OwnerMethod != null && sig.OwnerMethod.DeclaringType != null) module = sig.OwnerMethod.DeclaringType.Module; } var ctx = new DecompilerContext(type.Module); astType.AcceptVisitor(new CSharpOutputVisitor(new TextTokenWriter(output, ctx), FormattingOptionsFactory.CreateAllman())); }
string TypeToString(ConvertTypeOptions options, TypeReference type, ICustomAttributeProvider typeAttributes = null) { AstType astType = AstBuilder.ConvertType(type, typeAttributes, options); StringWriter w = new StringWriter(); if (type.IsByReference) { ParameterDefinition pd = typeAttributes as ParameterDefinition; if (pd != null && (!pd.IsIn && pd.IsOut)) w.Write("out "); else w.Write("ref "); if (astType is ComposedType && ((ComposedType)astType).PointerRank > 0) ((ComposedType)astType).PointerRank--; } astType.AcceptVisitor(new CSharpOutputVisitor(w, new CSharpFormattingOptions()), null); return w.ToString(); }
string TypeToString(ConvertTypeOptions options, ITypeDefOrRef type, IHasCustomAttribute typeAttributes = null) { AstType astType = AstBuilder.ConvertType(null, null, type, typeAttributes, options); StringWriter w = new StringWriter(); if (type.TryGetByRefSig() != null) { ParamDef pd = typeAttributes as ParamDef; if (pd != null && (!pd.IsIn && pd.IsOut)) w.Write("out "); else w.Write("ref "); if (astType is ComposedType && ((ComposedType)astType).PointerRank > 0) ((ComposedType)astType).PointerRank--; } astType.AcceptVisitor(new CSharpOutputVisitor(w, FormattingOptionsFactory.CreateAllman())); return w.ToString(); }
static AstType ConvertType(TypeReference type, ICustomAttributeProvider typeAttributes, ref int typeIndex, ConvertTypeOptions options) { while (type is OptionalModifierType || type is RequiredModifierType) { type = ((TypeSpecification)type).ElementType; } if (type == null) { return AstType.Null; } if (type is Mono.Cecil.ByReferenceType) { typeIndex++; // by reference type cannot be represented in C#; so we'll represent it as a pointer instead return ConvertType((type as Mono.Cecil.ByReferenceType).ElementType, typeAttributes, ref typeIndex, options) .MakePointerType(); } else if (type is Mono.Cecil.PointerType) { typeIndex++; return ConvertType((type as Mono.Cecil.PointerType).ElementType, typeAttributes, ref typeIndex, options) .MakePointerType(); } else if (type is Mono.Cecil.ArrayType) { typeIndex++; return ConvertType((type as Mono.Cecil.ArrayType).ElementType, typeAttributes, ref typeIndex, options) .MakeArrayType((type as Mono.Cecil.ArrayType).Rank); } else if (type is GenericInstanceType) { GenericInstanceType gType = (GenericInstanceType)type; if (gType.ElementType.Namespace == "System" && gType.ElementType.Name == "Nullable`1" && gType.GenericArguments.Count == 1) { typeIndex++; return new ComposedType { BaseType = ConvertType(gType.GenericArguments[0], typeAttributes, ref typeIndex, options), HasNullableSpecifier = true }; } AstType baseType = ConvertType(gType.ElementType, typeAttributes, ref typeIndex, options & ~ConvertTypeOptions.IncludeTypeParameterDefinitions); List<AstType> typeArguments = new List<AstType>(); foreach (var typeArgument in gType.GenericArguments) { typeIndex++; typeArguments.Add(ConvertType(typeArgument, typeAttributes, ref typeIndex, options)); } ApplyTypeArgumentsTo(baseType, typeArguments); return baseType; } else if (type is GenericParameter) { return new SimpleType(type.Name); } else if (type.IsNested) { AstType typeRef = ConvertType(type.DeclaringType, typeAttributes, ref typeIndex, options & ~ConvertTypeOptions.IncludeTypeParameterDefinitions); string namepart = ICSharpCode.NRefactory.TypeSystem.ReflectionHelper.SplitTypeParameterCountFromReflectionName(type.Name); MemberType memberType = new MemberType { Target = typeRef, MemberName = namepart }; memberType.AddAnnotation(type); if ((options & ConvertTypeOptions.IncludeTypeParameterDefinitions) == ConvertTypeOptions.IncludeTypeParameterDefinitions) { AddTypeParameterDefininitionsTo(type, memberType); } return memberType; } else { string ns = type.Namespace ?? string.Empty; string name = type.Name; if (name == null) throw new InvalidOperationException("type.Name returned null. Type: " + type.ToString()); if (name == "Object" && ns == "System" && HasDynamicAttribute(typeAttributes, typeIndex)) { return new PrimitiveType("dynamic"); } else { if (ns == "System") { switch (name) { case "SByte": return new PrimitiveType("sbyte"); case "Int16": return new PrimitiveType("short"); case "Int32": return new PrimitiveType("int"); case "Int64": return new PrimitiveType("long"); case "Byte": return new PrimitiveType("byte"); case "UInt16": return new PrimitiveType("ushort"); case "UInt32": return new PrimitiveType("uint"); case "UInt64": return new PrimitiveType("ulong"); case "String": return new PrimitiveType("string"); case "Single": return new PrimitiveType("float"); case "Double": return new PrimitiveType("double"); case "Decimal": return new PrimitiveType("decimal"); case "Char": return new PrimitiveType("char"); case "Boolean": return new PrimitiveType("bool"); case "Void": return new PrimitiveType("void"); case "Object": return new PrimitiveType("object"); } } name = ICSharpCode.NRefactory.TypeSystem.ReflectionHelper.SplitTypeParameterCountFromReflectionName(name); AstType astType; if ((options & ConvertTypeOptions.IncludeNamespace) == ConvertTypeOptions.IncludeNamespace && ns.Length > 0) { string[] parts = ns.Split('.'); AstType nsType = new SimpleType(parts[0]); for (int i = 1; i < parts.Length; i++) { nsType = new MemberType { Target = nsType, MemberName = parts[i] }; } astType = new MemberType { Target = nsType, MemberName = name }; } else { astType = new SimpleType(name); } astType.AddAnnotation(type); if ((options & ConvertTypeOptions.IncludeTypeParameterDefinitions) == ConvertTypeOptions.IncludeTypeParameterDefinitions) { AddTypeParameterDefininitionsTo(type, astType); } return astType; } } }