Browse Source

Implemented "Find references"

newNRvisualizers
Daniel Grunwald 15 years ago
parent
commit
9957c52ff2
  1. 92
      SharpDevelop.sln
  2. 1
      src/AddIns/BackendBindings/CSharpBinding/Project/CSharpBinding.csproj
  3. 124
      src/AddIns/BackendBindings/CSharpBinding/Project/Src/Parser/CSharpSymbolSearch.cs
  4. 5
      src/AddIns/BackendBindings/CSharpBinding/Project/Src/Project/CSharpProject.cs
  5. 31
      src/AddIns/DisplayBindings/AvalonEdit.AddIn/Src/IconBarManager.cs
  6. 53
      src/AddIns/Misc/SearchAndReplace/Project/Gui/SearchResultNode.cs
  7. 46
      src/Libraries/NRefactory/ICSharpCode.NRefactory/CSharp/Resolver/FindReferences.cs
  8. 5
      src/Libraries/NRefactory/ICSharpCode.NRefactory/CSharp/Resolver/LocalResolveResult.cs
  9. 5
      src/Libraries/NRefactory/ICSharpCode.NRefactory/CSharp/Resolver/MemberResolveResult.cs
  10. 2
      src/Libraries/NRefactory/ICSharpCode.NRefactory/CSharp/Resolver/ResolveAtLocation.cs
  11. 5
      src/Libraries/NRefactory/ICSharpCode.NRefactory/CSharp/Resolver/ResolveResult.cs
  12. 9
      src/Libraries/NRefactory/ICSharpCode.NRefactory/CSharp/Resolver/TypeResolveResult.cs
  13. 32
      src/Main/Base/Project/ICSharpCode.SharpDevelop.addin
  14. 5
      src/Main/Base/Project/ICSharpCode.SharpDevelop.csproj
  15. 128
      src/Main/Base/Project/Src/Bookmarks/ClassMemberBookmark.cs
  16. 70
      src/Main/Base/Project/Src/Bookmarks/EntityBookmark.cs
  17. 34
      src/Main/Base/Project/Src/Editor/Commands/FindReferences.cs
  18. 29
      src/Main/Base/Project/Src/Editor/Commands/FindReferencesCommand.cs
  19. 22
      src/Main/Base/Project/Src/Editor/Commands/GoToDefinition.cs
  20. 38
      src/Main/Base/Project/Src/Editor/Commands/SymbolUnderCaretMenuCommand.cs
  21. 57
      src/Main/Base/Project/Src/Editor/Search/SearchResultMatch.cs
  22. 5
      src/Main/Base/Project/Src/Project/AbstractProject.cs
  23. 12
      src/Main/Base/Project/Src/Project/IProject.cs
  24. 83
      src/Main/Base/Project/Src/Services/RefactoringService/FindReferenceService.cs
  25. 98
      src/Main/Base/Project/Src/Services/RefactoringService/FindReferencesAndRenameHelper.cs
  26. 49
      src/Main/Base/Project/Src/Services/RefactoringService/Reference.cs

92
SharpDevelop.sln

@ -1,49 +1,49 @@ @@ -1,49 +1,49 @@

