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

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

@ -28,7 +28,7 @@ namespace ICSharpCode.FormsDesigner.Services @@ -28,7 +28,7 @@ namespace ICSharpCode.FormsDesigner.Services
IDesignerHost host;
string FileName = String.Empty;
#region ResourceStorage
public class ResourceStorage
{
@ -37,7 +37,7 @@ namespace ICSharpCode.FormsDesigner.Services @@ -37,7 +37,7 @@ namespace ICSharpCode.FormsDesigner.Services
public IProject project = null;
string fileName;
byte[] buffer;
byte[] buffer;
/// <summary>
/// true, if the currently stored resource is not empty.
@ -257,7 +257,7 @@ namespace ICSharpCode.FormsDesigner.Services @@ -257,7 +257,7 @@ namespace ICSharpCode.FormsDesigner.Services
resourceFileName = new StringBuilder(Path.GetTempPath());
}
resourceFileName.Append(Path.DirectorySeparatorChar);
resourceFileName.Append(host.RootComponent.Site.Name);
resourceFileName.Append(Path.GetFileNameWithoutExtension(FileName));
if (info != null && info.Name.Length > 0) {
resourceFileName.Append('.');

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

@ -876,6 +876,9 @@ namespace ICSharpCode.SharpDevelop.Dom.NRefactoryResolver @@ -876,6 +876,9 @@ namespace ICSharpCode.SharpDevelop.Dom.NRefactoryResolver
public IReturnType DynamicLookup(string identifier)
{
ResolveResult rr = ResolveIdentifierInternal(identifier);
if (rr is NamespaceResolveResult) {
return new TypeVisitor.NamespaceReturnType((rr as NamespaceResolveResult).Name);
}
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 @@ -313,10 +313,6 @@ namespace ICSharpCode.SharpDevelop.Dom.NRefactoryResolver
if (identifierExpression == 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);
if (c != null) {
return c.DefaultReturnType;

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

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

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

@ -137,12 +137,32 @@ namespace ICSharpCode.SharpDevelop.Project @@ -137,12 +137,32 @@ namespace ICSharpCode.SharpDevelop.Project
if (!FileService.CheckFileName(newName)) {
return;
}
Text = newName;
if (FileName != null) {
string newFileName = Path.Combine(Path.GetDirectoryName(FileName), newName);
FileService.RenameFile(FileName, newFileName, false);
this.fileName = newFileName;
ProjectService.SaveSolution();
string oldFileName = FileName;
if (oldFileName != null) {
string newFileName = Path.Combine(Path.GetDirectoryName(oldFileName), newName);
if (FileService.RenameFile(oldFileName, newFileName, false)) {
Text = newName;
this.fileName = newFileName;
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)
@ -232,7 +252,6 @@ namespace ICSharpCode.SharpDevelop.Project @@ -232,7 +252,6 @@ namespace ICSharpCode.SharpDevelop.Project
/// <summary>
/// Deletes all dependent child nodes and their associated files.
/// Does not delete recursively - not required as yet.
/// </summary>
void DeleteChildNodes()
{
@ -241,6 +260,7 @@ namespace ICSharpCode.SharpDevelop.Project @@ -241,6 +260,7 @@ namespace ICSharpCode.SharpDevelop.Project
foreach (TreeNode node in Nodes) {
FileNode fileNode = node as FileNode;
if (fileNode != null) {
fileNode.DeleteChildNodes(); // delete recursively
FileService.RemoveFile(fileNode.FileName, false);
} else {
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 @@ -55,7 +55,7 @@ namespace ICSharpCode.SharpDevelop.Project
public override object Visit(FileNode fileNode, object data)
{
if (FileUtility.IsEqualFileName(oldName, fileNode.FileName)) {
fileNode.FileName = FileUtility.RenameBaseDirectory(fileNode.FileName, oldName, newName);
fileNode.FileName = newName;
} else if (FileUtility.IsBaseDirectory(oldName, fileNode.FileName)) {
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 @@ -116,7 +116,9 @@ namespace ICSharpCode.SharpDevelop.Project
foreach (ProjectItem item in project.Items) {
++y;
if (FileUtility.IsBaseDirectory(oldName, item.FileName)) {
OnProjectItemRemoved(new ProjectItemEventArgs(project, item));
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 { @@ -794,5 +794,64 @@ class B {
return false;
}
#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