private static PropertyDeclarationSyntax MakeInterfaceProperty(PropertyDeclarationSyntax propertySyntax) { var accessors = propertySyntax.AccessorList.Accessors.Select(f => MakeInterfaceAccessor(f)); var syntaxList = new SyntaxList<AccessorDeclarationSyntax>(); syntaxList = syntaxList.AddRange(accessors); var accessorList = propertySyntax.AccessorList.WithAccessors(syntaxList); return propertySyntax.WithModifiers(new SyntaxTokenList()).WithAccessorList(accessorList); }
private static PropertyDeclarationSyntax CreatePropertyWithCorrectAccessibility(PropertyDeclarationSyntax property, IFieldSymbol fieldSymbol, IPropertySymbol propertySymbol) { if (IsExplicityImplementation(propertySymbol)) return property; var existingModifiers = property.Modifiers.Where(m => { var modifierText = m.ValueText; return modifierText != "private" && modifierText != "protected" && modifierText != "public" && modifierText != "internal"; }); var newAccessibilityModifiers = propertySymbol.DeclaredAccessibility .GetMinimumCommonAccessibility(fieldSymbol.DeclaredAccessibility) .GetTokens() .Aggregate(existingModifiers, (ts, t) => ts.Any(tt => tt.ValueText == t.ValueText) ? ts : ts.Union(new[] { t }).ToArray()) .OrderBy(t => t.ValueText); var newProperty = property.WithModifiers(SyntaxFactory.TokenList(newAccessibilityModifiers)); return newProperty; }
/// <summary> /// Normalizes the <paramref name="declaration" />. /// </summary> public override SyntaxNode VisitPropertyDeclaration(PropertyDeclarationSyntax declaration) { var propertySymbol = declaration.GetPropertySymbol(SemanticModel); if (!propertySymbol.ContainingType.IsComponent(SemanticModel) || !propertySymbol.IsExtern) return declaration; var originalDeclaration = declaration; var index = declaration.Modifiers.IndexOf(SyntaxKind.ExternKeyword); declaration = declaration.WithModifiers(declaration.Modifiers.RemoveAt(index)).WithSemicolonToken(default(SyntaxToken)); var accessors = SyntaxFactory.List(NormalizerAccessors(originalDeclaration.AccessorList.Accessors)); return declaration.WithAccessorList(declaration.AccessorList.WithAccessors(accessors)).EnsureLineCount(originalDeclaration); }