Browse Source

Fixed SD2-639: Renaming a form should rename the resource file

git-svn-id: svn://svn.sharpdevelop.net/sharpdevelop/trunk@1049 1ccf3a8d-04fe-1044-b7c0-cef0b8235c61
shortcuts
Daniel Grunwald 20 years ago
parent
commit
ae6635bcb6
  1. 3
      AddIns/ICSharpCode.SharpDevelop.addin
  2. 2
      src/AddIns/DisplayBindings/FormsDesigner/Project/Src/Services/DesignerResourceService.cs
  3. 3
      src/Main/Base/Project/Src/Dom/NRefactoryResolver/NRefactoryResolver.cs
  4. 4
      src/Main/Base/Project/Src/Dom/NRefactoryResolver/TypeVisitor.cs
  5. 12
      src/Main/Base/Project/Src/Gui/Pads/ProjectBrowser/TreeNodes/AbstractProjectBrowserTreeNode.cs
  6. 30
      src/Main/Base/Project/Src/Gui/Pads/ProjectBrowser/TreeNodes/FileNode.cs
  7. 2
      src/Main/Base/Project/Src/Gui/Pads/ProjectBrowser/TreeNodes/Util/FileRenameTreeNodeVisitor.cs
  8. 2
      src/Main/Base/Project/Src/Services/ProjectService/ProjectService.cs
  9. 59
      src/Main/Base/Test/NRefactoryResolverTests.cs

3
AddIns/ICSharpCode.SharpDevelop.addin

@ -2043,4 +2043,7 @@
<Class id="EqualsCodeGenerator" <Class id="EqualsCodeGenerator"
class="ICSharpCode.SharpDevelop.DefaultEditor.Commands.EqualsCodeGenerator"/> class="ICSharpCode.SharpDevelop.DefaultEditor.Commands.EqualsCodeGenerator"/>
</Path> </Path>
<!--
<Path name = "/SharpDevelop/Workbench/DependentFileExtensions">
</Path>-->
</AddIn> </AddIn>

2
src/AddIns/DisplayBindings/FormsDesigner/Project/Src/Services/DesignerResourceService.cs

