Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -21,19 +21,15 @@ internal class RenameFlyoutViewModel : INotifyPropertyChanged, IDisposable
private readonly InlineRenameSession _session;
private OleComponent? _oleComponent;
private bool _disposedValue;
private bool _isReplacementTextValid = true;
public event PropertyChangedEventHandler? PropertyChanged;

public RenameFlyoutViewModel(InlineRenameSession session)
{
_session = session;
_session.ReplacementTextChanged += OnReplacementTextChanged;

_previewChangesFlag = _session.PreviewChanges;
_renameFileFlag = _session.Options.RenameFile;
_renameInStringsFlag = _session.Options.RenameInStrings;
_renameInCommentsFlag = _session.Options.RenameInComments;
_renameOverloadsFlag = _session.Options.RenameOverloads;

_session.ReplacementsComputed += OnReplacementsComputed;
ComputeRenameFile();
RegisterOleComponent();
}

Expand All @@ -50,7 +46,7 @@ public string IdentifierText
}
}

public bool AllowFileRename => _session.FileRenameInfo == InlineRenameFileRenameInfo.Allowed;
public bool AllowFileRename => _session.FileRenameInfo == InlineRenameFileRenameInfo.Allowed && _isReplacementTextValid;
public bool ShowFileRename => _session.FileRenameInfo != InlineRenameFileRenameInfo.NotAllowed;

public string FileRenameString => _session.FileRenameInfo switch
Expand All @@ -60,73 +56,53 @@ public string IdentifierText
_ => EditorFeaturesResources.Rename_symbols_file
};

private bool _renameInCommentsFlag;
public bool RenameInCommentsFlag
{
get => _renameInCommentsFlag;
get => _session.Options.RenameInComments;
set
{
if (Set(ref _renameInCommentsFlag, value))
{
_session.RenameService.GlobalOptions.SetGlobalOption(new OptionKey(InlineRenameSessionOptionsStorage.RenameInComments), value);
_session.RefreshRenameSessionWithOptionsChanged(_session.Options with { RenameInComments = value });
}
_session.RenameService.GlobalOptions.SetGlobalOption(new OptionKey(InlineRenameSessionOptionsStorage.RenameInComments), value);
_session.RefreshRenameSessionWithOptionsChanged(_session.Options with { RenameInComments = value });
}
}

private bool _renameInStringsFlag;
public bool RenameInStringsFlag
{
get => _renameInStringsFlag;
get => _session.Options.RenameInStrings;
set
{
if (Set(ref _renameInStringsFlag, value))
{
_session.RenameService.GlobalOptions.SetGlobalOption(new OptionKey(InlineRenameSessionOptionsStorage.RenameInStrings), value);
_session.RefreshRenameSessionWithOptionsChanged(_session.Options with { RenameInStrings = value });
}
_session.RenameService.GlobalOptions.SetGlobalOption(new OptionKey(InlineRenameSessionOptionsStorage.RenameInStrings), value);
_session.RefreshRenameSessionWithOptionsChanged(_session.Options with { RenameInStrings = value });
}
}

private bool _renameFileFlag;
public bool RenameFileFlag
{
get => _renameFileFlag;
get => _session.Options.RenameFile;
set
{
if (Set(ref _renameFileFlag, value))
{
_session.RenameService.GlobalOptions.SetGlobalOption(new OptionKey(InlineRenameSessionOptionsStorage.RenameFile), value);
_session.RefreshRenameSessionWithOptionsChanged(_session.Options with { RenameFile = value });
}
_session.RenameService.GlobalOptions.SetGlobalOption(new OptionKey(InlineRenameSessionOptionsStorage.RenameFile), value);
_session.RefreshRenameSessionWithOptionsChanged(_session.Options with { RenameFile = value });
}
}

private bool _previewChangesFlag;
public bool PreviewChangesFlag
{
get => _previewChangesFlag;
get => _session.PreviewChanges;
set
{
if (Set(ref _previewChangesFlag, value))
{
_session.RenameService.GlobalOptions.SetGlobalOption(new OptionKey(InlineRenameSessionOptionsStorage.PreviewChanges), value);
_session.SetPreviewChanges(value);
}
_session.RenameService.GlobalOptions.SetGlobalOption(new OptionKey(InlineRenameSessionOptionsStorage.PreviewChanges), value);
_session.SetPreviewChanges(value);
}
}

private bool _renameOverloadsFlag;
public bool RenameOverloadsFlag
{
get => _renameOverloadsFlag;
get => _session.Options.RenameOverloads;
set
{
if (Set(ref _renameOverloadsFlag, value))
{
_session.RenameService.GlobalOptions.SetGlobalOption(new OptionKey(InlineRenameSessionOptionsStorage.RenameOverloads), value);
_session.RefreshRenameSessionWithOptionsChanged(_session.Options with { RenameOverloads = value });
}
_session.RenameService.GlobalOptions.SetGlobalOption(new OptionKey(InlineRenameSessionOptionsStorage.RenameOverloads), value);
_session.RefreshRenameSessionWithOptionsChanged(_session.Options with { RenameOverloads = value });
}
}

Expand Down Expand Up @@ -238,6 +214,7 @@ protected virtual void Dispose(bool disposing)
if (disposing)
{
_session.ReplacementTextChanged -= OnReplacementTextChanged;
_session.ReplacementsComputed -= OnReplacementsComputed;

UnregisterOleComponent();
}
Expand All @@ -246,11 +223,26 @@ protected virtual void Dispose(bool disposing)
}
}

private void ComputeRenameFile()
{
// If replacementText is invalid, we won't rename the file.
RenameFileFlag = _isReplacementTextValid && AllowFileRename && _session.Options.RenameFile;
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Where is the check for "thing being renamed is actually a class that represents the file name"? Is that part of the InlineRenameFileRenameInfo.Allowed check on line 49?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Correct. That portion is calculated based on the session start

}

private void OnReplacementTextChanged(object sender, EventArgs e)
{
NotifyPropertyChanged(nameof(IdentifierText));
}

private void OnReplacementsComputed(object sender, IInlineRenameReplacementInfo result)
{
if (Set(ref _isReplacementTextValid, result.ReplacementTextValid, "IsReplacementTextValid"))
{
ComputeRenameFile();
NotifyPropertyChanged(nameof(AllowFileRename));
}
}

private void NotifyPropertyChanged([CallerMemberName] string? name = null)
=> PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(name));

Expand Down