Пример #1
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));
            }
        public override IEnumerable <CodeIssue> GetIssues(BaseSemanticModel context, string subIssue)
        {
            var visitor = new GatherVisitor(context);

            visitor.GetMethods();
            visitor.ComputeConflicts();
            return(visitor.GetIssues());
        }
 protected override IGatherVisitor CreateVisitor(BaseSemanticModel context)
 {
     if (!context.Supports(new Version(5, 0)))
     {
         //Old C# version -- async/await are not available
         return(null);
     }
     return(new GatherVisitor(context));
 }
        protected override IGatherVisitor CreateVisitor(BaseSemanticModel context)
        {
            var unit = context.RootNode as SyntaxTree;

            if (unit == null)
            {
                return(null);
            }
            return(new GatherVisitor(context, unit, this));
        }
        protected override IEnumerable <CodeAction> GetFixes(BaseSemanticModel context, Node env,
                                                             string variableName)
        {
            var containingStatement = env.ContainingStatement;

            // we don't give a fix for these cases since the general fix may not work
            // lambda in while/do-while/for condition
            if (containingStatement is WhileStatement || containingStatement is DoWhileStatement ||
                containingStatement is ForStatement)
            {
                yield break;
            }
            // lambda in for initializer/iterator
            if (containingStatement.Parent is ForStatement &&
                ((ForStatement)containingStatement.Parent).EmbeddedStatement != containingStatement)
            {
                yield break;
            }

            Action <Script> action = script =>
            {
                var newName = LocalVariableNamePicker.PickSafeName(
                    containingStatement.GetParent <EntityDeclaration>(),
                    Enumerable.Range(1, 100).Select(i => variableName + i));

                var variableDecl = new VariableDeclarationStatement(new SimpleType("var"), newName,
                                                                    new IdentifierExpression(variableName));

                if (containingStatement.Parent is BlockStatement || containingStatement.Parent is SwitchSection)
                {
                    script.InsertBefore(containingStatement, variableDecl);
                }
                else
                {
                    var offset = script.GetCurrentOffset(containingStatement.StartLocation);
                    script.InsertBefore(containingStatement, variableDecl);
                    script.InsertText(offset, "{");
                    script.InsertText(script.GetCurrentOffset(containingStatement.EndLocation), "}");
                    script.FormatText(containingStatement.Parent);
                }

                var textNodes = new List <AstNode>();
                textNodes.Add(variableDecl.Variables.First().NameToken);

                foreach (var reference in env.GetAllReferences())
                {
                    var identifier = new IdentifierExpression(newName);
                    script.Replace(reference.AstNode, identifier);
                    textNodes.Add(identifier);
                }
                script.Link(textNodes.ToArray());
            };

            yield return(new CodeAction(context.TranslateString("Copy to local variable"), action, env.AstNode));
        }
        protected override IEnumerable<CodeAction> GetFixes(BaseSemanticModel context, Node env,
                                                             string variableName)
        {
            var containingStatement = env.ContainingStatement;

            // we don't give a fix for these cases since the general fix may not work
            // lambda in while/do-while/for condition
            if (containingStatement is WhileStatement || containingStatement is DoWhileStatement ||
                containingStatement is ForStatement)
                yield break;
            // lambda in for initializer/iterator
            if (containingStatement.Parent is ForStatement &&
                ((ForStatement)containingStatement.Parent).EmbeddedStatement != containingStatement)
                yield break;

            Action<Script> action = script =>
            {
                var newName = LocalVariableNamePicker.PickSafeName(
                    containingStatement.GetParent<EntityDeclaration>(),
                    Enumerable.Range(1, 100).Select(i => variableName + i));

                var variableDecl = new VariableDeclarationStatement(new SimpleType("var"), newName,
                                                                     new IdentifierExpression(variableName));

                if (containingStatement.Parent is BlockStatement || containingStatement.Parent is SwitchSection)
                {
                    script.InsertBefore(containingStatement, variableDecl);
                }
                else
                {
                    var offset = script.GetCurrentOffset(containingStatement.StartLocation);
                    script.InsertBefore(containingStatement, variableDecl);
                    script.InsertText(offset, "{");
                    script.InsertText(script.GetCurrentOffset(containingStatement.EndLocation), "}");
                    script.FormatText(containingStatement.Parent);
                }

                var textNodes = new List<AstNode>();
                textNodes.Add(variableDecl.Variables.First().NameToken);

                foreach (var reference in env.GetAllReferences())
                {
                    var identifier = new IdentifierExpression(newName);
                    script.Replace(reference.AstNode, identifier);
                    textNodes.Add(identifier);
                }
                script.Link(textNodes.ToArray());
            };
            yield return new CodeAction(context.TranslateString("Copy to local variable"), action, env.AstNode);
        }
