Skip to content

Commit 2868ed6

Browse files
committed
Address PullRequest comments
This means an interface IParseTreeAnnotation has been extracted. Additionally the CW registration has been adjusted, multiple minor fixes and tweaks to usage sites have been done. IAnnotation now exposes a method to allow dealing with annotation arguments as they are added to the ParseTreeAnnotation itself. By default that just passes the arguments through.
1 parent 5ac876e commit 2868ed6

File tree

102 files changed

+357
-305
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

102 files changed

+357
-305
lines changed

Rubberduck.CodeAnalysis/Inspections/Concrete/AttributeValueOutOfSyncInspection.cs

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -55,10 +55,11 @@ protected override IEnumerable<IInspectionResult> DoGetInspectionResults()
5555
{
5656
foreach (var annotationInstance in declaration.Annotations.Where(pta => pta.Annotation is IAttributeAnnotation))
5757
{
58-
var annotation = annotationInstance.Annotation;
58+
// cast is safe given the predicate in the foreach
59+
var annotation = (IAttributeAnnotation)annotationInstance.Annotation;
5960
if (HasDifferingAttributeValues(declaration, annotationInstance, out var attributeValues))
6061
{
61-
var attributeName = annotationInstance.Attribute();
62+
var attributeName = annotation.Attribute(annotationInstance);
6263

6364
var description = string.Format(InspectionResults.AttributeValueOutOfSyncInspection,
6465
attributeName,
@@ -79,17 +80,22 @@ protected override IEnumerable<IInspectionResult> DoGetInspectionResults()
7980
return results;
8081
}
8182

82-
private static bool HasDifferingAttributeValues(Declaration declaration, ParseTreeAnnotation annotationInstance, out IReadOnlyList<string> attributeValues)
83+
private static bool HasDifferingAttributeValues(Declaration declaration, IParseTreeAnnotation annotationInstance, out IReadOnlyList<string> attributeValues)
8384
{
84-
var attribute = annotationInstance.Attribute();
85+
if (!(annotationInstance.Annotation is IAttributeAnnotation annotation))
86+
{
87+
attributeValues = new List<string>();
88+
return false;
89+
}
90+
var attribute = annotation.Attribute(annotationInstance);
8591
var attributeNodes = declaration.DeclarationType.HasFlag(DeclarationType.Module)
8692
? declaration.Attributes.AttributeNodesFor(annotationInstance)
8793
: declaration.Attributes.AttributeNodesFor(annotationInstance, declaration.IdentifierName);
8894

8995
foreach (var attributeNode in attributeNodes)
9096
{
9197
var values = attributeNode.Values;
92-
if (!annotationInstance.AttributeValues().SequenceEqual(values))
98+
if (!annotation.AttributeValues(annotationInstance).SequenceEqual(values))
9399
{
94100
attributeValues = values;
95101
return true;

Rubberduck.CodeAnalysis/Inspections/Concrete/DuplicatedAnnotationInspection.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@ protected override IEnumerable<IInspectionResult> DoGetInspectionResults()
5454
var result = new DeclarationInspectionResult(
5555
this, string.Format(InspectionResults.DuplicatedAnnotationInspection, duplicate.Key.ToString()), declaration);
5656

57-
result.Properties.AnnotationType = duplicate.Key;
57+
result.Properties.Annotation = duplicate.Key;
5858
return result;
5959
}));
6060
}

Rubberduck.CodeAnalysis/Inspections/Concrete/IllegalAnnotationInspection.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,7 @@ protected override IEnumerable<IInspectionResult> DoGetInspectionResults()
6565
new QualifiedContext(annotation.QualifiedSelection.QualifiedName, annotation.Context)));
6666
}
6767