Microsoft Visual Studio Solution File, Format Version 11.00
# Visual Studio 2010
# SharpDevelop 4.1.0.7800-beta
# SharpDevelop 4.1.0.7861-beta
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Main", "Main", "{256F5C28-532C-44C0-8AB8-D8EC5E492E01}"
ProjectSection(SolutionItems) = postProject
EndProjectSection
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "StartUp", "src\Main\StartUp\Project\StartUp.csproj", "{1152B71B-3C05-4598-B20D-823B5D40559E}"
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ICSharpCode.SharpDevelop.BuildWorker35", "src\Main\ICSharpCode.SharpDevelop.BuildWorker35\ICSharpCode.SharpDevelop.BuildWorker35.csproj", "{B5F54272-49F0-40DB-845A-8D837875D3BA}"
ProjectSection(ProjectDependencies) = postProject
{35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} = {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C}
EndProjectSection
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ICSharpCode.SharpDevelop.Widgets", "src\Main\ICSharpCode.SharpDevelop.Widgets\Project\ICSharpCode.SharpDevelop.Widgets.csproj", "{8035765F-D51F-4A0C-A746-2FD100E19419}"
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ICSharpCode.SharpDevelop.BuildWorker", "src\Main\ICSharpCode.SharpDevelop.BuildWorker\ICSharpCode.SharpDevelop.BuildWorker.csproj", "{C3CBC8E3-81D8-4C5B-9941-DCCD12D50B1F}"
ProjectSection(ProjectDependencies) = postProject
{35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} = {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C}
EndProjectSection
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ICSharpCode.SharpDevelop", "src\Main\Base\Project\ICSharpCode.SharpDevelop.csproj", "{2748AD25-9C63-4E12-877B-4DCE96FBED54}"
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ICSharpCode.Core", "src\Main\Core\Project\ICSharpCode.Core.csproj", "{35CEF10F-2D4C-45F2-9DD1-161E0FEC583C}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ICSharpCode.Core.Presentation", "src\Main\ICSharpCode.Core.Presentation\ICSharpCode.Core.Presentation.csproj", "{7E4A7172-7FF5-48D0-B719-7CD959DD1AC9}"
ProjectSection(ProjectDependencies) = postProject
{35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} = {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C}
EndProjectSection
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ICSharpCode.SharpDevelop.Sda", "src\Main\ICSharpCode.SharpDevelop.Sda\ICSharpCode.SharpDevelop.Sda.csproj", "{80318B5F-A25D-45AB-8A95-EF31D2370A4C}"
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ICSharpCode.Core.WinForms", "src\Main\ICSharpCode.Core.WinForms\ICSharpCode.Core.WinForms.csproj", "{857CA1A3-FC88-4BE0-AB6A-D1EE772AB288}"
ProjectSection(ProjectDependencies) = postProject
{35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} = {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C}
EndProjectSection
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ICSharpCode.Core.WinForms", "src\Main\ICSharpCode.Core.WinForms\ICSharpCode.Core.WinForms.csproj", "{857CA1A3-FC88-4BE0-AB6A-D1EE772AB288}"
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ICSharpCode.SharpDevelop.Sda", "src\Main\ICSharpCode.SharpDevelop.Sda\ICSharpCode.SharpDevelop.Sda.csproj", "{80318B5F-A25D-45AB-8A95-EF31D2370A4C}"
ProjectSection(ProjectDependencies) = postProject
{35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} = {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C}
EndProjectSection
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ICSharpCode.Core.Presentation", "src\Main\ICSharpCode.Core.Presentation\ICSharpCode.Core.Presentation.csproj", "{7E4A7172-7FF5-48D0-B719-7CD959DD1AC9}"
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ICSharpCode.SharpDevelop", "src\Main\Base\Project\ICSharpCode.SharpDevelop.csproj", "{2748AD25-9C63-4E12-877B-4DCE96FBED54}"
ProjectSection(ProjectDependencies) = postProject
{35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} = {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C}
EndProjectSection
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ICSharpCode.Core", "src\Main\Core\Project\ICSharpCode.Core.csproj", "{35CEF10F-2D4C-45F2-9DD1-161E0FEC583C}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ICSharpCode.SharpDevelop.BuildWorker", "src\Main\ICSharpCode.SharpDevelop.BuildWorker\ICSharpCode.SharpDevelop.BuildWorker.csproj", "{C3CBC8E3-81D8-4C5B-9941-DCCD12D50B1F}"
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ICSharpCode.SharpDevelop.Widgets", "src\Main\ICSharpCode.SharpDevelop.Widgets\Project\ICSharpCode.SharpDevelop.Widgets.csproj", "{8035765F-D51F-4A0C-A746-2FD100E19419}"
ProjectSection(ProjectDependencies) = postProject
{35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} = {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C}
EndProjectSection
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ICSharpCode.SharpDevelop.BuildWorker35", "src\Main\ICSharpCode.SharpDevelop.BuildWorker35\ICSharpCode.SharpDevelop.BuildWorker35.csproj", "{B5F54272-49F0-40DB-845A-8D837875D3BA}"
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "StartUp", "src\Main\StartUp\Project\StartUp.csproj", "{1152B71B-3C05-4598-B20D-823B5D40559E}"
ProjectSection(ProjectDependencies) = postProject
{35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} = {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C}
EndProjectSection
@ -52,7 +52,20 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Libraries", "Libraries", "{ @@ -52,7 +52,20 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Libraries", "Libraries", "{
ProjectSection(SolutionItems) = postProject
EndProjectSection
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ICSharpCode.TreeView", "src\Libraries\SharpTreeView\ICSharpCode.TreeView\ICSharpCode.TreeView.csproj", "{DDE2A481-8271-4EAC-A330-8FA6A38D13D1}"
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Mono.Cecil", "src\Libraries\Mono.Cecil\Mono.Cecil.csproj", "{D68133BD-1E63-496E-9EDE-4FBDBF77B486}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "NRefactory", "NRefactory", "{E5A0F4D8-37FD-4A30-BEB0-4409DC4E0865}"
ProjectSection(SolutionItems) = postProject
TODOnewNR.txt = TODOnewNR.txt
EndProjectSection
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ICSharpCode.NRefactory", "src\Libraries\NRefactory\ICSharpCode.NRefactory\ICSharpCode.NRefactory.csproj", "{3B2A5653-EC97-4001-BB9B-D90F1AF2C371}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ICSharpCode.Editor", "src\Libraries\NRefactory\ICSharpCode.Editor\ICSharpCode.Editor.csproj", "{F054A788-B591-4561-A8BA-AE745BBEB817}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "AvalonDock", "src\Libraries\AvalonDock\AvalonDock\AvalonDock.csproj", "{2FF700C2-A38A-48BD-A637-8CAFD4FE6237}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ICSharpCode.AvalonEdit", "src\Libraries\AvalonEdit\ICSharpCode.AvalonEdit\ICSharpCode.AvalonEdit.csproj", "{6C55B776-26D4-4DB3-A6AB-87E783B2F3D1}"
ProjectSection(ProjectDependencies) = postProject
{35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} = {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C}
EndProjectSection
@ -62,49 +75,40 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ICSharpCode.Build.Tasks", " @@ -62,49 +75,40 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ICSharpCode.Build.Tasks", "
{35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} = {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C}
EndProjectSection
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ICSharpCode.AvalonEdit", "src\Libraries\AvalonEdit\ICSharpCode.AvalonEdit\ICSharpCode.AvalonEdit.csproj", "{6C55B776-26D4-4DB3-A6AB-87E783B2F3D1}"
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ICSharpCode.TreeView", "src\Libraries\SharpTreeView\ICSharpCode.TreeView\ICSharpCode.TreeView.csproj", "{DDE2A481-8271-4EAC-A330-8FA6A38D13D1}"
ProjectSection(ProjectDependencies) = postProject
{35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} = {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C}
EndProjectSection
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "AvalonDock", "src\Libraries\AvalonDock\AvalonDock\AvalonDock.csproj", "{2FF700C2-A38A-48BD-A637-8CAFD4FE6237}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "NRefactory", "NRefactory", "{E5A0F4D8-37FD-4A30-BEB0-4409DC4E0865}"
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "AddIns", "AddIns", "{39327899-ED91-4F7F-988C-4FE4E17C014D}"
ProjectSection(SolutionItems) = postProject
TODOnewNR.txt = TODOnewNR.txt
EndProjectSection
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ICSharpCode.Editor", "src\Libraries\NRefactory\ICSharpCode.Editor\ICSharpCode.Editor.csproj", "{F054A788-B591-4561-A8BA-AE745BBEB817}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ICSharpCode.NRefactory", "src\Libraries\NRefactory\ICSharpCode.NRefactory\ICSharpCode.NRefactory.csproj", "{3B2A5653-EC97-4001-BB9B-D90F1AF2C371}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Mono.Cecil", "src\Libraries\Mono.Cecil\Mono.Cecil.csproj", "{D68133BD-1E63-496E-9EDE-4FBDBF77B486}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "AddIns", "AddIns", "{39327899-ED91-4F7F-988C-4FE4E17C014D}"
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Version Control", "Version Control", "{F208FF4F-E5D8-41D5-A7C7-B463976F156E}"
ProjectSection(SolutionItems) = postProject
EndProjectSection
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Display Bindings", "Display Bindings", "{11BF9245-88A3-4A0A-9A8A-EC9D98036B0F}"
ProjectSection(SolutionItems) = postProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "GitAddIn", "src\AddIns\VersionControl\GitAddIn\GitAddIn.csproj", "{83F15BA7-8478-4664-81BB-A82F146D88B3}"
ProjectSection(ProjectDependencies) = postProject
{35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} = {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C}
EndProjectSection
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "AvalonEdit.AddIn", "src\AddIns\DisplayBindings\AvalonEdit.AddIn\AvalonEdit.AddIn.csproj", "{0162E499-42D0-409B-AA25-EED21F75336B}"
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SubversionAddIn", "src\AddIns\VersionControl\SubversionAddIn\SubversionAddIn.csproj", "{17F4D7E0-6933-4C2E-8714-FD7E98D625D5}"
ProjectSection(ProjectDependencies) = postProject
{35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} = {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C}
EndProjectSection
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Misc", "Misc", "{F3662720-9EA2-4591-BBC6-97361DCE50A9}"
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Language Bindings", "Language Bindings", "{E0646C25-36F2-4524-969F-FA621353AB94}"
ProjectSection(SolutionItems) = postProject
EndProjectSection
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "AddinScout", "src\AddIns\Misc\AddinScout\Project\AddinScout.csproj", "{4B8F0F98-8BE1-402B-AA8B-C8D548577B38}"
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "CSharpBinding", "src\AddIns\BackendBindings\CSharpBinding\Project\CSharpBinding.csproj", "{1F1AC7CD-D154-45BB-8EAF-804CA8055F5A}"
ProjectSection(ProjectDependencies) = postProject
{35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} = {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C}
EndProjectSection
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "StartPage", "src\AddIns\Misc\StartPage\Project\StartPage.csproj", "{7D5C266F-D6FF-4D14-B315-0C0FC6C4EF51}"
ProjectSection(ProjectDependencies) = postProject
{35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} = {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C}
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Misc", "Misc", "{F3662720-9EA2-4591-BBC6-97361DCE50A9}"
ProjectSection(SolutionItems) = postProject
EndProjectSection
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SearchAndReplace", "src\AddIns\Misc\SearchAndReplace\Project\SearchAndReplace.csproj", "{9196DD8A-B4D4-4780-8742-C5762E547FC2}"
@ -112,25 +116,21 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SearchAndReplace", "src\Add @@ -112,25 +116,21 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SearchAndReplace", "src\Add
{35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} = {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C}
EndProjectSection
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Language Bindings", "Language Bindings", "{E0646C25-36F2-4524-969F-FA621353AB94}"
ProjectSection(SolutionItems) = postProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "StartPage", "src\AddIns\Misc\StartPage\Project\StartPage.csproj", "{7D5C266F-D6FF-4D14-B315-0C0FC6C4EF51}"
ProjectSection(ProjectDependencies) = postProject
{35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} = {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C}
EndProjectSection
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "CSharpBinding", "src\AddIns\BackendBindings\CSharpBinding\Project\CSharpBinding.csproj", "{1F1AC7CD-D154-45BB-8EAF-804CA8055F5A}"
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "AddinScout", "src\AddIns\Misc\AddinScout\Project\AddinScout.csproj", "{4B8F0F98-8BE1-402B-AA8B-C8D548577B38}"
ProjectSection(ProjectDependencies) = postProject
{35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} = {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C}
EndProjectSection
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Version Control", "Version Control", "{F208FF4F-E5D8-41D5-A7C7-B463976F156E}"
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Display Bindings", "Display Bindings", "{11BF9245-88A3-4A0A-9A8A-EC9D98036B0F}"
ProjectSection(SolutionItems) = postProject
EndProjectSection
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SubversionAddIn", "src\AddIns\VersionControl\SubversionAddIn\SubversionAddIn.csproj", "{17F4D7E0-6933-4C2E-8714-FD7E98D625D5}"
ProjectSection(ProjectDependencies) = postProject
{35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} = {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C}
EndProjectSection
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "GitAddIn", "src\AddIns\VersionControl\GitAddIn\GitAddIn.csproj", "{83F15BA7-8478-4664-81BB-A82F146D88B3}"
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "AvalonEdit.AddIn", "src\AddIns\DisplayBindings\AvalonEdit.AddIn\AvalonEdit.AddIn.csproj", "{0162E499-42D0-409B-AA25-EED21F75336B}"
ProjectSection(ProjectDependencies) = postProject
{35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} = {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C}
EndProjectSection
@ -347,12 +347,12 @@ Global @@ -347,12 +347,12 @@ Global
{E0646C25-36F2-4524-969F-FA621353AB94} = {39327899-ED91-4F7F-988C-4FE4E17C014D}
{F3662720-9EA2-4591-BBC6-97361DCE50A9} = {39327899-ED91-4F7F-988C-4FE4E17C014D}
{11BF9245-88A3-4A0A-9A8A-EC9D98036B0F} = {39327899-ED91-4F7F-988C-4FE4E17C014D}
{0162E499-42D0-409B-AA25-EED21F75336B} = {11BF9245-88A3-4A0A-9A8A-EC9D98036B0F}
{83F15BA7-8478-4664-81BB-A82F146D88B3} = {F208FF4F-E5D8-41D5-A7C7-B463976F156E}
{17F4D7E0-6933-4C2E-8714-FD7E98D625D5} = {F208FF4F-E5D8-41D5-A7C7-B463976F156E}
{1F1AC7CD-D154-45BB-8EAF-804CA8055F5A} = {E0646C25-36F2-4524-969F-FA621353AB94}
{9196DD8A-B4D4-4780-8742-C5762E547FC2} = {F3662720-9EA2-4591-BBC6-97361DCE50A9}
{7D5C266F-D6FF-4D14-B315-0C0FC6C4EF51} = {F3662720-9EA2-4591-BBC6-97361DCE50A9}
{4B8F0F98-8BE1-402B-AA8B-C8D548577B38} = {F3662720-9EA2-4591-BBC6-97361DCE50A9}
{1F1AC7CD-D154-45BB-8EAF-804CA8055F5A} = {E0646C25-36F2-4524-969F-FA621353AB94}
{83F15BA7-8478-4664-81BB-A82F146D88B3} = {F208FF4F-E5D8-41D5-A7C7-B463976F156E}
{17F4D7E0-6933-4C2E-8714-FD7E98D625D5} = {F208FF4F-E5D8-41D5-A7C7-B463976F156E}
{0162E499-42D0-409B-AA25-EED21F75336B} = {11BF9245-88A3-4A0A-9A8A-EC9D98036B0F}
EndGlobalSection
EndGlobal

1
src/AddIns/BackendBindings/CSharpBinding/Project/CSharpBinding.csproj

@ -67,6 +67,7 @@ @@ -67,6 +67,7 @@
<Compile Include="Src\OptionPanels\BuildOptions.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="Src\Parser\CSharpSymbolSearch.cs" />
<Compile Include="Src\Parser\Parser.cs" />
<Compile Include="Src\Project\VBNetToCSharpConvertVisitorWithMyFormsSupport.cs" />
<Compile Include="Src\Project\CSharpMyNamespaceBuilder.cs" />

124
src/AddIns/BackendBindings/CSharpBinding/Project/Src/Parser/CSharpSymbolSearch.cs

@ -0,0 +1,124 @@ @@ -0,0 +1,124 @@
// Copyright (c) AlphaSierraPapa for the SharpDevelop Team (for details please see \doc\copyright.txt)
// This code is distributed under the GNU LGPL (for details please see \doc\license.txt)
using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.InteropServices;
using ICSharpCode.Core;
using ICSharpCode.Editor;
using ICSharpCode.NRefactory.CSharp;
using ICSharpCode.NRefactory.CSharp.Resolver;
using ICSharpCode.NRefactory.TypeSystem;
using ICSharpCode.NRefactory.Utils;
using ICSharpCode.SharpDevelop.Gui;
using ICSharpCode.SharpDevelop.Parser;
using ICSharpCode.SharpDevelop.Project;
using ICSharpCode.SharpDevelop.Refactoring;
namespace CSharpBinding
{
/// <summary>
/// C# backend implementation for 'find references'.
/// </summary>
public class CSharpSymbolSearch : ISymbolSearch
{
IProject project;
FindReferences fr = new FindReferences();
IList<FindReferences.SearchScope> searchScopes;
IList<string>[] interestingFileNames;
int workAmount;
double workAmountInverse;
Action<Reference> callback;
FileName currentFileName;
public CSharpSymbolSearch(IProject project, IEntity entity)
{
this.project = project;
searchScopes = fr.GetSearchScopes(entity);
interestingFileNames = new IList<string>[searchScopes.Count];
using (var ctx = project.TypeResolveContext.Synchronize()) {
IProjectContent pc = project.ProjectContent;
for (int i = 0; i < searchScopes.Count; i++) {
// Check whether this project can reference the entity at all
bool canReferenceEntity;
switch (searchScopes[i].Accessibility) {
case Accessibility.None:
case Accessibility.Private:
canReferenceEntity = (pc == entity.ProjectContent);
break;
case Accessibility.Internal:
case Accessibility.ProtectedAndInternal:
canReferenceEntity = entity.ProjectContent.InternalsVisibleTo(pc, ctx);
break;
default:
ITypeDefinition typeDef = searchScopes[i].TopLevelTypeDefinition;
if (typeDef != null) {
ITypeDefinition typeDefInContext = ctx.GetTypeDefinition(typeDef.Namespace, typeDef.Name, typeDef.TypeParameterCount, StringComparer.Ordinal);
canReferenceEntity = (typeDefInContext == typeDef.GetDefinition());
} else {
canReferenceEntity = true;
}
break;
}
if (canReferenceEntity) {
var allTypesInPC = TreeTraversal.PreOrder(ctx.GetTypes().Where(t => t.ProjectContent == pc), t => t.NestedTypes);
interestingFileNames[i] = fr.GetInterestingFileNames(searchScopes[i], allTypesInPC, ctx);
workAmount += interestingFileNames[i].Count;
} else {
interestingFileNames[i] = new string[0];
}
}
}
workAmountInverse = 1.0 / workAmount;
}
public double WorkAmount {
get { return workAmount; }
}
public void FindReferences(SymbolSearchArgs args, Action<Reference> callback)
{
if (callback == null)
throw new ArgumentNullException("callback");
if (this.callback != null)
throw new InvalidOperationException("Cannot call FindReferences() twice");
this.callback = callback;
fr.ReferenceFound += OnReferenceFound;
for (int i = 0; i < searchScopes.Count; i++) {
FindReferences.SearchScope searchScope = searchScopes[i];
foreach (string file in interestingFileNames[i]) {
currentFileName = FileName.Create(file);
FindReferencesInCurrentFile(args, searchScope);
args.ProgressMonitor.Progress += workAmountInverse;
}
}
}
void OnReferenceFound(AstNode node, ResolveResult result)
{
callback(new Reference(new DomRegion(currentFileName, node.StartLocation, node.EndLocation), result));
}
void FindReferencesInCurrentFile(SymbolSearchArgs args, FindReferences.SearchScope searchScope)
{
ITextSource textSource = args.ParseableFileContentFinder.Create(currentFileName);
if (textSource == null)
return;
if (searchScope.SearchTerm != null) {
// TODO: do a fast check with IndexOf()
}
ParseInformation parseInfo = ParserService.Parse(currentFileName, textSource);
if (parseInfo == null)
return;
ParsedFile parsedFile = parseInfo.ParsedFile as ParsedFile;
CompilationUnit cu = parseInfo.Annotation<CompilationUnit>();
if (parsedFile == null || cu == null)
return;
fr.FindReferencesInFile(searchScope, parsedFile, cu, project.TypeResolveContext);
}
}
}

5
src/AddIns/BackendBindings/CSharpBinding/Project/Src/Project/CSharpProject.cs

@ -143,5 +143,10 @@ namespace CSharpBinding @@ -143,5 +143,10 @@ namespace CSharpBinding
}
}
*/
public override ICSharpCode.SharpDevelop.Refactoring.ISymbolSearch PrepareSymbolSearch(ICSharpCode.NRefactory.TypeSystem.IEntity entity)
{
return new CSharpSymbolSearch(this, entity);
}
}
}

