Browse Source

Add Rename command to refactoring menu.

git-svn-id: svn://svn.sharpdevelop.net/sharpdevelop/trunk@1391 1ccf3a8d-04fe-1044-b7c0-cef0b8235c61
shortcuts
Daniel Grunwald 20 years ago
parent
commit
251761f70a
  1. 3
      AddIns/ICSharpCode.SharpDevelop.addin
  2. 8
      src/AddIns/BackendBindings/CSharpBinding/Project/Src/CSharpCompletionBinding.cs
  3. 6
      src/AddIns/BackendBindings/VBNetBinding/Project/Src/VBNetCompletionBinding.cs
  4. 2
      src/AddIns/DisplayBindings/FormsDesigner/Project/Src/DesignerGenerator/AbstractDesignerGenerator.cs
  5. 2
      src/AddIns/Misc/HtmlHelp2/Project/src/BaseControls/DynamicHelpPad.cs
  6. 2
      src/Main/Base/Project/Src/Gui/Pads/DefinitionViewPad.cs
  7. 5
      src/Main/Base/Project/Src/Services/RefactoringService/CodeGenerator.cs
  8. 110
      src/Main/Base/Project/Src/Services/RefactoringService/FindReferencesAndRenameHelper.cs
  9. 17
      src/Main/Base/Project/Src/Services/RefactoringService/NRefactoryRefactoringProvider.cs
  10. 31
      src/Main/Base/Project/Src/Services/RefactoringService/NamespaceRefactoringService.cs
  11. 53
      src/Main/Base/Project/Src/Services/RefactoringService/RefactorMenu.cs
  12. 60
      src/Main/Base/Project/Src/TextEditor/Commands/ClassBookmarkMenuBuilder.cs
  13. 40
      src/Main/Base/Project/Src/TextEditor/Commands/ClassMemberMenuBuilder.cs
  14. 6
      src/Main/Base/Test/GenericResolverTests.cs
  15. 5
      src/Main/Base/Test/InnerClassesResolverTests.cs
  16. 3
      src/Main/Base/Test/MemberLookupHelperTests.cs
  17. 3
      src/Main/Base/Test/NRefactoryResolverTests.cs
  18. 2
      src/Main/Base/Test/NoSuchExecutableTestFixture.cs
  19. 2
      src/Main/Base/Test/OutputTextLineParserTestFixture.cs
  20. 2
      src/Main/Base/Test/OverloadFinding.cs
  21. 6
      src/Main/Base/Test/ProcessExitedTestFixture.cs
  22. 2
      src/Main/Base/Test/ProcessRunnerNotStartedTestFixture.cs
  23. 3
      src/Main/Base/Test/ReflectionLayerTests.cs
  24. 9
      src/Main/Base/Test/SearchClassTests.cs
  25. 4
      src/Main/Base/Test/SearchGenericClassTests.cs
  26. 5
      src/Main/Base/Test/StandardOutputFromProcessTestFixture.cs

3
AddIns/ICSharpCode.SharpDevelop.addin

@ -1262,6 +1262,9 @@
<Condition name="RefactoringProviderSupports" supports="*"> <Condition name="RefactoringProviderSupports" supports="*">
<MenuItem id = "Refactor" label = "${res:XML.MainMenu.RefactorMenu}" type="Menu"> <MenuItem id = "Refactor" label = "${res:XML.MainMenu.RefactorMenu}" type="Menu">
<MenuItem id = "Rename"
label = "Rename"
class = "ICSharpCode.SharpDevelop.Refactoring.RenameCommand" />
<Condition name="RefactoringProviderSupports" supports="FindUnusedUsingDeclarations"> <Condition name="RefactoringProviderSupports" supports="FindUnusedUsingDeclarations">
<MenuItem id = "RemoveUnusedUsings" <MenuItem id = "RemoveUnusedUsings"
label = "Removed unused import statements" label = "Removed unused import statements"

8
src/AddIns/BackendBindings/CSharpBinding/Project/Src/CSharpCompletionBinding.cs