Пример #7
0
            bool IsSafeExpression(Expression expression, BaseSemanticModel context)
            {
                var components = expression.DescendantsAndSelf;

                foreach (var c in components)
                {
                    if (c is AssignmentExpression)
                    {
                        return(false);
                    }
                    else if (c is UnaryOperatorExpression)
                    {
                        var ope = ((UnaryOperatorExpression)c).Operator;
                        if (ope == UnaryOperatorType.Decrement || ope == UnaryOperatorType.Increment ||
                            ope == UnaryOperatorType.PostDecrement || ope == UnaryOperatorType.PostIncrement)
                        {
                            return(false);
                        }
                    }
                    else if (c is IdentifierExpression)
                    {
                        var result = context.Resolve(c);
                        if (result.IsError)
                        {
                            return(false);
                        }
                        if (!(result is LocalResolveResult))
                        {
                            return(false);
                        }
                        if ((((LocalResolveResult)result).IsParameter))
                        {
                            return(false);
                        }
                    }
                }
                return(true);
            }
        static IType GetReturnType(BaseSemanticModel context, AstNode currentFunction)
        {
            var resolveResult = context.Resolve(currentFunction);

            return(resolveResult.IsError ? null : resolveResult.Type);
        }
Пример #9
0
 public CatchClauseVisitor(BaseSemanticModel context, IVariable parameter)
 {
     ctx             = context;
     this.parameter  = parameter;
     OffendingThrows = new List <ThrowStatement>();
 }
 protected override IEnumerable<CodeAction> GetFixes(BaseSemanticModel context, Node env,
                                                      string variableName)
 {
     yield break;
 }
 public GatherVisitor(BaseSemanticModel context, SyntaxTree unit,
                      AccessToClosureIssue qualifierDirectiveEvidentIssueProvider)
     : base(context, qualifierDirectiveEvidentIssueProvider)
 {
     this.title = context.TranslateString(qualifierDirectiveEvidentIssueProvider.Title);
 }
Пример #12
0
 protected override IEnumerable <CodeAction> GetFixes(BaseSemanticModel context, Node env,
                                                      string variableName)
 {
     yield break;
 }
 public GatherVisitor(BaseSemanticModel context, VariableDeclaredInWideScopeIssue qualifierDirectiveEvidentIssueProvider) : base(context, qualifierDirectiveEvidentIssueProvider)
 {
     this.context = context;
 }
Пример #14
0
 public GatherVisitor(BaseSemanticModel context, bool tryResolve) : base(context)
 {
     this.tryResolve = tryResolve;
 }
 public GatherVisitor(BaseSemanticModel context)
     : base(context)
 {
     DeclaredMethods = new List <MethodDeclaration>();
 }
Пример #16
0
 protected override IGatherVisitor CreateVisitor(BaseSemanticModel context)
 {
     return(new GatherVisitor(context));
 }
Пример #17
0
 public GatherVisitor(BaseSemanticModel ctx)
     : base(ctx)
 {
 }
 protected abstract IEnumerable <CodeAction> GetFixes(BaseSemanticModel context, Node env,
                                                      string variableName);