31
src/AddIns/DisplayBindings/AvalonEdit.AddIn/Src/IconBarManager.cs

@ -43,46 +43,29 @@ namespace ICSharpCode.AvalonEdit.AddIn @@ -43,46 +43,29 @@ namespace ICSharpCode.AvalonEdit.AddIn
public void UpdateClassMemberBookmarks(IParsedFile parseInfo)
{
for (int i = bookmarks.Count - 1; i >= 0; i--) {
if (IsClassMemberBookmark(bookmarks[i]))
if (bookmarks[i] is EntityBookmark)
bookmarks.RemoveAt(i);
}
if (parseInfo == null)
return;
foreach (ITypeDefinition c in parseInfo.TopLevelTypeDefinitions) {
AddClassMemberBookmarks(c);
AddEntityBookmarks(c);
}
}
void AddClassMemberBookmarks(ITypeDefinition c)
void AddEntityBookmarks(ITypeDefinition c)
{
if (c.IsSynthetic) return;
if (!c.Region.IsEmpty) {
bookmarks.Add(new ClassBookmark(c));
bookmarks.Add(new EntityBookmark(c));
}
foreach (ITypeDefinition innerClass in c.NestedTypes) {
AddClassMemberBookmarks(innerClass);
AddEntityBookmarks(innerClass);
}
foreach (IMethod m in c.Methods) {
foreach (IMember m in c.Members) {
if (m.Region.IsEmpty || m.IsSynthetic) continue;
bookmarks.Add(new ClassMemberBookmark(m));
bookmarks.Add(new EntityBookmark(m));
}
foreach (IProperty m in c.Properties) {
if (m.Region.IsEmpty || m.IsSynthetic) continue;
bookmarks.Add(new ClassMemberBookmark(m));
}
foreach (IField f in c.Fields) {
if (f.Region.IsEmpty || f.IsSynthetic) continue;
bookmarks.Add(new ClassMemberBookmark(f));
}
foreach (IEvent e in c.Events) {
if (e.Region.IsEmpty || e.IsSynthetic) continue;
bookmarks.Add(new ClassMemberBookmark(e));
}
}
static bool IsClassMemberBookmark(IBookmark b)
{
return b is ClassMemberBookmark || b is ClassBookmark;
}
}
}

53
src/AddIns/Misc/SearchAndReplace/Project/Gui/SearchResultNode.cs