@ -89,8 +89,8 @@ namespace CSharpBinding
if (expr == null || expr.Length == 0) if (expr == null || expr.Length == 0)
break; break;
parameters.Push(ParserService.Resolve(new ExpressionResult(expr), parameters.Push(ParserService.Resolve(new ExpressionResult(expr),
editor.ActiveTextAreaControl.Caret.Line, editor.ActiveTextAreaControl.Caret.Line + 1,
editor.ActiveTextAreaControl.Caret.Column, editor.ActiveTextAreaControl.Caret.Column + 1,
editor.FileName, editor.FileName,
documentText)); documentText));
cursor = ef.LastExpressionStartPosition; cursor = ef.LastExpressionStartPosition;
@ -105,7 +105,7 @@ namespace CSharpBinding
ExpressionResult result = ef.FindFullExpression(documentText, position); ExpressionResult result = ef.FindFullExpression(documentText, position);
if(result.Expression != null) { if(result.Expression != null) {
ResolveResult resolveResult = ParserService.Resolve(result, editor.ActiveTextAreaControl.Caret.Line, editor.ActiveTextAreaControl.Caret.Column, editor.FileName, documentText); ResolveResult resolveResult = ParserService.Resolve(result, editor.ActiveTextAreaControl.Caret.Line + 1, editor.ActiveTextAreaControl.Caret.Column + 1, editor.FileName, documentText);
if (resolveResult != null && resolveResult.ResolvedType != null) { if (resolveResult != null && resolveResult.ResolvedType != null) {
IClass underlyingClass = resolveResult.ResolvedType.GetUnderlyingClass(); IClass underlyingClass = resolveResult.ResolvedType.GetUnderlyingClass();
if (underlyingClass != null && underlyingClass.IsTypeInInheritanceTree(ProjectContentRegistry.Mscorlib.GetClass("System.MulticastDelegate"))) { if (underlyingClass != null && underlyingClass.IsTypeInInheritanceTree(ProjectContentRegistry.Mscorlib.GetClass("System.MulticastDelegate"))) {
@ -137,7 +137,7 @@ namespace CSharpBinding
string expr = lineText.Substring(t.col); string expr = lineText.Substring(t.col);
LoggingService.Debug("DeclarationTypeInference: >" + expr + "<"); LoggingService.Debug("DeclarationTypeInference: >" + expr + "<");
ResolveResult rr = ParserService.Resolve(new ExpressionResult(expr), ResolveResult rr = ParserService.Resolve(new ExpressionResult(expr),
editor.ActiveTextAreaControl.Caret.Line, editor.ActiveTextAreaControl.Caret.Line + 1,
t.col, editor.FileName, t.col, editor.FileName,
editor.Document.TextContent); editor.Document.TextContent);
if (rr != null && rr.ResolvedType != null) { if (rr != null && rr.ResolvedType != null) {

6
src/AddIns/BackendBindings/VBNetBinding/Project/Src/VBNetCompletionBinding.cs

@ -70,8 +70,8 @@ namespace VBNetBinding
break; break;
} }
parameters.Push(ParserService.Resolve(new ExpressionResult(expr), parameters.Push(ParserService.Resolve(new ExpressionResult(expr),
editor.ActiveTextAreaControl.Caret.Line, editor.ActiveTextAreaControl.Caret.Line + 1,
editor.ActiveTextAreaControl.Caret.Column, editor.ActiveTextAreaControl.Caret.Column + 1,
editor.FileName, editor.FileName,
documentText)); documentText));
cursor = ef.LastExpressionStartPosition; cursor = ef.LastExpressionStartPosition;
@ -210,7 +210,7 @@ namespace VBNetBinding
string expr = lineText.Substring(t2.col); string expr = lineText.Substring(t2.col);
LoggingService.Debug("DeclarationTypeInference: >" + expr + "<"); LoggingService.Debug("DeclarationTypeInference: >" + expr + "<");
ResolveResult rr = ParserService.Resolve(new ExpressionResult(expr), ResolveResult rr = ParserService.Resolve(new ExpressionResult(expr),
editor.ActiveTextAreaControl.Caret.Line, editor.ActiveTextAreaControl.Caret.Line + 1,
t2.col, editor.FileName, t2.col, editor.FileName,
editor.Document.TextContent); editor.Document.TextContent);
if (rr != null && rr.ResolvedType != null) { if (rr != null && rr.ResolvedType != null) {

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

@ -169,7 +169,7 @@ namespace ICSharpCode.FormsDesigner
if (formClass.Name != this.formClass.Name) { if (formClass.Name != this.formClass.Name) {
LoggingService.Info("Renaming form to " + formClass.Name); LoggingService.Info("Renaming form to " + formClass.Name);
ICSharpCode.SharpDevelop.DefaultEditor.Commands.ClassBookmarkMenuBuilder.RenameClass(this.formClass, formClass.Name); ICSharpCode.SharpDevelop.Refactoring.FindReferencesAndRenameHelper.RenameClass(this.formClass, formClass.Name);
Reparse(); Reparse();
} }

2
src/AddIns/Misc/HtmlHelp2/Project/src/BaseControls/DynamicHelpPad.cs

@ -202,7 +202,7 @@ namespace HtmlHelp2
this.lastPoint = caret.Position; this.lastPoint = caret.Position;
this.AddToStringCollection(String.Format("!{0}", expr.Expression)); this.AddToStringCollection(String.Format("!{0}", expr.Expression));
return ParserService.Resolve(expr, caret.Line, caret.Column, fileName, content); return ParserService.Resolve(expr, caret.Line + 1, caret.Column + 1, fileName, content);
} }
#endregion #endregion

2
src/Main/Base/Project/Src/Gui/Pads/DefinitionViewPad.cs

@ -83,7 +83,7 @@ namespace ICSharpCode.SharpDevelop.Gui
string content = (e == null) ? ctl.Text : e.Content; string content = (e == null) ? ctl.Text : e.Content;
ExpressionResult expr = expressionFinder.FindFullExpression(content, caret.Offset); ExpressionResult expr = expressionFinder.FindFullExpression(content, caret.Offset);
if (expr.Expression == null) return null; if (expr.Expression == null) return null;
return ParserService.Resolve(expr, caret.Line, caret.Column, fileName, content); return ParserService.Resolve(expr, caret.Line + 1, caret.Column + 1, fileName, content);
} }
delegate void OpenFileDelegate(FilePosition pos); delegate void OpenFileDelegate(FilePosition pos);

5
src/Main/Base/Project/Src/Services/RefactoringService/CodeGenerator.cs

@ -586,7 +586,10 @@ namespace ICSharpCode.SharpDevelop.Refactoring
} }
StringBuilder txt = new StringBuilder(); StringBuilder txt = new StringBuilder();
foreach (IUsing us in newUsings) { foreach (IUsing us in newUsings) {
txt.Append(GenerateCode(ConvertUsing(us), indentation)); if (us == null)
txt.AppendLine(indentation);
else
txt.Append(GenerateCode(ConvertUsing(us), indentation));
} }
document.Insert(insertionOffset, txt.ToString()); actionCount++; document.Insert(insertionOffset, txt.ToString()); actionCount++;
document.UndoStack.UndoLast(actionCount); document.UndoStack.UndoLast(actionCount);

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

@ -7,6 +7,7 @@
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Drawing;
using ICSharpCode.Core; using ICSharpCode.Core;
using ICSharpCode.SharpDevelop.DefaultEditor.Gui.Editor; using ICSharpCode.SharpDevelop.DefaultEditor.Gui.Editor;
using ICSharpCode.SharpDevelop.Dom; using ICSharpCode.SharpDevelop.Dom;
@ -19,6 +20,114 @@ namespace ICSharpCode.SharpDevelop.Refactoring
{ {
public static class FindReferencesAndRenameHelper public static class FindReferencesAndRenameHelper
{ {
#region Rename Class
public static void RenameClass(IClass c)
{
string newName = MessageService.ShowInputBox("${res:SharpDevelop.Refactoring.Rename}", "${res:SharpDevelop.Refactoring.RenameClassText}", c.Name);
if (!FindReferencesAndRenameHelper.CheckName(newName, c.Name)) return;
RenameClass(c, newName);
}
public static void RenameClass(IClass c, string newName)
{
c = c.GetCompoundClass(); // get compound class if class is partial
List<Reference> list = RefactoringService.FindReferences(c, null);
if (list == null) return;
// Add the class declaration(s)
foreach (IClass part in GetClassParts(c)) {
AddDeclarationAsReference(list, part.CompilationUnit.FileName, part.Region, part.Name);
}
// Add the constructors
foreach (IMethod m in c.Methods) {
if (m.IsConstructor) {
AddDeclarationAsReference(list, m.DeclaringType.CompilationUnit.FileName, m.Region, c.Name);
}
}
FindReferencesAndRenameHelper.RenameReferences(list, newName);
}
static IList<IClass> GetClassParts(IClass c)
{
CompoundClass cc = c as CompoundClass;
if (cc != null) {
return cc.Parts;
} else {
return new IClass[] {c};
}
}
static void AddDeclarationAsReference(List<Reference> list, string fileName, DomRegion region, string name)
{
if (fileName == null)
return;
ProvidedDocumentInformation documentInformation = FindReferencesAndRenameHelper.GetDocumentInformation(fileName);
int offset = documentInformation.CreateDocument().PositionToOffset(new Point(region.BeginColumn - 1, region.BeginLine - 1));
string text = documentInformation.TextBuffer.GetText(offset, Math.Min(name.Length + 30, documentInformation.TextBuffer.Length - offset - 1));
int offsetChange = text.IndexOf(name);
if (offsetChange < 0)
return;
offset += offsetChange;
foreach (Reference r in list) {
if (r.Offset == offset)
return;
}
list.Add(new Reference(fileName, offset, name.Length, name, null));
}
#endregion
#region Rename member
public static void RenameMember(IMember member)
{
string newName = MessageService.ShowInputBox("${res:SharpDevelop.Refactoring.Rename}", "${res:SharpDevelop.Refactoring.RenameMemberText}", member.Name);
if (!FindReferencesAndRenameHelper.CheckName(newName, member.Name)) return;
RenameMember(member, newName);
}
public static void RenameMember(IMember member, string newName)
{
List<Reference> list = RefactoringService.FindReferences(member, null);
if (list == null) return;
FindReferencesAndRenameHelper.RenameReferences(list, newName);
if (member is IField) {
IProperty property = FindProperty((IField)member);
if (property != null) {
string newPropertyName = member.DeclaringType.ProjectContent.Language.CodeGenerator.GetPropertyName(newName);
if (newPropertyName != newName && newPropertyName != property.Name) {
if (MessageService.AskQuestionFormatted("${res:SharpDevelop.Refactoring.Rename}", "${res:SharpDevelop.Refactoring.RenameFieldAndProperty}", property.FullyQualifiedName, newPropertyName)) {
list = RefactoringService.FindReferences(property, null);
if (list != null) {
FindReferencesAndRenameHelper.RenameReferences(list, newPropertyName);
}
}
}
}
}
}
internal static IProperty FindProperty(IField field)
{
LanguageProperties language = field.DeclaringType.ProjectContent.Language;
if (language.CodeGenerator == null) return null;
string propertyName = language.CodeGenerator.GetPropertyName(field.Name);
IProperty foundProperty = null;
foreach (IProperty prop in field.DeclaringType.Properties) {
if (language.NameComparer.Equals(propertyName, prop.Name)) {
foundProperty = prop;
break;
}
}
return foundProperty;
}
#endregion
#region Common helper functions
public static ProvidedDocumentInformation GetDocumentInformation(string fileName) public static ProvidedDocumentInformation GetDocumentInformation(string fileName)
{ {
foreach (IViewContent content in WorkbenchSingleton.Workbench.ViewContentCollection) { foreach (IViewContent content in WorkbenchSingleton.Workbench.ViewContentCollection) {
@ -160,5 +269,6 @@ namespace ICSharpCode.SharpDevelop.Refactoring
ParserService.ParseViewContent(viewContent); ParserService.ParseViewContent(viewContent);
} }
} }
#endregion
} }
} }

17
src/Main/Base/Project/Src/Services/RefactoringService/NRefactoryRefactoringProvider.cs

@ -19,11 +19,12 @@ namespace ICSharpCode.SharpDevelop.Refactoring
{ {
public static readonly NRefactoryRefactoringProvider NRefactoryProviderInstance = new NRefactoryRefactoringProvider(); public static readonly NRefactoryRefactoringProvider NRefactoryProviderInstance = new NRefactoryRefactoringProvider();
#region FindUnusedUsingDeclarations
protected class PossibleTypeReference protected class PossibleTypeReference
{ {
internal string Name; public string Name;
internal bool Global; public bool Global;
internal int TypeParameterCount; public int TypeParameterCount;
public PossibleTypeReference(string name) public PossibleTypeReference(string name)
{ {
@ -66,9 +67,16 @@ namespace ICSharpCode.SharpDevelop.Refactoring
list[new PossibleTypeReference(typeReference)] = data; list[new PossibleTypeReference(typeReference)] = data;
return base.Visit(typeReference, data); return base.Visit(typeReference, data);
} }
public override object Visit(ICSharpCode.NRefactory.Parser.AST.Attribute attribute, object data)
{
list[new PossibleTypeReference(attribute.Name)] = data;
list[new PossibleTypeReference(attribute.Name + "Attribute")] = data;
return base.Visit(attribute, data);
}
} }
protected Dictionary<PossibleTypeReference, object> FindPossibleTypeReferences(string extension, string fileContent) protected virtual Dictionary<PossibleTypeReference, object> FindPossibleTypeReferences(string extension, string fileContent)
{ {
NR.IParser parser; NR.IParser parser;
if (extension.Equals(".cs", StringComparison.InvariantCultureIgnoreCase)) if (extension.Equals(".cs", StringComparison.InvariantCultureIgnoreCase))
@ -125,5 +133,6 @@ namespace ICSharpCode.SharpDevelop.Refactoring
} }
return list; return list;
} }
#endregion
} }
} }