68-
private static IEnumerable<ParseTreeAnnotation> UnboundAnnotations(IEnumerable<ParseTreeAnnotation> annotations, IEnumerable<Declaration> userDeclarations, IEnumerable<IdentifierReference> identifierReferences)
68+
private static IEnumerable<IParseTreeAnnotation> UnboundAnnotations(IEnumerable<IParseTreeAnnotation> annotations, IEnumerable<Declaration> userDeclarations, IEnumerable<IdentifierReference> identifierReferences)
6969
{
7070
var boundAnnotationsSelections = userDeclarations
7171
.SelectMany(declaration => declaration.Annotations)
@@ -76,7 +76,7 @@ private static IEnumerable<ParseTreeAnnotation> UnboundAnnotations(IEnumerable<P
7676
return annotations.Where(annotation => !boundAnnotationsSelections.Contains(annotation.QualifiedSelection)).ToList();
7777
}
7878

79-
private static IEnumerable<ParseTreeAnnotation> AttributeAnnotationsInDocuments(IEnumerable<Declaration> userDeclarations)
79+
private static IEnumerable<IParseTreeAnnotation> AttributeAnnotationsInDocuments(IEnumerable<Declaration> userDeclarations)
8080
{
8181
var declarationsInDocuments = userDeclarations
8282
.Where(declaration => declaration.QualifiedModuleName.ComponentType == ComponentType.Document);

Rubberduck.CodeAnalysis/Inspections/Concrete/MissingAttributeInspection.cs

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -72,16 +72,20 @@ protected override IEnumerable<IInspectionResult> DoGetInspectionResults()
7272
return results;
7373
}
7474

75-
private static bool MissesCorrespondingAttribute(Declaration declaration, ParseTreeAnnotation annotation)
75+
private static bool MissesCorrespondingAttribute(Declaration declaration, IParseTreeAnnotation annotationInstance)
7676
{
77-
var attribute = annotation.Attribute();
77+
if (!(annotationInstance.Annotation is IAttributeAnnotation annotation))
78+
{
79+
return false;
80+
}
81+
var attribute = annotation.Attribute(annotationInstance);
7882
if (string.IsNullOrEmpty(attribute))
7983
{
8084
return false;
8185
}
8286
return declaration.DeclarationType.HasFlag(DeclarationType.Module)
83-
? !declaration.Attributes.HasAttributeFor(annotation)
84-
: !declaration.Attributes.HasAttributeFor(annotation, declaration.IdentifierName);
87+
? !declaration.Attributes.HasAttributeFor(annotationInstance)
88+
: !declaration.Attributes.HasAttributeFor(annotationInstance, declaration.IdentifierName);
8589
}
8690
}
8791
}

Rubberduck.CodeAnalysis/Inspections/Concrete/MissingMemberAnnotationInspection.cs

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -92,11 +92,14 @@ private static bool MissesCorrespondingMemberAnnotation(Declaration declaration,
9292
if (attributeBaseName == "VB_Ext_Key")
9393
{
9494
return !declaration.Annotations.Where(pta => pta.Annotation is IAttributeAnnotation)
95-
.Any(annotation => annotation.Attribute().Equals("VB_Ext_Key") && attribute.Values[0].Equals(annotation.AttributeValues()[0]));
95+
.Any(pta => {
96+
var annotation = (IAttributeAnnotation)pta.Annotation;
97+
return annotation.Attribute(pta).Equals("VB_Ext_Key") && attribute.Values[0].Equals(annotation.AttributeValues(pta)[0]);
98+
});
9699
}
97100

98101
return !declaration.Annotations.Where(pta => pta.Annotation is IAttributeAnnotation)
99-
.Any(annotation => annotation.Attribute().Equals(attributeBaseName));
102+
.Any(pta => ((IAttributeAnnotation)pta.Annotation).Attribute(pta).Equals(attributeBaseName));
100103
}
101104

102105
private static string AttributeBaseName(Declaration declaration, AttributeNode attribute)

Rubberduck.CodeAnalysis/Inspections/Concrete/MissingModuleAnnotationInspection.cs

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -97,11 +97,14 @@ private static bool MissesCorrespondingModuleAnnotation(Declaration declaration,
9797
if (attribute.Name == "VB_Ext_Key")
9898
{
9999
return !declaration.Annotations.Where(pta => pta.Annotation is IAttributeAnnotation)
100-
.Any(annotation => annotation.Attribute().Equals("VB_Ext_Key") && attribute.Values[0].Equals(annotation.AttributeValues()[0]));
100+
.Any(pta => {
101+
var annotation = (IAttributeAnnotation)pta.Annotation;
102+
return annotation.Attribute(pta).Equals("VB_Ext_Key") && attribute.Values[0].Equals(annotation.AttributeValues(pta)[0]);
103+
});
101104
}
102105

103106
return !declaration.Annotations.Where(pta => pta.Annotation is IAttributeAnnotation)
104-
.Any(annotation => annotation.Attribute().Equals(attribute.Name));
107+
.Any(pta => ((IAttributeAnnotation)pta.Annotation).Attribute(pta).Equals(attribute.Name));
105108
}
106109
}
107110
}

