Browse Source

Improved symbol name validation on renaming.

pull/45/merge
Andreas Weizel 12 years ago
parent
commit
939376d1d0
  1. 40
      src/Main/Base/Project/Src/Editor/Commands/FindReferencesCommand.cs

40
src/Main/Base/Project/Src/Editor/Commands/FindReferencesCommand.cs

@ -4,6 +4,7 @@
using System; using System;
using ICSharpCode.Core; using ICSharpCode.Core;
using ICSharpCode.NRefactory.Semantics; using ICSharpCode.NRefactory.Semantics;
using ICSharpCode.SharpDevelop;
using ICSharpCode.SharpDevelop.Editor.Dialogs; using ICSharpCode.SharpDevelop.Editor.Dialogs;
using ICSharpCode.SharpDevelop.Gui; using ICSharpCode.SharpDevelop.Gui;
using ICSharpCode.SharpDevelop.Refactoring; using ICSharpCode.SharpDevelop.Refactoring;
@ -37,34 +38,33 @@ namespace ICSharpCode.SharpDevelop.Editor.Commands
{ {
var entity = GetEntity(symbol); var entity = GetEntity(symbol);
if (entity != null) { if (entity != null) {
RenameSymbolDialog renameDialog = new RenameSymbolDialog(CheckName) var project = entity.ParentAssembly.GetProject();
{ if (project != null) {
Owner = SD.Workbench.MainWindow, var languageBinding = project.LanguageBinding;
OldSymbolName = entity.Name,
NewSymbolName = entity.Name RenameSymbolDialog renameDialog = new RenameSymbolDialog(name => CheckName(name, languageBinding))
}; {
if ((bool) renameDialog.ShowDialog()) { Owner = SD.Workbench.MainWindow,
using (IProgressMonitor progressMonitor = AsynchronousWaitDialog.ShowWaitDialog("${res:SharpDevelop.Refactoring.Rename}")) OldSymbolName = entity.Name,
FindReferenceService.RenameSymbol(entity, renameDialog.NewSymbolName, progressMonitor) NewSymbolName = entity.Name
.ObserveOnUIThread() };
.Subscribe(error => SD.MessageService.ShowError(error.Message), ex => SD.MessageService.ShowException(ex), () => {}); if ((bool) renameDialog.ShowDialog()) {
using (IProgressMonitor progressMonitor = AsynchronousWaitDialog.ShowWaitDialog("${res:SharpDevelop.Refactoring.Rename}"))
FindReferenceService.RenameSymbol(entity, renameDialog.NewSymbolName, progressMonitor)
.ObserveOnUIThread()
.Subscribe(error => SD.MessageService.ShowError(error.Message), ex => SD.MessageService.ShowException(ex), () => {});
}
} }
} }
} }
bool CheckName(string name) bool CheckName(string name, ILanguageBinding language)
{ {
// TODO implement for current language!
if (string.IsNullOrEmpty(name)) if (string.IsNullOrEmpty(name))
return false; return false;
for (int i = 0; i < name.Length; i++) { if ((language.CodeDomProvider == null) || !language.CodeDomProvider.IsValidIdentifier(name))
char thisChar = name[i]; return false;
if (!Char.IsLetter(thisChar)
&& !Char.IsDigit(thisChar)
&& (thisChar != '_'))
return false;
}
return true; return true;
} }

Loading…
Cancel
Save