public EnumMemberCompletionData(IType enumType, IEntity member, TypeSystemAstBuilder builder) : base(enumType.Name + "." + member.Name)
 {
     this.enumType       = enumType;
     this.member         = member;
     this.Image          = ClassBrowserIconService.Const;
     this.CompletionText = builder.ConvertType(enumType).ToString() + "." + member.Name;
 }
            public string ConvertVariable(IVariable v)
            {
                TypeSystemAstBuilder astBuilder = CreateAstBuilder();
                AstNode astNode = astBuilder.ConvertVariable(v);

                return(astNode.ToString().TrimEnd(';', '\r', '\n'));
            }
            public void ConvertType(IType type, TextWriterTokenWriter formatter, CSharpFormattingOptions formattingPolicy)
            {
                TypeSystemAstBuilder astBuilder = CreateAstBuilder();
                AstType astType = astBuilder.ConvertType(type);

                astType.AcceptVisitor(new CSharpOutputVisitor(formatter, formattingPolicy));
            }
            public FullyQualifyAmbiguousTypeNamesVisitor(TransformContext context, UsingScope usingScope)
            {
                this.ignoreUsingScope = !context.Settings.UsingDeclarations;

                CSharpTypeResolveContext currentContext;

                if (ignoreUsingScope)
                {
                    currentContext = new CSharpTypeResolveContext(context.TypeSystem.MainModule);
                }
                else
                {
                    this.context = new Stack <CSharpTypeResolveContext>();
                    if (!string.IsNullOrEmpty(context.CurrentTypeDefinition?.Namespace))
                    {
                        foreach (string ns in context.CurrentTypeDefinition.Namespace.Split('.'))
                        {
                            usingScope = new UsingScope(usingScope, ns);
                        }
                    }
                    currentContext = new CSharpTypeResolveContext(context.TypeSystem.MainModule, usingScope.Resolve(context.TypeSystem), context.CurrentTypeDefinition);
                    this.context.Push(currentContext);
                }
                this.astBuilder = CreateAstBuilder(currentContext);
            }
            public override void VisitNamespaceDeclaration(NamespaceDeclaration namespaceDeclaration)
            {
                if (ignoreUsingScope)
                {
                    base.VisitNamespaceDeclaration(namespaceDeclaration);
                    return;
                }
                var previousContext = context.Peek();
                var usingScope      = previousContext.CurrentUsingScope.UnresolvedUsingScope;

                foreach (string ident in namespaceDeclaration.Identifiers)
                {
                    usingScope = new UsingScope(usingScope, ident);
                }
                var currentContext = new CSharpTypeResolveContext(previousContext.CurrentModule, usingScope.Resolve(previousContext.Compilation));

                context.Push(currentContext);
                try {
                    astBuilder = CreateAstBuilder(currentContext);
                    base.VisitNamespaceDeclaration(namespaceDeclaration);
                } finally {
                    astBuilder = CreateAstBuilder(previousContext);
                    context.Pop();
                }
            }
Esempio n. 6
0
 void Visit <T>(T entityDeclaration, Action <T> baseCall) where T : EntityDeclaration
 {
     if (ignoreUsingScope)
     {
         baseCall(entityDeclaration);
         return;
     }
     if (entityDeclaration.GetSymbol() is IMethod method)
     {
         var previousContext = context.Peek();
         CSharpTypeResolveContext currentContext;
         if (CSharpDecompiler.IsWindowsFormsInitializeComponentMethod(method))
         {
             currentContext = new CSharpTypeResolveContext(previousContext.CurrentModule);
         }
         else
         {
             currentContext = previousContext.WithCurrentMember(method);
         }
         context.Push(currentContext);
         try {
             var function = entityDeclaration.Annotation <IL.ILFunction>();
             astBuilder = CreateAstBuilder(currentContext, function);
             baseCall(entityDeclaration);
         } finally {
             astBuilder = CreateAstBuilder(previousContext);
             context.Pop();
         }
     }
     else
     {
         baseCall(entityDeclaration);
     }
 }