@ -31,38 +31,35 @@ namespace SearchAndReplace @@ -31,38 +31,35 @@ namespace SearchAndReplace
this.result = result;
IDocument document = result.CreateDocument();
var startPosition = result.GetStartPosition(document);
int lineNumber = startPosition.Line;
int column = startPosition.Column;
this.anchor = new PermanentAnchor(result.FileName, lineNumber, column);
var startPosition = result.StartLocation;
this.anchor = new PermanentAnchor(result.FileName, startPosition.Line, startPosition.Column);
anchor.SurviveDeletion = true;
if (lineNumber >= 1 && lineNumber <= document.LineCount) {
IDocumentLine matchedLine = document.GetLineByNumber(lineNumber);
inlineBuilder = new HighlightedInlineBuilder(document.GetText(matchedLine));
inlineBuilder.SetFontFamily(0, inlineBuilder.Text.Length, new FontFamily(EditorControlService.GlobalOptions.FontFamily));
IHighlighter highlighter = document.GetService(typeof(IHighlighter)) as IHighlighter;
if (highlighter != null) {
HighlightedLine highlightedLine = highlighter.HighlightLine(lineNumber);
int startOffset = highlightedLine.DocumentLine.Offset;
// copy only the foreground color
foreach (HighlightedSection section in highlightedLine.Sections) {
if (section.Color.Foreground != null) {
inlineBuilder.SetForeground(section.Offset - startOffset, section.Length, section.Color.Foreground.GetBrush(null));
}
int lineNumber = anchor.Line;
IDocumentLine matchedLine = document.GetLineByNumber(lineNumber);
inlineBuilder = new HighlightedInlineBuilder(document.GetText(matchedLine));
inlineBuilder.SetFontFamily(0, inlineBuilder.Text.Length, new FontFamily(EditorControlService.GlobalOptions.FontFamily));
IHighlighter highlighter = document.GetService(typeof(IHighlighter)) as IHighlighter;
if (highlighter != null) {
HighlightedLine highlightedLine = highlighter.HighlightLine(lineNumber);
int startOffset = highlightedLine.DocumentLine.Offset;
// copy only the foreground color
foreach (HighlightedSection section in highlightedLine.Sections) {
if (section.Color.Foreground != null) {
inlineBuilder.SetForeground(section.Offset - startOffset, section.Length, section.Color.Foreground.GetBrush(null));
}
}
// now highlight the match in bold
if (column >= 1) {
var endPosition = result.GetEndPosition(document);
if (endPosition.Line == startPosition.Line && endPosition.Column > startPosition.Column) {
// subtract one from the column to get the offset inside the line's text
int startOffset = column - 1;
int endOffset = Math.Min(inlineBuilder.Text.Length, endPosition.Column - 1);
inlineBuilder.SetFontWeight(startOffset, endOffset - startOffset, FontWeights.Bold);
}
}
// now highlight the match in bold
if (startPosition.Column >= 1) {
var endPosition = result.EndLocation;
if (endPosition.Line == startPosition.Line && endPosition.Column > startPosition.Column) {
// subtract one from the column to get the offset inside the line's text
int startOffset = startPosition.Column - 1;
int endOffset = Math.Min(inlineBuilder.Text.Length, endPosition.Column - 1);
inlineBuilder.SetFontWeight(startOffset, endOffset - startOffset, FontWeights.Bold);
}
}
}

46
src/Libraries/NRefactory/ICSharpCode.NRefactory/CSharp/Resolver/FindReferences.cs

@ -31,21 +31,17 @@ namespace ICSharpCode.NRefactory.CSharp.Resolver @@ -31,21 +31,17 @@ namespace ICSharpCode.NRefactory.CSharp.Resolver
/// </summary>
public class FindReferences
{
CancellationToken cancellationToken;
/// <summary>
/// Callback that is invoked whenever a reference is found.
/// </summary>
public event Action<AstNode, ResolveResult> ReferenceFound;
#region Constructor
public FindReferences(CancellationToken cancellationToken = default(CancellationToken))
{
this.cancellationToken = cancellationToken;
}
#endregion
#region Properties
/// <summary>
/// Gets/Sets the cancellation token.
/// </summary>
public CancellationToken CancellationToken { get; set; }
/// <summary>
/// Gets/Sets whether to find type references even if an alias is being used.
/// </summary>
@ -224,7 +220,7 @@ namespace ICSharpCode.NRefactory.CSharp.Resolver @@ -224,7 +220,7 @@ namespace ICSharpCode.NRefactory.CSharp.Resolver
/// <summary>
/// Gets the file names that possibly contain references to the element being searched for.
/// </summary>
public IEnumerable<string> GetInterestingFileNames(SearchScope searchScope, ITypeResolveContext context)
public IList<string> GetInterestingFileNames(SearchScope searchScope, IEnumerable<ITypeDefinition> allTypes, ITypeResolveContext context)
{
IEnumerable<ITypeDefinition> interestingTypes;
if (searchScope.TopLevelTypeDefinition != null) {
@ -234,41 +230,41 @@ namespace ICSharpCode.NRefactory.CSharp.Resolver @@ -234,41 +230,41 @@ namespace ICSharpCode.NRefactory.CSharp.Resolver
interestingTypes = new [] { searchScope.TopLevelTypeDefinition.GetDefinition() };
break;
case Accessibility.Protected:
interestingTypes = GetInterestingTypesProtected(context, searchScope.TopLevelTypeDefinition);
interestingTypes = GetInterestingTypesProtected(allTypes, context, searchScope.TopLevelTypeDefinition);
break;
case Accessibility.Internal:
interestingTypes = GetInterestingTypesInternal(context, searchScope.TopLevelTypeDefinition.ProjectContent);
interestingTypes = GetInterestingTypesInternal(allTypes, context, searchScope.TopLevelTypeDefinition.ProjectContent);
break;
case Accessibility.ProtectedAndInternal:
interestingTypes = GetInterestingTypesProtected(context, searchScope.TopLevelTypeDefinition)
.Intersect(GetInterestingTypesInternal(context, searchScope.TopLevelTypeDefinition.ProjectContent));
interestingTypes = GetInterestingTypesProtected(allTypes, context, searchScope.TopLevelTypeDefinition)
.Intersect(GetInterestingTypesInternal(allTypes, context, searchScope.TopLevelTypeDefinition.ProjectContent));
break;
case Accessibility.ProtectedOrInternal:
interestingTypes = GetInterestingTypesProtected(context, searchScope.TopLevelTypeDefinition)
.Union(GetInterestingTypesInternal(context, searchScope.TopLevelTypeDefinition.ProjectContent));
interestingTypes = GetInterestingTypesProtected(allTypes, context, searchScope.TopLevelTypeDefinition)
.Union(GetInterestingTypesInternal(allTypes, context, searchScope.TopLevelTypeDefinition.ProjectContent));
break;
default:
interestingTypes = context.GetTypes();
interestingTypes = allTypes;
break;
}
} else {
interestingTypes = context.GetTypes();
interestingTypes = allTypes;
}
return (from typeDef in interestingTypes
from part in typeDef.GetParts()
where part.ParsedFile != null
select part.ParsedFile.FileName
).Distinct(Platform.FileNameComparer);
).Distinct(Platform.FileNameComparer).ToList();
}
IEnumerable<ITypeDefinition> GetInterestingTypesProtected(ITypeResolveContext context, ITypeDefinition referencedTypeDefinition)
IEnumerable<ITypeDefinition> GetInterestingTypesProtected(IEnumerable<ITypeDefinition> allTypes, ITypeResolveContext context, ITypeDefinition referencedTypeDefinition)
{
return referencedTypeDefinition.GetSubTypeDefinitions(context);
return allTypes.Where(t => t.IsDerivedFrom(referencedTypeDefinition, context));
}
IEnumerable<ITypeDefinition> GetInterestingTypesInternal(ITypeResolveContext context, IProjectContent referencedProjectContent)
IEnumerable<ITypeDefinition> GetInterestingTypesInternal(IEnumerable<ITypeDefinition> allTypes, ITypeResolveContext context, IProjectContent referencedProjectContent)
{
return context.GetTypes().Where(t => referencedProjectContent.InternalsVisibleTo(t.ProjectContent, context));
return allTypes.Where(t => referencedProjectContent.InternalsVisibleTo(t.ProjectContent, context));
}
#endregion
@ -304,7 +300,7 @@ namespace ICSharpCode.NRefactory.CSharp.Resolver @@ -304,7 +300,7 @@ namespace ICSharpCode.NRefactory.CSharp.Resolver
throw new ArgumentNullException("compilationUnit");
if (context == null)
throw new ArgumentNullException("context");
cancellationToken.ThrowIfCancellationRequested();
this.CancellationToken.ThrowIfCancellationRequested();
if (searchScopes.Count == 0)
return;
foreach (SearchScope scope in searchScopes) {
@ -318,7 +314,7 @@ namespace ICSharpCode.NRefactory.CSharp.Resolver @@ -318,7 +314,7 @@ namespace ICSharpCode.NRefactory.CSharp.Resolver
else
navigator = new CompositeResolveVisitorNavigator(searchScopes.ToArray());
navigator = new DetectSkippableNodesNavigator(navigator, compilationUnit);
CSharpResolver resolver = new CSharpResolver(ctx, cancellationToken);
CSharpResolver resolver = new CSharpResolver(ctx, this.CancellationToken);
ResolveVisitor v = new ResolveVisitor(resolver, parsedFile, navigator);
v.Scan(compilationUnit);
}

5
src/Libraries/NRefactory/ICSharpCode.NRefactory/CSharp/Resolver/LocalResolveResult.cs

@ -68,5 +68,10 @@ namespace ICSharpCode.NRefactory.CSharp.Resolver @@ -68,5 +68,10 @@ namespace ICSharpCode.NRefactory.CSharp.Resolver
{
return string.Format("[LocalResolveResult {0}]", variable);
}
public override DomRegion GetDefinitionRegion()
{
return variable.Region;
}
}
}

5
src/Libraries/NRefactory/ICSharpCode.NRefactory/CSharp/Resolver/MemberResolveResult.cs

@ -92,5 +92,10 @@ namespace ICSharpCode.NRefactory.CSharp.Resolver @@ -92,5 +92,10 @@ namespace ICSharpCode.NRefactory.CSharp.Resolver
{
return string.Format("[{0} {1}]", GetType().Name, member);
}
public override DomRegion GetDefinitionRegion()
{
return member.Region;
}
}
}

2
src/Libraries/NRefactory/ICSharpCode.NRefactory/CSharp/Resolver/ResolveAtLocation.cs

