public override void Fix(IInspectionResult result, IRewriteSession rewriteSession) { IAttributeAnnotation oldAnnotation = result.Properties.Annotation; string attributeName = result.Properties.AttributeName; IReadOnlyList <string> attributeValues = result.Properties.AttributeValues; var declaration = result.Target; if (declaration.DeclarationType.HasFlag(DeclarationType.Module)) { var componentType = declaration.QualifiedModuleName.ComponentType; if (IsDefaultAttribute(componentType, attributeName, attributeValues)) { _annotationUpdater.RemoveAnnotation(rewriteSession, oldAnnotation); } else { var(newAnnotationType, newAnnotationValues) = _attributeAnnotationProvider.ModuleAttributeAnnotation(attributeName, attributeValues); _annotationUpdater.UpdateAnnotation(rewriteSession, oldAnnotation, newAnnotationType, newAnnotationValues); } } else { var attributeBaseName = AttributeBaseName(attributeName, declaration); var(newAnnotationType, newAnnotationValues) = _attributeAnnotationProvider.MemberAttributeAnnotation(attributeBaseName, attributeValues); _annotationUpdater.UpdateAnnotation(rewriteSession, oldAnnotation, newAnnotationType, newAnnotationValues); } }
private static bool MissesCorrespondingAttribute(Declaration declaration, IAttributeAnnotation annotation) { if (string.IsNullOrEmpty(annotation.Attribute)) { return(false); } return(declaration.DeclarationType.HasFlag(DeclarationType.Module) ? !declaration.Attributes.HasAttributeFor(annotation) : !declaration.Attributes.HasAttributeFor(annotation, declaration.IdentifierName)); }
public override void Fix(IInspectionResult result, IRewriteSession rewriteSession) { var declaration = result.Target; IAttributeAnnotation annotation = result.Properties.Annotation; var attributeName = declaration.DeclarationType.HasFlag(DeclarationType.Module) ? annotation.Attribute : $"{declaration.IdentifierName}.{annotation.Attribute}"; _attributesUpdater.AddAttribute(rewriteSession, declaration, attributeName, annotation.AttributeValues); }
public override void Fix(IInspectionResult result, IRewriteSession rewriteSession) { var declaration = result.Target; IParseTreeAnnotation annotationInstance = result.Properties.Annotation; Debug.Assert(annotationInstance.Annotation is IAttributeAnnotation); IAttributeAnnotation annotation = (IAttributeAnnotation)annotationInstance.Annotation; IReadOnlyList <string> attributeValues = result.Properties.AttributeValues; var attribute = annotation.Attribute(annotationInstance); var attributeName = declaration.DeclarationType.HasFlag(DeclarationType.Module) ? attribute : $"{declaration.IdentifierName}.{attribute}"; _attributesUpdater.UpdateAttribute(rewriteSession, declaration, attributeName, annotation.AttributeValues(annotationInstance), oldValues: attributeValues); }
private static bool HasDifferingAttributeValues(Declaration declaration, IAttributeAnnotation annotation, out IReadOnlyList <string> attributeValues) { var attributeNodes = declaration.DeclarationType.HasFlag(DeclarationType.Module) ? declaration.Attributes.AttributeNodesFor(annotation) : declaration.Attributes.AttributeNodesFor(annotation, declaration.IdentifierName); foreach (var attributeNode in attributeNodes) { var values = attributeNode.Values; if (!annotation.AttributeValues.SequenceEqual(values)) { attributeValues = values; return(true); } } attributeValues = new List <string>(); return(false); }
public IEnumerable <AttributeNode> AttributeNodesFor(IAttributeAnnotation annotation, string memberName = null) { if (!annotation.AnnotationType.HasFlag(AnnotationType.Attribute)) { return(Enumerable.Empty <AttributeNode>()); } var attributeName = memberName != null ? MemberAttributeName(annotation.Attribute, memberName) : annotation.Attribute; //VB_Ext_Key annotation depend on the defined key for identity. if (annotation.Attribute.Equals("VB_Ext_Key", StringComparison.OrdinalIgnoreCase)) { return(this.Where(a => a.Name.Equals(attributeName, StringComparison.OrdinalIgnoreCase) && a.Values[0] == annotation.AttributeValues[0])); } return(this.Where(a => a.Name.Equals(attributeName, StringComparison.OrdinalIgnoreCase))); }
public static string Attribute(this IAttributeAnnotation annotation, IParseTreeAnnotation annotationInstance) { return(annotation.Attribute(annotationInstance.AnnotationArguments)); }
public static IReadOnlyList <string> AttributeValues(this IAttributeAnnotation annotation, IParseTreeAnnotation instance) { return(annotation.AnnotationToAttributeValues(instance.AnnotationArguments)); }
public bool HasAttributeFor(IAttributeAnnotation annotation, string memberName = null) { return(AttributeNodesFor(annotation, memberName).Any()); }