File: Diagnostics\GenerateType\TestGenerateTypeOptionsService.cs
Web Access
Project: src\src\EditorFeatures\TestUtilities\Microsoft.CodeAnalysis.EditorFeatures.Test.Utilities.csproj (Microsoft.CodeAnalysis.EditorFeatures.Test.Utilities)
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.
// See the LICENSE file in the project root for more information.
 
#nullable disable
 
using System;
using System.Collections.Generic;
using System.Composition;
using Microsoft.CodeAnalysis.GenerateType;
using Microsoft.CodeAnalysis.Host.Mef;
using Microsoft.CodeAnalysis.LanguageService;
using Microsoft.CodeAnalysis.Notification;
using Microsoft.CodeAnalysis.ProjectManagement;
 
namespace Microsoft.CodeAnalysis.Editor.UnitTests.Diagnostics.GenerateType;
 
[ExportWorkspaceService(typeof(IGenerateTypeOptionsService), ServiceLayer.Test), Shared, PartNotDiscoverable]
internal sealed class TestGenerateTypeOptionsService : IGenerateTypeOptionsService
{
    public Accessibility Accessibility = Accessibility.NotApplicable;
    public TypeKind TypeKind = TypeKind.Class;
    public string TypeName = null;
    public Project Project = null;
    public bool IsNewFile = false;
    public string NewFileName = null;
    public IList<string> Folders = null;
    public string FullFilePath = null;
    public Document ExistingDocument = null;
    public bool AreFoldersValidIdentifiers = true;
    public string DefaultNamespace = null;
    public bool IsCancelled = false;
 
    [ImportingConstructor]
    [Obsolete(MefConstruction.ImportingConstructorMessage, error: true)]
    public TestGenerateTypeOptionsService()
    {
    }
 
    // Actual input
    public string ClassName { get; private set; }
    public GenerateTypeDialogOptions GenerateTypeDialogOptions { get; private set; }
 
    public GenerateTypeOptionsResult GetGenerateTypeOptions(
        string className,
        GenerateTypeDialogOptions generateTypeDialogOptions,
        Document document,
        INotificationService notificationService,
        IProjectManagementService projectManagementService,
        ISyntaxFactsService syntaxFactsService)
    {
        // Storing the actual values
        ClassName = className;
        GenerateTypeDialogOptions = generateTypeDialogOptions;
        DefaultNamespace ??= projectManagementService.GetDefaultNamespace(Project, Project?.Solution.Workspace);
 
        return new GenerateTypeOptionsResult(
            accessibility: Accessibility,
            typeKind: TypeKind,
            typeName: TypeName,
            project: Project,
            isNewFile: IsNewFile,
            newFileName: NewFileName,
            folders: Folders,
            fullFilePath: FullFilePath,
            existingDocument: ExistingDocument,
            areFoldersValidIdentifiers: AreFoldersValidIdentifiers,
            defaultNamespace: DefaultNamespace,
            isCancelled: IsCancelled);
    }
 
    public void SetGenerateTypeOptions(
        Accessibility accessibility = Accessibility.NotApplicable,
        TypeKind typeKind = TypeKind.Class,
        string typeName = null,
        Project project = null,
        bool isNewFile = false,
        string newFileName = null,
        IList<string> folders = null,
        string fullFilePath = null,
        Document existingDocument = null,
        bool areFoldersValidIdentifiers = true,
        string defaultNamespace = null,
        bool isCancelled = false)
    {
        Accessibility = accessibility;
        TypeKind = typeKind;
        TypeName = typeName;
        Project = project;
        IsNewFile = isNewFile;
        NewFileName = newFileName;
        Folders = folders;
        FullFilePath = fullFilePath;
        ExistingDocument = existingDocument;
        AreFoldersValidIdentifiers = areFoldersValidIdentifiers;
        DefaultNamespace = defaultNamespace;
        IsCancelled = isCancelled;
    }
}