@ -32,6 +32,8 @@ namespace ICSharpCode.NRefactory.CSharp.Resolver @@ -32,6 +32,8 @@ namespace ICSharpCode.NRefactory.CSharp.Resolver
CancellationToken cancellationToken = default(CancellationToken))
{
AstNode node = cu.GetNodeAt(location);
if (node == null)
return null;
AstNode resolvableNode;
if (node is Identifier) {
resolvableNode = node.Parent;

5
src/Libraries/NRefactory/ICSharpCode.NRefactory/CSharp/Resolver/ResolveResult.cs

@ -63,5 +63,10 @@ namespace ICSharpCode.NRefactory.CSharp.Resolver @@ -63,5 +63,10 @@ namespace ICSharpCode.NRefactory.CSharp.Resolver
{
return Enumerable.Empty<ResolveResult>();
}
public virtual DomRegion GetDefinitionRegion()
{
return DomRegion.Empty;
}
}
}

9
src/Libraries/NRefactory/ICSharpCode.NRefactory/CSharp/Resolver/TypeResolveResult.cs

@ -30,5 +30,14 @@ namespace ICSharpCode.NRefactory.CSharp.Resolver @@ -30,5 +30,14 @@ namespace ICSharpCode.NRefactory.CSharp.Resolver
: base(type)
{
}
public override DomRegion GetDefinitionRegion()
{
ITypeDefinition def = this.Type.GetDefinition();
if (def != null)
return def.Region;
else
return DomRegion.Empty;
}
}
}

32
src/Main/Base/Project/ICSharpCode.SharpDevelop.addin

@ -1658,7 +1658,7 @@ @@ -1658,7 +1658,7 @@
label = "${res:SharpDevelop.Refactoring.FindReferences}"
shortcut = "F12"
icon="Icons.16x16.SelectionArrow"
class = "ICSharpCode.SharpDevelop.Editor.Commands.FindReferences"/>
class = "ICSharpCode.SharpDevelop.Editor.Commands.FindReferencesCommand"/>
<MenuItem id = "FindDerivedOrOverridesClasses"
label = "${res:SharpDevelop.Refactoring.FindDerivedClassesOrOverridesCommand}"
@ -1806,20 +1806,8 @@ @@ -1806,20 +1806,8 @@
class = "ICSharpCode.SharpDevelop.ShellExecuteDisplayBinding" />
</Path>
<Path name = "/SharpDevelop/ViewContent/DefaultTextEditor/ClassMemberContextMenu">
<MenuItem id = "MenuBuilder" type="Builder" class = "ICSharpCode.SharpDevelop.Editor.Commands.ClassMemberMenuBuilder" />
</Path>
<Path name = "/SharpDevelop/ViewContent/DefaultTextEditor/ClassBookmarkContextMenu">
<MenuItem id = "MenuBuilder" type="Builder" class = "ICSharpCode.SharpDevelop.Editor.Commands.ClassBookmarkSubmenuBuilder" />
</Path>
<Path name = "/SharpDevelop/Pads/ClassBrowser/MemberContextMenu">
<MenuItem id = "MenuBuilder" type="Builder" class = "ICSharpCode.SharpDevelop.Editor.Commands.ClassMemberMenuBuilder" />
</Path>
<Path name = "/SharpDevelop/Pads/ClassBrowser/ClassContextMenu">
<MenuItem id = "MenuBuilder" type="Builder" class = "ICSharpCode.SharpDevelop.Editor.Commands.ClassBookmarkSubmenuBuilder" />
<Path name = "/SharpDevelop/ViewContent/TextEditor/EntityContextMenu">
</Path>
<Path name = "/SharpDevelop/ViewContent/DefaultTextEditor/Refactoring/Common">
@ -1881,20 +1869,6 @@ @@ -1881,20 +1869,6 @@
class = "ICSharpCode.SharpDevelop.Editor.Commands.IndentSelection" />
</Path>
<!-- DefaultTextEditor=old editor. TODO: remove this -->
<Path name = "/SharpDevelop/ViewContent/DefaultTextEditor/ContextMenu">
<Include id="DefaultEditor" path="/SharpDevelop/ViewContent/TextEditor/ContextMenu"/>
<MenuItem id = "FileMode" label = "${res:XML.TextAreaContextMenu.FileMode}" type="Menu">
<MenuItem id = "HighlightBuilder" type="Builder" class = "ICSharpCode.SharpDevelop.DefaultEditor.Commands.HighlightingTypeBuilder" />
</MenuItem>
<MenuItem id = "Separator3" type = "Separator" />
<MenuItem id = "Options"
label = "${res:XML.TextAreaContextMenu.BufferOptions}"
icon = "Icons.16x16.PropertiesIcon"
class ="ICSharpCode.SharpDevelop.DefaultEditor.Commands.ShowBufferOptions"/>
</Path>
<Path name = "/SharpDevelop/ViewContent/DefaultTextEditor/ToolTips">
<Class id = "DefaultDebuggerToolTips" class = "ICSharpCode.SharpDevelop.Debugging.DebuggerTextAreaToolTipProvider"/>
</Path>

5
src/Main/Base/Project/ICSharpCode.SharpDevelop.csproj

@ -113,7 +113,7 @@ @@ -113,7 +113,7 @@
<Compile Include="Src\Editor\Commands\ClassMemberMenuBuilder.cs" />
<Compile Include="Src\Editor\Commands\FindBaseClasses.cs" />
<Compile Include="Src\Editor\Commands\FindDerivedClassesOrOverrides.cs" />
<Compile Include="Src\Editor\Commands\FindReferences.cs" />
<Compile Include="Src\Editor\Commands\FindReferencesCommand.cs" />
<Compile Include="Src\Editor\Commands\GotoLineNumber.cs" />
<Compile Include="Src\Editor\Commands\SymbolUnderCaretMenuCommand.cs" />
<Compile Include="Src\Editor\IDocumentBaseVersionProvider.cs" />
@ -366,6 +366,7 @@ @@ -366,6 +366,7 @@
<Compile Include="Src\Services\RefactoringService\ContextActions\IContextActionCache.cs" />
<Compile Include="Src\Services\RefactoringService\ContextActions\IContextActionsProvider.cs" />
<Compile Include="Src\Services\RefactoringService\ExtractInterfaceOptions.cs" />
<Compile Include="Src\Services\RefactoringService\FindReferenceService.cs" />
<Compile Include="Src\Services\RefactoringService\GoToClassAction.cs" />
<Compile Include="Src\Services\RefactoringService\GoToMemberAction.cs" />
<Compile Include="Src\Services\Tasks\ErrorPainter.cs" />
@ -670,7 +671,7 @@ @@ -670,7 +671,7 @@
<SubType>Component</SubType>
</Compile>
<Compile Include="Src\Bookmarks\BookmarkConverter.cs" />
<Compile Include="Src\Bookmarks\ClassMemberBookmark.cs" />
<Compile Include="Src\Bookmarks\EntityBookmark.cs" />
<Compile Include="Src\Services\RefactoringService\RefactoringService.cs" />
<Compile Include="Src\Services\RefactoringService\Reference.cs" />
<Compile Include="Src\Services\ProjectService\ParseableFileContentFinder.cs" />

128
src/Main/Base/Project/Src/Bookmarks/ClassMemberBookmark.cs

@ -1,128 +0,0 @@ @@ -1,128 +0,0 @@
// Copyright (c) AlphaSierraPapa for the SharpDevelop Team (for details please see \doc\copyright.txt)
// This code is distributed under the GNU LGPL (for details please see \doc\license.txt)
using System;
using System.Windows;
using System.Windows.Input;
using ICSharpCode.Core;
using ICSharpCode.Core.Presentation;
using ICSharpCode.NRefactory.TypeSystem;
namespace ICSharpCode.SharpDevelop.Bookmarks
{
/// <summary>
/// Bookmark used to give additional operations for class members.
/// Does not derive from SDBookmark because it is not stored in the central BookmarkManager,
/// but only in the document's BookmarkManager.
/// </summary>
public class ClassMemberBookmark : IBookmark
{
IMember member;
public IMember Member {
get {
return member;
}
}
public ClassMemberBookmark(IMember member)
{
this.member = member;
}
public const string ContextMenuPath = "/SharpDevelop/ViewContent/DefaultTextEditor/ClassMemberContextMenu";
public virtual IImage Image {
get { return ClassBrowserIconService.GetIcon(member); }
}
public int LineNumber {
get { return member.Region.BeginLine; }
}
public virtual void MouseDown(MouseButtonEventArgs e)
{
if (e.ChangedButton == MouseButton.Left) {
var f = AnalyticsMonitorService.TrackFeature("ICSharpCode.SharpDevelop.Bookmarks.ClassMemberBookmark.ShowContextMenu");
var ctx = MenuService.ShowContextMenu(e.Source as UIElement, this, ContextMenuPath);
ctx.Closed += delegate { f.EndTracking(); };
e.Handled = true;
}
}
public virtual void MouseUp(MouseButtonEventArgs e)
{
}
int IBookmark.ZOrder {
get { return -10; }
}
bool IBookmark.CanDragDrop {
get { return false; }
}
void IBookmark.Drop(int lineNumber)
{
throw new NotSupportedException();
}
}
public class ClassBookmark : IBookmark
{
ITypeDefinition @class;
public ITypeDefinition Class {
get {
return @class;
}
set {
@class = value;
}
}
public ClassBookmark(ITypeDefinition @class)
{
this.@class = @class;
}
public const string ContextMenuPath = "/SharpDevelop/ViewContent/DefaultTextEditor/ClassBookmarkContextMenu";
public virtual IImage Image {
get {
return ClassBrowserIconService.GetIcon(@class);
}
}
public int LineNumber {
get { return @class.Region.BeginLine; }
}
public virtual void MouseDown(MouseButtonEventArgs e)
{
if (e.ChangedButton == MouseButton.Left) {
var f = AnalyticsMonitorService.TrackFeature("ICSharpCode.SharpDevelop.Bookmarks.ClassBookmark.ShowContextMenu");
var ctx = MenuService.ShowContextMenu(e.Source as UIElement, this, ContextMenuPath);
ctx.Closed += delegate { f.EndTracking(); };
e.Handled = true;
}
}
public virtual void MouseUp(MouseButtonEventArgs e)
{
}
int IBookmark.ZOrder {
get { return -10; }
}
bool IBookmark.CanDragDrop {
get { return false; }
}
void IBookmark.Drop(int lineNumber)
{
throw new NotSupportedException();
}
}
}