Esempio n. 7
0
        void ConvertTypeDeclaration(ITypeDefinition typeDef, StringWriter writer)
        {
            TypeSystemAstBuilder astBuilder      = CreateAstBuilder();
            TypeDeclaration      typeDeclaration = (TypeDeclaration)astBuilder.ConvertEntity(typeDef);

            PrintModifiers(typeDeclaration.Modifiers, writer);
            if ((ConversionFlags & ConversionFlags.ShowDefinitionKeyWord) == ConversionFlags.ShowDefinitionKeyWord)
            {
                switch (typeDeclaration.ClassType)
                {
                case ClassType.Class:
                    writer.Write("class");
                    break;

                case ClassType.Struct:
                    writer.Write("struct");
                    break;

                case ClassType.Interface:
                    writer.Write("interface");
                    break;

                case ClassType.Enum:
                    writer.Write("enum");
                    break;

                default:
                    throw new Exception("Invalid value for ClassType");
                }
                writer.Write(' ');
            }
            WriteTypeDeclarationName(typeDef, writer);
        }
 protected string GetShortType(IType type)
 {
     if (builder == null)
     {
         var ctx   = ext.CSharpUnresolvedFile.GetTypeResolveContext(ext.UnresolvedFileCompilation, ext.Document.Editor.Caret.Location) as CSharpTypeResolveContext;
         var state = new CSharpResolver(ctx);
         builder = new TypeSystemAstBuilder(state);
         var dt        = state.CurrentTypeDefinition;
         var declaring = ctx.CurrentTypeDefinition != null ? ctx.CurrentTypeDefinition.DeclaringTypeDefinition : null;
         if (declaring != null)
         {
             while (dt != null)
             {
                 if (dt.Equals(declaring))
                 {
                     builder.AlwaysUseShortTypeNames = true;
                     break;
                 }
                 dt = dt.DeclaringTypeDefinition;
             }
         }
     }
     try {
         return(GLib.Markup.EscapeText(builder.ConvertType(type).ToString(ext.FormattingPolicy.CreateOptions())));
     } catch (Exception e) {
         LoggingService.LogError("Exception while getting short type.", e);
         return("");
     }
 }
Esempio n. 9
0
        void WriteTypeDeclarationName(ITypeDefinition typeDef, TokenWriter writer, CSharpFormattingOptions formattingPolicy)
        {
            TypeSystemAstBuilder astBuilder = CreateAstBuilder();
            EntityDeclaration    node       = astBuilder.ConvertEntity(typeDef);

            if (typeDef.DeclaringTypeDefinition != null)
            {
                WriteTypeDeclarationName(typeDef.DeclaringTypeDefinition, writer, formattingPolicy);
                writer.WriteTokenOperator(Roles.Dot, ".");
            }
            else if ((ConversionFlags & ConversionFlags.UseFullyQualifiedEntityNames) == ConversionFlags.UseFullyQualifiedEntityNames)
            {
                if (!string.IsNullOrEmpty(typeDef.Namespace))
                {
                    WriteQualifiedName(typeDef.Namespace, writer, formattingPolicy);
                    writer.WriteTokenOperator(Roles.Dot, ".");
                }
            }
            writer.WriteIdentifier(node.NameToken, BoxedTextColor.Text);
            if ((ConversionFlags & ConversionFlags.ShowTypeParameterList) == ConversionFlags.ShowTypeParameterList)
            {
                var outputVisitor = new CSharpOutputVisitor(writer, formattingPolicy);
                outputVisitor.WriteTypeParameters(node.GetChildrenByRole(Roles.TypeParameter), CodeBracesRangeFlags.AngleBrackets);
            }
        }
Esempio n. 10
0
            public static AstType CreateShortType(BaseSemanticModel SemanticModel, IType expressionType, AstNode node)
            {
                var csResolver = SemanticModel.Resolver.GetResolverStateBefore(node);
                var builder    = new TypeSystemAstBuilder(csResolver);

                return(builder.ConvertType(expressionType));
            }
