private (string[] containers, string usingOrImport) GetNamespaceContainersAndAddUsingsOrImport( bool isDialog, IList <string> folders, bool areFoldersValidIdentifiers, Project targetProject, Project triggeringProject) { string includeUsingsOrImports = null; if (!areFoldersValidIdentifiers) { folders = SpecializedCollections.EmptyList <string>(); } // Now actually create the symbol that we want to add to the root namespace. The // symbol may either be a named type (if we're not generating into a namespace) or // it may be a namespace symbol. string[] containers = null; if (!isDialog) { // Not generated from the Dialog containers = GetNamespaceToGenerateInto().Split(new[] { '.' }, StringSplitOptions.RemoveEmptyEntries); } else if (!_service.IsSimpleName(_state.NameOrMemberAccessExpression)) { // If the usage was with a namespace containers = GetNamespaceToGenerateIntoForUsageWithNamespace(targetProject, triggeringProject).Split(new[] { '.' }, StringSplitOptions.RemoveEmptyEntries); } else { // Generated from the Dialog var containerList = new List <string>(); var rootNamespaceOfTheProjectGeneratedInto = _targetProjectChangeInLanguage == TargetProjectChangeInLanguage.NoChange ? _service.GetRootNamespace(_generateTypeOptionsResult.Project.CompilationOptions).Trim() : _targetLanguageService.GetRootNamespace(_generateTypeOptionsResult.Project.CompilationOptions).Trim(); var defaultNamespace = _generateTypeOptionsResult.DefaultNamespace; // Case 1 : If the type is generated into the same C# project or // Case 2 : If the type is generated from a C# project to a C# Project // Case 3 : If the Type is generated from a VB Project to a C# Project // Using and Namespace will be the DefaultNamespace + Folder Structure if ((_semanticDocument.Project == _generateTypeOptionsResult.Project && _semanticDocument.Project.Language == LanguageNames.CSharp) || (_targetProjectChangeInLanguage == TargetProjectChangeInLanguage.NoChange && _generateTypeOptionsResult.Project.Language == LanguageNames.CSharp) || _targetProjectChangeInLanguage == TargetProjectChangeInLanguage.VisualBasicToCSharp) { if (!string.IsNullOrWhiteSpace(defaultNamespace)) { containerList.Add(defaultNamespace); } // Populate the ContainerList AddFoldersToNamespaceContainers(containerList, folders); containers = containerList.ToArray(); includeUsingsOrImports = string.Join(".", containerList.ToArray()); } // Case 4 : If the type is generated into the same VB project or // Case 5 : If Type is generated from a VB Project to VB Project // Case 6 : If Type is generated from a C# Project to VB Project // Namespace will be Folder Structure and Import will have the RootNamespace of the project generated into as part of the Imports if ((_semanticDocument.Project == _generateTypeOptionsResult.Project && _semanticDocument.Project.Language == LanguageNames.VisualBasic) || (_semanticDocument.Project != _generateTypeOptionsResult.Project && _targetProjectChangeInLanguage == TargetProjectChangeInLanguage.NoChange && _generateTypeOptionsResult.Project.Language == LanguageNames.VisualBasic) || _targetProjectChangeInLanguage == TargetProjectChangeInLanguage.CSharpToVisualBasic) { // Populate the ContainerList AddFoldersToNamespaceContainers(containerList, folders); containers = containerList.ToArray(); includeUsingsOrImports = string.Join(".", containerList.ToArray()); if (!string.IsNullOrWhiteSpace(rootNamespaceOfTheProjectGeneratedInto)) { includeUsingsOrImports = string.IsNullOrEmpty(includeUsingsOrImports) ? rootNamespaceOfTheProjectGeneratedInto : rootNamespaceOfTheProjectGeneratedInto + "." + includeUsingsOrImports; } } Debug.Assert(includeUsingsOrImports != null); } return(containers, includeUsingsOrImports); }