70
src/Main/Base/Project/Src/Bookmarks/EntityBookmark.cs

@ -0,0 +1,70 @@ @@ -0,0 +1,70 @@
// Copyright (c) AlphaSierraPapa for the SharpDevelop Team (for details please see \doc\copyright.txt)
// This code is distributed under the GNU LGPL (for details please see \doc\license.txt)
using System;
using System.Windows;
using System.Windows.Input;
using ICSharpCode.Core;
using ICSharpCode.Core.Presentation;
using ICSharpCode.NRefactory.TypeSystem;
namespace ICSharpCode.SharpDevelop.Bookmarks
{
/// <summary>
/// Bookmark used to give additional operations for entities.
/// Does not derive from SDBookmark because it is not stored in the central BookmarkManager,
/// but only in the document's BookmarkManager.
/// </summary>
public class EntityBookmark : IBookmark
{
IEntity entity;
public IEntity Entity {
get {
return entity;
}
}
public EntityBookmark(IEntity entity)
{
this.entity = entity;
}
public const string ContextMenuPath = "/SharpDevelop/ViewContent/TextEditor/EntityContextMenu";
public virtual IImage Image {
get { return ClassBrowserIconService.GetIcon(entity); }
}
public int LineNumber {
get { return entity.Region.BeginLine; }
}
public virtual void MouseDown(MouseButtonEventArgs e)
{
if (e.ChangedButton == MouseButton.Left) {
var f = AnalyticsMonitorService.TrackFeature("ICSharpCode.SharpDevelop.Bookmarks.EntityBookmark.ShowContextMenu");
var ctx = MenuService.ShowContextMenu(e.Source as UIElement, this, ContextMenuPath);
ctx.Closed += delegate { f.EndTracking(); };
e.Handled = true;
}
}
public virtual void MouseUp(MouseButtonEventArgs e)
{
}
int IBookmark.ZOrder {
get { return -10; }
}
bool IBookmark.CanDragDrop {
get { return false; }
}
void IBookmark.Drop(int lineNumber)
{
throw new NotSupportedException();
}
}
}

34
src/Main/Base/Project/Src/Editor/Commands/FindReferences.cs

@ -1,34 +0,0 @@ @@ -1,34 +0,0 @@
// Copyright (c) AlphaSierraPapa for the SharpDevelop Team (for details please see \doc\copyright.txt)
// This code is distributed under the GNU LGPL (for details please see \doc\license.txt)
/*
using System;
using ICSharpCode.SharpDevelop.Dom;
using ICSharpCode.SharpDevelop.Refactoring;
namespace ICSharpCode.SharpDevelop.Editor.Commands
{
/// <summary>
/// Description of FindReferences.
/// </summary>
public class FindReferences : SymbolUnderCaretMenuCommand
{
protected override void RunImpl(ITextEditor editor, int offset, ResolveResult symbol)
{
var classUnderCaret = GetClass(symbol);
if (classUnderCaret != null) {
FindReferencesAndRenameHelper.RunFindReferences(classUnderCaret);
return;
}
var memberUnderCaret = GetMember(symbol);
if (memberUnderCaret != null)
{
FindReferencesAndRenameHelper.RunFindReferences(memberUnderCaret);
return;
}
if (symbol is LocalResolveResult) {
FindReferencesAndRenameHelper.RunFindReferences((LocalResolveResult)symbol);
}
}
}
}
*/

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

@ -0,0 +1,29 @@ @@ -0,0 +1,29 @@
// Copyright (c) AlphaSierraPapa for the SharpDevelop Team (for details please see \doc\copyright.txt)
// This code is distributed under the GNU LGPL (for details please see \doc\license.txt)
using System;
using ICSharpCode.NRefactory.CSharp.Resolver;
using ICSharpCode.SharpDevelop.Refactoring;
namespace ICSharpCode.SharpDevelop.Editor.Commands
{
/// <summary>
/// Runs the find references command.
/// </summary>
public class FindReferencesCommand : SymbolUnderCaretMenuCommand
{
protected override void RunImpl(ITextEditor editor, int offset, ResolveResult symbol)
{
var entity = GetEntity(symbol);
if (entity != null) {
FindReferencesAndRenameHelper.RunFindReferences(entity);
return;
}
if (symbol is LocalResolveResult) {
#warning Find References not implemented for locals
throw new NotImplementedException();
//FindReferencesAndRenameHelper.RunFindReferences((LocalResolveResult)symbol);
}
}
}
}

22
src/Main/Base/Project/Src/Editor/Commands/GoToDefinition.cs

@ -4,13 +4,14 @@ @@ -4,13 +4,14 @@
using System;
using System.IO;
using ICSharpCode.Core;
using ICSharpCode.NRefactory.CSharp.Resolver;
using ICSharpCode.NRefactory.TypeSystem;
using ICSharpCode.SharpDevelop.Gui;
using ICSharpCode.SharpDevelop.Project;
using Mono.Cecil;
namespace ICSharpCode.SharpDevelop.Editor.Commands
{
/*
public class GoToDefinition : SymbolUnderCaretMenuCommand
{
protected override void RunImpl(ITextEditor editor, int offset, ResolveResult symbol)
@ -18,29 +19,22 @@ namespace ICSharpCode.SharpDevelop.Editor.Commands @@ -18,29 +19,22 @@ namespace ICSharpCode.SharpDevelop.Editor.Commands
if (symbol == null)
return;
FilePosition pos = symbol.GetDefinitionPosition();
if (pos.IsEmpty) {
IEntity entity;
if (symbol is MemberResolveResult) {
entity = ((MemberResolveResult)symbol).ResolvedMember;
} else if (symbol is TypeResolveResult) {
entity = ((TypeResolveResult)symbol).ResolvedClass;
} else {
entity = null;
}
DomRegion pos = symbol.GetDefinitionRegion();
if (string.IsNullOrEmpty(pos.FileName)) {
IEntity entity = GetEntity(symbol);
if (entity != null) {
NavigationService.NavigateTo(entity);
}
} else {
try {
if (pos.Position.IsEmpty)
if (pos.Begin.IsEmpty)
FileService.OpenFile(pos.FileName);
else
FileService.JumpToFilePosition(pos.FileName, pos.Line, pos.Column);
FileService.JumpToFilePosition(pos.FileName, pos.BeginLine, pos.BeginColumn);
} catch (Exception ex) {
MessageService.ShowException(ex, "Error jumping to '" + pos.FileName + "'.");
}
}
}
} */
}
}

38
src/Main/Base/Project/Src/Editor/Commands/SymbolUnderCaretMenuCommand.cs

@ -1,10 +1,12 @@ @@ -1,10 +1,12 @@
// Copyright (c) AlphaSierraPapa for the SharpDevelop Team (for details please see \doc\copyright.txt)
// This code is distributed under the GNU LGPL (for details please see \doc\license.txt)
/*
using System;
using ICSharpCode.Core;
using ICSharpCode.SharpDevelop.Dom;
using ICSharpCode.NRefactory.CSharp.Resolver;
using ICSharpCode.NRefactory.TypeSystem;
using ICSharpCode.SharpDevelop.Gui;
using ICSharpCode.SharpDevelop.Parser;
namespace ICSharpCode.SharpDevelop.Editor.Commands
{
@ -17,33 +19,23 @@ namespace ICSharpCode.SharpDevelop.Editor.Commands @@ -17,33 +19,23 @@ namespace ICSharpCode.SharpDevelop.Editor.Commands
{
ITextEditorProvider editorProvider = WorkbenchSingleton.Workbench.ActiveViewContent as ITextEditorProvider;
if (editorProvider != null) {
Run(editorProvider.TextEditor, editorProvider.TextEditor.Caret.Offset);
ITextEditor editor = editorProvider.TextEditor;
var resolveResult = ParserService.Resolve(editor.FileName, editor.Caret.Location, editor.Document);
RunImpl(editor, editor.Caret.Offset, resolveResult);
}
}
public void Run(ITextEditor editor, int caretOffset)
{
var resolveResult = ParserService.Resolve(caretOffset, editor.Document, editor.FileName);
RunImpl(editor, caretOffset, resolveResult);
}
protected abstract void RunImpl(ITextEditor editor, int caretOffset, ResolveResult symbol);
public IClass GetClass(ResolveResult symbol)
protected IEntity GetEntity(ResolveResult symbol)
{
if (symbol == null || !(symbol is TypeResolveResult)) {
return null;
}
return ((TypeResolveResult)symbol).ResolvedClass;
}
public IMember GetMember(ResolveResult symbol)
{
if (symbol == null || !(symbol is MemberResolveResult)) {
return null;
}
return ((MemberResolveResult)symbol).ResolvedMember;
TypeResolveResult trr = symbol as TypeResolveResult;
if (trr != null)
return trr.Type.GetDefinition();
MemberResolveResult mrr = symbol as MemberResolveResult;
if (mrr != null)
return mrr.Member.MemberDefinition;
return null;
}
}
}
*/