Esempio n. 11
0
            public FullyQualifyAmbiguousTypeNamesVisitor(TransformContext context, UsingScope usingScope)
            {
                this.context = new Stack <CSharpTypeResolveContext>();
                var currentContext = new CSharpTypeResolveContext(context.TypeSystem.MainAssembly, usingScope.Resolve(context.TypeSystem.Compilation));

                this.context.Push(currentContext);
                this.astBuilder = CreateAstBuilder(currentContext);
            }
Esempio n. 12
0
 internal TransformContext(DecompilerTypeSystem typeSystem, ITypeResolveContext decompilationContext, TypeSystemAstBuilder typeSystemAstBuilder, DecompilerSettings settings, CancellationToken cancellationToken)
 {
     this.TypeSystem           = typeSystem;
     this.decompilationContext = decompilationContext;
     this.TypeSystemAstBuilder = typeSystemAstBuilder;
     this.Settings             = settings;
     this.CancellationToken    = cancellationToken;
 }
Esempio n. 13
0
 public AlCompletionDataFactory(AlCompletionContext completionContext, AlResolver contextAtCaret)
 {
     Debug.Assert(completionContext != null);
     Debug.Assert(contextAtCaret != null);
     this.completionContext = completionContext;
     this.contextAtCaret    = contextAtCaret;
     this.builder           = new TypeSystemAstBuilder(contextAtCaret);
 }
Esempio n. 14
0
        public override AstType CreateShortType(IType fullType)
        {
            AstNode        node       = Unit.GetNodeAt(Location);
            CSharpResolver csResolver = resolver.GetResolverStateBefore(node);
            var            builder    = new TypeSystemAstBuilder(csResolver);

            return(builder.ConvertType(fullType));
        }
Esempio n. 15
0
        public void ConvertType(IType type, TokenWriter writer, CSharpFormattingOptions formattingPolicy)
        {
            TypeSystemAstBuilder astBuilder = CreateAstBuilder();

            astBuilder.AlwaysUseShortTypeNames = (ConversionFlags & ConversionFlags.UseFullyQualifiedEntityNames) != ConversionFlags.UseFullyQualifiedEntityNames;
            AstType astType = astBuilder.ConvertType(type);

            astType.AcceptVisitor(new CSharpOutputVisitor(writer, formattingPolicy));
        }
Esempio n. 16
0
        TypeSystemAstBuilder CreateAstBuilder()
        {
            TypeSystemAstBuilder astBuilder = new TypeSystemAstBuilder();

            astBuilder.ShowModifiers           = (ConversionFlags & ConversionFlags.ShowModifiers) == ConversionFlags.ShowModifiers;
            astBuilder.ShowAccessibility       = (ConversionFlags & ConversionFlags.ShowAccessibility) == ConversionFlags.ShowAccessibility;
            astBuilder.AlwaysUseShortTypeNames = (ConversionFlags & ConversionFlags.UseFullyQualifiedTypeNames) != ConversionFlags.UseFullyQualifiedTypeNames;
            return(astBuilder);
        }
Esempio n. 17
0
 internal TransformContext(IDecompilerTypeSystem typeSystem, DecompileRun decompileRun, ITypeResolveContext decompilationContext, TypeSystemAstBuilder typeSystemAstBuilder)
 {
     this.TypeSystem           = typeSystem;
     this.DecompileRun         = decompileRun;
     this.decompilationContext = decompilationContext;
     this.TypeSystemAstBuilder = typeSystemAstBuilder;
     this.CancellationToken    = decompileRun.CancellationToken;
     this.Settings             = decompileRun.Settings;
 }
 static void GenerateBodyFromContext(TypeSystemAstBuilder builder, DebuggerCompletionContext context, MethodDeclaration methodDeclaration)
 {
     methodDeclaration.Body = new BlockStatement();
     foreach (var v in context.Variables)
     {
         methodDeclaration.Body.Statements.Add(new VariableDeclarationStatement(builder.ConvertType(v.Type), v.Name));
     }
     methodDeclaration.Body.Statements.Add(new ExpressionStatement(new IdentifierExpression("$__Caret_Point__$")));
 }
