Exemple #1
0
            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);
            }
Exemple #2
0
            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));
                    }
                }
            }