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 }); }
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)); }
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"); }
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); }
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)); }