Beispiel #1
0
            public override void VisitMethodDeclaration(MethodDeclaration methodDeclaration)
            {
                var context = ctx;

                if (methodDeclaration.HasModifier(Modifiers.Static) ||
                    methodDeclaration.HasModifier(Modifiers.Virtual) ||
                    methodDeclaration.HasModifier(Modifiers.Override) ||
                    methodDeclaration.HasModifier(Modifiers.New) ||
                    methodDeclaration.Attributes.Any())
                {
                    return;
                }

                var body = methodDeclaration.Body;

                // skip empty methods
                if (!body.Statements.Any())
                {
                    return;
                }

                if (body.Statements.Count == 1)
                {
                    if (body.Statements.First() is ThrowStatement)
                    {
                        return;
                    }
                }

                var resolved = context.Resolve(methodDeclaration) as MemberResolveResult;

                if (resolved == null || SkipMember(resolved.Member))
                {
                    return;
                }
                var isImplementingInterface = resolved.Member.ImplementedInterfaceMembers.Any();

                if (isImplementingInterface)
                {
                    return;
                }

                if (StaticVisitor.UsesNotStaticMember(context, body))
                {
                    return;
                }

                AddIssue(new CodeIssue(
                             methodDeclaration.NameToken.StartLocation, methodDeclaration.NameToken.EndLocation,
                             string.Format(context.TranslateString("Method '{0}' can be made static."), methodDeclaration.Name),
                             string.Format(context.TranslateString("Make '{0}' static"), methodDeclaration.Name),
                             script => script.ChangeModifier(methodDeclaration, methodDeclaration.Modifiers | Modifiers.Static))
                {
                    IssueMarker = IssueMarker.DottedLine
                });
            }
Beispiel #2
0
        public void ActionCtorOk()
        {
            var actual  = new System.Collections.Generic.List <System.Collections.Generic.Stack <TypeVisit> >();
            var visitor = new StaticVisitor(stack => actual.Add(stack.Clone()));

            visitor.Visit(typeof(DataStructure));
            Assert.IsTrue(actual.Count == 1);

            Assert.IsTrue(actual[0].CurrentType() == typeof(DataStructure));
            Assert.IsTrue(actual[0].CurrentVisit() is InitialTypeTypeVisit);
        }
            public override void VisitMethodDeclaration(MethodDeclaration methodDeclaration)
            {
                var context = ctx;

                if (methodDeclaration.HasModifier(Modifiers.Static) ||
                    methodDeclaration.HasModifier(Modifiers.Virtual) ||
                    methodDeclaration.HasModifier(Modifiers.Override) ||
                    methodDeclaration.HasModifier(Modifiers.New) ||
                    methodDeclaration.Attributes.Any())
                {
                    return;
                }

                var body = methodDeclaration.Body;

                // skip empty methods
                if (!body.Statements.Any())
                {
                    return;
                }

                if (body.Statements.Count == 1)
                {
                    if (body.Statements.First() is ThrowStatement)
                    {
                        return;
                    }
                }

                var resolved = context.Resolve(methodDeclaration) as MemberResolveResult;

                if (resolved == null)
                {
                    return;
                }

                var isImplementingInterface = resolved.Member.ImplementedInterfaceMembers.Any();

                if (isImplementingInterface)
                {
                    return;
                }

                if (StaticVisitor.UsesNotStaticMember(context, body))
                {
                    return;
                }

                AddIssue(methodDeclaration.NameToken.StartLocation, methodDeclaration.NameToken.EndLocation,
                         context.TranslateString(string.Format("Make '{0}' static", methodDeclaration.Name)),
                         script => ExecuteScriptToFixStaticMethodIssue(script, context, methodDeclaration));
            }
Beispiel #4
0
        public void BasicOk()
        {
            var actual  = new System.Collections.Generic.List <System.Collections.Generic.Stack <TypeVisit> >();
            var visitor = new StaticVisitor(actual);

            visitor.Visit(typeof(DataStructure));
            Assert.IsTrue(actual.Count == 2);

            Assert.IsTrue(actual[0].CurrentType() == typeof(DataStructure));
            Assert.IsTrue(actual[0].CurrentVisit() is InitialTypeTypeVisit);

            Assert.IsTrue(actual[1].CurrentType() == typeof(PropertyObject));
            Assert.IsTrue(actual[1].CurrentVisit() is PropertyTypeVisit);
            Assert.IsTrue(((PropertyTypeVisit)actual[1].CurrentVisit()).PropertyName == "Property");
        }
