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; }
public ToggleHideInInspectorAll(IMultipleFieldDeclaration multipleFieldDeclaration, IPsiModule module, CSharpElementFactory elementFactory, IAttribute existingAttribute) { myMultipleFieldDeclaration = multipleFieldDeclaration; myModule = module; myElementFactory = elementFactory; myExistingAttribute = existingAttribute; }
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)); }
public RemoveAllReadonly(IMultipleFieldDeclaration fieldDeclarations) { myFieldDeclarations = fieldDeclarations; }