31
src/Main/Base/Project/Src/Services/RefactoringService/NamespaceRefactoringService.cs

@ -15,6 +15,11 @@ namespace ICSharpCode.SharpDevelop.Refactoring
{ {
public static class NamespaceRefactoringService public static class NamespaceRefactoringService
{ {
internal static bool IsSystemNamespace(string ns)
{
return ns.StartsWith("System.") || ns == "System";
}
static int CompareUsings(IUsing a, IUsing b) static int CompareUsings(IUsing a, IUsing b)
{ {
if (a.HasAliases != b.HasAliases) if (a.HasAliases != b.HasAliases)
@ -22,12 +27,10 @@ namespace ICSharpCode.SharpDevelop.Refactoring
if (a.Usings.Count != 0 && b.Usings.Count != 0) { if (a.Usings.Count != 0 && b.Usings.Count != 0) {
string u1 = a.Usings[0]; string u1 = a.Usings[0];
string u2 = b.Usings[0]; string u2 = b.Usings[0];
if (u1.StartsWith("System.") || u1 == "System") { if (IsSystemNamespace(u1) && !IsSystemNamespace(u2)) {
if (!(u2.StartsWith("System.") || u2 == "System")) return -1;
return -1; } else if (!IsSystemNamespace(u1) && IsSystemNamespace(u2)) {
} else { return 1;
if (u2.StartsWith("System.") || u2 == "System")
return 1;
} }
return a.Usings[0].CompareTo(b.Usings[0]); return a.Usings[0].CompareTo(b.Usings[0]);
} }
@ -64,6 +67,22 @@ namespace ICSharpCode.SharpDevelop.Refactoring
} }
} }
// put empty line after last System namespace
if (sort && newUsings.Count > 1 && newUsings[0].Usings.Count > 0) {
bool inSystem = IsSystemNamespace(newUsings[0].Usings[0]);
int inSystemCount = 1;
for (int i = 1; inSystem && i < newUsings.Count; i++) {
inSystem = newUsings[i].Usings.Count > 0 && IsSystemNamespace(newUsings[i].Usings[0]);
if (inSystem) {
inSystemCount++;
} else {
if (inSystemCount > 2) { // only use empty line when there are more than 2 system namespaces
newUsings.Insert(i, null);
}
}
}
}
cu.ProjectContent.Language.CodeGenerator.ReplaceUsings(document, cu.Usings, newUsings); cu.ProjectContent.Language.CodeGenerator.ReplaceUsings(document, cu.Usings, newUsings);
} }
} }

