private static TypeMetricKind GetMetricKind(TypeDeclarationSyntax type) { switch (type.Kind()) { case SyntaxKind.ClassDeclaration: return TypeMetricKind.Class; case SyntaxKind.StructDeclaration: return TypeMetricKind.Struct; case SyntaxKind.InterfaceDeclaration: return TypeMetricKind.Interface; default: return TypeMetricKind.Unknown; } }
// This code was copied from the Roslyn code base (and slightly modified). It can be removed if // TypeDeclarationSyntaxExtensions.WithModifiers is made public (Roslyn issue #2186) private static TypeDeclarationSyntax ReplaceModifiers(TypeDeclarationSyntax node, SyntaxTokenList modifiers) { switch (node.Kind()) { case SyntaxKind.ClassDeclaration: return ((ClassDeclarationSyntax)node).WithModifiers(modifiers); case SyntaxKind.InterfaceDeclaration: return ((InterfaceDeclarationSyntax)node).WithModifiers(modifiers); case SyntaxKind.StructDeclaration: return ((StructDeclarationSyntax)node).WithModifiers(modifiers); } return node; }
private void ClassifyUpdate(TypeDeclarationSyntax oldNode, TypeDeclarationSyntax newNode) { if (oldNode.Kind() != newNode.Kind()) { ReportError(RudeEditKind.TypeKindUpdate); return; } if (!SyntaxFactory.AreEquivalent(oldNode.Modifiers, newNode.Modifiers)) { ReportError(RudeEditKind.ModifiersUpdate); return; } if (!SyntaxFactory.AreEquivalent(oldNode.Identifier, newNode.Identifier)) { ReportError(RudeEditKind.Renamed); return; } Debug.Assert(!SyntaxFactory.AreEquivalent(oldNode.BaseList, newNode.BaseList)); ReportError(RudeEditKind.BaseTypeOrInterfaceUpdate); }
// This code was copied from the Roslyn code base (and slightly modified). It can be removed if // TypeDeclarationSyntaxExtensions.WithModifiers is made public (Roslyn issue #2186) private static TypeDeclarationSyntax ReplaceKeyword(TypeDeclarationSyntax node, SyntaxToken keyword) { switch (node.Kind()) { case SyntaxKind.ClassDeclaration: return ((ClassDeclarationSyntax)node).WithKeyword(keyword); case SyntaxKind.InterfaceDeclaration: return ((InterfaceDeclarationSyntax)node).WithKeyword(keyword); case SyntaxKind.StructDeclaration: return ((StructDeclarationSyntax)node).WithKeyword(keyword); } return node; }
/// <summary> /// Get a source type symbol for the given declaration syntax. /// </summary> /// <returns>Null if there is no matching declaration.</returns> internal SourceNamedTypeSymbol GetSourceTypeMember(TypeDeclarationSyntax syntax) { return GetSourceTypeMember(syntax.Identifier.ValueText, syntax.Arity, syntax.Kind(), syntax); }