public override void VisitNamespaceDeclaration(NamespaceDeclarationSyntax node) { var simpleNamespaces = node.Usings.Where(usingDirective => usingDirective.Alias == null); var newUsingDirectives = new HashSet <EquivalentNameSyntax>(); newUsingDirectives.UnionWith(usingDirectivesFromParent); newUsingDirectives.UnionWith(simpleNamespaces.Select(x => new EquivalentNameSyntax(x.Name))); // We visit the namespace declaration with the updated set of parent 'usings', this is needed in case of nested namespaces var visitingNamespace = context.SemanticModel.GetSymbolInfo(node.Name).Symbol as INamespaceSymbol; var visitor = new CSharpRemovableUsingWalker(context, newUsingDirectives.ToImmutableHashSet(), visitingNamespace); VisitContent(visitor, node.Members, node.DescendantTrivia()); CheckUnnecessaryUsings(context, simpleNamespaces, visitor.necessaryNamespaces); necessaryNamespaces.UnionWith(visitor.necessaryNamespaces); }