53
src/Main/Base/Project/Src/Services/RefactoringService/RefactorMenu.cs

@ -74,6 +74,18 @@ namespace ICSharpCode.SharpDevelop.Refactoring
provider.TextEditorControl.Refresh(); provider.TextEditorControl.Refresh();
} }
protected ResolveResult ResolveAtCaret(TextEditorControl textEditor)
{
string fileName = textEditor.FileName;
IExpressionFinder expressionFinder = ParserService.GetExpressionFinder(fileName);
if (expressionFinder == null) return null;
Caret caret = textEditor.ActiveTextAreaControl.Caret;
string content = textEditor.Document.TextContent;
ExpressionResult expr = expressionFinder.FindFullExpression(content, caret.Offset);
if (expr.Expression == null) return null;
return ParserService.Resolve(expr, caret.Line + 1, caret.Column + 1, fileName, content);
}
protected abstract void Run(TextEditorControl textEditor, RefactoringProvider provider); protected abstract void Run(TextEditorControl textEditor, RefactoringProvider provider);
} }
@ -84,4 +96,45 @@ namespace ICSharpCode.SharpDevelop.Refactoring
NamespaceRefactoringService.ManageUsings(textEditor.FileName, textEditor.Document, true, true); NamespaceRefactoringService.ManageUsings(textEditor.FileName, textEditor.Document, true, true);
} }
} }
public class RenameCommand : AbstractRefactoringCommand
{
protected override void Run(TextEditorControl textEditor, RefactoringProvider provider)
{
ResolveResult rr = ResolveAtCaret(textEditor);
if (rr is MixedResolveResult) rr = (rr as MixedResolveResult).PrimaryResult;
if (rr is TypeResolveResult) {
IClass c = (rr as TypeResolveResult).ResolvedClass;
if (c == null) {
ShowUnknownSymbolError();
} else if (c.CompilationUnit.FileName == null) {
MessageService.ShowMessage("The type cannot be renamed because it is not defined in user code.");
} else {
FindReferencesAndRenameHelper.RenameClass(c);
}
} else if (rr is MemberResolveResult) {
Rename((rr as MemberResolveResult).ResolvedMember);
} else if (rr is MethodResolveResult) {
Rename((rr as MethodResolveResult).GetMethodIfSingleOverload());
} else {
ShowUnknownSymbolError();
}
}
static void ShowUnknownSymbolError()
{
MessageService.ShowMessage("The element at the caret position cannot be renamed.");
}
static void Rename(IMember member)
{
if (member == null) {
ShowUnknownSymbolError();
} else if (member.DeclaringType.CompilationUnit.FileName == null) {
MessageService.ShowMessage("The member cannot be renamed because it is not defined in user code.");
} else {
FindReferencesAndRenameHelper.RenameMember(member);
}
}
}
} }

