Skip to content

Commit

Permalink
Merge pull request #133 from ApiApprover/event-modifier-cleanup
Browse files Browse the repository at this point in the history
Event modifier cleanup
  • Loading branch information
danielmarbach committed Nov 8, 2019
2 parents 87ae6ee + 40e3326 commit 3c67c62
Show file tree
Hide file tree
Showing 2 changed files with 53 additions and 25 deletions.
40 changes: 15 additions & 25 deletions src/PublicApiGenerator/EventNameBuilder.cs
Original file line number Diff line number Diff line change
Expand Up @@ -36,31 +36,21 @@ public static class EventNameBuilder
baseType = typeDef?.BaseType;
}

var addScopeAttributes = addAccessorAttributes & MemberAttributes.ScopeMask;
switch (addScopeAttributes)
{
case MemberAttributes.Static when addScopeAttributes == MemberAttributes.Static && !isNew.HasValue:
return string.Format(CodeNormalizer.EventModifierMarkerTemplate, "static")+ name;
case MemberAttributes.Static when addScopeAttributes == MemberAttributes.Static && isNew.HasValue && isNew.Value:
return string.Format(CodeNormalizer.EventModifierMarkerTemplate, "static new")+ name;
case MemberAttributes.Override when addScopeAttributes == MemberAttributes.Override:
return string.Format(CodeNormalizer.EventModifierMarkerTemplate, "override")+ name;
case MemberAttributes.Final | MemberAttributes.Override when addScopeAttributes == (MemberAttributes.Final | MemberAttributes.Override):
return string.Format(CodeNormalizer.EventModifierMarkerTemplate, "sealed override")+ name;
case MemberAttributes.Final when addScopeAttributes == MemberAttributes.Final && isNew.HasValue && isNew.Value:
return string.Format(CodeNormalizer.EventModifierMarkerTemplate, "new")+ name;
case MemberAttributes.Abstract when addScopeAttributes == MemberAttributes.Abstract && !isNew.HasValue:
return string.Format(CodeNormalizer.EventModifierMarkerTemplate, "abstract")+ name;
case MemberAttributes.Abstract when addScopeAttributes == MemberAttributes.Abstract && isNew.HasValue && isNew.Value:
return string.Format(CodeNormalizer.EventModifierMarkerTemplate, "new abstract")+ name;
}

if (eventDefinition.AddMethod.IsVirtual && !eventDefinition.AddMethod.IsAbstract)
{
return string.Format(CodeNormalizer.EventModifierMarkerTemplate, "virtual")+ name;
}

return name;
return (addAccessorAttributes & MemberAttributes.ScopeMask, isNew, eventDefinition.AddMethod.IsVirtual,
eventDefinition.AddMethod.IsAbstract) switch
{
(MemberAttributes.Static, null, _, _) => (string.Format(CodeNormalizer.EventModifierMarkerTemplate, "static") + name),
(MemberAttributes.Static, true, _, _) => (string.Format(CodeNormalizer.EventModifierMarkerTemplate, "static new") + name),
(MemberAttributes.Override, _, _, _) => (string.Format(CodeNormalizer.EventModifierMarkerTemplate, "override") + name),
(MemberAttributes.Final | MemberAttributes.Override, _, _, _) => (string.Format(CodeNormalizer.EventModifierMarkerTemplate,"sealed override") + name),
(MemberAttributes.Final, true, _, _) => (string.Format(CodeNormalizer.EventModifierMarkerTemplate, "new") + name),
(MemberAttributes.Abstract, null, _, _) => (string.Format(CodeNormalizer.EventModifierMarkerTemplate, "abstract") + name),
(MemberAttributes.Abstract, true, _, _) => (string.Format(CodeNormalizer.EventModifierMarkerTemplate, "new abstract") + name),
(MemberAttributes.Const, _, _, _) => (string.Format(CodeNormalizer.EventModifierMarkerTemplate, "abstract override") + name),
(_, null, true, false) => (string.Format(CodeNormalizer.EventModifierMarkerTemplate, "virtual") + name),
(_, true, true, false) => (string.Format(CodeNormalizer.EventModifierMarkerTemplate, "new virtual") + name),
_ => name
};
}
}
}
38 changes: 38 additions & 0 deletions src/PublicApiGeneratorTests/Event_modifiers.cs
Original file line number Diff line number Diff line change
Expand Up @@ -76,6 +76,20 @@ public class ClassWithVirtualEvent
}");
}

[Fact]
public void Should_output_new_virtual_modifier()
{
AssertPublicApi<ClassWithNewVirtualEvent>(
@"namespace PublicApiGeneratorTests.Examples
{
public class ClassWithNewVirtualEvent : PublicApiGeneratorTests.Examples.ClassWithVirtualEvent
{
public ClassWithNewVirtualEvent() { }
public new virtual event System.EventHandler Event;
}
}");
}

[Fact]
public void Should_output_override_modifier()
{
Expand All @@ -90,6 +104,20 @@ public class ClassWithOverridingEvent : PublicApiGeneratorTests.Examples.ClassWi
}");
}

[Fact]
public void Should_output_abstract_override_modifier()
{
AssertPublicApi<ClassWithAbstractOverrideEvent>(
@"namespace PublicApiGeneratorTests.Examples
{
public abstract class ClassWithAbstractOverrideEvent : PublicApiGeneratorTests.Examples.ClassWithVirtualEvent
{
protected ClassWithAbstractOverrideEvent() { }
public abstract override event System.EventHandler Event;
}
}");
}

[Fact]
public void Should_output_sealed_modifier()
{
Expand Down Expand Up @@ -148,6 +176,11 @@ public abstract class ClassWithAbstractNewEvent : ClassWithVirtualEvent
public new abstract event EventHandler Event;
}

public abstract class ClassWithAbstractOverrideEvent : ClassWithVirtualEvent
{
public abstract override event EventHandler Event;
}

public class ClassWithStaticEvent
{
public static event EventHandler Event;
Expand All @@ -163,6 +196,11 @@ public class ClassWithVirtualEvent
public virtual event EventHandler Event;
}

public class ClassWithNewVirtualEvent : ClassWithVirtualEvent
{
public new virtual event EventHandler Event;
}

public class ClassWithOverridingEvent : ClassWithVirtualEvent
{
public override event EventHandler Event;
Expand Down

0 comments on commit 3c67c62

Please sign in to comment.