Beispiel #5
0
        public void ActionCtorWithConfigurationOk()
        {
            var configurationCalled = false;
            var configuration       = new StaticVisitorConfiguration
            {
                TypeCanBeVisited = x =>
                {
                    configurationCalled = true;
                    return(false);
                }
            };
            var actual  = new System.Collections.Generic.List <System.Collections.Generic.Stack <TypeVisit> >();
            var visitor = new StaticVisitor(stack => actual.Add(stack.Clone()), configuration);

            visitor.Visit(typeof(DataStructure));
            Assert.IsTrue(configurationCalled);
        }
Beispiel #6
0
            public override void VisitCustomEventDeclaration(CustomEventDeclaration eventDeclaration)
            {
                if (eventDeclaration.HasModifier(Modifiers.Static) ||
                    eventDeclaration.HasModifier(Modifiers.Virtual) ||
                    eventDeclaration.HasModifier(Modifiers.Override) ||
                    eventDeclaration.HasModifier(Modifiers.New) ||
                    eventDeclaration.Attributes.Any())
                {
                    return;
                }

                if (IsEmpty(eventDeclaration.RemoveAccessor) && IsEmpty(eventDeclaration.AddAccessor))
                {
                    return;
                }


                var resolved = ctx.Resolve(eventDeclaration) as MemberResolveResult;

                if (resolved == null || SkipMember(resolved.Member))
                {
                    return;
                }
                var isImplementingInterface = resolved.Member.ImplementedInterfaceMembers.Any();

                if (isImplementingInterface)
                {
                    return;
                }

                if (!eventDeclaration.AddAccessor.IsNull && StaticVisitor.UsesNotStaticMember(ctx, eventDeclaration.AddAccessor.Body) ||
                    !eventDeclaration.RemoveAccessor.IsNull && StaticVisitor.UsesNotStaticMember(ctx, eventDeclaration.RemoveAccessor.Body))
                {
                    return;
                }

                AddIssue(new CodeIssue(eventDeclaration.NameToken.StartLocation, eventDeclaration.NameToken.EndLocation,
                                       string.Format(ctx.TranslateString("Event '{0}' can be made static."), eventDeclaration.Name),
                                       string.Format(ctx.TranslateString("Make '{0}' static"), eventDeclaration.Name),
                                       script => script.ChangeModifier(eventDeclaration, eventDeclaration.Modifiers | Modifiers.Static))
                {
                    IssueMarker = IssueMarker.DottedLine
                });
            }
            public override void VisitPropertyDeclaration(PropertyDeclaration propertyDeclaration)
            {
                if (propertyDeclaration.HasModifier(Modifiers.Static) ||
                    propertyDeclaration.HasModifier(Modifiers.Virtual) ||
                    propertyDeclaration.HasModifier(Modifiers.Override) ||
                    propertyDeclaration.HasModifier(Modifiers.New) ||
                    propertyDeclaration.Attributes.Any())
                {
                    return;
                }

                if (IsEmpty(propertyDeclaration.Setter) && IsEmpty(propertyDeclaration.Getter))
                {
                    return;
                }


                var resolved = ctx.Resolve(propertyDeclaration) as MemberResolveResult;

                if (resolved == null || SkipMember(resolved.Member))
                {
                    return;
                }
                var isImplementingInterface = resolved.Member.ImplementedInterfaceMembers.Any();

                if (isImplementingInterface)
                {
                    return;
                }

                if (!propertyDeclaration.Getter.IsNull && StaticVisitor.UsesNotStaticMember(ctx, propertyDeclaration.Getter.Body) ||
                    !propertyDeclaration.Setter.IsNull && StaticVisitor.UsesNotStaticMember(ctx, propertyDeclaration.Setter.Body))
                {
                    return;
                }

                AddIssue(propertyDeclaration.NameToken.StartLocation, propertyDeclaration.NameToken.EndLocation,
                         string.Format(ctx.TranslateString("Property '{0}' can be made static."), propertyDeclaration.Name),
                         string.Format(ctx.TranslateString("Make '{0}' static"), propertyDeclaration.Name),
                         script => script.ChangeModifier(propertyDeclaration, propertyDeclaration.Modifiers | Modifiers.Static));
            }