private static string ResolveNamespace( ClassDeclarationSyntax @class, string defaultNamespace ) { Contract.Requires( @class != null ); Contract.Requires( defaultNamespace != null ); Contract.Ensures( Contract.Result<string>() != null ); var @namespace = @class.Ancestors().OfType<NamespaceDeclarationSyntax>().FirstOrDefault(); if ( @namespace == null ) return defaultNamespace; // if the namespace has multiple components (e.g. dotted), then it's a "qualified name" var qualifiedName = @namespace.Name as QualifiedNameSyntax; if ( qualifiedName != null ) return qualifiedName.ToString(); // flatten all identifers // if namespace has only one component, then it's an identifier var name = (IdentifierNameSyntax) @namespace.Name; return name.Identifier.Text; }