57
src/Main/Base/Project/Src/Editor/Search/SearchResultMatch.cs

@ -11,8 +11,10 @@ namespace ICSharpCode.SharpDevelop.Editor.Search @@ -11,8 +11,10 @@ namespace ICSharpCode.SharpDevelop.Editor.Search
public class SearchResultMatch
{
ProvidedDocumentInformation providedDocumentInformation;
int offset;
int length;
int offset;
int length;
TextLocation startLocation;
TextLocation endLocation;
public ProvidedDocumentInformation ProvidedDocumentInformation {
set { providedDocumentInformation = value; }
@ -26,16 +28,36 @@ namespace ICSharpCode.SharpDevelop.Editor.Search @@ -26,16 +28,36 @@ namespace ICSharpCode.SharpDevelop.Editor.Search
public int Offset {
get {
if (offset < 0)
offset = providedDocumentInformation.Document.GetOffset(startLocation);
return offset;
}
}
public int Length {
get {
if (length < 0)
length = providedDocumentInformation.Document.GetOffset(endLocation) - this.Offset;
return length;
}
}
public TextLocation StartLocation {
get {
if (startLocation.IsEmpty)
startLocation = providedDocumentInformation.Document.GetLocation(offset);
return startLocation;
}
}
public TextLocation EndLocation {
get {
if (endLocation.IsEmpty)
endLocation = providedDocumentInformation.Document.GetLocation(offset + length);
return endLocation;
}
}
public virtual string TransformReplacePattern(string pattern)
{
return pattern;
@ -69,11 +91,27 @@ namespace ICSharpCode.SharpDevelop.Editor.Search @@ -69,11 +91,27 @@ namespace ICSharpCode.SharpDevelop.Editor.Search
this.length = length;
}
public SearchResultMatch(ProvidedDocumentInformation providedDocumentInformation, TextLocation startLocation, TextLocation endLocation)
{
if (providedDocumentInformation == null)
throw new ArgumentNullException("providedDocumentInformation");
if (length < 0)
throw new ArgumentOutOfRangeException("length");
this.offset = -1;
this.length = -1;
this.providedDocumentInformation = providedDocumentInformation;
this.startLocation = startLocation;
this.endLocation = endLocation;
}
[Obsolete("Use the StartLocation property instead")]
public virtual TextLocation GetStartPosition(IDocument document)
{
return document.GetLocation(Math.Min(Offset, document.TextLength));
}
[Obsolete("Use the EndLocation property instead")]
public virtual TextLocation GetEndPosition(IDocument document)
{
return document.GetLocation(Math.Min(Offset + Length, document.TextLength));
@ -98,18 +136,6 @@ namespace ICSharpCode.SharpDevelop.Editor.Search @@ -98,18 +136,6 @@ namespace ICSharpCode.SharpDevelop.Editor.Search
public class SimpleSearchResultMatch : SearchResultMatch
{
TextLocation position;
public override TextLocation GetStartPosition(IDocument doc)
{
return position;
}
public override TextLocation GetEndPosition(IDocument doc)
{
return position;
}
string displayText;
public override string DisplayText {
@ -119,9 +145,8 @@ namespace ICSharpCode.SharpDevelop.Editor.Search @@ -119,9 +145,8 @@ namespace ICSharpCode.SharpDevelop.Editor.Search
}
public SimpleSearchResultMatch(ProvidedDocumentInformation providedDocumentInformation, string displayText, TextLocation position)
: base(providedDocumentInformation, 0, 0)
: base(providedDocumentInformation, position, position)
{
this.position = position;
this.displayText = displayText;
}
}

5
src/Main/Base/Project/Src/Project/AbstractProject.cs

@ -640,5 +640,10 @@ namespace ICSharpCode.SharpDevelop.Project @@ -640,5 +640,10 @@ namespace ICSharpCode.SharpDevelop.Project
{
return new CSharpAmbience();
}
public virtual Refactoring.ISymbolSearch PrepareSymbolSearch(IEntity entity)
{
return null;
}
}
}

12
src/Main/Base/Project/Src/Project/IProject.cs

@ -218,7 +218,7 @@ namespace ICSharpCode.SharpDevelop.Project @@ -218,7 +218,7 @@ namespace ICSharpCode.SharpDevelop.Project
/// Gets project specific properties.
/// </summary>
Properties ProjectSpecificProperties { get; }
*/
*/
/// <summary>
/// Starts the project.
@ -316,6 +316,16 @@ namespace ICSharpCode.SharpDevelop.Project @@ -316,6 +316,16 @@ namespace ICSharpCode.SharpDevelop.Project
/// Never returns null.
/// </remarks>
IAmbience GetAmbience();
/// <summary>
/// Prepares searching for references to the specified entity.
/// This method should calculate the amount of work to be done (e.g. using the number of files to search through),
/// it should not perform the actual search.
/// </summary>
/// <returns>
/// An object that can be used to perform the search; or null if this project does not support symbol searches.
/// </returns>
Refactoring.ISymbolSearch PrepareSymbolSearch(IEntity entity);
}
/// <summary>

83
src/Main/Base/Project/Src/Services/RefactoringService/FindReferenceService.cs

@ -0,0 +1,83 @@ @@ -0,0 +1,83 @@
// Copyright (c) AlphaSierraPapa for the SharpDevelop Team (for details please see \doc\copyright.txt)
// This code is distributed under the GNU LGPL (for details please see \doc\license.txt)
using System;
using System.Collections.Generic;
using System.Threading;
using ICSharpCode.Core;
using ICSharpCode.NRefactory.TypeSystem;
using ICSharpCode.SharpDevelop.Gui;
using ICSharpCode.SharpDevelop.Parser;
using ICSharpCode.SharpDevelop.Project;
namespace ICSharpCode.SharpDevelop.Refactoring
{
/// <summary>
/// Description of FindReferenceService.
/// </summary>
public static class FindReferenceService
{
public static void FindReferences(IEntity entity, IProgressMonitor progressMonitor, Action<Reference> callback)
{
if (ParserService.LoadSolutionProjectsThreadRunning) {
if (progressMonitor != null) progressMonitor.ShowingDialog = true;
MessageService.ShowMessage("${res:SharpDevelop.Refactoring.LoadSolutionProjectsThreadRunning}");
if (progressMonitor != null) progressMonitor.ShowingDialog = false;
return;
}
if (ProjectService.OpenSolution == null)
return;
List<ISymbolSearch> symbolSearches = new List<ISymbolSearch>();
double totalWorkAmount = 0;
foreach (IProject project in ProjectService.OpenSolution.Projects) {
progressMonitor.CancellationToken.ThrowIfCancellationRequested();
ISymbolSearch symbolSearch = project.PrepareSymbolSearch(entity);
if (symbolSearch != null) {
symbolSearches.Add(symbolSearch);
totalWorkAmount += symbolSearch.WorkAmount;
}
}
if (totalWorkAmount < 1)
totalWorkAmount = 1;
double workDone = 0;
ParseableFileContentFinder parseableFileContentFinder = new ParseableFileContentFinder();
foreach (ISymbolSearch s in symbolSearches) {
progressMonitor.CancellationToken.ThrowIfCancellationRequested();
using (var childProgressMonitor = progressMonitor.CreateSubTask(s.WorkAmount / totalWorkAmount)) {
s.FindReferences(new SymbolSearchArgs(childProgressMonitor, parseableFileContentFinder), callback);
}
workDone += s.WorkAmount;
progressMonitor.Progress = workDone / totalWorkAmount;
}
}
}
public class SymbolSearchArgs
{
public IProgressMonitor ProgressMonitor { get; private set; }
public CancellationToken CancellationToken {
get { return this.ProgressMonitor.CancellationToken; }
}
public ParseableFileContentFinder ParseableFileContentFinder { get; private set; }
public SymbolSearchArgs(IProgressMonitor progressMonitor, ParseableFileContentFinder parseableFileContentFinder)
{
if (progressMonitor == null)
throw new ArgumentNullException("progressMonitor");
if (parseableFileContentFinder == null)
throw new ArgumentNullException("parseableFileContentFinder");
this.ProgressMonitor = progressMonitor;
this.ParseableFileContentFinder = parseableFileContentFinder;
}
}
public interface ISymbolSearch
{
double WorkAmount { get; }
void FindReferences(SymbolSearchArgs searchArguments, Action<Reference> callback);
}
}

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