Esempio n. 19
0
        private void ConvertType(IType type, TokenWriter writer, CSharpFormattingOptions formattingPolicy)
        {
            TypeSystemAstBuilder astBuilder = CreateAstBuilder();

            astBuilder.AlwaysUseShortTypeNames = true;
            AstType astType = astBuilder.ConvertType(type);

            astType.AcceptVisitor(new CSharpOutputVisitor(writer, formattingPolicy));
        }
Esempio n. 20
0
        public string ConvertType(IType type)
        {
            TypeSystemAstBuilder astBuilder = CreateAstBuilder();
            AstType astType = astBuilder.ConvertType(type);
            CSharpFormattingOptions formatting = new CSharpFormattingOptions();
            StringWriter            writer     = new StringWriter();

            astType.AcceptVisitor(new CSharpOutputVisitor(writer, formatting), null);
            return(writer.ToString());
        }
Esempio n. 21
0
        public string ConvertVariable(IVariable v)
        {
            TypeSystemAstBuilder astBuilder = CreateAstBuilder();
            AstNode astNode = astBuilder.ConvertVariable(v);
            CSharpFormattingOptions formatting = new CSharpFormattingOptions();
            StringWriter            writer     = new StringWriter();

            astNode.AcceptVisitor(new CSharpOutputVisitor(writer, formatting), null);
            return(writer.ToString().TrimEnd(';', '\r', '\n'));
        }
Esempio n. 22
0
        public static string GetOverrideTargetName
            (IMember m, CSharpTypeResolveContext resolveContext)
        {
            var builder = new TypeSystemAstBuilder
                              (new CSharpResolver(resolveContext));

            return(builder.ConvertEntity(m).ToString()
                   // Builder automatically adds a trailing newline
                   .TrimEnd(Environment.NewLine.ToCharArray()));
        }
Esempio n. 23
0
        internal static string GenerateMemberCode(MDRefactoringContext ctx, TypeSystemAstBuilder builder, IMember member)
        {
            var method = builder.ConvertEntity(member) as MethodDeclaration;

            if (method != null)
            {
                method.Body = new BlockStatement {
                    new ThrowStatement(new ObjectCreateExpression(ctx.CreateShortType("System", "NotImplementedException")))
                };
                method.Modifiers &= ~Modifiers.Virtual;
                method.Modifiers &= ~Modifiers.Abstract;
                method.Attributes.Add(new AttributeSection {
                    Attributes =
                    {
                        GenerateExportAttribute(ctx, member)
                    }
                });
                return(method.ToString(ctx.FormattingOptions));
            }
            var property = builder.ConvertEntity(member) as PropertyDeclaration;

            if (property == null)
            {
                return(null);
            }
            var p = (IProperty)member;

            property.Modifiers &= ~Modifiers.Virtual;
            property.Modifiers &= ~Modifiers.Abstract;
            if (p.CanGet)
            {
                property.Getter.Body = new BlockStatement {
                    new ThrowStatement(new ObjectCreateExpression(ctx.CreateShortType("System", "NotImplementedException")))
                };
                property.Getter.Attributes.Add(new AttributeSection {
                    Attributes =
                    {
                        GenerateExportAttribute(ctx, p.Getter)
                    }
                });
            }
            if (p.CanSet)
            {
                property.Setter.Body = new BlockStatement {
                    new ThrowStatement(new ObjectCreateExpression(ctx.CreateShortType("System", "NotImplementedException")))
                };
                property.Setter.Attributes.Add(new AttributeSection {
                    Attributes =
                    {
                        GenerateExportAttribute(ctx, p.Setter)
                    }
                });
            }
            return(property.ToString(ctx.FormattingOptions));
        }
Esempio n. 24
0
        static BlockStatement GenerateBodyFromContext(TypeSystemAstBuilder builder, IVariable[] variables)
        {
            var body = new BlockStatement();

            foreach (var v in variables)
            {
                body.Statements.Add(new VariableDeclarationStatement(builder.ConvertType(v.Type), v.Name));
            }
            body.Statements.Add(new ExpressionStatement(new IdentifierExpression("$__Caret_Point__$")));
            return(body);
        }
        public override AstType CreateShortType(IType fullType)
        {
            CSharpResolver csResolver;

            lock (resolver) {
                csResolver = resolver.GetResolverStateBefore(GetNode());
            }
            var builder = new TypeSystemAstBuilder(csResolver);

            return(builder.ConvertType(fullType));
        }
