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;
        }