60
src/Main/Base/Project/Src/TextEditor/Commands/ClassBookmarkMenuBuilder.cs

@ -132,70 +132,12 @@ namespace ICSharpCode.SharpDevelop.DefaultEditor.Commands
FileService.JumpToFilePosition(fileName, baseClass.Region.BeginLine - 1, baseClass.Region.BeginColumn - 1); FileService.JumpToFilePosition(fileName, baseClass.Region.BeginLine - 1, baseClass.Region.BeginColumn - 1);
} }
} }
} }
void Rename(object sender, EventArgs e) void Rename(object sender, EventArgs e)
{ {
MenuCommand item = (MenuCommand)sender; MenuCommand item = (MenuCommand)sender;
IClass c = (IClass)item.Tag; FindReferencesAndRenameHelper.RenameClass((IClass)item.Tag);
string newName = MessageService.ShowInputBox("${res:SharpDevelop.Refactoring.Rename}", "${res:SharpDevelop.Refactoring.RenameClassText}", c.Name);
if (!FindReferencesAndRenameHelper.CheckName(newName, c.Name)) return;
RenameClass(c, newName);
}
public static void RenameClass(IClass c, string newName)
{
c = c.GetCompoundClass(); // get compound class if class is partial
List<Reference> list = RefactoringService.FindReferences(c, null);
if (list == null) return;
// Add the class declaration(s)
foreach (IClass part in GetClassParts(c)) {
AddDeclarationAsReference(list, part.CompilationUnit.FileName, part.Region, part.Name);
}
// Add the constructors
foreach (IMethod m in c.Methods) {
if (m.IsConstructor) {
AddDeclarationAsReference(list, m.DeclaringType.CompilationUnit.FileName, m.Region, c.Name);
}
}
FindReferencesAndRenameHelper.RenameReferences(list, newName);
}
static void AddDeclarationAsReference(List<Reference> list, string fileName, DomRegion region, string name)
{
if (fileName == null)
return;
ProvidedDocumentInformation documentInformation = FindReferencesAndRenameHelper.GetDocumentInformation(fileName);
int offset = documentInformation.CreateDocument().PositionToOffset(new Point(region.BeginColumn - 1, region.BeginLine - 1));
string text = documentInformation.TextBuffer.GetText(offset, Math.Min(name.Length + 30, documentInformation.TextBuffer.Length - offset - 1));
int offsetChange = text.IndexOf(name);
if (offsetChange < 0)
return;
offset += offsetChange;
foreach (Reference r in list) {
if (r.Offset == offset)
return;
}
list.Add(new Reference(fileName, offset, name.Length, name, null));
}
static List<IClass> GetClassParts(IClass c)
{
List<IClass> list;
CompoundClass cc = c as CompoundClass;
if (cc != null) {
list = cc.Parts;
} else {
list = new List<IClass>(1);
list.Add(c);
}
return list;
} }
void FindDerivedClasses(object sender, EventArgs e) void FindDerivedClasses(object sender, EventArgs e)

