﻿// 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.Runtime.InteropServices;

namespace Microsoft.VisualStudio.LanguageServices.Implementation.CodeModel.Interop
{
    [ComVisible(true)]
    [InterfaceType(ComInterfaceType.InterfaceIsDual)]
    [Guid("376A7817-DB0D-4cfd-956E-5143F71F5CCD")]
    public interface ICSCodeModelRefactoring
    {
        void Rename(EnvDTE.CodeElement element);
        void RenameNoUI(EnvDTE.CodeElement element, string newName, bool fPreview, bool fSearchComments, bool fOverloads);
        void ReorderParameters(EnvDTE.CodeElement element);
        void ReorderParametersNoUI(EnvDTE.CodeElement element, long[] paramIndices, bool fPreview);
        void RemoveParameter(EnvDTE.CodeElement element);
        void RemoveParameterNoUI(EnvDTE.CodeElement element, object parameter, bool fPreview);
        void EncapsulateField(EnvDTE.CodeVariable variable);
        EnvDTE.CodeProperty EncapsulateFieldNoUI(EnvDTE.CodeVariable variable, string propertyName, EnvDTE.vsCMAccess accessibility, ReferenceSelectionEnum refSelection, PropertyTypeEnum propertyType, bool fPreview, bool fSearchComments);

        void ExtractInterface(EnvDTE.CodeType codeType);
        void ImplementInterface(EnvDTE.CodeType implementor, object @interface, bool fExplicit);
        void ImplementAbstractClass(EnvDTE.CodeType implementor, object abstractClass);
        EnvDTE.CodeElement ImplementOverride(EnvDTE.CodeElement member, EnvDTE.CodeType implementor);
    }
}
