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);
            }
        }
Пример #2
0
 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);
        }
Пример #4
0
        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);
        }
Пример #5
0
        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);
        }
Пример #6
0
        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));
 }
Пример #9
0
 public bool HasAttributeFor(IAttributeAnnotation annotation, string memberName = null)
 {
     return(AttributeNodesFor(annotation, memberName).Any());
 }