Browse Source

Immediately rename form class when a form is renamed in the designer (avoids side-effects in IViewContent.Save).

This fixes forum-9916 (error closing Sharp Development IDE after renaming a form).

git-svn-id: svn://svn.sharpdevelop.net/sharpdevelop/branches/3.0@4885 1ccf3a8d-04fe-1044-b7c0-cef0b8235c61
shortcuts
Daniel Grunwald 16 years ago
parent
commit
f0d8124acc
  1. 22
      src/AddIns/DisplayBindings/FormsDesigner/Project/Src/DesignerGenerator/AbstractDesignerGenerator.cs
  2. 5
      src/AddIns/DisplayBindings/FormsDesigner/Project/Src/DesignerGenerator/IDesignerGenerator.cs
  3. 15
      src/AddIns/DisplayBindings/FormsDesigner/Project/Src/DesignerViewContent.cs
  4. 4
      src/Main/Base/Project/Src/Services/RefactoringService/FindReferencesAndRenameHelper.cs

22
src/AddIns/DisplayBindings/FormsDesigner/Project/Src/DesignerGenerator/AbstractDesignerGenerator.cs

@ -25,7 +25,7 @@ using ReflectionLayer = ICSharpCode.SharpDevelop.Dom.ReflectionLayer; @@ -25,7 +25,7 @@ using ReflectionLayer = ICSharpCode.SharpDevelop.Dom.ReflectionLayer;
namespace ICSharpCode.FormsDesigner
{
public abstract class AbstractDesignerGenerator : IDesignerGenerator
public abstract class AbstractDesignerGenerator : IDesignerGenerator2
{
/// <summary>The currently open part of the class being designed.</summary>
IClass currentClassPart;
@ -211,6 +211,18 @@ namespace ICSharpCode.FormsDesigner @@ -211,6 +211,18 @@ namespace ICSharpCode.FormsDesigner
{
}
public virtual void NotifyFormRenamed(string newName)
{
Reparse();
LoggingService.Info("Renaming form to " + newName);
if (this.formClass == null) {
LoggingService.Warn("Cannot rename, formClass not found");
} else {
ICSharpCode.SharpDevelop.Refactoring.FindReferencesAndRenameHelper.RenameClass(this.formClass, newName);
Reparse();
}
}
public virtual void MergeFormChanges(CodeCompileUnit unit)
{
Reparse();
@ -238,14 +250,6 @@ namespace ICSharpCode.FormsDesigner @@ -238,14 +250,6 @@ namespace ICSharpCode.FormsDesigner
return;
}
if (formClass.Name != this.formClass.Name) {
LoggingService.Info("Renaming form to " + formClass.Name);
ICSharpCode.SharpDevelop.Refactoring.FindReferencesAndRenameHelper.RenameClass(this.formClass, formClass.Name);
this.ViewContent.DesignerCodeFile.MakeDirty();
this.ViewContent.PrimaryFile.MakeDirty();
Reparse();
}
FixGeneratedCode(this.formClass, initializeComponent);
// generate file and get initialize components string

5
src/AddIns/DisplayBindings/FormsDesigner/Project/Src/DesignerGenerator/IDesignerGenerator.cs

@ -37,4 +37,9 @@ namespace ICSharpCode.FormsDesigner @@ -37,4 +37,9 @@ namespace ICSharpCode.FormsDesigner
bool InsertComponentEvent(IComponent component, EventDescriptor edesc, string eventMethodName, string body, out string file, out int position);
ICollection GetCompatibleMethods(EventDescriptor edesc);
}
public interface IDesignerGenerator2 : IDesignerGenerator
{
void NotifyFormRenamed(string newName);
}
}

15
src/AddIns/DisplayBindings/FormsDesigner/Project/Src/DesignerViewContent.cs

@ -369,7 +369,20 @@ namespace ICSharpCode.FormsDesigner @@ -369,7 +369,20 @@ namespace ICSharpCode.FormsDesigner
bool loading = this.loader != null && this.loader.Loading;
LoggingService.Debug("Forms designer: ComponentChanged: " + (e.Component == null ? "<null>" : e.Component.ToString()) + ", Member=" + (e.Member == null ? "<null>" : e.Member.Name) + ", OldValue=" + (e.OldValue == null ? "<null>" : e.OldValue.ToString()) + ", NewValue=" + (e.NewValue == null ? "<null>" : e.NewValue.ToString()) + "; Loading=" + loading + "; Unloading=" + this.unloading);
if (!loading && !unloading) {
this.MakeDirty();
try {
this.MakeDirty();
if (e.Component != null && e.Component == Host.RootComponent
&& e.Member != null && e.Member.Name == "Name" && e.NewValue is string
&& !object.Equals(e.OldValue, e.NewValue))
{
// changing the name of the form
IDesignerGenerator2 gen2 = generator as IDesignerGenerator2;
if (gen2 != null)
gen2.NotifyFormRenamed((string)e.NewValue);
}
} catch (Exception ex) {
MessageService.ShowError(ex);
}
}
}

4
src/Main/Base/Project/Src/Services/RefactoringService/FindReferencesAndRenameHelper.cs

@ -130,6 +130,10 @@ namespace ICSharpCode.SharpDevelop.Refactoring @@ -130,6 +130,10 @@ namespace ICSharpCode.SharpDevelop.Refactoring
public static void RenameClass(IClass c, string newName)
{
if (c == null)
throw new ArgumentNullException("c");
if (newName == null)
throw new ArgumentNullException("newName");
c = c.GetCompoundClass(); // get compound class if class is partial
List<Reference> list = RefactoringService.FindReferences(c, null);

Loading…
Cancel
Save