Esempio n. 26
0
        TypeSystemAstBuilder CreateAstBuilder()
        {
            TypeSystemAstBuilder astBuilder = new TypeSystemAstBuilder();

            astBuilder.AddTypeReferenceAnnotations       = true;
            astBuilder.ShowTypeParametersForUnboundTypes = true;
            astBuilder.ShowModifiers           = (ConversionFlags & ConversionFlags.ShowModifiers) == ConversionFlags.ShowModifiers;
            astBuilder.ShowAccessibility       = (ConversionFlags & ConversionFlags.ShowAccessibility) == ConversionFlags.ShowAccessibility;
            astBuilder.AlwaysUseShortTypeNames = (ConversionFlags & ConversionFlags.UseFullyQualifiedTypeNames) != ConversionFlags.UseFullyQualifiedTypeNames;
            astBuilder.ShowParameterNames      = (ConversionFlags & ConversionFlags.ShowParameterNames) == ConversionFlags.ShowParameterNames;
            return(astBuilder);
        }
Esempio n. 27
0
            public override void VisitTypeDeclaration(TypeDeclaration typeDeclaration)
            {
                var currentContext = context.Peek().WithCurrentTypeDefinition(typeDeclaration.GetSymbol() as ITypeDefinition);

                context.Push(currentContext);
                try {
                    astBuilder = CreateAstBuilder(currentContext);
                    base.VisitTypeDeclaration(typeDeclaration);
                } finally {
                    context.Pop();
                }
            }
            public string ConvertType(IType type)
            {
                if (type == null)
                {
                    throw new ArgumentNullException("type");
                }

                TypeSystemAstBuilder astBuilder = CreateAstBuilder();
                AstType astType = astBuilder.ConvertType(type);

                return(astType.GetText());
            }
        static string GeneratePartialClassContextStub(DebuggerCompletionContext context)
        {
            var compilation = SD.ParserService.GetCompilationForFile(context.FileName);
            var file        = SD.ParserService.GetExistingUnresolvedFile(context.FileName);

            if (compilation == null || file == null)
            {
                return("");
            }
            var member = file.GetMember(context.Location);

            if (member == null)
            {
                return("");
            }
            var builder            = new TypeSystemAstBuilder();
            EntityDeclaration decl = builder.ConvertEntity(member.Resolve(new SimpleTypeResolveContext(compilation.MainAssembly)));

            decl.Name       = "__DebuggerStub_" + decl.Name;
            decl.Modifiers &= (Modifiers.Static);
            switch (member.SymbolKind)
            {
            case SymbolKind.Property:
                break;

            case SymbolKind.Indexer:
                break;

            case SymbolKind.Event:
                break;

            case SymbolKind.Method:
                GenerateBodyFromContext(builder, context, (MethodDeclaration)decl);
                break;

            case SymbolKind.Operator:
                break;

            case SymbolKind.Constructor:
                break;

            case SymbolKind.Destructor:
                break;

            case SymbolKind.Accessor:
                break;

            default:
                throw new ArgumentOutOfRangeException();
            }
            return(WrapInType(member.DeclaringTypeDefinition, decl.ToString()));
        }
Esempio n. 30
0
        void WriteTypeDeclarationName(ITypeDefinition typeDef, TokenWriter writer, CSharpFormattingOptions formattingPolicy)
        {
            var astBuilder         = new TypeSystemAstBuilder();
            EntityDeclaration node = astBuilder.ConvertEntity(typeDef);

            if (typeDef.DeclaringTypeDefinition != null)
            {
                WriteTypeDeclarationName(typeDef.DeclaringTypeDefinition, writer, formattingPolicy);
                writer.WriteToken(Roles.Dot, ".");
            }
            writer.WriteIdentifier(node.NameToken);
            WriteTypeParameters(writer, node.GetChildrenByRole(Roles.TypeParameter));
        }