public static IAttribute AddAttributeToEntireDeclaration(
            [NotNull] IMultipleFieldDeclaration multipleFieldDeclaration,
            IClrTypeName attributeTypeName,
            [NotNull] AttributeValue[] attributeValues,
            [CanBeNull] Pair <string, AttributeValue>[] namedValues,
            IPsiModule module,
            CSharpElementFactory elementFactory)
        {
            // TODO: Do we need to do this check here?
            var existingAttribute = GetAttribute(multipleFieldDeclaration.Attributes, attributeTypeName);

            if (existingAttribute != null)
            {
                return(null);
            }

            var attribute = CreateAttribute(attributeTypeName, attributeValues, namedValues, module, elementFactory);

            if (attribute != null)
            {
                // It doesn't matter which declaration we use, it will be applied to the multiple field declaration
                var firstFieldDeclaration = (IFieldDeclaration)multipleFieldDeclaration.Declarators[0];
                return(CSharpSharedImplUtil.AddAttributeAfter(firstFieldDeclaration, attribute, null));
            }

            return(null);
        }
 public RemoveAttributeAction(IMultipleFieldDeclaration multipleFieldDeclaration,
                              [CanBeNull] IFieldDeclaration selectedFieldDeclaration,
                              IAttribute existingAttribute)
 {
     myMultipleFieldDeclaration = multipleFieldDeclaration;
     mySelectedFieldDeclaration = selectedFieldDeclaration;
     myExistingAttribute        = existingAttribute;
 }
Beispiel #3
0
 public ToggleHideInInspectorAll(IMultipleFieldDeclaration multipleFieldDeclaration, IPsiModule module,
                                 CSharpElementFactory elementFactory, IAttribute existingAttribute)
 {
     myMultipleFieldDeclaration = multipleFieldDeclaration;
     myModule            = module;
     myElementFactory    = elementFactory;
     myExistingAttribute = existingAttribute;
 }