40
src/Main/Base/Project/Src/TextEditor/Commands/ClassMemberMenuBuilder.cs

@ -70,7 +70,7 @@ namespace ICSharpCode.SharpDevelop.DefaultEditor.Commands
list.Add(cmd); list.Add(cmd);
if (member is IField) { if (member is IField) {
IProperty foundProperty = FindProperty(member as IField); IProperty foundProperty = FindReferencesAndRenameHelper.FindProperty(member as IField);
if (foundProperty != null) { if (foundProperty != null) {
cmd = new MenuCommand("${res:SharpDevelop.Refactoring.GoToProperty}", GotoTagMember); cmd = new MenuCommand("${res:SharpDevelop.Refactoring.GoToProperty}", GotoTagMember);
cmd.Tag = foundProperty; cmd.Tag = foundProperty;
@ -104,21 +104,6 @@ namespace ICSharpCode.SharpDevelop.DefaultEditor.Commands
return list.ToArray(); return list.ToArray();
} }
IProperty FindProperty(IField field)
{
LanguageProperties language = field.DeclaringType.ProjectContent.Language;
if (language.CodeGenerator == null) return null;
string propertyName = language.CodeGenerator.GetPropertyName(field.Name);
IProperty foundProperty = null;
foreach (IProperty prop in field.DeclaringType.Properties) {
if (language.NameComparer.Equals(propertyName, prop.Name)) {
foundProperty = prop;
break;
}
}
return foundProperty;
}
void CreateProperty(object sender, EventArgs e) void CreateProperty(object sender, EventArgs e)
{ {
CreateProperty(sender, e, true); CreateProperty(sender, e, true);
@ -178,28 +163,7 @@ namespace ICSharpCode.SharpDevelop.DefaultEditor.Commands
void Rename(object sender, EventArgs e) void Rename(object sender, EventArgs e)
{ {
MenuCommand item = (MenuCommand)sender; MenuCommand item = (MenuCommand)sender;
IMember member = (IMember)item.Tag; FindReferencesAndRenameHelper.RenameMember((IMember)item.Tag);
string newName = MessageService.ShowInputBox("${res:SharpDevelop.Refactoring.Rename}", "${res:SharpDevelop.Refactoring.RenameMemberText}", member.Name);
if (!FindReferencesAndRenameHelper.CheckName(newName, member.Name)) return;
List<Reference> list = RefactoringService.FindReferences(member, null);
if (list == null) return;
FindReferencesAndRenameHelper.RenameReferences(list, newName);
if (member is IField) {
IProperty property = FindProperty((IField)member);
if (property != null) {
string newPropertyName = member.DeclaringType.ProjectContent.Language.CodeGenerator.GetPropertyName(newName);
if (newPropertyName != newName && newPropertyName != property.Name) {
if (MessageService.AskQuestionFormatted("${res:SharpDevelop.Refactoring.Rename}", "${res:SharpDevelop.Refactoring.RenameFieldAndProperty}", property.FullyQualifiedName, newPropertyName)) {
list = RefactoringService.FindReferences(property, null);
if (list != null) {
FindReferencesAndRenameHelper.RenameReferences(list, newPropertyName);
}
}
}
}
}
} }
void FindOverrides(object sender, EventArgs e) void FindOverrides(object sender, EventArgs e)

6
src/Main/Base/Test/GenericResolverTests.cs

@ -6,12 +6,8 @@
// </file> // </file>
using System; using System;
using System.Collections;
using System.IO;
using NUnit.Framework;
using ICSharpCode.Core;
using ICSharpCode.SharpDevelop.Dom; using ICSharpCode.SharpDevelop.Dom;
using ICSharpCode.SharpDevelop.Dom.NRefactoryResolver; using NUnit.Framework;
namespace ICSharpCode.SharpDevelop.Tests namespace ICSharpCode.SharpDevelop.Tests
{ {

5
src/Main/Base/Test/InnerClassesResolverTests.cs

@ -7,11 +7,8 @@
using System; using System;
using System.Collections; using System.Collections;
using System.IO;
using NUnit.Framework;
using ICSharpCode.Core;
using ICSharpCode.SharpDevelop.Dom; using ICSharpCode.SharpDevelop.Dom;
using ICSharpCode.SharpDevelop.Dom.NRefactoryResolver; using NUnit.Framework;
namespace ICSharpCode.SharpDevelop.Tests namespace ICSharpCode.SharpDevelop.Tests
{ {

3
src/Main/Base/Test/MemberLookupHelperTests.cs

@ -6,10 +6,9 @@
// </file> // </file>
using System; using System;
using System.Collections.Generic;
using NUnit.Framework;
using ICSharpCode.Core; using ICSharpCode.Core;
using ICSharpCode.SharpDevelop.Dom; using ICSharpCode.SharpDevelop.Dom;
using NUnit.Framework;
namespace ICSharpCode.SharpDevelop.Tests namespace ICSharpCode.SharpDevelop.Tests
{ {

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

@ -8,10 +8,11 @@
using System; using System;
using System.Collections; using System.Collections;
using System.IO; using System.IO;
using NUnit.Framework;
using ICSharpCode.Core; using ICSharpCode.Core;
using ICSharpCode.SharpDevelop.Dom; using ICSharpCode.SharpDevelop.Dom;
using ICSharpCode.SharpDevelop.Dom.NRefactoryResolver; using ICSharpCode.SharpDevelop.Dom.NRefactoryResolver;
using NUnit.Framework;
namespace ICSharpCode.SharpDevelop.Tests namespace ICSharpCode.SharpDevelop.Tests
{ {

2
src/Main/Base/Test/NoSuchExecutableTestFixture.cs

@ -7,8 +7,8 @@
using System; using System;
using System.ComponentModel; using System.ComponentModel;
using NUnit.Framework;
using ICSharpCode.SharpDevelop.Util; using ICSharpCode.SharpDevelop.Util;
using NUnit.Framework;
namespace ICSharpCode.SharpDevelop.Tests namespace ICSharpCode.SharpDevelop.Tests
{ {

2
src/Main/Base/Test/OutputTextLineParserTestFixture.cs

@ -5,9 +5,9 @@
// <version>$Revision$</version> // <version>$Revision$</version>
// </file> // </file>
using System;
using ICSharpCode.SharpDevelop.Gui; using ICSharpCode.SharpDevelop.Gui;
using NUnit.Framework; using NUnit.Framework;
using System;
namespace ICSharpCode.SharpDevelop.Tests namespace ICSharpCode.SharpDevelop.Tests
{ {

2
src/Main/Base/Test/OverloadFinding.cs

@ -7,8 +7,8 @@
using System; using System;
using System.Text; using System.Text;
using NUnit.Framework;
using ICSharpCode.SharpDevelop.Dom; using ICSharpCode.SharpDevelop.Dom;
using NUnit.Framework;
namespace ICSharpCode.SharpDevelop.Tests namespace ICSharpCode.SharpDevelop.Tests
{ {

6
src/Main/Base/Test/ProcessExitedTestFixture.cs

@ -5,13 +5,13 @@
// <version>$Revision$</version> // <version>$Revision$</version>
// </file> // </file>
using ICSharpCode.SharpDevelop.Util;
using NUnit.Framework;
using System; using System;
using System.Diagnostics;
using System.IO; using System.IO;
using System.Threading; using System.Threading;
using ICSharpCode.SharpDevelop.Util;
using NUnit.Framework;
namespace ICSharpCode.SharpDevelop.Tests namespace ICSharpCode.SharpDevelop.Tests
{ {
[TestFixture] [TestFixture]

2
src/Main/Base/Test/ProcessRunnerNotStartedTestFixture.cs

@ -6,8 +6,8 @@
// </file> // </file>
using System; using System;
using NUnit.Framework;
using ICSharpCode.SharpDevelop.Util; using ICSharpCode.SharpDevelop.Util;
using NUnit.Framework;
namespace ICSharpCode.SharpDevelop.Tests namespace ICSharpCode.SharpDevelop.Tests
{ {

3
src/Main/Base/Test/ReflectionLayerTests.cs

@ -9,9 +9,10 @@ using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.IO; using System.IO;
using System.Reflection; using System.Reflection;
using NUnit.Framework;
using ICSharpCode.Core; using ICSharpCode.Core;
using ICSharpCode.SharpDevelop.Dom; using ICSharpCode.SharpDevelop.Dom;
using NUnit.Framework;
namespace ICSharpCode.SharpDevelop.Tests namespace ICSharpCode.SharpDevelop.Tests
{ {

9
src/Main/Base/Test/SearchClassTests.cs

@ -6,10 +6,9 @@
// </file> // </file>
using System; using System;
using System.Collections.Generic;
using NUnit.Framework;
using ICSharpCode.Core; using ICSharpCode.Core;
using ICSharpCode.SharpDevelop.Dom; using ICSharpCode.SharpDevelop.Dom;
using NUnit.Framework;
namespace ICSharpCode.SharpDevelop.Tests namespace ICSharpCode.SharpDevelop.Tests
{ {
@ -40,7 +39,7 @@ namespace ICSharpCode.SharpDevelop.Tests
IReturnType SearchType(string type) IReturnType SearchType(string type)
{ {
ICompilationUnit cu = Prepare(LanguageProperties.CSharp); ICompilationUnit cu = Prepare(LanguageProperties.CSharp);
IReturnType c = cu.ProjectContent.SearchType(type, 0, null, cu, 1, 1); IReturnType c = cu.ProjectContent.SearchType(new SearchTypeRequest(type, 0, null, cu, 1, 1)).Result;
Assert.IsNotNull(c, type + "not found"); Assert.IsNotNull(c, type + "not found");
return c; return c;
} }
@ -48,7 +47,7 @@ namespace ICSharpCode.SharpDevelop.Tests
IReturnType SearchTypeVB(string type) IReturnType SearchTypeVB(string type)
{ {
ICompilationUnit cu = Prepare(LanguageProperties.VBNet); ICompilationUnit cu = Prepare(LanguageProperties.VBNet);
IReturnType c = cu.ProjectContent.SearchType(type, 0, null, cu, 1, 1); IReturnType c = cu.ProjectContent.SearchType(new SearchTypeRequest(type, 0, null, cu, 1, 1)).Result;
Assert.IsNotNull(c, type + "not found"); Assert.IsNotNull(c, type + "not found");
return c; return c;
} }
@ -116,7 +115,7 @@ namespace ICSharpCode.SharpDevelop.Tests
public void SearchArrayList() public void SearchArrayList()
{ {
ICompilationUnit cu = Prepare(LanguageProperties.CSharp); ICompilationUnit cu = Prepare(LanguageProperties.CSharp);
IReturnType c = cu.ProjectContent.SearchType("Collections.ArrayList", 0, null, cu, 1, 1); IReturnType c = cu.ProjectContent.SearchType(new SearchTypeRequest("Collections.ArrayList", 0, null, cu, 1, 1)).Result;
Assert.IsNull(c, "Namespaces should not be imported in C#"); Assert.IsNull(c, "Namespaces should not be imported in C#");
} }

4
src/Main/Base/Test/SearchGenericClassTests.cs

@ -46,7 +46,7 @@ namespace ICSharpCode.SharpDevelop.Tests
IReturnType SearchType(string type, int typeParameterCount) IReturnType SearchType(string type, int typeParameterCount)
{ {
ICompilationUnit cu = Prepare(LanguageProperties.CSharp); ICompilationUnit cu = Prepare(LanguageProperties.CSharp);
IReturnType c = cu.ProjectContent.SearchType(type, typeParameterCount, null, cu, 1, 1); IReturnType c = cu.ProjectContent.SearchType(new SearchTypeRequest(type, typeParameterCount, null, cu, 1, 1)).Result;
Assert.IsNotNull(c, type + "not found"); Assert.IsNotNull(c, type + "not found");
return c; return c;
} }
@ -54,7 +54,7 @@ namespace ICSharpCode.SharpDevelop.Tests
IReturnType SearchTypeVB(string type, int typeParameterCount) IReturnType SearchTypeVB(string type, int typeParameterCount)
{ {
ICompilationUnit cu = Prepare(LanguageProperties.VBNet); ICompilationUnit cu = Prepare(LanguageProperties.VBNet);
IReturnType c = cu.ProjectContent.SearchType(type, typeParameterCount, null, cu, 1, 1); IReturnType c = cu.ProjectContent.SearchType(new SearchTypeRequest(type, typeParameterCount, null, cu, 1, 1)).Result;
Assert.IsNotNull(c, type + "not found"); Assert.IsNotNull(c, type + "not found");
return c; return c;
} }

5
src/Main/Base/Test/StandardOutputFromProcessTestFixture.cs

@ -5,13 +5,14 @@
// <version>$Revision$</version> // <version>$Revision$</version>
// </file> // </file>
using ICSharpCode.SharpDevelop.Util;
using NUnit.Framework;
using System; using System;
using System.Diagnostics; using System.Diagnostics;
using System.IO; using System.IO;
using System.Text; using System.Text;
using ICSharpCode.SharpDevelop.Util;
using NUnit.Framework;
namespace ICSharpCode.SharpDevelop.Tests namespace ICSharpCode.SharpDevelop.Tests
{ {
/// <summary> /// <summary>

Loading…
Cancel
Save