Rubberduck.CodeAnalysis/Inspections/Concrete/ObsoleteMemberUsageInspection.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,8 @@ protected override IEnumerable<IInspectionResult> DoGetInspectionResults()
6666
{
6767
var replacementDocumentation = declaration.Annotations
6868
.First(pta => pta.Annotation is ObsoleteAnnotation)
69-
.AnnotationArguments.FirstOrDefault() ?? string.Empty;
69+
.AnnotationArguments
70+
.FirstOrDefault() ?? string.Empty;
7071

7172
issues.AddRange(declaration.References.Select(reference =>
7273
new IdentifierReferenceInspectionResult(this,

Rubberduck.CodeAnalysis/QuickFixes/AddMissingAttributeQuickFix.cs

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -22,13 +22,17 @@ public AddMissingAttributeQuickFix(IAttributesUpdater attributesUpdater)
2222
public override void Fix(IInspectionResult result, IRewriteSession rewriteSession)
2323
{
2424
var declaration = result.Target;
25-
ParseTreeAnnotation annotationInstance = result.Properties.Annotation;
26-
var attribute = annotationInstance.Attribute();
25+
IParseTreeAnnotation annotationInstance = result.Properties.Annotation;
26+
if (!(annotationInstance.Annotation is IAttributeAnnotation annotation))
27+
{
28+
return;
29+
}
30+
var attribute = annotation.Attribute(annotationInstance);
2731
var attributeName = declaration.DeclarationType.HasFlag(DeclarationType.Module)
2832
? attribute
2933
: $"{declaration.IdentifierName}.{attribute}";
3034

31-
_attributesUpdater.AddAttribute(rewriteSession, declaration, attributeName, annotationInstance.AttributeValues());
35+
_attributesUpdater.AddAttribute(rewriteSession, declaration, attributeName, annotation.AttributeValues(annotationInstance));
3236
}
3337

3438
public override string Description(IInspectionResult result) => Resources.Inspections.QuickFixes.AddMissingAttributeQuickFix;

Rubberduck.CodeAnalysis/QuickFixes/AdjustAttributeAnnotationQuickFix.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ public AdjustAttributeAnnotationQuickFix(IAnnotationUpdater annotationUpdater, I
2525

2626
public override void Fix(IInspectionResult result, IRewriteSession rewriteSession)
2727
{
28-
ParseTreeAnnotation oldAnnotation = result.Properties.Annotation;
28+
IParseTreeAnnotation oldAnnotation = result.Properties.Annotation;
2929
string attributeName = result.Properties.AttributeName;
3030
IReadOnlyList<string> attributeValues = result.Properties.AttributeValues;
3131

Rubberduck.CodeAnalysis/QuickFixes/AdjustAttributeValuesQuickFix.cs

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -24,16 +24,17 @@ public AdjustAttributeValuesQuickFix(IAttributesUpdater attributesUpdater)
2424
public override void Fix(IInspectionResult result, IRewriteSession rewriteSession)
2525
{
2626
var declaration = result.Target;
27-
ParseTreeAnnotation annotationInstance = result.Properties.Annotation;
27+
IParseTreeAnnotation annotationInstance = result.Properties.Annotation;
28+
// FIXME consider dealing with the implicit assumption here?
2829
IAttributeAnnotation annotation = (IAttributeAnnotation)annotationInstance.Annotation;
2930
IReadOnlyList<string> attributeValues = result.Properties.AttributeValues;
3031

31-
var attribute = annotationInstance.Attribute();
32+
var attribute = annotation.Attribute(annotationInstance);
3233
var attributeName = declaration.DeclarationType.HasFlag(DeclarationType.Module)
3334
? attribute
3435
: $"{declaration.IdentifierName}.{attribute}";
3536

36-
_attributesUpdater.UpdateAttribute(rewriteSession, declaration, attributeName, annotationInstance.AttributeValues(), oldValues: attributeValues);
37+
_attributesUpdater.UpdateAttribute(rewriteSession, declaration, attributeName, annotation.AttributeValues(annotationInstance), oldValues: attributeValues);
3738
}
3839

3940
public override string Description(IInspectionResult result) => Resources.Inspections.QuickFixes.AdjustAttributeValuesQuickFix;

0 commit comments

Comments
 (0)