private string GetNamespaceToGenerateIntoForUsageWithNamespace(Project targetProject, Project triggeringProject) { var namespaceToGenerateInto = _state.NamespaceToGenerateInOpt.Trim(); if (targetProject.Language == LanguageNames.CSharp || targetProject == triggeringProject) { // If the target project is C# project then we don't have to make any modification to the namespace // or // This is a VB project generation into itself which requires no change as well return(namespaceToGenerateInto); } // If the target Project is VB then we have to check if the RootNamespace of the VB project is the parent most namespace of the type being generated // True, Remove the RootNamespace // False, Add Global to the Namespace Contract.Assert(targetProject.Language == LanguageNames.VisualBasic); IGenerateTypeService targetLanguageService = null; if (_document.Project.Language == LanguageNames.VisualBasic) { targetLanguageService = _service; } else { Debug.Assert(_targetLanguageService != null); targetLanguageService = _targetLanguageService; } var rootNamespace = targetLanguageService.GetRootNamespace(targetProject.CompilationOptions).Trim(); if (!string.IsNullOrWhiteSpace(rootNamespace)) { var rootNamespaceLength = CheckIfRootNamespacePresentInNamespace(namespaceToGenerateInto, rootNamespace); if (rootNamespaceLength > -1) { // True, Remove the RootNamespace namespaceToGenerateInto = namespaceToGenerateInto.Substring(rootNamespaceLength); } else { // False, Add Global to the Namespace namespaceToGenerateInto = AddGlobalDotToTheNamespace(namespaceToGenerateInto); } } else { // False, Add Global to the Namespace namespaceToGenerateInto = AddGlobalDotToTheNamespace(namespaceToGenerateInto); } return(namespaceToGenerateInto); }
internal async Task <IEnumerable <CodeActionOperation> > GetOperationsAsync() { // Check to see if it is from GFU Dialog if (!_fromDialog) { // Generate the actual type declaration. var namedType = GenerateNamedType(); if (_intoNamespace) { if (_inNewFile) { // Generating into a new file is somewhat complicated. var documentName = GetTypeName(_state) + _service.DefaultFileExtension; return(await GetGenerateInNewFileOperationsAsync( namedType, documentName, null, true, null, _semanticDocument.Project, _semanticDocument.Project, isDialog : false).ConfigureAwait(false)); } else { return(await GetGenerateIntoContainingNamespaceOperationsAsync(namedType).ConfigureAwait(false)); } } else { return(await GetGenerateIntoTypeOperationsAsync(namedType).ConfigureAwait(false)); } } else { var namedType = GenerateNamedType(_generateTypeOptionsResult); // Honor the options from the dialog // Check to see if the type is requested to be generated in cross language Project // e.g.: C# -> VB or VB -> C# if (_semanticDocument.Project.Language != _generateTypeOptionsResult.Project.Language) { _targetProjectChangeInLanguage = _generateTypeOptionsResult.Project.Language == LanguageNames.CSharp ? TargetProjectChangeInLanguage.VisualBasicToCSharp : TargetProjectChangeInLanguage.CSharpToVisualBasic; // Get the cross language service _targetLanguageService = _generateTypeOptionsResult.Project.LanguageServices.GetService <IGenerateTypeService>(); } if (_generateTypeOptionsResult.IsNewFile) { return(await GetGenerateInNewFileOperationsAsync( namedType, _generateTypeOptionsResult.NewFileName, _generateTypeOptionsResult.Folders, _generateTypeOptionsResult.AreFoldersValidIdentifiers, _generateTypeOptionsResult.FullFilePath, _generateTypeOptionsResult.Project, _semanticDocument.Project, isDialog : true).ConfigureAwait(false)); } else { return(await GetGenerateIntoExistingDocumentAsync( namedType, _semanticDocument.Project, _generateTypeOptionsResult, isDialog : true).ConfigureAwait(false)); } } }