@ -5,18 +5,21 @@ using System; @@ -5,18 +5,21 @@ using System;
using System.Collections.Generic;
using System.IO;
using System.Text;
using ICSharpCode.Core;
using ICSharpCode.Editor;
using ICSharpCode.NRefactory.TypeSystem;
using ICSharpCode.SharpDevelop.Editor;
using ICSharpCode.SharpDevelop.Editor.Search;
using ICSharpCode.SharpDevelop.Gui;
using ICSharpCode.SharpDevelop.Parser;
using ICSharpCode.SharpDevelop.Project;
/*
namespace ICSharpCode.SharpDevelop.Refactoring
{
public static class FindReferencesAndRenameHelper
{
#region Extract Interface
/* Reimplement extract interface and put the code somewhere else - this isn't the place for C#-specific refactorings
public static void ExtractInterface(IClass c)
{
ExtractInterfaceOptions extractInterface = new ExtractInterfaceOptions(c);
@ -106,10 +109,12 @@ namespace ICSharpCode.SharpDevelop.Refactoring @@ -106,10 +109,12 @@ namespace ICSharpCode.SharpDevelop.Refactoring
editable.TextEditor.Document.Text = modifiedClassCode;
}
}
*/
#endregion
/*
#region Rename Class
public static void RenameClass(IClass c)
public static void RenameClass(ITypeDefinition c)
{
string newName = MessageService.ShowInputBox("${res:SharpDevelop.Refactoring.Rename}", "${res:SharpDevelop.Refactoring.RenameClassText}", c.Name);
if (!FindReferencesAndRenameHelper.CheckName(newName, c.Name)) return;
@ -120,19 +125,19 @@ namespace ICSharpCode.SharpDevelop.Refactoring @@ -120,19 +125,19 @@ namespace ICSharpCode.SharpDevelop.Refactoring
}
}
public static void RenameClass(IClass c, string newName)
public static void RenameClass(ITypeDefinition 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
c = c.GetDefinition(); // 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)) {
foreach (ITypeDefinition part in c.GetParts()) {
AddDeclarationAsReference(list, part.CompilationUnit.FileName, part.Region, part.Name);
}
@ -146,16 +151,6 @@ namespace ICSharpCode.SharpDevelop.Refactoring @@ -146,16 +151,6 @@ namespace ICSharpCode.SharpDevelop.Refactoring
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)
@ -233,6 +228,7 @@ namespace ICSharpCode.SharpDevelop.Refactoring @@ -233,6 +228,7 @@ namespace ICSharpCode.SharpDevelop.Refactoring
return foundProperty;
}
#endregion
*/
#region Common helper functions
public static ProvidedDocumentInformation GetDocumentInformation(string fileName)
@ -247,33 +243,22 @@ namespace ICSharpCode.SharpDevelop.Refactoring @@ -247,33 +243,22 @@ namespace ICSharpCode.SharpDevelop.Refactoring
}
}
}
ITextBuffer fileContent = ParserService.GetParseableFileContent(fileName);
ITextSource fileContent = ParserService.GetParseableFileContent(fileName);
return new ProvidedDocumentInformation(fileContent, fileName, 0);
}
public static bool IsReadOnly(IClass c)
public static bool IsReadOnly(ITypeDefinition c)
{
return c.CompilationUnit.FileName == null || c.GetCompoundClass().IsSynthetic;
return c.ParsedFile == null || c.IsSynthetic || c.GetDefinition().IsSynthetic;
}
public static ITextEditor JumpToDefinition(IMember member)
[Obsolete("Use NavigationService.NavigateTo() instead")]
public static void JumpToDefinition(IMember member)
{
IViewContent viewContent = null;
ICompilationUnit cu = member.DeclaringType.CompilationUnit;
if (cu != null) {
string fileName = cu.FileName;
if (fileName != null) {
if (!member.Region.IsEmpty) {
viewContent = FileService.JumpToFilePosition(fileName, member.Region.BeginLine, member.Region.BeginColumn);
} else {
FileService.OpenFile(fileName);
}
}
}
ITextEditorProvider tecp = viewContent as ITextEditorProvider;
return (tecp == null) ? null : tecp.TextEditor;
NavigationService.NavigateTo(member);
}
/*
public static ITextEditor OpenDefinitionFile(IMember member, bool switchTo)
{
IViewContent viewContent = null;
@ -362,19 +347,21 @@ namespace ICSharpCode.SharpDevelop.Refactoring @@ -362,19 +347,21 @@ namespace ICSharpCode.SharpDevelop.Refactoring
}
}
}
*/
public static void ShowAsSearchResults(string title, List<Reference> list)
{
if (list == null) return;
List<SearchResultMatch> results = new List<SearchResultMatch>(list.Count);
foreach (Reference r in list) {
SearchResultMatch res = new SearchResultMatch(GetDocumentInformation(r.FileName), r.Offset, r.Length);
SearchResultMatch res = new SearchResultMatch(GetDocumentInformation(r.FileName), r.Region.Begin, r.Region.End);
results.Add(res);
}
SearchResultsPad.Instance.ShowSearchResults(title, results);
SearchResultsPad.Instance.BringToFront();
}
/*
sealed class FileView {
public IViewContent ViewContent;
public OpenedFile OpenedFile;
@ -429,7 +416,9 @@ namespace ICSharpCode.SharpDevelop.Refactoring @@ -429,7 +416,9 @@ namespace ICSharpCode.SharpDevelop.Refactoring
}
}
}
*/
/* TODO: these are refactorings and don't belong here
public static void MoveClassToFile(IClass c, string newFileName)
{
LanguageProperties language = c.ProjectContent.Language;
@ -513,33 +502,25 @@ namespace ICSharpCode.SharpDevelop.Refactoring @@ -513,33 +502,25 @@ namespace ICSharpCode.SharpDevelop.Refactoring
if (tecp == null) return null;
return tecp.TextEditor.Document;
}
*/
#endregion
#region Find references
public static void RunFindReferences(IMember member)
{
string memberName = member.DeclaringType.Name + "." + member.Name;
using (AsynchronousWaitDialog monitor = AsynchronousWaitDialog.ShowWaitDialog("${res:SharpDevelop.Refactoring.FindReferences}", true)) {
FindReferencesAndRenameHelper.ShowAsSearchResults(
StringParser.Parse("${res:SharpDevelop.Refactoring.ReferencesTo}",
new StringTagPair("Name", memberName)),
RefactoringService.FindReferences(member, monitor));
}
}
public static void RunFindReferences(IClass c)
public static void RunFindReferences(IEntity entity)
{
string entityName = (entity.DeclaringTypeDefinition != null ? entity.DeclaringTypeDefinition.Name + "." + entity.Name : entity.Name);
using (AsynchronousWaitDialog monitor = AsynchronousWaitDialog.ShowWaitDialog("${res:SharpDevelop.Refactoring.FindReferences}", true)) {
List<Reference> references = new List<Reference>();
FindReferenceService.FindReferences(entity, monitor, references.Add);
FindReferencesAndRenameHelper.ShowAsSearchResults(
StringParser.Parse("${res:SharpDevelop.Refactoring.ReferencesTo}",
new StringTagPair("Name", c.Name)),
RefactoringService.FindReferences(c, monitor)
);
new StringTagPair("Name", entityName)),
references);
}
}
/*
public static void RunFindReferences(LocalResolveResult local)
{
FindReferencesAndRenameHelper.ShowAsSearchResults(
@ -548,14 +529,15 @@ namespace ICSharpCode.SharpDevelop.Refactoring @@ -548,14 +529,15 @@ namespace ICSharpCode.SharpDevelop.Refactoring
RefactoringService.FindReferences(local, null)
);
}
*/
public static ICSharpCode.Core.WinForms.MenuCommand MakeFindReferencesMenuCommand(EventHandler handler)
{
return new ICSharpCode.Core.WinForms.MenuCommand("${res:SharpDevelop.Refactoring.FindReferencesCommand}", handler) {
ShortcutKeys = System.Windows.Forms.Keys.F12
};
}
// public static ICSharpCode.Core.WinForms.MenuCommand MakeFindReferencesMenuCommand(EventHandler handler)
// {
// return new ICSharpCode.Core.WinForms.MenuCommand("${res:SharpDevelop.Refactoring.FindReferencesCommand}", handler) {
// ShortcutKeys = System.Windows.Forms.Keys.F12
// };
// }
#endregion
}
}
*/

49
src/Main/Base/Project/Src/Services/RefactoringService/Reference.cs

@ -2,7 +2,10 @@ @@ -2,7 +2,10 @@
// This code is distributed under the GNU LGPL (for details please see \doc\license.txt)
using System;
/*
using ICSharpCode.Core;
using ICSharpCode.NRefactory.TypeSystem;
using ICSharpCode.NRefactory.CSharp.Resolver;
namespace ICSharpCode.SharpDevelop.Refactoring
{
/// <summary>
@ -10,49 +13,29 @@ namespace ICSharpCode.SharpDevelop.Refactoring @@ -10,49 +13,29 @@ namespace ICSharpCode.SharpDevelop.Refactoring
/// </summary>
public class Reference
{
string fileName;
int offset, length;
string expression;
DomRegion region;
ResolveResult resolveResult;
public Reference(string fileName, int offset, int length, string expression, ResolveResult resolveResult)
public Reference(DomRegion region, ResolveResult resolveResult)
{
this.fileName = fileName;
this.offset = offset;
this.length = length;
this.expression = expression;
if (region.IsEmpty)
throw new ArgumentException("Region must not be empty");
if (resolveResult == null)
throw new ArgumentNullException("resolveResult");
this.region = region;
this.resolveResult = resolveResult;
}
public string FileName {
get {
return fileName;
}
}
public int Offset {
get {
return offset;
}
}
public int Length {
get {
return length;
}
public FileName FileName {
get { return FileName.Create(region.FileName); }
}
public string Expression {
get {
return expression;
}
public DomRegion Region {
get { return region; }
}
public ResolveResult ResolveResult {
get {
return resolveResult;
}
get { return resolveResult; }
}
}
}
*/
Loading…
Cancel
Save