diff --git a/SharpDevelop.sln b/SharpDevelop.sln
index 4efb7acedd..a16a1ddb26 100644
--- a/SharpDevelop.sln
+++ b/SharpDevelop.sln
@@ -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", "{
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", "
{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
{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
{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
diff --git a/src/AddIns/BackendBindings/CSharpBinding/Project/CSharpBinding.csproj b/src/AddIns/BackendBindings/CSharpBinding/Project/CSharpBinding.csproj
index 828f87922c..80f1d5a552 100644
--- a/src/AddIns/BackendBindings/CSharpBinding/Project/CSharpBinding.csproj
+++ b/src/AddIns/BackendBindings/CSharpBinding/Project/CSharpBinding.csproj
@@ -67,6 +67,7 @@
Form
+
diff --git a/src/AddIns/BackendBindings/CSharpBinding/Project/Src/Parser/CSharpSymbolSearch.cs b/src/AddIns/BackendBindings/CSharpBinding/Project/Src/Parser/CSharpSymbolSearch.cs
new file mode 100644
index 0000000000..9fe355219f
--- /dev/null
+++ b/src/AddIns/BackendBindings/CSharpBinding/Project/Src/Parser/CSharpSymbolSearch.cs
@@ -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
+{
+ ///
+ /// C# backend implementation for 'find references'.
+ ///
+ public class CSharpSymbolSearch : ISymbolSearch
+ {
+ IProject project;
+ FindReferences fr = new FindReferences();
+ IList searchScopes;
+ IList[] interestingFileNames;
+ int workAmount;
+ double workAmountInverse;
+ Action callback;
+ FileName currentFileName;
+
+ public CSharpSymbolSearch(IProject project, IEntity entity)
+ {
+ this.project = project;
+ searchScopes = fr.GetSearchScopes(entity);
+ interestingFileNames = new IList[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 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();
+ if (parsedFile == null || cu == null)
+ return;
+ fr.FindReferencesInFile(searchScope, parsedFile, cu, project.TypeResolveContext);
+ }
+ }
+}
diff --git a/src/AddIns/BackendBindings/CSharpBinding/Project/Src/Project/CSharpProject.cs b/src/AddIns/BackendBindings/CSharpBinding/Project/Src/Project/CSharpProject.cs
index e57f9459b3..c1a628956e 100644
--- a/src/AddIns/BackendBindings/CSharpBinding/Project/Src/Project/CSharpProject.cs
+++ b/src/AddIns/BackendBindings/CSharpBinding/Project/Src/Project/CSharpProject.cs
@@ -143,5 +143,10 @@ namespace CSharpBinding
}
}
*/
+
+ public override ICSharpCode.SharpDevelop.Refactoring.ISymbolSearch PrepareSymbolSearch(ICSharpCode.NRefactory.TypeSystem.IEntity entity)
+ {
+ return new CSharpSymbolSearch(this, entity);
+ }
}
}
diff --git a/src/AddIns/DisplayBindings/AvalonEdit.AddIn/Src/IconBarManager.cs b/src/AddIns/DisplayBindings/AvalonEdit.AddIn/Src/IconBarManager.cs
index fbc3fc0898..544745338c 100644
--- a/src/AddIns/DisplayBindings/AvalonEdit.AddIn/Src/IconBarManager.cs
+++ b/src/AddIns/DisplayBindings/AvalonEdit.AddIn/Src/IconBarManager.cs
@@ -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;
}
}
}
diff --git a/src/AddIns/Misc/SearchAndReplace/Project/Gui/SearchResultNode.cs b/src/AddIns/Misc/SearchAndReplace/Project/Gui/SearchResultNode.cs
index dacf1eb641..acc61690eb 100644
--- a/src/AddIns/Misc/SearchAndReplace/Project/Gui/SearchResultNode.cs
+++ b/src/AddIns/Misc/SearchAndReplace/Project/Gui/SearchResultNode.cs
@@ -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);
}
}
}
diff --git a/src/Libraries/NRefactory/ICSharpCode.NRefactory/CSharp/Resolver/FindReferences.cs b/src/Libraries/NRefactory/ICSharpCode.NRefactory/CSharp/Resolver/FindReferences.cs
index 5b7b3242d7..302bb853fe 100644
--- a/src/Libraries/NRefactory/ICSharpCode.NRefactory/CSharp/Resolver/FindReferences.cs
+++ b/src/Libraries/NRefactory/ICSharpCode.NRefactory/CSharp/Resolver/FindReferences.cs
@@ -31,21 +31,17 @@ namespace ICSharpCode.NRefactory.CSharp.Resolver
///
public class FindReferences
{
- CancellationToken cancellationToken;
-
///
/// Callback that is invoked whenever a reference is found.
///
public event Action ReferenceFound;
- #region Constructor
- public FindReferences(CancellationToken cancellationToken = default(CancellationToken))
- {
- this.cancellationToken = cancellationToken;
- }
- #endregion
-
#region Properties
+ ///
+ /// Gets/Sets the cancellation token.
+ ///
+ public CancellationToken CancellationToken { get; set; }
+
///
/// Gets/Sets whether to find type references even if an alias is being used.
///
@@ -224,7 +220,7 @@ namespace ICSharpCode.NRefactory.CSharp.Resolver
///
/// Gets the file names that possibly contain references to the element being searched for.
///
- public IEnumerable GetInterestingFileNames(SearchScope searchScope, ITypeResolveContext context)
+ public IList GetInterestingFileNames(SearchScope searchScope, IEnumerable allTypes, ITypeResolveContext context)
{
IEnumerable interestingTypes;
if (searchScope.TopLevelTypeDefinition != null) {
@@ -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 GetInterestingTypesProtected(ITypeResolveContext context, ITypeDefinition referencedTypeDefinition)
+ IEnumerable GetInterestingTypesProtected(IEnumerable allTypes, ITypeResolveContext context, ITypeDefinition referencedTypeDefinition)
{
- return referencedTypeDefinition.GetSubTypeDefinitions(context);
+ return allTypes.Where(t => t.IsDerivedFrom(referencedTypeDefinition, context));
}
- IEnumerable GetInterestingTypesInternal(ITypeResolveContext context, IProjectContent referencedProjectContent)
+ IEnumerable GetInterestingTypesInternal(IEnumerable 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
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
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);
}
diff --git a/src/Libraries/NRefactory/ICSharpCode.NRefactory/CSharp/Resolver/LocalResolveResult.cs b/src/Libraries/NRefactory/ICSharpCode.NRefactory/CSharp/Resolver/LocalResolveResult.cs
index ef056230f9..57779ab2a6 100644
--- a/src/Libraries/NRefactory/ICSharpCode.NRefactory/CSharp/Resolver/LocalResolveResult.cs
+++ b/src/Libraries/NRefactory/ICSharpCode.NRefactory/CSharp/Resolver/LocalResolveResult.cs
@@ -68,5 +68,10 @@ namespace ICSharpCode.NRefactory.CSharp.Resolver
{
return string.Format("[LocalResolveResult {0}]", variable);
}
+
+ public override DomRegion GetDefinitionRegion()
+ {
+ return variable.Region;
+ }
}
}
diff --git a/src/Libraries/NRefactory/ICSharpCode.NRefactory/CSharp/Resolver/MemberResolveResult.cs b/src/Libraries/NRefactory/ICSharpCode.NRefactory/CSharp/Resolver/MemberResolveResult.cs
index baaf504d7d..b47b4764c0 100644
--- a/src/Libraries/NRefactory/ICSharpCode.NRefactory/CSharp/Resolver/MemberResolveResult.cs
+++ b/src/Libraries/NRefactory/ICSharpCode.NRefactory/CSharp/Resolver/MemberResolveResult.cs
@@ -92,5 +92,10 @@ namespace ICSharpCode.NRefactory.CSharp.Resolver
{
return string.Format("[{0} {1}]", GetType().Name, member);
}
+
+ public override DomRegion GetDefinitionRegion()
+ {
+ return member.Region;
+ }
}
}
diff --git a/src/Libraries/NRefactory/ICSharpCode.NRefactory/CSharp/Resolver/ResolveAtLocation.cs b/src/Libraries/NRefactory/ICSharpCode.NRefactory/CSharp/Resolver/ResolveAtLocation.cs
index dcf78a2080..2f16a7ebf0 100644
--- a/src/Libraries/NRefactory/ICSharpCode.NRefactory/CSharp/Resolver/ResolveAtLocation.cs
+++ b/src/Libraries/NRefactory/ICSharpCode.NRefactory/CSharp/Resolver/ResolveAtLocation.cs
@@ -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;
diff --git a/src/Libraries/NRefactory/ICSharpCode.NRefactory/CSharp/Resolver/ResolveResult.cs b/src/Libraries/NRefactory/ICSharpCode.NRefactory/CSharp/Resolver/ResolveResult.cs
index 9f31e05720..40a9931e69 100644
--- a/src/Libraries/NRefactory/ICSharpCode.NRefactory/CSharp/Resolver/ResolveResult.cs
+++ b/src/Libraries/NRefactory/ICSharpCode.NRefactory/CSharp/Resolver/ResolveResult.cs
@@ -63,5 +63,10 @@ namespace ICSharpCode.NRefactory.CSharp.Resolver
{
return Enumerable.Empty();
}
+
+ public virtual DomRegion GetDefinitionRegion()
+ {
+ return DomRegion.Empty;
+ }
}
}
diff --git a/src/Libraries/NRefactory/ICSharpCode.NRefactory/CSharp/Resolver/TypeResolveResult.cs b/src/Libraries/NRefactory/ICSharpCode.NRefactory/CSharp/Resolver/TypeResolveResult.cs
index 1336357ba6..79815d6565 100644
--- a/src/Libraries/NRefactory/ICSharpCode.NRefactory/CSharp/Resolver/TypeResolveResult.cs
+++ b/src/Libraries/NRefactory/ICSharpCode.NRefactory/CSharp/Resolver/TypeResolveResult.cs
@@ -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;
+ }
}
}
diff --git a/src/Main/Base/Project/ICSharpCode.SharpDevelop.addin b/src/Main/Base/Project/ICSharpCode.SharpDevelop.addin
index 12c6188479..9b08f753c9 100755
--- a/src/Main/Base/Project/ICSharpCode.SharpDevelop.addin
+++ b/src/Main/Base/Project/ICSharpCode.SharpDevelop.addin
@@ -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"/>
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
@@ -1881,20 +1869,6 @@
class = "ICSharpCode.SharpDevelop.Editor.Commands.IndentSelection" />
-
-
-
-
-
-
-
-
-
diff --git a/src/Main/Base/Project/ICSharpCode.SharpDevelop.csproj b/src/Main/Base/Project/ICSharpCode.SharpDevelop.csproj
index 6500a10246..d6ae212c9b 100644
--- a/src/Main/Base/Project/ICSharpCode.SharpDevelop.csproj
+++ b/src/Main/Base/Project/ICSharpCode.SharpDevelop.csproj
@@ -113,7 +113,7 @@
-
+
@@ -366,6 +366,7 @@
+
@@ -670,7 +671,7 @@
Component
-
+
diff --git a/src/Main/Base/Project/Src/Bookmarks/ClassMemberBookmark.cs b/src/Main/Base/Project/Src/Bookmarks/ClassMemberBookmark.cs
deleted file mode 100644
index fe0c01d0de..0000000000
--- a/src/Main/Base/Project/Src/Bookmarks/ClassMemberBookmark.cs
+++ /dev/null
@@ -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
-{
- ///
- /// 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.
- ///
- 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();
- }
- }
-}
diff --git a/src/Main/Base/Project/Src/Bookmarks/EntityBookmark.cs b/src/Main/Base/Project/Src/Bookmarks/EntityBookmark.cs
new file mode 100644
index 0000000000..4ad80edf8d
--- /dev/null
+++ b/src/Main/Base/Project/Src/Bookmarks/EntityBookmark.cs
@@ -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
+{
+ ///
+ /// 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.
+ ///
+ 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();
+ }
+ }
+}
diff --git a/src/Main/Base/Project/Src/Editor/Commands/FindReferences.cs b/src/Main/Base/Project/Src/Editor/Commands/FindReferences.cs
deleted file mode 100644
index a35b7b0875..0000000000
--- a/src/Main/Base/Project/Src/Editor/Commands/FindReferences.cs
+++ /dev/null
@@ -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
-{
- ///
- /// Description of FindReferences.
- ///
- 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);
- }
- }
- }
-}
-*/
\ No newline at end of file
diff --git a/src/Main/Base/Project/Src/Editor/Commands/FindReferencesCommand.cs b/src/Main/Base/Project/Src/Editor/Commands/FindReferencesCommand.cs
new file mode 100644
index 0000000000..3ebc875c28
--- /dev/null
+++ b/src/Main/Base/Project/Src/Editor/Commands/FindReferencesCommand.cs
@@ -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
+{
+ ///
+ /// Runs the find references command.
+ ///
+ 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);
+ }
+ }
+ }
+}
diff --git a/src/Main/Base/Project/Src/Editor/Commands/GoToDefinition.cs b/src/Main/Base/Project/Src/Editor/Commands/GoToDefinition.cs
index 8d6b84fb7e..8a0136556f 100644
--- a/src/Main/Base/Project/Src/Editor/Commands/GoToDefinition.cs
+++ b/src/Main/Base/Project/Src/Editor/Commands/GoToDefinition.cs
@@ -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
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 + "'.");
}
}
}
- } */
+ }
}
diff --git a/src/Main/Base/Project/Src/Editor/Commands/SymbolUnderCaretMenuCommand.cs b/src/Main/Base/Project/Src/Editor/Commands/SymbolUnderCaretMenuCommand.cs
index 74a22d3e19..cffecd377e 100644
--- a/src/Main/Base/Project/Src/Editor/Commands/SymbolUnderCaretMenuCommand.cs
+++ b/src/Main/Base/Project/Src/Editor/Commands/SymbolUnderCaretMenuCommand.cs
@@ -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
{
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;
}
}
}
-*/
\ No newline at end of file
diff --git a/src/Main/Base/Project/Src/Editor/Search/SearchResultMatch.cs b/src/Main/Base/Project/Src/Editor/Search/SearchResultMatch.cs
index bba9279c17..53f11b25a9 100644
--- a/src/Main/Base/Project/Src/Editor/Search/SearchResultMatch.cs
+++ b/src/Main/Base/Project/Src/Editor/Search/SearchResultMatch.cs
@@ -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
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
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
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
}
public SimpleSearchResultMatch(ProvidedDocumentInformation providedDocumentInformation, string displayText, TextLocation position)
- : base(providedDocumentInformation, 0, 0)
+ : base(providedDocumentInformation, position, position)
{
- this.position = position;
this.displayText = displayText;
}
}
diff --git a/src/Main/Base/Project/Src/Project/AbstractProject.cs b/src/Main/Base/Project/Src/Project/AbstractProject.cs
index 264b62a393..06ff49a58c 100644
--- a/src/Main/Base/Project/Src/Project/AbstractProject.cs
+++ b/src/Main/Base/Project/Src/Project/AbstractProject.cs
@@ -640,5 +640,10 @@ namespace ICSharpCode.SharpDevelop.Project
{
return new CSharpAmbience();
}
+
+ public virtual Refactoring.ISymbolSearch PrepareSymbolSearch(IEntity entity)
+ {
+ return null;
+ }
}
}
diff --git a/src/Main/Base/Project/Src/Project/IProject.cs b/src/Main/Base/Project/Src/Project/IProject.cs
index 7308cffd27..2de1c17c72 100644
--- a/src/Main/Base/Project/Src/Project/IProject.cs
+++ b/src/Main/Base/Project/Src/Project/IProject.cs
@@ -218,7 +218,7 @@ namespace ICSharpCode.SharpDevelop.Project
/// Gets project specific properties.
///
Properties ProjectSpecificProperties { get; }
- */
+ */
///
/// Starts the project.
@@ -316,6 +316,16 @@ namespace ICSharpCode.SharpDevelop.Project
/// Never returns null.
///
IAmbience GetAmbience();
+
+ ///
+ /// 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.
+ ///
+ ///
+ /// An object that can be used to perform the search; or null if this project does not support symbol searches.
+ ///
+ Refactoring.ISymbolSearch PrepareSymbolSearch(IEntity entity);
}
///
diff --git a/src/Main/Base/Project/Src/Services/RefactoringService/FindReferenceService.cs b/src/Main/Base/Project/Src/Services/RefactoringService/FindReferenceService.cs
new file mode 100644
index 0000000000..c934b69585
--- /dev/null
+++ b/src/Main/Base/Project/Src/Services/RefactoringService/FindReferenceService.cs
@@ -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
+{
+ ///
+ /// Description of FindReferenceService.
+ ///
+ public static class FindReferenceService
+ {
+ public static void FindReferences(IEntity entity, IProgressMonitor progressMonitor, Action 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 symbolSearches = new List();
+ 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 callback);
+ }
+}
diff --git a/src/Main/Base/Project/Src/Services/RefactoringService/FindReferencesAndRenameHelper.cs b/src/Main/Base/Project/Src/Services/RefactoringService/FindReferencesAndRenameHelper.cs
index 71ff260657..5cf975d7fe 100644
--- a/src/Main/Base/Project/Src/Services/RefactoringService/FindReferencesAndRenameHelper.cs
+++ b/src/Main/Base/Project/Src/Services/RefactoringService/FindReferencesAndRenameHelper.cs
@@ -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
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
}
}
- 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 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
FindReferencesAndRenameHelper.RenameReferences(list, newName);
}
- static IList GetClassParts(IClass c)
- {
- CompoundClass cc = c as CompoundClass;
- if (cc != null) {
- return cc.Parts;
- } else {
- return new IClass[] {c};
- }
- }
-
static void AddDeclarationAsReference(List list, string fileName, DomRegion region, string name)
{
if (fileName == null)
@@ -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
}
}
}
- 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
}
}
}
+ */
public static void ShowAsSearchResults(string title, List list)
{
if (list == null) return;
List results = new List(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
}
}
}
+ */
+ /* 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
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 references = new List();
+ 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
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
}
}
-*/
+
diff --git a/src/Main/Base/Project/Src/Services/RefactoringService/Reference.cs b/src/Main/Base/Project/Src/Services/RefactoringService/Reference.cs
index c1b0ff82b9..9d5b05d34f 100644
--- a/src/Main/Base/Project/Src/Services/RefactoringService/Reference.cs
+++ b/src/Main/Base/Project/Src/Services/RefactoringService/Reference.cs
@@ -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
{
///
@@ -10,49 +13,29 @@ namespace ICSharpCode.SharpDevelop.Refactoring
///
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; }
}
}
}
-*/
\ No newline at end of file