Fixed some issues that resulted in erroneous duplicate symbol error messages.

llvm-svn: 189228
diff --git a/clang-tools-extra/modularize/Modularize.cpp b/clang-tools-extra/modularize/Modularize.cpp
index 823165bb..c1bba91 100644
--- a/clang-tools-extra/modularize/Modularize.cpp
+++ b/clang-tools-extra/modularize/Modularize.cpp
@@ -418,13 +418,23 @@
     if (isa<NamespaceDecl>(ND) || isa<UsingDirectiveDecl>(ND) ||
         isa<NamespaceAliasDecl>(ND) ||
         isa<ClassTemplateSpecializationDecl>(ND) || isa<UsingDecl>(ND) ||
+        isa<ClassTemplateDecl>(ND) || isa<TemplateTypeParmDecl>(ND) ||
+        isa<TypeAliasTemplateDecl>(ND) ||
         isa<UsingShadowDecl>(ND) || isa<FunctionDecl>(ND) ||
         isa<FunctionTemplateDecl>(ND) ||
         (isa<TagDecl>(ND) &&
          !cast<TagDecl>(ND)->isThisDeclarationADefinition()))
       return true;
 
-    std::string Name = ND->getNameAsString();
+    // Skip anonymous declarations.
+    if (!ND->getDeclName())
+      return true;
+
+    // Get the qualified name.
+    std::string Name;

+    llvm::raw_string_ostream OS(Name);

+    ND->printQualifiedName(OS);

+    OS.flush();

     if (Name.empty())
       return true;