Beispiel #4
0
        public RemoveReadonlyFromSerializedFieldQuickFix(RedundantSerializeFieldAttributeWarning highlighting)
        {
            myAttribute = highlighting.Attribute;
            var attributeSectionList = AttributeSectionListNavigator.GetByAttribute(myAttribute);

            myMultipleFieldDeclaration = MultipleFieldDeclarationNavigator.GetByAttributes(attributeSectionList);
            myFieldDeclarations        = FieldDeclarationNavigator.GetByAttribute(myAttribute);
        }
 public ToggleSerializedFieldAll(IMultipleFieldDeclaration multipleFieldDeclaration, IPsiModule module,
                                 CSharpElementFactory elementFactory, bool isSerialized)
 {
     myMultipleFieldDeclaration = multipleFieldDeclaration;
     myFieldDeclaration         = (IFieldDeclaration)multipleFieldDeclaration.Declarators[0];
     myModule         = module;
     myElementFactory = elementFactory;
     myIsSerialized   = isSerialized;
 }
        /// <summary>
        /// Reflow the given comment block to fit within the given maximum line length
        /// </summary>
        /// <param name="blockNode">The comment block to reflow</param>
        /// <param name="maxLineLength">The maximum line length</param>
        /// <returns>The text for the new reflown comment.</returns>
        public string ReflowAndRetag(IDocCommentBlockNode blockNode, int maxLineLength)
        {
            ITreeNode parent = blockNode.Parent;
            ICSharpTypeMemberDeclaration parentDeclaration = parent as IClassMemberDeclaration;

            if (parentDeclaration == null)
            {
                IMultipleFieldDeclaration multipleFieldDeclaration = parent as IMultipleFieldDeclaration;
                if (multipleFieldDeclaration != null)
                {
                    foreach (IFieldDeclaration field in multipleFieldDeclaration.Children <IFieldDeclaration>())
                    {
                        parentDeclaration = field;
                        break;
                    }
                }

                IEnumMemberDeclaration enumMemberDeclaration = parent as IEnumMemberDeclaration;
                if (enumMemberDeclaration != null)
                {
                    parentDeclaration = enumMemberDeclaration;
                }
            }

            // get the xml from the comment
            XmlNode node = blockNode.GetXML(null);

            // Walk the xml tree and process elements as we go. Use a recursive algo for now - comments shouldn't be that complex.
            XmlCommentOptions options = new XmlCommentOptions();

            options.Declaration           = parentDeclaration;
            options.IdentifierLookupScope = IdentifierLookupScopes.ProjectAndUsings;
            options.Solution = blockNode.GetSolution();

            List <Regex> ignoreList = new List <Regex>(_settings.CompiledWordsToIgnoreForMetatagging);

            ignoreList.Add(new Regex("^[Aa]$"));
            ignoreList.Add(new Regex("^[iI]f$"));
            ignoreList.Add(new Regex("^[tT]his$"));
            ignoreList.Add(new Regex("^[eE]lse$"));
            ignoreList.Add(new Regex("^[lL]ong$"));
            ignoreList.Add(new Regex("^[wW]hile$"));
            ignoreList.Add(new Regex("^[lL]ock$"));
            ignoreList.Add(new Regex("^[fF]ixed$"));
            ignoreList.Add(new Regex("^[bB]ase$"));
            ignoreList.Add(new Regex("^[oO]bject$"));

            options.IdentifiersToIgnoreForMetaTagging = ignoreList;

            options.Settings = _reflowSettings;

            XmlComments.XmlComment comment = new XmlComments.XmlComment(options);
            comment.FromXml(node);
            comment.InsertMissingTags();
            return(comment.ToXml(0, maxLineLength, 0));
        }
 public AddAttributeAction(IMultipleFieldDeclaration multipleFieldDeclaration,
                           [CanBeNull] IFieldDeclaration selectedFieldDeclaration,
                           IClrTypeName attributeTypeName,
                           [NotNull] AttributeValue[] attributeValues,
                           bool isLayoutAttribute,
                           IPsiModule module, CSharpElementFactory elementFactory)
 {
     myMultipleFieldDeclaration = multipleFieldDeclaration;
     mySelectedFieldDeclaration = selectedFieldDeclaration;
     myAttributeTypeName        = attributeTypeName;
     myAttributeValues          = attributeValues;
     myIsLayoutAttribute        = isLayoutAttribute;
     myModule         = module;
     myElementFactory = elementFactory;
 }
        private BulbActionBase GetActionToExtractAndApplyToSingleField(
            IMultipleFieldDeclaration multipleFieldDeclaration,
            IFieldDeclaration selectedFieldDeclaration,
            IPsiModule module,
            CSharpElementFactory elementFactory,
            IAttribute existingAttribute)
        {
            if (existingAttribute != null)
            {
                return(new RemoveAttributeAction(multipleFieldDeclaration, selectedFieldDeclaration, existingAttribute));
            }

            var attributeValues = GetAttributeValues(module, selectedFieldDeclaration);

            return(new AddAttributeAction(multipleFieldDeclaration, selectedFieldDeclaration, AttributeTypeName,
                                          attributeValues, IsLayoutAttribute, module, elementFactory));
        }
        private BulbActionBase GetActionToApplyToEntireFieldDeclaration(
            IMultipleFieldDeclaration multipleFieldDeclaration,
            IFieldDeclaration selectedFieldDeclaration,
            IPsiModule module,
            CSharpElementFactory elementFactory,
            IAttribute existingAttribute)
        {
            // Don't pass selectedFieldDeclaration to the actions, as we're applying the action to all fields
            // We only have selectedFieldDeclaration to get default attribute values, and even that's not actually used
            if (existingAttribute != null)
            {
                return(new RemoveAttributeAction(multipleFieldDeclaration, null, existingAttribute));
            }

            var attributeValues = GetAttributeValues(module, selectedFieldDeclaration);

            return(new AddAttributeAction(multipleFieldDeclaration, null, AttributeTypeName, attributeValues,
                                          IsLayoutAttribute, module, elementFactory));
        }
Beispiel #10
0
 public RemoveAllReadonly(IMultipleFieldDeclaration fieldDeclarations)
 {
     myFieldDeclarations = fieldDeclarations;
 }