@ -257,7 +257,7 @@ namespace ICSharpCode.FormsDesigner.Services
resourceFileName = new StringBuilder(Path.GetTempPath()); resourceFileName = new StringBuilder(Path.GetTempPath());
} }
resourceFileName.Append(Path.DirectorySeparatorChar); resourceFileName.Append(Path.DirectorySeparatorChar);
resourceFileName.Append(host.RootComponent.Site.Name); resourceFileName.Append(Path.GetFileNameWithoutExtension(FileName));
if (info != null && info.Name.Length > 0) { if (info != null && info.Name.Length > 0) {
resourceFileName.Append('.'); resourceFileName.Append('.');

3
src/Main/Base/Project/Src/Dom/NRefactoryResolver/NRefactoryResolver.cs

@ -876,6 +876,9 @@ namespace ICSharpCode.SharpDevelop.Dom.NRefactoryResolver
public IReturnType DynamicLookup(string identifier) public IReturnType DynamicLookup(string identifier)
{ {
ResolveResult rr = ResolveIdentifierInternal(identifier); ResolveResult rr = ResolveIdentifierInternal(identifier);
if (rr is NamespaceResolveResult) {
return new TypeVisitor.NamespaceReturnType((rr as NamespaceResolveResult).Name);
}
return (rr != null) ? rr.ResolvedType : null; return (rr != null) ? rr.ResolvedType : null;
} }

4
src/Main/Base/Project/Src/Dom/NRefactoryResolver/TypeVisitor.cs

@ -313,10 +313,6 @@ namespace ICSharpCode.SharpDevelop.Dom.NRefactoryResolver
if (identifierExpression == null) { if (identifierExpression == null) {
return null; return null;
} }
string name = resolver.SearchNamespace(identifierExpression.Identifier);
if (name != null && name.Length > 0) {
return new NamespaceReturnType(name);
}
IClass c = resolver.SearchClass(identifierExpression.Identifier); IClass c = resolver.SearchClass(identifierExpression.Identifier);
if (c != null) { if (c != null) {
return c.DefaultReturnType; return c.DefaultReturnType;

12
src/Main/Base/Project/Src/Gui/Pads/ProjectBrowser/TreeNodes/AbstractProjectBrowserTreeNode.cs

@ -28,17 +28,10 @@ namespace ICSharpCode.SharpDevelop.Project
public abstract class AbstractProjectBrowserTreeNode : ExtTreeNode, IDisposable public abstract class AbstractProjectBrowserTreeNode : ExtTreeNode, IDisposable
{ {
string toolbarAddinTreePath = null; string toolbarAddinTreePath = null;
ProjectItem item;
protected bool autoClearNodes = true; protected bool autoClearNodes = true;
protected bool canLabelEdited = true; protected bool canLabelEdited = true;
public ProjectItem Item {
get {
return item;
}
}
/// <returns> /// <returns>
/// True, if this node can be label edited, false otherwise. /// True, if this node can be label edited, false otherwise.
/// </returns> /// </returns>
@ -87,11 +80,6 @@ namespace ICSharpCode.SharpDevelop.Project
} }
} }
public AbstractProjectBrowserTreeNode()
{
item = null;
}
public static bool ShowAll { public static bool ShowAll {
get { get {
return PropertyService.Get("ProjectBrowser.ShowAll", false); return PropertyService.Get("ProjectBrowser.ShowAll", false);

30
src/Main/Base/Project/Src/Gui/Pads/ProjectBrowser/TreeNodes/FileNode.cs

@ -137,12 +137,32 @@ namespace ICSharpCode.SharpDevelop.Project
if (!FileService.CheckFileName(newName)) { if (!FileService.CheckFileName(newName)) {
return; return;
} }
string oldFileName = FileName;
if (oldFileName != null) {
string newFileName = Path.Combine(Path.GetDirectoryName(oldFileName), newName);
if (FileService.RenameFile(oldFileName, newFileName, false)) {
Text = newName; Text = newName;
if (FileName != null) {
string newFileName = Path.Combine(Path.GetDirectoryName(FileName), newName);
FileService.RenameFile(FileName, newFileName, false);
this.fileName = newFileName; this.fileName = newFileName;
ProjectService.SaveSolution();
string oldPrefix = Path.GetFileNameWithoutExtension(oldFileName) + ".";
string newPrefix = Path.GetFileNameWithoutExtension(newFileName) + ".";
foreach (TreeNode node in Nodes) {
FileNode fileNode = node as FileNode;
if (fileNode != null) {
FileProjectItem fileItem = fileNode.ProjectItem as FileProjectItem;
if (fileItem != null && string.Equals(fileItem.DependentUpon, Path.GetFileName(oldFileName), StringComparison.OrdinalIgnoreCase)) {
fileItem.DependentUpon = newName;
}
if (fileNode.Text.StartsWith(oldPrefix)) {
fileNode.AfterLabelEdit(newPrefix + fileNode.Text.Substring(oldPrefix.Length));
}
} else {
LoggingService.Warn("FileNode.AfterLabelEdit. Child is not a FileNode.");
}
}
Project.Save();
}
} }
} }
public override object AcceptVisitor(ProjectBrowserTreeNodeVisitor visitor, object data) public override object AcceptVisitor(ProjectBrowserTreeNodeVisitor visitor, object data)
@ -232,7 +252,6 @@ namespace ICSharpCode.SharpDevelop.Project
/// <summary> /// <summary>
/// Deletes all dependent child nodes and their associated files. /// Deletes all dependent child nodes and their associated files.
/// Does not delete recursively - not required as yet.
/// </summary> /// </summary>
void DeleteChildNodes() void DeleteChildNodes()
{ {
@ -241,6 +260,7 @@ namespace ICSharpCode.SharpDevelop.Project
foreach (TreeNode node in Nodes) { foreach (TreeNode node in Nodes) {
FileNode fileNode = node as FileNode; FileNode fileNode = node as FileNode;
if (fileNode != null) { if (fileNode != null) {
fileNode.DeleteChildNodes(); // delete recursively
FileService.RemoveFile(fileNode.FileName, false); FileService.RemoveFile(fileNode.FileName, false);
} else { } else {
LoggingService.Warn("FileNode.DeleteChildren. Child is not a FileNode."); LoggingService.Warn("FileNode.DeleteChildren. Child is not a FileNode.");

2
src/Main/Base/Project/Src/Gui/Pads/ProjectBrowser/TreeNodes/Util/FileRenameTreeNodeVisitor.cs

@ -55,7 +55,7 @@ namespace ICSharpCode.SharpDevelop.Project
public override object Visit(FileNode fileNode, object data) public override object Visit(FileNode fileNode, object data)
{ {
if (FileUtility.IsEqualFileName(oldName, fileNode.FileName)) { if (FileUtility.IsEqualFileName(oldName, fileNode.FileName)) {
fileNode.FileName = FileUtility.RenameBaseDirectory(fileNode.FileName, oldName, newName); fileNode.FileName = newName;
} else if (FileUtility.IsBaseDirectory(oldName, fileNode.FileName)) { } else if (FileUtility.IsBaseDirectory(oldName, fileNode.FileName)) {
fileNode.FileName = FileUtility.RenameBaseDirectory(fileNode.FileName, oldName, newName); fileNode.FileName = FileUtility.RenameBaseDirectory(fileNode.FileName, oldName, newName);
} }

2
src/Main/Base/Project/Src/Services/ProjectService/ProjectService.cs

@ -116,7 +116,9 @@ namespace ICSharpCode.SharpDevelop.Project
foreach (ProjectItem item in project.Items) { foreach (ProjectItem item in project.Items) {
++y; ++y;
if (FileUtility.IsBaseDirectory(oldName, item.FileName)) { if (FileUtility.IsBaseDirectory(oldName, item.FileName)) {
OnProjectItemRemoved(new ProjectItemEventArgs(project, item));
item.FileName = FileUtility.RenameBaseDirectory(item.FileName, oldName, newName); item.FileName = FileUtility.RenameBaseDirectory(item.FileName, oldName, newName);
OnProjectItemAdded(new ProjectItemEventArgs(project, item));
} }
} }
} }

59
src/Main/Base/Test/NRefactoryResolverTests.cs

@ -794,5 +794,64 @@ class B {
return false; return false;
} }
#endregion #endregion
#region MixedType tests
const string mixedTypeTestProgram = @"using System;
class A {
void TestMethod() {
}
public Project Project { get { return new Project(); } }
public Project OtherName { get { return new Project(); } }
}
class Project {
public static string Static;
public int Instance;
}
namespace OtherName { class Bla { } }
";
[Test]
public void MixedResolveResultTest()
{
ResolveResult result = Resolve(mixedTypeTestProgram, "Project", 4);
Assert.IsInstanceOfType(typeof(MixedResolveResult), result);
MixedResolveResult mrr = (MixedResolveResult)result;
Assert.IsInstanceOfType(typeof(MemberResolveResult), mrr.PrimaryResult);
Assert.AreEqual("Project", mrr.TypeResult.ResolvedClass.Name);
}
[Test]
public void MixedStaticAccessTest()
{
ResolveResult result = Resolve(mixedTypeTestProgram, "Project.Static", 4);
Assert.IsInstanceOfType(typeof(MemberResolveResult), result);
Assert.AreEqual("Static", (result as MemberResolveResult).ResolvedMember.Name);
}
[Test]
public void MixedInstanceAccessTest()
{
ResolveResult result = Resolve(mixedTypeTestProgram, "Project.Instance", 4);
Assert.IsInstanceOfType(typeof(MemberResolveResult), result);
Assert.AreEqual("Instance", (result as MemberResolveResult).ResolvedMember.Name);
}
[Test]
public void NamespaceMixResolveResultTest()
{
ResolveResult result = Resolve(mixedTypeTestProgram, "OtherName", 4);
Assert.IsInstanceOfType(typeof(MemberResolveResult), result);
Assert.AreEqual("OtherName", (result as MemberResolveResult).ResolvedMember.Name);
}
[Test]
public void NamespaceMixMemberAccessTest()
{
ResolveResult result = Resolve(mixedTypeTestProgram, "OtherName.Instance", 4);
Assert.IsInstanceOfType(typeof(MemberResolveResult), result);
Assert.AreEqual("Instance", (result as MemberResolveResult).ResolvedMember.Name);
}
#endregion
} }
} }

Loading…
Cancel
Save