Browse Source

merge upstream/master

pull/374/head
Dragan 12 years ago
parent
commit
0e29bd6574
  1. 56
      SharpDevelop.Tests.sln
  2. 37
      SharpDevelop.sln
  3. 7
      doc/Dependencies.html
  4. 2
      src/AddIns/Analysis/CodeQuality/CodeQuality.addin
  5. 8
      src/AddIns/Analysis/CodeQuality/CodeQuality.csproj
  6. 7
      src/AddIns/Analysis/CodeQuality/Gui/MainView.xaml
  7. 8
      src/AddIns/Analysis/CodeQuality/Gui/MainView.xaml.cs
  8. 4
      src/AddIns/Analysis/CodeQuality/Reporting/BaseReport.cs
  9. 308
      src/AddIns/Analysis/CodeQuality/Reporting/DependencyReport - Kopie.srd
  10. 55
      src/AddIns/Analysis/CodeQuality/Reporting/DependencyReport.cs
  11. 102
      src/AddIns/Analysis/CodeQuality/Reporting/DependencyReport.srd
  12. 77
      src/AddIns/Analysis/CodeQuality/Reporting/OverviewReport.cs
  13. 55
      src/AddIns/Analysis/CodeQuality/Reporting/Overviewreport.srd
  14. 2
      src/AddIns/BackendBindings/CSharpBinding/Project/CSharpBinding.addin
  15. 6
      src/AddIns/BackendBindings/CSharpBinding/Project/CSharpBinding.csproj
  16. 20
      src/AddIns/BackendBindings/CSharpBinding/Project/Src/CSharpLanguageBinding.cs
  17. 363
      src/AddIns/BackendBindings/CSharpBinding/Project/Src/CSharpSemanticHighlighter.cs
  18. 116
      src/AddIns/BackendBindings/CSharpBinding/Project/Src/CSharpSemanticHighlighterVisitor.cs
  19. 222
      src/AddIns/BackendBindings/CSharpBinding/Project/Src/CaretReferenceHighlightRenderer.cs
  20. 49
      src/AddIns/BackendBindings/CSharpBinding/Project/Src/Refactoring/CSharpCodeGenerator.cs
  21. 45
      src/AddIns/BackendBindings/CSharpBinding/Tests/CSharpCodeGeneratorTests.cs
  22. 3
      src/AddIns/BackendBindings/XamlBinding/XamlBinding/XamlAstResolver.cs
  23. 4
      src/AddIns/DisplayBindings/Data/ICSharpCode.Data.SQLServer/SQLServerDatabaseDriver.cs
  24. 12
      src/AddIns/Misc/PackageManagement/Cmdlets/Project/Src/GetPackageCmdlet.cs
  25. 15
      src/AddIns/Misc/PackageManagement/Cmdlets/Test/Src/GetPackageCmdletTests.cs
  26. 16
      src/AddIns/Misc/PackageManagement/Project/PackageManagement.csproj
  27. 156
      src/AddIns/Misc/PackageManagement/Project/Src/ClassCodeGenerator.cs
  28. 81
      src/AddIns/Misc/PackageManagement/Project/Src/ClassKindUpdater.cs
  29. 12
      src/AddIns/Misc/PackageManagement/Project/Src/Design/FakePackageManagementSolution.cs
  30. 38
      src/AddIns/Misc/PackageManagement/Project/Src/DocumentLoader.cs
  31. 61
      src/AddIns/Misc/PackageManagement/Project/Src/DocumentView.cs
  32. 37
      src/AddIns/Misc/PackageManagement/Project/Src/DomRegionExtensions.cs
  33. 3
      src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/CodeAttributeArgument.cs
  34. 61
      src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/CodeClass.cs
  35. 37
      src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/CodeClass2.cs
  36. 6
      src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/CodeDelegate.cs
  37. 63
      src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/CodeElement.cs
  38. 68
      src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/CodeElementsInNamespace.cs
  39. 66
      src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/CodeElementsList.cs
  40. 49
      src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/CodeFunction.cs
  41. 18
      src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/CodeFunction2.cs
  42. 106
      src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/CodeInterface.cs
  43. 111
      src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/CodeModel.cs
  44. 28
      src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/CodeModelContext.cs
  45. 37
      src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/CodeNamespace.cs
  46. 17
      src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/CodeParameter2.cs
  47. 130
      src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/CodeProperty.cs
  48. 76
      src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/CodeProperty2.cs
  49. 42
      src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/CodeStruct.cs
  50. 144
      src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/CodeType.cs
  51. 43
      src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/CodeTypeRef.cs
  52. 12
      src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/CodeVariable.cs
  53. 84
      src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/EditPoint.cs
  54. 82
      src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/FileCodeModel2.cs
  55. 35
      src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/FileCodeModelCodeNamespace.cs
  56. 58
      src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/NamespaceName.cs
  57. 20
      src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/Project.cs
  58. 44
      src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/ProjectItem.cs
  59. 9
      src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/ProjectKind.cs
  60. 1
      src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/TextPoint.cs
  61. 33
      src/AddIns/Misc/PackageManagement/Project/Src/ICodeGenerator.cs
  62. 4
      src/AddIns/Misc/PackageManagement/Project/Src/IDocumentLoader.cs
  63. 6
      src/AddIns/Misc/PackageManagement/Project/Src/IDocumentView.cs
  64. 62
      src/AddIns/Misc/PackageManagement/Project/Src/IMethodOrPropertyExtensions.cs
  65. 2
      src/AddIns/Misc/PackageManagement/Project/Src/IPackageManagementFileService.cs
  66. 8
      src/AddIns/Misc/PackageManagement/Project/Src/IPackageManagementSolution.cs
  67. 16
      src/AddIns/Misc/PackageManagement/Project/Src/IProjectContentExtensions.cs
  68. 2
      src/AddIns/Misc/PackageManagement/Project/Src/InstalledPackagesViewModel.cs
  69. 6
      src/AddIns/Misc/PackageManagement/Project/Src/PackageManagementFileService.cs
  70. 2
      src/AddIns/Misc/PackageManagement/Project/Src/PackageManagementSelectedProjects.cs
  71. 10
      src/AddIns/Misc/PackageManagement/Project/Src/PackageManagementSolution.cs
  72. 203
      src/AddIns/Misc/PackageManagement/Project/Src/PackageManagementSolution.cs.BASE.cs
  73. 204
      src/AddIns/Misc/PackageManagement/Project/Src/PackageManagementSolution.cs.LOCAL.cs
  74. 208
      src/AddIns/Misc/PackageManagement/Project/Src/PackageManagementSolution.cs.REMOTE.cs
  75. 5
      src/AddIns/Misc/PackageManagement/Project/Src/ProjectBrowserUpdater.cs
  76. 74
      src/AddIns/Misc/PackageManagement/Project/Src/RefactoringDocumentView.cs
  77. 10
      src/AddIns/Misc/PackageManagement/Project/Src/Scripting/PackageManagementConsoleHost.cs
  78. 68
      src/AddIns/Misc/PackageManagement/Project/Src/ThreadSafeCodeGenerator.cs
  79. 24
      src/AddIns/Misc/PackageManagement/Project/Src/VisualStudio/SDTE.cs
  80. 31
      src/AddIns/Misc/PackageManagement/Test/PackageManagement.Tests.csproj
  81. 327
      src/AddIns/Misc/PackageManagement/Test/Src/ClassCodeGeneratorTests.cs
  82. 180
      src/AddIns/Misc/PackageManagement/Test/Src/ClassKindUpdaterTests.cs
  83. 161
      src/AddIns/Misc/PackageManagement/Test/Src/EnvDTE/CodeAttribute2Tests.cs
  84. 86
      src/AddIns/Misc/PackageManagement/Test/Src/EnvDTE/CodeAttributesTests.cs
  85. 579
      src/AddIns/Misc/PackageManagement/Test/Src/EnvDTE/CodeClass2Tests.cs
  86. 121
      src/AddIns/Misc/PackageManagement/Test/Src/EnvDTE/CodeDelegateTests.cs
  87. 162
      src/AddIns/Misc/PackageManagement/Test/Src/EnvDTE/CodeElementsInNamespaceTests.cs
  88. 260
      src/AddIns/Misc/PackageManagement/Test/Src/EnvDTE/CodeFunction2Tests.cs
  89. 816
      src/AddIns/Misc/PackageManagement/Test/Src/EnvDTE/CodeFunctionTests.cs
  90. 66
      src/AddIns/Misc/PackageManagement/Test/Src/EnvDTE/CodeImportTests.cs
  91. 68
      src/AddIns/Misc/PackageManagement/Test/Src/EnvDTE/CodeInterfaceTests.cs
  92. 49
      src/AddIns/Misc/PackageManagement/Test/Src/EnvDTE/CodeModelTestBase.cs
  93. 499
      src/AddIns/Misc/PackageManagement/Test/Src/EnvDTE/CodeModelTests.cs
  94. 353
      src/AddIns/Misc/PackageManagement/Test/Src/EnvDTE/CodeNamespaceTests.cs
  95. 228
      src/AddIns/Misc/PackageManagement/Test/Src/EnvDTE/CodeParameter2Tests.cs
  96. 66
      src/AddIns/Misc/PackageManagement/Test/Src/EnvDTE/CodeParameterTests.cs
  97. 649
      src/AddIns/Misc/PackageManagement/Test/Src/EnvDTE/CodeProperty2Tests.cs
  98. 125
      src/AddIns/Misc/PackageManagement/Test/Src/EnvDTE/CodeStructTests.cs
  99. 760
      src/AddIns/Misc/PackageManagement/Test/Src/EnvDTE/CodeTypeRef2Tests.cs
  100. 367
      src/AddIns/Misc/PackageManagement/Test/Src/EnvDTE/CodeTypeTests.cs
  101. Some files were not shown because too many files have changed in this diff Show More

56
SharpDevelop.Tests.sln

@ -1,7 +1,9 @@ @@ -1,7 +1,9 @@

Microsoft Visual Studio Solution File, Format Version 11.00
# Visual Studio 2010
Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio 2012
# SharpDevelop 5.0
VisualStudioVersion = 12.0.20827.3
MinimumVisualStudioVersion = 10.0.40219.1
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Main", "Main", "{256F5C28-532C-44C0-8AB8-D8EC5E492E01}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ICSharpCode.SharpDevelop.BuildWorker35", "src\Main\ICSharpCode.SharpDevelop.BuildWorker35\ICSharpCode.SharpDevelop.BuildWorker35.csproj", "{B5F54272-49F0-40DB-845A-8D837875D3BA}"
@ -138,15 +140,11 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "AddInManager2.Tests", "src\ @@ -138,15 +140,11 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "AddInManager2.Tests", "src\
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Reports", "Reports", "{FEDD3FD9-0480-43CC-913C-4E0876DDA852}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ICSharpCode.Reports.Addin", "src\AddIns\Misc\Reports\ICSharpCode.Reports.Addin\ICSharpCode.Reports.Addin.csproj", "{35D002D7-C78B-44FB-92AA-104BEB431678}"
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ICSharpCode.Reporting", "src\AddIns\Misc\Reporting\ICSharpCode.Reporting\ICSharpCode.Reporting.csproj", "{40CA84D4-ACFC-4646-9CDD-B87262D34093}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ICSharpCode.Reports.Addin.Test", "src\AddIns\Misc\Reports\ICSharpCode.Reports.Addin\Test\ICSharpCode.Reports.Addin.Test.csproj", "{2B232C7E-CFB6-4B73-A1B8-134A8A2ED4F7}"
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ICSharpCode.Reporting.Test", "src\AddIns\Misc\Reporting\ICSharpCode.Reporting\Test\ICSharpCode.Reporting.Test\ICSharpCode.Reporting.Test.csproj", "{97CA9CE5-B966-48DF-BB59-F00FFC534B1F}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ICSharpCode.Reports.Core", "src\AddIns\Misc\Reports\ICSharpCode.Reports.Core\ICSharpCode.Reports.Core.csproj", "{4B2239FF-8FD6-431D-9D22-1B8049BA6917}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ICSharpCode.Reports.Core.Test", "src\AddIns\Misc\Reports\ICSharpCode.Reports.Core\Test\ICSharpCode.Reports.Core.Test\ICSharpCode.Reports.Core.Test.csproj", "{E16B73CA-3603-47EE-915E-6F8B2A07304B}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Irony", "src\AddIns\Misc\Reports\Irony\Irony.csproj", "{D81F5C91-D7DB-46E5-BC99-49488FB6814C}"
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ICSharpCode.Reporting.Addin", "src\AddIns\Misc\Reporting\ICSharpCode.Reporting.Addin\ICSharpCode.Reporting.Addin.csproj", "{0502FCF7-72F4-4587-936B-D0238CD0E072}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Display Bindings", "Display Bindings", "{11BF9245-88A3-4A0A-9A8A-EC9D98036B0F}"
EndProject
@ -470,26 +468,18 @@ Global @@ -470,26 +468,18 @@ Global
{0D0CB6E5-1EAD-471F-96B9-BFF84057BCF5}.Debug|Any CPU.Build.0 = Debug|Any CPU
{0D0CB6E5-1EAD-471F-96B9-BFF84057BCF5}.Release|Any CPU.ActiveCfg = Release|Any CPU
{0D0CB6E5-1EAD-471F-96B9-BFF84057BCF5}.Release|Any CPU.Build.0 = Release|Any CPU
{35D002D7-C78B-44FB-92AA-104BEB431678}.Debug|Any CPU.ActiveCfg = Debug|x86
{35D002D7-C78B-44FB-92AA-104BEB431678}.Debug|Any CPU.Build.0 = Debug|x86
{35D002D7-C78B-44FB-92AA-104BEB431678}.Release|Any CPU.ActiveCfg = Release|x86
{35D002D7-C78B-44FB-92AA-104BEB431678}.Release|Any CPU.Build.0 = Release|x86
{2B232C7E-CFB6-4B73-A1B8-134A8A2ED4F7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{2B232C7E-CFB6-4B73-A1B8-134A8A2ED4F7}.Debug|Any CPU.Build.0 = Debug|Any CPU
{2B232C7E-CFB6-4B73-A1B8-134A8A2ED4F7}.Release|Any CPU.ActiveCfg = Release|Any CPU
{2B232C7E-CFB6-4B73-A1B8-134A8A2ED4F7}.Release|Any CPU.Build.0 = Release|Any CPU
{4B2239FF-8FD6-431D-9D22-1B8049BA6917}.Debug|Any CPU.ActiveCfg = Debug|x86
{4B2239FF-8FD6-431D-9D22-1B8049BA6917}.Debug|Any CPU.Build.0 = Debug|x86
{4B2239FF-8FD6-431D-9D22-1B8049BA6917}.Release|Any CPU.ActiveCfg = Release|x86
{4B2239FF-8FD6-431D-9D22-1B8049BA6917}.Release|Any CPU.Build.0 = Release|x86
{E16B73CA-3603-47EE-915E-6F8B2A07304B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{E16B73CA-3603-47EE-915E-6F8B2A07304B}.Debug|Any CPU.Build.0 = Debug|Any CPU
{E16B73CA-3603-47EE-915E-6F8B2A07304B}.Release|Any CPU.ActiveCfg = Release|Any CPU
{E16B73CA-3603-47EE-915E-6F8B2A07304B}.Release|Any CPU.Build.0 = Release|Any CPU
{D81F5C91-D7DB-46E5-BC99-49488FB6814C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{D81F5C91-D7DB-46E5-BC99-49488FB6814C}.Debug|Any CPU.Build.0 = Debug|Any CPU
{D81F5C91-D7DB-46E5-BC99-49488FB6814C}.Release|Any CPU.ActiveCfg = Release|Any CPU
{D81F5C91-D7DB-46E5-BC99-49488FB6814C}.Release|Any CPU.Build.0 = Release|Any CPU
{40CA84D4-ACFC-4646-9CDD-B87262D34093}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{40CA84D4-ACFC-4646-9CDD-B87262D34093}.Debug|Any CPU.Build.0 = Debug|Any CPU
{40CA84D4-ACFC-4646-9CDD-B87262D34093}.Release|Any CPU.ActiveCfg = Release|Any CPU
{40CA84D4-ACFC-4646-9CDD-B87262D34093}.Release|Any CPU.Build.0 = Release|Any CPU
{97CA9CE5-B966-48DF-BB59-F00FFC534B1F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{97CA9CE5-B966-48DF-BB59-F00FFC534B1F}.Debug|Any CPU.Build.0 = Debug|Any CPU
{97CA9CE5-B966-48DF-BB59-F00FFC534B1F}.Release|Any CPU.ActiveCfg = Release|Any CPU
{97CA9CE5-B966-48DF-BB59-F00FFC534B1F}.Release|Any CPU.Build.0 = Release|Any CPU
{0502FCF7-72F4-4587-936B-D0238CD0E072}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{0502FCF7-72F4-4587-936B-D0238CD0E072}.Debug|Any CPU.Build.0 = Debug|Any CPU
{0502FCF7-72F4-4587-936B-D0238CD0E072}.Release|Any CPU.ActiveCfg = Release|Any CPU
{0502FCF7-72F4-4587-936B-D0238CD0E072}.Release|Any CPU.Build.0 = Release|Any CPU
{0162E499-42D0-409B-AA25-EED21F75336B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{0162E499-42D0-409B-AA25-EED21F75336B}.Debug|Any CPU.Build.0 = Debug|Any CPU
{0162E499-42D0-409B-AA25-EED21F75336B}.Release|Any CPU.ActiveCfg = Release|Any CPU
@ -712,11 +702,9 @@ Global @@ -712,11 +702,9 @@ Global
{60480C2F-F228-4D86-B98F-AF75A7DCEC34} = {1F88F080-AD7C-4B03-9895-20C26282429D}
{0D0CB6E5-1EAD-471F-96B9-BFF84057BCF5} = {1F88F080-AD7C-4B03-9895-20C26282429D}
{FEDD3FD9-0480-43CC-913C-4E0876DDA852} = {F3662720-9EA2-4591-BBC6-97361DCE50A9}
{35D002D7-C78B-44FB-92AA-104BEB431678} = {FEDD3FD9-0480-43CC-913C-4E0876DDA852}
{2B232C7E-CFB6-4B73-A1B8-134A8A2ED4F7} = {FEDD3FD9-0480-43CC-913C-4E0876DDA852}
{4B2239FF-8FD6-431D-9D22-1B8049BA6917} = {FEDD3FD9-0480-43CC-913C-4E0876DDA852}
{E16B73CA-3603-47EE-915E-6F8B2A07304B} = {FEDD3FD9-0480-43CC-913C-4E0876DDA852}
{D81F5C91-D7DB-46E5-BC99-49488FB6814C} = {FEDD3FD9-0480-43CC-913C-4E0876DDA852}
{40CA84D4-ACFC-4646-9CDD-B87262D34093} = {FEDD3FD9-0480-43CC-913C-4E0876DDA852}
{97CA9CE5-B966-48DF-BB59-F00FFC534B1F} = {FEDD3FD9-0480-43CC-913C-4E0876DDA852}
{0502FCF7-72F4-4587-936B-D0238CD0E072} = {FEDD3FD9-0480-43CC-913C-4E0876DDA852}
{11BF9245-88A3-4A0A-9A8A-EC9D98036B0F} = {39327899-ED91-4F7F-988C-4FE4E17C014D}
{0162E499-42D0-409B-AA25-EED21F75336B} = {11BF9245-88A3-4A0A-9A8A-EC9D98036B0F}
{E618A9CD-A39F-4925-A538-E8A3FEF24E54} = {11BF9245-88A3-4A0A-9A8A-EC9D98036B0F}

37
SharpDevelop.sln

@ -1,7 +1,9 @@ @@ -1,7 +1,9 @@

Microsoft Visual Studio Solution File, Format Version 11.00
# Visual Studio 2010
Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio 2012
# SharpDevelop 5.0
VisualStudioVersion = 12.0.20827.3
MinimumVisualStudioVersion = 10.0.40219.1
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Main", "Main", "{256F5C28-532C-44C0-8AB8-D8EC5E492E01}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ICSharpCode.SharpDevelop.BuildWorker35", "src\Main\ICSharpCode.SharpDevelop.BuildWorker35\ICSharpCode.SharpDevelop.BuildWorker35.csproj", "{B5F54272-49F0-40DB-845A-8D837875D3BA}"
@ -111,11 +113,9 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "AddInManager2", "src\AddIns @@ -111,11 +113,9 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "AddInManager2", "src\AddIns
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Reports", "Reports", "{4ABB8D1E-3439-44C8-ACCE-1FA678ABBFB3}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ICSharpCode.Reports.Addin", "src\AddIns\Misc\Reports\ICSharpCode.Reports.Addin\ICSharpCode.Reports.Addin.csproj", "{35D002D7-C78B-44FB-92AA-104BEB431678}"
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ICSharpCode.Reporting", "src\AddIns\Misc\Reporting\ICSharpCode.Reporting\ICSharpCode.Reporting.csproj", "{40CA84D4-ACFC-4646-9CDD-B87262D34093}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ICSharpCode.Reports.Core", "src\AddIns\Misc\Reports\ICSharpCode.Reports.Core\ICSharpCode.Reports.Core.csproj", "{4B2239FF-8FD6-431D-9D22-1B8049BA6917}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Irony", "src\AddIns\Misc\Reports\Irony\Irony.csproj", "{D81F5C91-D7DB-46E5-BC99-49488FB6814C}"
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ICSharpCode.Reporting.Addin", "src\AddIns\Misc\Reporting\ICSharpCode.Reporting.Addin\ICSharpCode.Reporting.Addin.csproj", "{0502FCF7-72F4-4587-936B-D0238CD0E072}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Display Bindings", "Display Bindings", "{11BF9245-88A3-4A0A-9A8A-EC9D98036B0F}"
EndProject
@ -369,18 +369,14 @@ Global @@ -369,18 +369,14 @@ Global
{60480C2F-F228-4D86-B98F-AF75A7DCEC34}.Debug|Any CPU.Build.0 = Debug|Any CPU
{60480C2F-F228-4D86-B98F-AF75A7DCEC34}.Release|Any CPU.ActiveCfg = Release|Any CPU
{60480C2F-F228-4D86-B98F-AF75A7DCEC34}.Release|Any CPU.Build.0 = Release|Any CPU
{35D002D7-C78B-44FB-92AA-104BEB431678}.Debug|Any CPU.ActiveCfg = Debug|x86
{35D002D7-C78B-44FB-92AA-104BEB431678}.Debug|Any CPU.Build.0 = Debug|x86
{35D002D7-C78B-44FB-92AA-104BEB431678}.Release|Any CPU.ActiveCfg = Release|x86
{35D002D7-C78B-44FB-92AA-104BEB431678}.Release|Any CPU.Build.0 = Release|x86
{4B2239FF-8FD6-431D-9D22-1B8049BA6917}.Debug|Any CPU.ActiveCfg = Debug|x86
{4B2239FF-8FD6-431D-9D22-1B8049BA6917}.Debug|Any CPU.Build.0 = Debug|x86
{4B2239FF-8FD6-431D-9D22-1B8049BA6917}.Release|Any CPU.ActiveCfg = Release|x86
{4B2239FF-8FD6-431D-9D22-1B8049BA6917}.Release|Any CPU.Build.0 = Release|x86
{D81F5C91-D7DB-46E5-BC99-49488FB6814C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{D81F5C91-D7DB-46E5-BC99-49488FB6814C}.Debug|Any CPU.Build.0 = Debug|Any CPU
{D81F5C91-D7DB-46E5-BC99-49488FB6814C}.Release|Any CPU.ActiveCfg = Release|Any CPU
{D81F5C91-D7DB-46E5-BC99-49488FB6814C}.Release|Any CPU.Build.0 = Release|Any CPU
{40CA84D4-ACFC-4646-9CDD-B87262D34093}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{40CA84D4-ACFC-4646-9CDD-B87262D34093}.Debug|Any CPU.Build.0 = Debug|Any CPU
{40CA84D4-ACFC-4646-9CDD-B87262D34093}.Release|Any CPU.ActiveCfg = Release|Any CPU
{40CA84D4-ACFC-4646-9CDD-B87262D34093}.Release|Any CPU.Build.0 = Release|Any CPU
{0502FCF7-72F4-4587-936B-D0238CD0E072}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{0502FCF7-72F4-4587-936B-D0238CD0E072}.Debug|Any CPU.Build.0 = Debug|Any CPU
{0502FCF7-72F4-4587-936B-D0238CD0E072}.Release|Any CPU.ActiveCfg = Release|Any CPU
{0502FCF7-72F4-4587-936B-D0238CD0E072}.Release|Any CPU.Build.0 = Release|Any CPU
{0162E499-42D0-409B-AA25-EED21F75336B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{0162E499-42D0-409B-AA25-EED21F75336B}.Debug|Any CPU.Build.0 = Debug|Any CPU
{0162E499-42D0-409B-AA25-EED21F75336B}.Release|Any CPU.ActiveCfg = Release|Any CPU
@ -560,9 +556,8 @@ Global @@ -560,9 +556,8 @@ Global
{E0A5E80A-003B-4335-A9DC-A76E2E46D38D} = {87D549AF-8FCD-4E84-9C33-3DB6E42FEF6D}
{60480C2F-F228-4D86-B98F-AF75A7DCEC34} = {F3662720-9EA2-4591-BBC6-97361DCE50A9}
{4ABB8D1E-3439-44C8-ACCE-1FA678ABBFB3} = {F3662720-9EA2-4591-BBC6-97361DCE50A9}
{35D002D7-C78B-44FB-92AA-104BEB431678} = {4ABB8D1E-3439-44C8-ACCE-1FA678ABBFB3}
{4B2239FF-8FD6-431D-9D22-1B8049BA6917} = {4ABB8D1E-3439-44C8-ACCE-1FA678ABBFB3}
{D81F5C91-D7DB-46E5-BC99-49488FB6814C} = {4ABB8D1E-3439-44C8-ACCE-1FA678ABBFB3}
{40CA84D4-ACFC-4646-9CDD-B87262D34093} = {4ABB8D1E-3439-44C8-ACCE-1FA678ABBFB3}
{0502FCF7-72F4-4587-936B-D0238CD0E072} = {4ABB8D1E-3439-44C8-ACCE-1FA678ABBFB3}
{11BF9245-88A3-4A0A-9A8A-EC9D98036B0F} = {39327899-ED91-4F7F-988C-4FE4E17C014D}
{0162E499-42D0-409B-AA25-EED21F75336B} = {11BF9245-88A3-4A0A-9A8A-EC9D98036B0F}
{E618A9CD-A39F-4925-A538-E8A3FEF24E54} = {11BF9245-88A3-4A0A-9A8A-EC9D98036B0F}

7
doc/Dependencies.html

@ -15,6 +15,9 @@ @@ -15,6 +15,9 @@
<li>
<a href="http://www.microsoft.com/downloads/details.aspx?familyid=6B6C21D2-2006-4AFA-9702-529FA782D63B&amp;displaylang=en">Microsoft Windows SDK for Windows 7 and .NET Framework 4</a> (strongly recommended!)
</li>
<li>
<a href="http://www.microsoft.com/en-us/download/details.aspx?id=40760">Microsoft Build Tools 2013</a> for opening Visual Studio 2013 solutions
</li>
<li>
<a href="http://www.microsoft.com/downloads/en/details.aspx?FamilyID=effc5bc4-c3df-4172-ad1c-bc62935861c5">Microsoft F#</a> for F# support
</li>
@ -41,7 +44,7 @@ @@ -41,7 +44,7 @@
<table>
<tr>
<th style="width:250px">Target platform</th>
<th>Target platform</th>
<th>Reference Assemblies</th>
<tr>
<tr>
@ -57,7 +60,7 @@ @@ -57,7 +60,7 @@
<td><a href="http://www.microsoft.com/downloads/details.aspx?familyid=6B6C21D2-2006-4AFA-9702-529FA782D63B&amp;displaylang=en">Microsoft Windows SDK for Windows 7 and .NET Framework 4</a></td>
</tr>
<tr>
<td>.NET Framework 3.5 SP1 and below</td>
<td style="padding-right: 8px;">.NET Framework 3.5 SP1 and below</td>
<td>Included with .NET framework</td>
</tr>
</table>

2
src/AddIns/Analysis/CodeQuality/CodeQuality.addin

@ -6,7 +6,7 @@ @@ -6,7 +6,7 @@
<Manifest>
<Identity name = "ICSharpCode.CodeQuality"/>
<Dependency addin="ICSharpCode.Reports.Addin" requirePreload="true" />
<Dependency addin="ICSharpCode.Reporting.Addin" requirePreload="true"></Dependency>
</Manifest>
<Runtime>

8
src/AddIns/Analysis/CodeQuality/CodeQuality.csproj

@ -111,6 +111,7 @@ @@ -111,6 +111,7 @@
<EmbeddedResource Include="Reporting\Overviewreport.srd">
<CopyToOutputDirectory>Never</CopyToOutputDirectory>
</EmbeddedResource>
<EmbeddedResource Include="Reporting\DependencyReport - Kopie.srd" />
</ItemGroup>
<ItemGroup>
<Folder Include="Engine\Dom" />
@ -172,10 +173,9 @@ @@ -172,10 +173,9 @@
<Name>ICSharpCode.SharpDevelop.Widgets</Name>
<Private>False</Private>
</ProjectReference>
<ProjectReference Include="..\..\Misc\Reports\ICSharpCode.Reports.Core\ICSharpCode.Reports.Core.csproj">
<Project>{7C3579BC-2A64-4108-82B5-3D07ADA079E7}</Project>
<Name>ICSharpCode.Reports.Core</Name>
<Private>False</Private>
<ProjectReference Include="..\..\Misc\Reporting\ICSharpCode.Reporting\ICSharpCode.Reporting.csproj">
<Project>{40CA84D4-ACFC-4646-9CDD-B87262D34093}</Project>
<Name>ICSharpCode.Reporting</Name>
</ProjectReference>
</ItemGroup>
<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.Targets" />

7
src/AddIns/Analysis/CodeQuality/Gui/MainView.xaml

@ -4,8 +4,8 @@ @@ -4,8 +4,8 @@
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:gui="clr-namespace:ICSharpCode.CodeQuality.Gui"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:rep="clr-namespace:ICSharpCode.Reports.Core.WpfReportViewer;assembly=ICSharpCode.Reports.Core">
xmlns:reporting="clr-namespace:ICSharpCode.Reporting.WpfReportViewer;assembly=ICSharpCode.Reporting">
<DockPanel>
<ToolBar DockPanel.Dock="Top">
<Button Click="AddAssemblyClick">Add Assembly</Button>
@ -40,8 +40,7 @@ @@ -40,8 +40,7 @@
x:Name="reportTab"
Visibility="Hidden">
<Grid>
<rep:WpfReportViewer
x:Name="viewer" />
<reporting:WpfReportViewer x:Name="viewer" />
</Grid>
</TabItem>
</TabControl>

8
src/AddIns/Analysis/CodeQuality/Gui/MainView.xaml.cs

@ -19,18 +19,13 @@ @@ -19,18 +19,13 @@
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using ICSharpCode.Reporting.WpfReportViewer;
using ICSharpCode.CodeQuality.Engine;
using ICSharpCode.CodeQuality.Engine.Dom;
using ICSharpCode.CodeQuality.Reporting;
using ICSharpCode.Reports.Core.WpfReportViewer;
using ICSharpCode.SharpDevelop.Gui;
using ICSharpCode.SharpDevelop.Project;
using Microsoft.Win32;
@ -125,6 +120,7 @@ namespace ICSharpCode.CodeQuality.Gui @@ -125,6 +120,7 @@ namespace ICSharpCode.CodeQuality.Gui
var previewViewModel = new PreviewViewModel(dependencyReport.ReportSettings,reportCreator.Pages);
viewer.SetBinding(previewViewModel);
ActivateReportTab();
}
void ActivateReportTab()

4
src/AddIns/Analysis/CodeQuality/Reporting/BaseReport.cs

@ -18,10 +18,8 @@ @@ -18,10 +18,8 @@
using System;
using System.Collections.Generic;
using System.IO;
using System.Reflection;
using ICSharpCode.Reporting.Items;
using ICSharpCode.Reports.Core;
namespace ICSharpCode.CodeQuality.Reporting
{

308
src/AddIns/Analysis/CodeQuality/Reporting/DependencyReport - Kopie.srd

@ -0,0 +1,308 @@ @@ -0,0 +1,308 @@
<?xml version="1.0" encoding="utf-8"?>
<ReportModel>
<ReportSettings>
<ReportSettings>
<ReportName>DependencyReport</ReportName>
<ReportType>FormSheet</ReportType>
<BottomMargin>50</BottomMargin>
<TopMargin>50</TopMargin>
<LeftMargin>50</LeftMargin>
<RightMargin>50</RightMargin>
<PageSize>827, 1169</PageSize>
<Landscape>False</Landscape>
<GraphicsUnit>Millimeter</GraphicsUnit>
<Padding>5, 5, 5, 5</Padding>
<AvailableFieldsCollection />
<SortColumnsCollection />
<GroupColumnsCollection>
<GroupColumn>
<SortDirection>Ascending</SortDirection>
<CaseSensitive>False</CaseSensitive>
<ColumnName>Name</ColumnName>
<DataTypeName>System.String</DataTypeName>
</GroupColumn>
</GroupColumnsCollection>
<ParameterCollection />
<SqlParameters />
<ConnectionString />
<CommandText />
<CommandType>Text</CommandType>
<DataModel>FormSheet</DataModel>
<NoDataMessage>No Data for this Report</NoDataMessage>
<DefaultFont>Microsoft Sans Serif, 10pt</DefaultFont>
<UseStandardPrinter>True</UseStandardPrinter>
</ReportSettings>
</ReportSettings>
<SectionCollection>
<BaseSection>
<Location>50, 50</Location>
<Size>727, 60</Size>
<BackColor>White</BackColor>
<SectionOffset>0</SectionOffset>
<SectionMargin>0</SectionMargin>
<DrawBorder>False</DrawBorder>
<PageBreakAfter>False</PageBreakAfter>
<Items>
<BaseTextItem>
<Location>157, 3</Location>
<Size>414, 40</Size>
<BackColor>White</BackColor>
<Font>Segoe UI, 18pt, style=Bold</Font>
<StringTrimming>None</StringTrimming>
<ContentAlignment>TopLeft</ContentAlignment>
<CanGrow>False</CanGrow>
<CanShrink>False</CanShrink>
<RTL>No</RTL>
<Text>SharpDevelop CodeQuality Analysis</Text>
<DrawBorder>False</DrawBorder>
<FrameColor>Black</FrameColor>
<ForeColor>Black</ForeColor>
<Name>BaseTextItem2147483637</Name>
</BaseTextItem>
</Items>
<FrameColor>Black</FrameColor>
<Name>ReportHeader</Name>
</BaseSection>
<BaseSection>
<Location>50, 125</Location>
<Size>727, 69</Size>
<BackColor>White</BackColor>
<SectionOffset>0</SectionOffset>
<SectionMargin>0</SectionMargin>
<DrawBorder>False</DrawBorder>
<PageBreakAfter>False</PageBreakAfter>
<Items>
<BaseLineItem>
<Location>22, 47</Location>
<Size>660, 10</Size>
<BackColor>White</BackColor>
<ForeColor>Black</ForeColor>
<FromPoint>10, 5</FromPoint>
<ToPoint>647, 5</ToPoint>
<StartLineCap>Flat</StartLineCap>
<EndLineCap>Flat</EndLineCap>
<DashLineCap>Flat</DashLineCap>
<DashStyle>Solid</DashStyle>
<Thickness>4</Thickness>
<Name>BaseLineItem1</Name>
</BaseLineItem>
<BaseTextItem>
<Location>222, 3</Location>
<Size>257, 26</Size>
<BackColor>White</BackColor>
<Font>Microsoft Sans Serif, 15.75pt</Font>
<StringTrimming>None</StringTrimming>
<ContentAlignment>TopLeft</ContentAlignment>
<CanGrow>False</CanGrow>
<CanShrink>False</CanShrink>
<DataType>System.String</DataType>
<RTL>No</RTL>
<Text>Analysis Overview Report</Text>
<DrawBorder>False</DrawBorder>
<FrameColor>Black</FrameColor>
<ForeColor>Black</ForeColor>
<Name>Overview</Name>
</BaseTextItem>
<BaseTextItem>
<Location>563, 3</Location>
<Size>100, 26</Size>
<BackColor>White</BackColor>
<Font>Segoe UI, 15.75pt</Font>
<StringTrimming>None</StringTrimming>
<ContentAlignment>TopLeft</ContentAlignment>
<CanGrow>False</CanGrow>
<CanShrink>False</CanShrink>
<RTL>No</RTL>
<Text>=Today()</Text>
<DrawBorder>False</DrawBorder>
<FrameColor>Black</FrameColor>
<ForeColor>ControlText</ForeColor>
<Name>BaseTextItem2147483638</Name>
</BaseTextItem>
</Items>
<FrameColor>Black</FrameColor>
<Name>ReportPageHeader</Name>
</BaseSection>
<BaseSection>
<Location>50, 209</Location>
<Size>727, 115</Size>
<BackColor>White</BackColor>
<SectionOffset>0</SectionOffset>
<SectionMargin>0</SectionMargin>
<DrawBorder>False</DrawBorder>
<PageBreakAfter>False</PageBreakAfter>
<Items>
<BaseRowItem>
<Location>31, 72</Location>
<Size>641, 30</Size>
<BackColor>White</BackColor>
<DrawBorder>False</DrawBorder>
<ForeColor>Black</ForeColor>
<FrameColor>Black</FrameColor>
<Items>
<BaseDataItem>
<Location>443, 4</Location>
<Size>71, 20</Size>
<BackColor>White</BackColor>
<Font>Segoe UI, 9pt</Font>
<StringTrimming>None</StringTrimming>
<ContentAlignment>MiddleRight</ContentAlignment>
<CanGrow>False</CanGrow>
<CanShrink>False</CanShrink>
<RTL>No</RTL>
<Text>BaseDataItem2147483646</Text>
<DrawBorder>False</DrawBorder>
<FrameColor>Black</FrameColor>
<ForeColor>Black</ForeColor>
<ColumnName>ReferenceCount</ColumnName>
<Name>BaseDataItem2147483646</Name>
</BaseDataItem>
<BaseDataItem>
<Location>254, 4</Location>
<Size>156, 20</Size>
<BackColor>White</BackColor>
<Font>Microsoft Sans Serif, 10pt</Font>
<StringTrimming>None</StringTrimming>
<ContentAlignment>TopLeft</ContentAlignment>
<CanGrow>False</CanGrow>
<CanShrink>False</CanShrink>
<RTL>No</RTL>
<Text>References</Text>
<DrawBorder>False</DrawBorder>
<FrameColor>Black</FrameColor>
<ForeColor>Black</ForeColor>
<ColumnName>References</ColumnName>
<Name>BaseDataItem2</Name>
</BaseDataItem>
</Items>
<AlternateBackColor />
<ChangeBackColorEveryNRow>0</ChangeBackColorEveryNRow>
<Name>BaseRowItem1</Name>
</BaseRowItem>
<GroupHeader>
<Location>31, 22</Location>
<Size>641, 30</Size>
<BackColor>LightGray</BackColor>
<DrawBorder>False</DrawBorder>
<ForeColor>Black</ForeColor>
<FrameColor>Black</FrameColor>
<Items>
<BaseTextItem>
<Location>414, 7</Location>
<Size>100, 20</Size>
<BackColor>White</BackColor>
<Font>Segoe UI, 9.75pt</Font>
<StringTrimming>None</StringTrimming>
<ContentAlignment>MiddleRight</ContentAlignment>
<CanGrow>False</CanGrow>
<CanShrink>False</CanShrink>
<RTL>No</RTL>
<Text># of References</Text>
<DrawBorder>False</DrawBorder>
<FrameColor>Black</FrameColor>
<ForeColor>Black</ForeColor>
<Name>BaseTextItem2147483646</Name>
</BaseTextItem>
<BaseTextItem>
<Location>254, 2</Location>
<Size>100, 20</Size>
<BackColor>White</BackColor>
<Font>Microsoft Sans Serif, 10pt</Font>
<StringTrimming>None</StringTrimming>
<ContentAlignment>TopLeft</ContentAlignment>
<CanGrow>False</CanGrow>
<CanShrink>False</CanShrink>
<RTL>No</RTL>
<Text>References</Text>
<DrawBorder>False</DrawBorder>
<FrameColor>Black</FrameColor>
<ForeColor>Black</ForeColor>
<Name>BaseTextItem2147483636</Name>
</BaseTextItem>
<BaseDataItem>
<Location>12, 3</Location>
<Size>211, 20</Size>
<BackColor>White</BackColor>
<Font>Microsoft Sans Serif, 10pt</Font>
<StringTrimming>None</StringTrimming>
<ContentAlignment>TopLeft</ContentAlignment>
<CanGrow>False</CanGrow>
<CanShrink>False</CanShrink>
<RTL>No</RTL>
<Text>BaseDataItem1</Text>
<DrawBorder>False</DrawBorder>
<FrameColor>Black</FrameColor>
<ForeColor>Black</ForeColor>
<ColumnName>Name</ColumnName>
<Name>BaseDataItem1</Name>
</BaseDataItem>
</Items>
<AlternateBackColor />
<ChangeBackColorEveryNRow>0</ChangeBackColorEveryNRow>
<PageBreakOnGroupChange>False</PageBreakOnGroupChange>
<Name>GroupHeader1</Name>
</GroupHeader>
</Items>
<FrameColor>Black</FrameColor>
<Name>ReportDetail</Name>
</BaseSection>
<BaseSection>
<Location>50, 339</Location>
<Size>727, 36</Size>
<BackColor>White</BackColor>
<SectionOffset>0</SectionOffset>
<SectionMargin>0</SectionMargin>
<DrawBorder>False</DrawBorder>
<PageBreakAfter>False</PageBreakAfter>
<Items>
<BaseTextItem>
<Location>31, 5</Location>
<Size>555, 20</Size>
<BackColor>White</BackColor>
<Font>Segoe UI, 9.75pt</Font>
<StringTrimming>None</StringTrimming>
<ContentAlignment>TopLeft</ContentAlignment>
<CanGrow>False</CanGrow>
<CanShrink>False</CanShrink>
<RTL>No</RTL>
<Text>= Globals!ReportFolder + Globals!ReportName</Text>
<DrawBorder>False</DrawBorder>
<FrameColor>Black</FrameColor>
<ForeColor>ControlText</ForeColor>
<Name>BaseTextItem2147483641</Name>
</BaseTextItem>
<BaseTextItem>
<Location>624, 5</Location>
<Size>100, 20</Size>
<BackColor>White</BackColor>
<Font>Microsoft Sans Serif, 10pt</Font>
<StringTrimming>None</StringTrimming>
<ContentAlignment>TopLeft</ContentAlignment>
<CanGrow>False</CanGrow>
<CanShrink>False</CanShrink>
<DataType>System.String</DataType>
<RTL>No</RTL>
<Text>= 'Page : ' + Globals!PageNumber</Text>
<DrawBorder>False</DrawBorder>
<FrameColor>Black</FrameColor>
<ForeColor>Black</ForeColor>
<Name>PageNumber1</Name>
</BaseTextItem>
</Items>
<FrameColor>Black</FrameColor>
<Name>ReportPageFooter</Name>
</BaseSection>
<BaseSection>
<Location>50, 390</Location>
<Size>727, 60</Size>
<BackColor>White</BackColor>
<SectionOffset>0</SectionOffset>
<SectionMargin>0</SectionMargin>
<DrawBorder>False</DrawBorder>
<PageBreakAfter>False</PageBreakAfter>
<Items />
<FrameColor>Black</FrameColor>
<Name>ReportFooter</Name>
</BaseSection>
</SectionCollection>
</ReportModel>

55
src/AddIns/Analysis/CodeQuality/Reporting/DependencyReport.cs

@ -19,10 +19,13 @@ @@ -19,10 +19,13 @@
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.ComponentModel;
using System.Reflection;
using ICSharpCode.Reporting;
using ICSharpCode.Reporting.Interfaces;
using ICSharpCode.Reporting.Items;
using ICSharpCode.CodeQuality.Engine.Dom;
using ICSharpCode.Reports.Core;
namespace ICSharpCode.CodeQuality.Reporting
{
@ -31,43 +34,45 @@ namespace ICSharpCode.CodeQuality.Reporting @@ -31,43 +34,45 @@ namespace ICSharpCode.CodeQuality.Reporting
/// </summary>
public class DependencyReport:BaseReport
{
private const string overviewReport = "DependencyReport.srd";
const string overviewReport = "DependencyReport.srd";
public DependencyReport(List<string> fileNames):base(fileNames)
{
}
public IReportCreator Run(ReadOnlyCollection<AssemblyNode> list)
{
System.Reflection.Assembly asm = Assembly.GetExecutingAssembly();
System.IO.Stream stream = asm.GetManifestResourceStream("ICSharpCode.CodeQuality.Reporting.DependencyReport.srd");
var model = ReportEngine.LoadReportModel(stream);
ReportSettings = model.ReportSettings;
{
var newList = MakeList (list);
IReportCreator creator = ReportEngine.CreatePageBuilder(model,newList,null);
creator.BuildExportList();
return creator;
var asm = Assembly.GetExecutingAssembly();
var stream = asm.GetManifestResourceStream("ICSharpCode.CodeQuality.Reporting.DependencyReport.srd");
var reportingFactory = new ReportingFactory();
var reportCreator = reportingFactory.ReportCreator (stream,newList);
ReportSettings = reportingFactory.ReportModel.ReportSettings;
var groupColumn = (GroupColumn)ReportSettings.GroupColumnsCollection[0];
groupColumn.GroupSortColumn = new SortColumn() {
ColumnName = "ReferenceCount",
SortDirection = ListSortDirection.Ascending
};
reportCreator.BuildExportList();
return reportCreator;
}
private List <DependencyViewModel> MakeList (ReadOnlyCollection<AssemblyNode> list)
List <DependencyViewModel> MakeList (ReadOnlyCollection<AssemblyNode> list)
{
var newList = new List<DependencyViewModel>();
foreach (var baseNode in list) {
foreach (var element in list) {
if (baseNode.Name != element.Name) {
var referenceCount = baseNode.GetUses(element);
if (referenceCount > 0) {
newList.Add(new DependencyViewModel()
{
Node = baseNode,
References = element.Name,
ReferenceCount = referenceCount
});
}
var referenceCount = baseNode.GetUses(element);
if (referenceCount > 0) {
newList.Add(new DependencyViewModel()
{
Node = baseNode,
References = element.Name,
ReferenceCount = referenceCount
});
}
}
}
}
@ -76,7 +81,7 @@ namespace ICSharpCode.CodeQuality.Reporting @@ -76,7 +81,7 @@ namespace ICSharpCode.CodeQuality.Reporting
}
internal class DependencyViewModel:ReportViewModel
class DependencyViewModel:ReportViewModel
{
public DependencyViewModel()
{

102
src/AddIns/Analysis/CodeQuality/Reporting/DependencyReport.srd

@ -17,6 +17,7 @@ @@ -17,6 +17,7 @@
<GroupColumnsCollection>
<GroupColumn>
<SortDirection>Ascending</SortDirection>
<CaseSensitive>False</CaseSensitive>
<ColumnName>Name</ColumnName>
<DataTypeName>System.String</DataTypeName>
</GroupColumn>
@ -37,7 +38,6 @@ @@ -37,7 +38,6 @@
<Location>50, 50</Location>
<Size>727, 60</Size>
<BackColor>White</BackColor>
<VisibleInReport>False</VisibleInReport>
<SectionOffset>0</SectionOffset>
<SectionMargin>0</SectionMargin>
<DrawBorder>False</DrawBorder>
@ -47,7 +47,6 @@ @@ -47,7 +47,6 @@
<Location>157, 3</Location>
<Size>414, 40</Size>
<BackColor>White</BackColor>
<VisibleInReport>True</VisibleInReport>
<Font>Segoe UI, 18pt, style=Bold</Font>
<StringTrimming>None</StringTrimming>
<ContentAlignment>TopLeft</ContentAlignment>
@ -68,7 +67,6 @@ @@ -68,7 +67,6 @@
<Location>50, 125</Location>
<Size>727, 69</Size>
<BackColor>White</BackColor>
<VisibleInReport>False</VisibleInReport>
<SectionOffset>0</SectionOffset>
<SectionMargin>0</SectionMargin>
<DrawBorder>False</DrawBorder>
@ -78,7 +76,6 @@ @@ -78,7 +76,6 @@
<Location>22, 47</Location>
<Size>660, 10</Size>
<BackColor>White</BackColor>
<VisibleInReport>True</VisibleInReport>
<ForeColor>Black</ForeColor>
<FromPoint>10, 5</FromPoint>
<ToPoint>647, 5</ToPoint>
@ -93,7 +90,6 @@ @@ -93,7 +90,6 @@
<Location>222, 3</Location>
<Size>257, 26</Size>
<BackColor>White</BackColor>
<VisibleInReport>True</VisibleInReport>
<Font>Microsoft Sans Serif, 15.75pt</Font>
<StringTrimming>None</StringTrimming>
<ContentAlignment>TopLeft</ContentAlignment>
@ -111,14 +107,15 @@ @@ -111,14 +107,15 @@
<Location>563, 3</Location>
<Size>100, 26</Size>
<BackColor>White</BackColor>
<VisibleInReport>True</VisibleInReport>
<Font>Segoe UI, 15.75pt</Font>
<FormatString>dd/MM/yyyy</FormatString>
<StringTrimming>None</StringTrimming>
<ContentAlignment>TopLeft</ContentAlignment>
<CanGrow>False</CanGrow>
<CanShrink>False</CanShrink>
<DataType>System.DateTime</DataType>
<RTL>No</RTL>
<Text>=Today()</Text>
<Text>=Today</Text>
<DrawBorder>False</DrawBorder>
<FrameColor>Black</FrameColor>
<ForeColor>ControlText</ForeColor>
@ -132,67 +129,49 @@ @@ -132,67 +129,49 @@
<Location>50, 209</Location>
<Size>727, 115</Size>
<BackColor>White</BackColor>
<VisibleInReport>False</VisibleInReport>
<SectionOffset>0</SectionOffset>
<SectionMargin>0</SectionMargin>
<DrawBorder>False</DrawBorder>
<PageBreakAfter>False</PageBreakAfter>
<Items>
<BaseRowItem>
<Location>31, 72</Location>
<Size>641, 30</Size>
<BaseDataItem>
<Location>445, 72</Location>
<Size>71, 20</Size>
<BackColor>White</BackColor>
<VisibleInReport>True</VisibleInReport>
<Font>Segoe UI, 9pt</Font>
<StringTrimming>None</StringTrimming>
<ContentAlignment>MiddleRight</ContentAlignment>
<CanGrow>False</CanGrow>
<CanShrink>False</CanShrink>
<RTL>No</RTL>
<Text>BaseDataItem2147483646</Text>
<DrawBorder>False</DrawBorder>
<FrameColor>Black</FrameColor>
<ForeColor>Black</ForeColor>
<ColumnName>ReferenceCount</ColumnName>
<Name>BaseDataItem2147483646</Name>
</BaseDataItem>
<BaseDataItem>
<Location>256, 72</Location>
<Size>156, 20</Size>
<BackColor>White</BackColor>
<Font>Microsoft Sans Serif, 10pt</Font>
<StringTrimming>None</StringTrimming>
<ContentAlignment>TopLeft</ContentAlignment>
<CanGrow>False</CanGrow>
<CanShrink>False</CanShrink>
<RTL>No</RTL>
<Text>References</Text>
<DrawBorder>False</DrawBorder>
<FrameColor>Black</FrameColor>
<Items>
<BaseDataItem>
<Location>443, 4</Location>
<Size>71, 20</Size>
<BackColor>White</BackColor>
<VisibleInReport>True</VisibleInReport>
<Font>Segoe UI, 9pt</Font>
<StringTrimming>None</StringTrimming>
<ContentAlignment>MiddleRight</ContentAlignment>
<CanGrow>False</CanGrow>
<CanShrink>False</CanShrink>
<RTL>No</RTL>
<Text>BaseDataItem2147483646</Text>
<DrawBorder>False</DrawBorder>
<FrameColor>Black</FrameColor>
<ForeColor>Black</ForeColor>
<ColumnName>ReferenceCount</ColumnName>
<Name>BaseDataItem2147483646</Name>
</BaseDataItem>
<BaseDataItem>
<Location>254, 4</Location>
<Size>156, 20</Size>
<BackColor>White</BackColor>
<VisibleInReport>True</VisibleInReport>
<Font>Microsoft Sans Serif, 10pt</Font>
<StringTrimming>None</StringTrimming>
<ContentAlignment>TopLeft</ContentAlignment>
<CanGrow>False</CanGrow>
<CanShrink>False</CanShrink>
<RTL>No</RTL>
<Text>References</Text>
<DrawBorder>False</DrawBorder>
<FrameColor>Black</FrameColor>
<ForeColor>Black</ForeColor>
<ColumnName>References</ColumnName>
<Name>BaseDataItem2</Name>
</BaseDataItem>
</Items>
<AlternateBackColor />
<ChangeBackColorEveryNRow>0</ChangeBackColorEveryNRow>
<Name>BaseRowItem1</Name>
</BaseRowItem>
<ForeColor>Black</ForeColor>
<ColumnName>References</ColumnName>
<Name>BaseDataItem2</Name>
</BaseDataItem>
<GroupHeader>
<Location>31, 22</Location>
<Size>641, 30</Size>
<BackColor>LightGray</BackColor>
<VisibleInReport>True</VisibleInReport>
<DrawBorder>False</DrawBorder>
<ForeColor>Black</ForeColor>
<FrameColor>Black</FrameColor>
@ -201,7 +180,6 @@ @@ -201,7 +180,6 @@
<Location>414, 7</Location>
<Size>100, 20</Size>
<BackColor>White</BackColor>
<VisibleInReport>True</VisibleInReport>
<Font>Segoe UI, 9.75pt</Font>
<StringTrimming>None</StringTrimming>
<ContentAlignment>MiddleRight</ContentAlignment>
@ -218,7 +196,6 @@ @@ -218,7 +196,6 @@
<Location>254, 2</Location>
<Size>100, 20</Size>
<BackColor>White</BackColor>
<VisibleInReport>True</VisibleInReport>
<Font>Microsoft Sans Serif, 10pt</Font>
<StringTrimming>None</StringTrimming>
<ContentAlignment>TopLeft</ContentAlignment>
@ -235,7 +212,6 @@ @@ -235,7 +212,6 @@
<Location>12, 3</Location>
<Size>211, 20</Size>
<BackColor>White</BackColor>
<VisibleInReport>True</VisibleInReport>
<Font>Microsoft Sans Serif, 10pt</Font>
<StringTrimming>None</StringTrimming>
<ContentAlignment>TopLeft</ContentAlignment>
@ -263,7 +239,6 @@ @@ -263,7 +239,6 @@
<Location>50, 339</Location>
<Size>727, 36</Size>
<BackColor>White</BackColor>
<VisibleInReport>False</VisibleInReport>
<SectionOffset>0</SectionOffset>
<SectionMargin>0</SectionMargin>
<DrawBorder>False</DrawBorder>
@ -271,9 +246,8 @@ @@ -271,9 +246,8 @@
<Items>
<BaseTextItem>
<Location>31, 5</Location>
<Size>555, 20</Size>
<Size>365, 20</Size>
<BackColor>White</BackColor>
<VisibleInReport>True</VisibleInReport>
<Font>Segoe UI, 9.75pt</Font>
<StringTrimming>None</StringTrimming>
<ContentAlignment>TopLeft</ContentAlignment>
@ -287,10 +261,9 @@ @@ -287,10 +261,9 @@
<Name>BaseTextItem2147483641</Name>
</BaseTextItem>
<BaseTextItem>
<Location>624, 5</Location>
<Size>100, 20</Size>
<Location>526, 5</Location>
<Size>198, 20</Size>
<BackColor>White</BackColor>
<VisibleInReport>True</VisibleInReport>
<Font>Microsoft Sans Serif, 10pt</Font>
<StringTrimming>None</StringTrimming>
<ContentAlignment>TopLeft</ContentAlignment>
@ -312,7 +285,6 @@ @@ -312,7 +285,6 @@
<Location>50, 390</Location>
<Size>727, 60</Size>
<BackColor>White</BackColor>
<VisibleInReport>False</VisibleInReport>
<SectionOffset>0</SectionOffset>
<SectionMargin>0</SectionMargin>
<DrawBorder>False</DrawBorder>

77
src/AddIns/Analysis/CodeQuality/Reporting/OverviewReport.cs

@ -23,9 +23,11 @@ using System.IO; @@ -23,9 +23,11 @@ using System.IO;
using System.Linq;
using System.Reflection;
using ICSharpCode.CodeQuality.Engine.Dom;
using ICSharpCode.NRefactory.Utils;
using ICSharpCode.Reports.Core;
using ICSharpCode.Reporting;
using ICSharpCode.Reporting.Interfaces;
using ICSharpCode.Reporting.Items;
using ICSharpCode.CodeQuality.Engine.Dom;
namespace ICSharpCode.CodeQuality.Reporting
{
@ -35,6 +37,7 @@ namespace ICSharpCode.CodeQuality.Reporting @@ -35,6 +37,7 @@ namespace ICSharpCode.CodeQuality.Reporting
public class OverviewReport:BaseReport
{
private const string overviewReport = "OverviewReport.srd";
ReadOnlyCollection<AssemblyNode> list;
public OverviewReport(List<string> fileNames):base(fileNames)
{
@ -42,27 +45,69 @@ namespace ICSharpCode.CodeQuality.Reporting @@ -42,27 +45,69 @@ namespace ICSharpCode.CodeQuality.Reporting
public IReportCreator Run(ReadOnlyCollection<AssemblyNode> list)
{
System.Reflection.Assembly asm = Assembly.GetExecutingAssembly();
System.IO.Stream stream = asm.GetManifestResourceStream("ICSharpCode.CodeQuality.Reporting.Overviewreport.srd");
var model = ReportEngine.LoadReportModel(stream);
ReportSettings = model.ReportSettings;
var r = from c in list
select new OverviewViewModel { Node = c};
this.list = list;
var asm = Assembly.GetExecutingAssembly();
var stream = asm.GetManifestResourceStream("ICSharpCode.CodeQuality.Reporting.Overviewreport.srd");
var p = new ReportParameters();
p.Parameters.Add(new BasicParameter ("param1",base.FileNames[0]));
p.Parameters.Add(new BasicParameter ("param2",list.Count.ToString()));
var viewModelList = CreateViewModel(list);
IReportCreator creator = ReportEngine.CreatePageBuilder(model,r.ToList(),p);
creator.BuildExportList();
return creator;
var reportingFactory = new ReportingFactory();
var reportCreator = reportingFactory.ReportCreator (stream,viewModelList);
ReportSettings = reportingFactory.ReportModel.ReportSettings;
// var reportParameters = new ParameterCollection();
// reportParameters.Add(new BasicParameter ("param1",base.FileNames[0]));
// reportParameters.Add(new BasicParameter ("param2",list.Count.ToString()));
//
// ReportSettings.ParameterCollection.AddRange(reportParameters);
reportCreator.SectionRendering += HandleSectionEvents;
reportCreator.BuildExportList();
return reportCreator;
}
static IEnumerable<OverviewViewModel> CreateViewModel(ReadOnlyCollection<AssemblyNode> list)
{
var newList = from c in list
select new OverviewViewModel {
Node = c
};
return newList;
}
void HandleSectionEvents(object sender, SectionEventArgs e)
{
var sectionName = e.Section.Name;
if (sectionName == ReportSectionNames.ReportHeader) {
var param1 = (BaseTextItem)e.Section.Items.FirstOrDefault(n => n.Name == "Param1");
// FileInfo fi =new FileInfo(FileNames[0]);
// var s = fi..Directory + fi.Name;
param1.Text = FileNames[0];
var param2 = (BaseTextItem)e.Section.Items.FirstOrDefault(n => n.Name == "Param2");
param2.Text = list.Count.ToString();
}
else if (sectionName == ReportSectionNames.ReportPageHeader) {
Console.WriteLine("PushPrinting :" +ReportSectionNames .ReportPageHeader);
}
else if (sectionName == ReportSectionNames.ReportDetail){
// Console.WriteLine("PushPrinting :" + ReportSectionNames.ReportDetail);
}
else if (sectionName == ReportSectionNames.ReportPageFooter){
// Console.WriteLine("PushPrinting :" + ReportSectionNames.ReportPageFooter);
}
else if (sectionName == ReportSectionNames.ReportFooter){
// Console.WriteLine("PushPrinting :" + ReportSectionNames.ReportFooter);
}
}
}
internal class OverviewViewModel:ReportViewModel
class OverviewViewModel:ReportViewModel
{
public OverviewViewModel ()
{

55
src/AddIns/Analysis/CodeQuality/Reporting/Overviewreport.srd

@ -15,15 +15,7 @@ @@ -15,15 +15,7 @@
<AvailableFieldsCollection />
<SortColumnsCollection />
<GroupColumnsCollection />
<ParameterCollection>
<BasicParameter>
<ParameterName>param1</ParameterName>
<Type>System.String</Type>
</BasicParameter>
<BasicParameter>
<ParameterName>param2</ParameterName>
</BasicParameter>
</ParameterCollection>
<ParameterCollection />
<SqlParameters />
<ConnectionString />
<CommandText />
@ -39,7 +31,6 @@ @@ -39,7 +31,6 @@
<Location>50, 50</Location>
<Size>727, 168</Size>
<BackColor>White</BackColor>
<VisibleInReport>False</VisibleInReport>
<SectionOffset>0</SectionOffset>
<SectionMargin>0</SectionMargin>
<DrawBorder>False</DrawBorder>
@ -49,7 +40,6 @@ @@ -49,7 +40,6 @@
<Location>122, 13</Location>
<Size>414, 40</Size>
<BackColor>White</BackColor>
<VisibleInReport>True</VisibleInReport>
<Font>Segoe UI, 18pt, style=Bold</Font>
<StringTrimming>None</StringTrimming>
<ContentAlignment>TopLeft</ContentAlignment>
@ -64,16 +54,17 @@ @@ -64,16 +54,17 @@
</BaseTextItem>
<BaseTextItem>
<Location>601, 59</Location>
<Size>100, 26</Size>
<Size>100, 34</Size>
<BackColor>White</BackColor>
<VisibleInReport>True</VisibleInReport>
<Font>Segoe UI, 15.75pt</Font>
<FormatString>dd/MM/yyyy</FormatString>
<StringTrimming>None</StringTrimming>
<ContentAlignment>TopLeft</ContentAlignment>
<CanGrow>False</CanGrow>
<CanShrink>False</CanShrink>
<DataType>System.DateTime</DataType>
<RTL>No</RTL>
<Text>=Today()</Text>
<Text>=Today</Text>
<DrawBorder>False</DrawBorder>
<FrameColor>Black</FrameColor>
<ForeColor>ControlText</ForeColor>
@ -83,7 +74,6 @@ @@ -83,7 +74,6 @@
<Location>12, 145</Location>
<Size>680, 10</Size>
<BackColor>White</BackColor>
<VisibleInReport>True</VisibleInReport>
<ForeColor>ControlText</ForeColor>
<FromPoint>10, 5</FromPoint>
<ToPoint>669, 6</ToPoint>
@ -98,24 +88,22 @@ @@ -98,24 +88,22 @@
<Location>139, 118</Location>
<Size>108, 20</Size>
<BackColor>White</BackColor>
<VisibleInReport>True</VisibleInReport>
<Font>Segoe UI, 9pt</Font>
<StringTrimming>None</StringTrimming>
<ContentAlignment>TopLeft</ContentAlignment>
<CanGrow>False</CanGrow>
<CanShrink>False</CanShrink>
<RTL>No</RTL>
<Text>=Parameters!param2</Text>
<Text>Parameters!param2</Text>
<DrawBorder>False</DrawBorder>
<FrameColor>Black</FrameColor>
<ForeColor>ControlText</ForeColor>
<Name>BaseTextItem2147483639</Name>
<Name>Param2</Name>
</BaseTextItem>
<BaseTextItem>
<Location>27, 118</Location>
<Size>106, 20</Size>
<BackColor>White</BackColor>
<VisibleInReport>True</VisibleInReport>
<Font>Segoe UI, 9pt</Font>
<StringTrimming>None</StringTrimming>
<ContentAlignment>TopLeft</ContentAlignment>
@ -130,16 +118,15 @@ @@ -130,16 +118,15 @@
</BaseTextItem>
<BaseTextItem>
<Location>139, 91</Location>
<Size>438, 20</Size>
<Size>377, 20</Size>
<BackColor>White</BackColor>
<VisibleInReport>True</VisibleInReport>
<Font>Segoe UI, 9pt</Font>
<StringTrimming>None</StringTrimming>
<ContentAlignment>TopLeft</ContentAlignment>
<CanGrow>False</CanGrow>
<CanGrow>True</CanGrow>
<CanShrink>False</CanShrink>
<RTL>No</RTL>
<Text>=Parameters!param1</Text>
<Text>Parameters!param1</Text>
<DrawBorder>False</DrawBorder>
<FrameColor>Black</FrameColor>
<ForeColor>ControlText</ForeColor>
@ -149,7 +136,6 @@ @@ -149,7 +136,6 @@
<Location>27, 91</Location>
<Size>106, 20</Size>
<BackColor>White</BackColor>
<VisibleInReport>True</VisibleInReport>
<Font>Segoe UI, 9pt</Font>
<StringTrimming>None</StringTrimming>
<ContentAlignment>TopLeft</ContentAlignment>
@ -166,7 +152,6 @@ @@ -166,7 +152,6 @@
<Location>195, 59</Location>
<Size>257, 26</Size>
<BackColor>White</BackColor>
<VisibleInReport>True</VisibleInReport>
<Font>Microsoft Sans Serif, 15.75pt</Font>
<StringTrimming>None</StringTrimming>
<ContentAlignment>TopLeft</ContentAlignment>
@ -188,7 +173,6 @@ @@ -188,7 +173,6 @@
<Location>50, 233</Location>
<Size>727, 60</Size>
<BackColor>White</BackColor>
<VisibleInReport>False</VisibleInReport>
<SectionOffset>0</SectionOffset>
<SectionMargin>0</SectionMargin>
<DrawBorder>False</DrawBorder>
@ -198,7 +182,6 @@ @@ -198,7 +182,6 @@
<Location>14, 16</Location>
<Size>658, 30</Size>
<BackColor>LightGray</BackColor>
<VisibleInReport>True</VisibleInReport>
<DrawBorder>False</DrawBorder>
<ForeColor>ControlText</ForeColor>
<FrameColor>Black</FrameColor>
@ -207,7 +190,6 @@ @@ -207,7 +190,6 @@
<Location>571, 7</Location>
<Size>41, 20</Size>
<BackColor>White</BackColor>
<VisibleInReport>True</VisibleInReport>
<Font>Segoe UI, 9pt</Font>
<StringTrimming>None</StringTrimming>
<ContentAlignment>MiddleRight</ContentAlignment>
@ -224,7 +206,6 @@ @@ -224,7 +206,6 @@
<Location>501, 7</Location>
<Size>53, 20</Size>
<BackColor>White</BackColor>
<VisibleInReport>True</VisibleInReport>
<Font>Segoe UI, 9pt</Font>
<StringTrimming>None</StringTrimming>
<ContentAlignment>MiddleRight</ContentAlignment>
@ -241,7 +222,6 @@ @@ -241,7 +222,6 @@
<Location>425, 7</Location>
<Size>55, 20</Size>
<BackColor>White</BackColor>
<VisibleInReport>True</VisibleInReport>
<Font>Segoe UI, 9pt</Font>
<StringTrimming>None</StringTrimming>
<ContentAlignment>MiddleRight</ContentAlignment>
@ -258,7 +238,6 @@ @@ -258,7 +238,6 @@
<Location>347, 7</Location>
<Size>52, 20</Size>
<BackColor>White</BackColor>
<VisibleInReport>True</VisibleInReport>
<Font>Segoe UI, 9pt</Font>
<StringTrimming>None</StringTrimming>
<ContentAlignment>MiddleRight</ContentAlignment>
@ -275,7 +254,6 @@ @@ -275,7 +254,6 @@
<Location>267, 7</Location>
<Size>55, 20</Size>
<BackColor>White</BackColor>
<VisibleInReport>True</VisibleInReport>
<Font>Segoe UI, 9pt</Font>
<StringTrimming>None</StringTrimming>
<ContentAlignment>MiddleRight</ContentAlignment>
@ -292,7 +270,6 @@ @@ -292,7 +270,6 @@
<Location>4, 7</Location>
<Size>100, 20</Size>
<BackColor>White</BackColor>
<VisibleInReport>True</VisibleInReport>
<Font>Segoe UI, 9pt</Font>
<StringTrimming>None</StringTrimming>
<ContentAlignment>TopLeft</ContentAlignment>
@ -318,7 +295,6 @@ @@ -318,7 +295,6 @@
<Location>50, 308</Location>
<Size>727, 60</Size>
<BackColor>White</BackColor>
<VisibleInReport>False</VisibleInReport>
<SectionOffset>0</SectionOffset>
<SectionMargin>0</SectionMargin>
<DrawBorder>False</DrawBorder>
@ -328,7 +304,6 @@ @@ -328,7 +304,6 @@
<Location>14, 14</Location>
<Size>658, 30</Size>
<BackColor>White</BackColor>
<VisibleInReport>True</VisibleInReport>
<DrawBorder>False</DrawBorder>
<ForeColor>Black</ForeColor>
<FrameColor>Black</FrameColor>
@ -337,7 +312,6 @@ @@ -337,7 +312,6 @@
<Location>571, 3</Location>
<Size>41, 20</Size>
<BackColor>White</BackColor>
<VisibleInReport>True</VisibleInReport>
<Font>Segoe UI, 9pt</Font>
<StringTrimming>None</StringTrimming>
<ContentAlignment>MiddleRight</ContentAlignment>
@ -355,7 +329,6 @@ @@ -355,7 +329,6 @@
<Location>501, 3</Location>
<Size>53, 20</Size>
<BackColor>White</BackColor>
<VisibleInReport>True</VisibleInReport>
<Font>Segoe UI, 9pt</Font>
<StringTrimming>None</StringTrimming>
<ContentAlignment>MiddleRight</ContentAlignment>
@ -373,7 +346,6 @@ @@ -373,7 +346,6 @@
<Location>425, 3</Location>
<Size>55, 20</Size>
<BackColor>White</BackColor>
<VisibleInReport>True</VisibleInReport>
<Font>Segoe UI, 9pt</Font>
<StringTrimming>None</StringTrimming>
<ContentAlignment>MiddleRight</ContentAlignment>
@ -391,7 +363,6 @@ @@ -391,7 +363,6 @@
<Location>347, 3</Location>
<Size>52, 20</Size>
<BackColor>White</BackColor>
<VisibleInReport>True</VisibleInReport>
<Font>Segoe UI, 9pt</Font>
<StringTrimming>None</StringTrimming>
<ContentAlignment>MiddleRight</ContentAlignment>
@ -409,7 +380,6 @@ @@ -409,7 +380,6 @@
<Location>268, 3</Location>
<Size>54, 20</Size>
<BackColor>White</BackColor>
<VisibleInReport>True</VisibleInReport>
<Font>Segoe UI, 9pt</Font>
<FormatString>0</FormatString>
<StringTrimming>None</StringTrimming>
@ -429,7 +399,6 @@ @@ -429,7 +399,6 @@
<Location>4, 3</Location>
<Size>258, 20</Size>
<BackColor>White</BackColor>
<VisibleInReport>True</VisibleInReport>
<Font>Microsoft Sans Serif, 10pt</Font>
<StringTrimming>None</StringTrimming>
<ContentAlignment>TopLeft</ContentAlignment>
@ -456,7 +425,6 @@ @@ -456,7 +425,6 @@
<Location>50, 383</Location>
<Size>727, 37</Size>
<BackColor>White</BackColor>
<VisibleInReport>False</VisibleInReport>
<SectionOffset>0</SectionOffset>
<SectionMargin>0</SectionMargin>
<DrawBorder>False</DrawBorder>
@ -466,7 +434,6 @@ @@ -466,7 +434,6 @@
<Location>14, 3</Location>
<Size>573, 20</Size>
<BackColor>White</BackColor>
<VisibleInReport>True</VisibleInReport>
<Font>Segoe UI, 9.75pt</Font>
<StringTrimming>None</StringTrimming>
<ContentAlignment>TopLeft</ContentAlignment>
@ -483,7 +450,6 @@ @@ -483,7 +450,6 @@
<Location>614, 3</Location>
<Size>100, 20</Size>
<BackColor>White</BackColor>
<VisibleInReport>True</VisibleInReport>
<Font>Microsoft Sans Serif, 10pt</Font>
<StringTrimming>None</StringTrimming>
<ContentAlignment>TopLeft</ContentAlignment>
@ -505,7 +471,6 @@ @@ -505,7 +471,6 @@
<Location>50, 435</Location>
<Size>727, 60</Size>
<BackColor>White</BackColor>
<VisibleInReport>False</VisibleInReport>
<SectionOffset>0</SectionOffset>
<SectionMargin>0</SectionMargin>
<DrawBorder>False</DrawBorder>

2
src/AddIns/BackendBindings/CSharpBinding/Project/CSharpBinding.addin

@ -339,6 +339,7 @@ @@ -339,6 +339,7 @@
<Class class = "ICSharpCode.NRefactory.CSharp.Refactoring.SimplifyConditionalTernaryExpressionIssue" />
<Class class = "ICSharpCode.NRefactory.CSharp.Refactoring.SimplifyLinqExpressionIssue" />
<Class class = "ICSharpCode.NRefactory.CSharp.Refactoring.StaticConstructorParameterIssue" />
<Class class = "ICSharpCode.NRefactory.CSharp.Refactoring.StaticEventSubscriptionIssue" />
<Class class = "ICSharpCode.NRefactory.CSharp.Refactoring.StaticFieldInGenericTypeIssue" />
<Class class = "ICSharpCode.NRefactory.CSharp.Refactoring.StringCompareIsCultureSpecificIssue" />
<Class class = "ICSharpCode.NRefactory.CSharp.Refactoring.StringCompareToIsCultureSpecificIssue" />
@ -428,6 +429,7 @@ @@ -428,6 +429,7 @@
<CSharpCodeActionProvider class = "ICSharpCode.NRefactory.CSharp.Refactoring.CreateOverloadWithoutParameterAction" />
<CSharpCodeActionProvider class = "ICSharpCode.NRefactory.CSharp.Refactoring.CreatePropertyAction" />
<CSharpCodeActionProvider class = "ICSharpCode.NRefactory.CSharp.Refactoring.CS1520MethodMustHaveAReturnTypeAction" />
<CSharpCodeActionProvider class = "ICSharpCode.NRefactory.CSharp.Refactoring.CS1105ExtensionMethodMustBeDeclaredStaticAction" />
<CSharpCodeActionProvider class = "ICSharpCode.NRefactory.CSharp.Refactoring.DeclareLocalVariableAction" />
<CSharpCodeActionProvider class = "ICSharpCode.NRefactory.CSharp.Refactoring.ExtensionMethodInvocationToStaticMethodInvocationAction" />
<CSharpCodeActionProvider class = "ICSharpCode.NRefactory.CSharp.Refactoring.ExtractAnonymousMethodAction" />

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

@ -68,6 +68,9 @@ @@ -68,6 +68,9 @@
</ItemGroup>
<ItemGroup>
<Compile Include="Configuration\AssemblyInfo.cs" />
<Compile Include="Src\CaretReferenceHighlightRenderer.cs">
<DependentUpon>CSharpSemanticHighlighter.cs</DependentUpon>
</Compile>
<Compile Include="Src\CodeManipulation.cs" />
<Compile Include="Src\Completion\CSharpCompletionContext.cs" />
<Compile Include="Src\Completion\CSharpInsightItem.cs" />
@ -80,6 +83,9 @@ @@ -80,6 +83,9 @@
<Compile Include="Src\Completion\SegmentTrackingOutputFormatter.cs" />
<Compile Include="Src\Completion\TypeCompletionData.cs" />
<Compile Include="Src\Completion\XmlDocCompletionData.cs" />
<Compile Include="Src\CSharpSemanticHighlighterVisitor.cs">
<DependentUpon>CSharpSemanticHighlighter.cs</DependentUpon>
</Compile>
<Compile Include="Src\FormattingStrategy\CSharpFormatter.cs" />
<Compile Include="Src\FormsDesigner\CSharpDesignerGenerator.cs" />
<Compile Include="Src\FormsDesigner\CSharpDesignerLoader.cs" />

20
src/AddIns/BackendBindings/CSharpBinding/Project/Src/CSharpLanguageBinding.cs

@ -61,15 +61,14 @@ namespace CSharpBinding @@ -61,15 +61,14 @@ namespace CSharpBinding
IssueManager inspectionManager;
IList<IContextActionProvider> contextActionProviders;
CodeManipulation codeManipulation;
CSharpSemanticHighlighter highlighter;
CancellationTokenSource caretMovementTokenSource;
CaretReferenceHighlightRenderer renderer;
public void Attach(ITextEditor editor)
{
this.editor = editor;
inspectionManager = new IssueManager(editor);
codeManipulation = new CodeManipulation(editor);
this.editor.Caret.LocationChanged += CaretLocationChanged;
renderer = new CaretReferenceHighlightRenderer(editor);
if (!editor.ContextActionProviders.IsReadOnly) {
contextActionProviders = AddInTree.BuildItems<IContextActionProvider>("/SharpDevelop/ViewContent/TextEditor/C#/ContextActions", null);
@ -87,21 +86,8 @@ namespace CSharpBinding @@ -87,21 +86,8 @@ namespace CSharpBinding
if (contextActionProviders != null) {
editor.ContextActionProviders.RemoveAll(contextActionProviders.Contains);
}
this.editor.Caret.LocationChanged -= CaretLocationChanged;
renderer.Dispose();
this.editor = null;
}
void CaretLocationChanged(object sender, EventArgs e)
{
if (highlighter == null)
highlighter = editor.GetService<CSharpSemanticHighlighter>();
if (highlighter == null)
return;
if (caretMovementTokenSource != null)
caretMovementTokenSource.Cancel();
caretMovementTokenSource = new CancellationTokenSource();
var rr = SD.ParserService.Resolve(editor.FileName, editor.Caret.Location, editor.Document, cancellationToken: caretMovementTokenSource.Token);
highlighter.SetCurrentSymbol(rr.GetSymbol());
}
}
}

363
src/AddIns/BackendBindings/CSharpBinding/Project/Src/CSharpSemanticHighlighter.cs

@ -18,19 +18,13 @@ @@ -18,19 +18,13 @@
using System;
using System.Collections.Generic;
using System.ComponentModel.Design;
using System.Diagnostics;
using System.Linq;
using System.Windows.Media;
using ICSharpCode.AvalonEdit.Document;
using ICSharpCode.AvalonEdit.Highlighting;
using ICSharpCode.Core;
using ICSharpCode.NRefactory;
using ICSharpCode.NRefactory.CSharp;
using ICSharpCode.NRefactory.CSharp.Analysis;
using ICSharpCode.NRefactory.CSharp.Resolver;
using ICSharpCode.NRefactory.Editor;
using ICSharpCode.NRefactory.Semantics;
using ICSharpCode.NRefactory.TypeSystem;
using ICSharpCode.SharpDevelop;
using ICSharpCode.SharpDevelop.Parser;
@ -41,12 +35,15 @@ namespace CSharpBinding @@ -41,12 +35,15 @@ namespace CSharpBinding
/// <summary>
/// Semantic highlighting for C#.
/// </summary>
public class CSharpSemanticHighlighter : SemanticHighlightingVisitor<HighlightingColor>, IHighlighter
public class CSharpSemanticHighlighter : IHighlighter
{
readonly IDocument document;
internal CSharpSemanticHighlighterVisitor visitor;
List<IDocumentLine> invalidLines;
List<CachedLine> cachedLines;
internal CSharpFullParseInformation parseInfo;
bool hasCrashed;
bool forceParseOnNextRefresh;
bool eventHandlersAreRegistered;
@ -54,40 +51,14 @@ namespace CSharpBinding @@ -54,40 +51,14 @@ namespace CSharpBinding
int lineNumber;
HighlightedLine line;
CSharpFullParseInformation parseInfo;
ISymbolReference currentSymbolReference;
IResolveVisitorNavigator currentNavigator;
HighlightingColor symbolReferenceColor;
#region Constructor + Dispose
public CSharpSemanticHighlighter(IDocument document)
{
if (document == null)
throw new ArgumentNullException("document");
this.document = document;
var highlighting = HighlightingManager.Instance.GetDefinition("C#");
//this.defaultTextColor = ???;
this.referenceTypeColor = highlighting.GetNamedColor("ReferenceTypes");
this.valueTypeColor = highlighting.GetNamedColor("ValueTypes");
this.interfaceTypeColor = this.referenceTypeColor;
this.enumerationTypeColor = this.valueKeywordColor;
this.typeParameterTypeColor = this.referenceTypeColor;
this.delegateTypeColor = this.referenceTypeColor;
this.symbolReferenceColor = new HighlightingColor { Background = new SimpleHighlightingBrush(DefaultFillColor) };
this.methodDeclarationColor = this.methodCallColor = highlighting.GetNamedColor("MethodCall");
//this.eventDeclarationColor = this.eventAccessColor = defaultTextColor;
//this.propertyDeclarationColor = this.propertyAccessColor = defaultTextColor;
this.fieldDeclarationColor = this.fieldAccessColor = highlighting.GetNamedColor("FieldAccess");
//this.variableDeclarationColor = this.variableAccessColor = defaultTextColor;
//this.parameterDeclarationColor = this.parameterAccessColor = defaultTextColor;
this.valueKeywordColor = highlighting.GetNamedColor("NullOrValueKeywords");
//this.externAliasKeywordColor = ...;
this.parameterModifierColor = highlighting.GetNamedColor("ParameterModifiers");
this.inactiveCodeColor = highlighting.GetNamedColor("InactiveCode");
this.syntaxErrorColor = highlighting.GetNamedColor("SemanticError");
this.visitor = new CSharpSemanticHighlighterVisitor(this, document);
if (document is TextDocument && SD.MainThread.CheckAccess()) {
// Use the cache only for the live AvalonEdit document
@ -101,7 +72,6 @@ namespace CSharpBinding @@ -101,7 +72,6 @@ namespace CSharpBinding
SD.ParserService.ParseInformationUpdated += ParserService_ParseInformationUpdated;
SD.ParserService.LoadSolutionProjectsThread.Finished += ParserService_LoadSolutionProjectsThreadEnded;
eventHandlersAreRegistered = true;
document.GetService<IServiceContainer>().AddService(typeof(CSharpSemanticHighlighter), this);
}
}
@ -111,98 +81,11 @@ namespace CSharpBinding @@ -111,98 +81,11 @@ namespace CSharpBinding
SD.ParserService.ParseInformationUpdated -= ParserService_ParseInformationUpdated;
SD.ParserService.LoadSolutionProjectsThread.Finished -= ParserService_LoadSolutionProjectsThreadEnded;
eventHandlersAreRegistered = false;
document.GetService<IServiceContainer>().RemoveService(typeof(CSharpSemanticHighlighter));
}
this.resolver = null;
this.visitor.Dispose();
this.parseInfo = null;
}
#endregion
#region Caching
// If a line gets edited and we need to display it while no parse information is ready for the
// changed file, the line would flicker (semantic highlightings disappear temporarily).
// We avoid this issue by storing the semantic highlightings and updating them on document changes
// (using anchor movement)
class CachedLine
{
public readonly HighlightedLine HighlightedLine;
public ITextSourceVersion OldVersion;
/// <summary>
/// Gets whether the cache line is valid (no document changes since it was created).
/// This field gets set to false when Update() is called.
/// </summary>
public bool IsValid;
public IDocumentLine DocumentLine { get { return HighlightedLine.DocumentLine; } }
public CachedLine(HighlightedLine highlightedLine, ITextSourceVersion fileVersion)
{
if (highlightedLine == null)
throw new ArgumentNullException("highlightedLine");
if (fileVersion == null)
throw new ArgumentNullException("fileVersion");
this.HighlightedLine = highlightedLine;
this.OldVersion = fileVersion;
this.IsValid = true;
}
public void Update(ITextSourceVersion newVersion)
{
// Apply document changes to all highlighting sections:
foreach (TextChangeEventArgs change in OldVersion.GetChangesTo(newVersion)) {
foreach (HighlightedSection section in HighlightedLine.Sections) {
int endOffset = section.Offset + section.Length;
section.Offset = change.GetNewOffset(section.Offset);
endOffset = change.GetNewOffset(endOffset);
section.Length = endOffset - section.Offset;
}
}
// The resulting sections might have become invalid:
// - zero-length if section was deleted,
// - a section might have moved outside the range of this document line (newline inserted in document = line split up)
// So we will remove all highlighting sections which have become invalid.
int lineStart = HighlightedLine.DocumentLine.Offset;
int lineEnd = lineStart + HighlightedLine.DocumentLine.Length;
for (int i = 0; i < HighlightedLine.Sections.Count; i++) {
HighlightedSection section = HighlightedLine.Sections[i];
if (section.Offset < lineStart || section.Offset + section.Length > lineEnd || section.Length <= 0)
HighlightedLine.Sections.RemoveAt(i--);
}
this.OldVersion = newVersion;
this.IsValid = false;
}
}
#endregion
#region Event Handlers
void syntaxHighlighter_VisibleDocumentLinesChanged(object sender, EventArgs e)
{
}
void ParserService_LoadSolutionProjectsThreadEnded(object sender, EventArgs e)
{
InvalidateAll();
}
void ParserService_ParseInformationUpdated(object sender, ParseInformationEventArgs e)
{
if (FileUtility.IsEqualFileName(e.FileName, document.FileName) && invalidLines.Count > 0) {
cachedLines.Clear();
foreach (IDocumentLine line in invalidLines) {
if (!line.IsDeleted) {
OnHighlightingStateChanged(line.LineNumber, line.LineNumber);
}
}
invalidLines.Clear();
}
}
#endregion
#region IHighlighter implementation
public event HighlightingStateChangedEventHandler HighlightingStateChanged;
protected virtual void OnHighlightingStateChanged(int fromLineNumber, int toLineNumber)
@ -298,20 +181,26 @@ namespace CSharpBinding @@ -298,20 +181,26 @@ namespace CSharpBinding
}
}
if (resolver == null) {
if (visitor.Resolver == null) {
var compilation = SD.ParserService.GetCompilationForFile(parseInfo.FileName);
resolver = parseInfo.GetResolver(compilation);
visitor.Resolver = parseInfo.GetResolver(compilation);
}
line = new HighlightedLine(document, documentLine);
this.lineNumber = lineNumber;
this.regionStart = new TextLocation(lineNumber, 1);
this.regionEnd = new TextLocation(lineNumber, 1 + document.GetLineByNumber(lineNumber).Length);
visitor.UpdateLineInformation(lineNumber);
if (Debugger.IsAttached) {
parseInfo.SyntaxTree.AcceptVisitor(this);
parseInfo.SyntaxTree.AcceptVisitor(visitor);
#if DEBUG
line.ValidateInvariants();
#endif
} else {
try {
parseInfo.SyntaxTree.AcceptVisitor(this);
parseInfo.SyntaxTree.AcceptVisitor(visitor);
#if DEBUG
line.ValidateInvariants();
#endif
} catch (Exception ex) {
hasCrashed = true;
throw new ApplicationException("Error highlighting line " + lineNumber, ex);
@ -324,50 +213,7 @@ namespace CSharpBinding @@ -324,50 +213,7 @@ namespace CSharpBinding
return line;
}
#if DEBUG
public override void VisitSyntaxTree(ICSharpCode.NRefactory.CSharp.SyntaxTree syntaxTree)
{
base.VisitSyntaxTree(syntaxTree);
line.ValidateInvariants();
}
#endif
HighlightingColor IHighlighter.DefaultTextColor {
get {
return null;
}
}
public void BeginHighlighting()
{
if (inHighlightingGroup)
throw new InvalidOperationException();
inHighlightingGroup = true;
if (invalidLines == null) {
// if invalidation isn't available, we're forced to parse the file now
forceParseOnNextRefresh = true;
}
}
public void EndHighlighting()
{
inHighlightingGroup = false;
this.resolver = null;
this.parseInfo = null;
// TODO use this to remove cached lines which are no longer visible
// var visibleDocumentLines = new HashSet<IDocumentLine>(syntaxHighlighter.GetVisibleDocumentLines());
// cachedLines.RemoveAll(c => !visibleDocumentLines.Contains(c.DocumentLine));
}
public HighlightingColor GetNamedColor(string name)
{
return null;
}
#endregion
#region Colorize
protected override void Colorize(TextLocation start, TextLocation end, HighlightingColor color)
internal void Colorize(TextLocation start, TextLocation end, HighlightingColor color)
{
if (color == null)
return;
@ -398,57 +244,97 @@ namespace CSharpBinding @@ -398,57 +244,97 @@ namespace CSharpBinding
}
}
protected override void Colorize(AstNode node, HighlightingColor color)
{
if (currentSymbolReference != null && currentNavigator == null)
currentNavigator = InitNavigator();
if (currentNavigator != null) {
var resolverNode = node;
while (CSharpAstResolver.IsUnresolvableNode(resolverNode) && resolverNode.Parent != null)
resolverNode = resolverNode.Parent;
if (resolverNode.Role == Roles.TargetExpression && resolverNode.Parent is InvocationExpression)
resolverNode = resolverNode.Parent;
if (resolverNode.Role == Roles.Type && resolverNode.Parent is ObjectCreateExpression)
resolverNode = resolverNode.Parent;
if (node is Identifier && !node.IsNull)
resolverNode.AddAnnotation(node);
if (color != null)
resolverNode.AddAnnotation(color);
currentNavigator.Resolved(resolverNode, resolver.Resolve(resolverNode));
HighlightingColor IHighlighter.DefaultTextColor {
get {
return null;
}
base.Colorize(node, color);
}
protected override void Colorize(Identifier identifier, ResolveResult rr)
public void BeginHighlighting()
{
if (currentSymbolReference != null && currentNavigator == null)
currentNavigator = InitNavigator();
if (currentNavigator != null) {
currentNavigator.Resolved(identifier, rr);
if (inHighlightingGroup)
throw new InvalidOperationException();
inHighlightingGroup = true;
if (invalidLines == null) {
// if invalidation isn't available, we're forced to parse the file now
forceParseOnNextRefresh = true;
}
base.Colorize(identifier, rr);
}
public override void VisitPrimitiveType(PrimitiveType primitiveType)
public void EndHighlighting()
{
// highlight usages of primitive types as well.
Colorize(primitiveType, null);
inHighlightingGroup = false;
visitor.Resolver = null;
this.parseInfo = null;
// TODO use this to remove cached lines which are no longer visible
// var visibleDocumentLines = new HashSet<IDocumentLine>(syntaxHighlighter.GetVisibleDocumentLines());
// cachedLines.RemoveAll(c => !visibleDocumentLines.Contains(c.DocumentLine));
}
public readonly Color DefaultFillColor = Color.FromArgb(22, 30, 130, 255);
public void SetCurrentSymbol(ISymbol symbol)
public HighlightingColor GetNamedColor(string name)
{
currentNavigator = null;
currentSymbolReference = null;
if (symbol != null)
currentSymbolReference = symbol.ToReference();
InvalidateAll();
return null;
}
#region Caching
// If a line gets edited and we need to display it while no parse information is ready for the
// changed file, the line would flicker (semantic highlightings disappear temporarily).
// We avoid this issue by storing the semantic highlightings and updating them on document changes
// (using anchor movement)
class CachedLine
{
public readonly HighlightedLine HighlightedLine;
public ITextSourceVersion OldVersion;
/// <summary>
/// Gets whether the cache line is valid (no document changes since it was created).
/// This field gets set to false when Update() is called.
/// </summary>
public bool IsValid;
public IDocumentLine DocumentLine { get { return HighlightedLine.DocumentLine; } }
public CachedLine(HighlightedLine highlightedLine, ITextSourceVersion fileVersion)
{
if (highlightedLine == null)
throw new ArgumentNullException("highlightedLine");
if (fileVersion == null)
throw new ArgumentNullException("fileVersion");
this.HighlightedLine = highlightedLine;
this.OldVersion = fileVersion;
this.IsValid = true;
}
public void Update(ITextSourceVersion newVersion)
{
// Apply document changes to all highlighting sections:
foreach (TextChangeEventArgs change in OldVersion.GetChangesTo(newVersion)) {
foreach (HighlightedSection section in HighlightedLine.Sections) {
int endOffset = section.Offset + section.Length;
section.Offset = change.GetNewOffset(section.Offset);
endOffset = change.GetNewOffset(endOffset);
section.Length = endOffset - section.Offset;
}
}
// The resulting sections might have become invalid:
// - zero-length if section was deleted,
// - a section might have moved outside the range of this document line (newline inserted in document = line split up)
// So we will remove all highlighting sections which have become invalid.
int lineStart = HighlightedLine.DocumentLine.Offset;
int lineEnd = lineStart + HighlightedLine.DocumentLine.Length;
for (int i = 0; i < HighlightedLine.Sections.Count; i++) {
HighlightedSection section = HighlightedLine.Sections[i];
if (section.Offset < lineStart || section.Offset + section.Length > lineEnd || section.Length <= 0)
HighlightedLine.Sections.RemoveAt(i--);
}
this.OldVersion = newVersion;
this.IsValid = false;
}
}
void InvalidateAll()
{
cachedLines.Clear();
@ -456,49 +342,30 @@ namespace CSharpBinding @@ -456,49 +342,30 @@ namespace CSharpBinding
forceParseOnNextRefresh = true;
OnHighlightingStateChanged(1, document.LineCount);
}
#endregion
FindReferences findReferences = new FindReferences();
#region Event Handlers
void syntaxHighlighter_VisibleDocumentLinesChanged(object sender, EventArgs e)
{
}
IResolveVisitorNavigator InitNavigator()
void ParserService_LoadSolutionProjectsThreadEnded(object sender, EventArgs e)
{
if (currentSymbolReference == null) return null;
var compilation = resolver.Compilation;
var symbol = currentSymbolReference.Resolve(compilation.TypeResolveContext);
var searchScopes = findReferences.GetSearchScopes(symbol);
if (searchScopes.Count == 0)
return null;
var navigators = new IResolveVisitorNavigator[searchScopes.Count];
for (int i = 0; i < navigators.Length; i++) {
navigators[i] = searchScopes[i].GetNavigator(compilation, ColorizeMatch);
}
IResolveVisitorNavigator combinedNavigator;
if (searchScopes.Count == 1) {
combinedNavigator = navigators[0];
} else {
combinedNavigator = new CompositeResolveVisitorNavigator(navigators);
}
return combinedNavigator;
InvalidateAll();
}
void ColorizeMatch(AstNode node, ResolveResult result)
void ParserService_ParseInformationUpdated(object sender, ParseInformationEventArgs e)
{
Identifier identifier = node.Annotation<Identifier>() ?? node.GetChildByRole(Roles.Identifier);
TextLocation start, end;
if (!identifier.IsNull) {
start = identifier.StartLocation;
end = identifier.EndLocation;
} else {
start = node.StartLocation;
end = node.EndLocation;
}
var complementary = node.Annotation<HighlightingColor>();
HighlightingColor newColor = symbolReferenceColor;
if (complementary != null) {
newColor = newColor.Clone();
newColor.MergeWith(complementary);
if (FileUtility.IsEqualFileName(e.FileName, document.FileName) && invalidLines.Count > 0) {
cachedLines.Clear();
foreach (IDocumentLine line in invalidLines) {
if (!line.IsDeleted) {
OnHighlightingStateChanged(line.LineNumber, line.LineNumber);
}
}
invalidLines.Clear();
}
Colorize(start, end, newColor);
}
#endregion
}

116
src/AddIns/BackendBindings/CSharpBinding/Project/Src/CSharpSemanticHighlighterVisitor.cs

@ -0,0 +1,116 @@ @@ -0,0 +1,116 @@
// Copyright (c) 2014 AlphaSierraPapa for the SharpDevelop Team
//
// Permission is hereby granted, free of charge, to any person obtaining a copy of this
// software and associated documentation files (the "Software"), to deal in the Software
// without restriction, including without limitation the rights to use, copy, modify, merge,
// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons
// to whom the Software is furnished to do so, subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included in all copies or
// substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE
// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
// DEALINGS IN THE SOFTWARE.
using System;
using System.Collections.Generic;
using System.ComponentModel.Design;
using System.Diagnostics;
using System.Linq;
using System.Windows.Media;
using ICSharpCode.AvalonEdit.Document;
using ICSharpCode.AvalonEdit.Highlighting;
using ICSharpCode.AvalonEdit.Rendering;
using ICSharpCode.Core;
using ICSharpCode.NRefactory;
using ICSharpCode.NRefactory.CSharp;
using ICSharpCode.NRefactory.CSharp.Analysis;
using ICSharpCode.NRefactory.CSharp.Resolver;
using ICSharpCode.NRefactory.Editor;
using ICSharpCode.NRefactory.Semantics;
using ICSharpCode.NRefactory.TypeSystem;
using ICSharpCode.SharpDevelop;
using ICSharpCode.SharpDevelop.Parser;
using CSharpBinding.Parser;
namespace CSharpBinding
{
class CSharpSemanticHighlighterVisitor : SemanticHighlightingVisitor<HighlightingColor>, IDisposable
{
readonly CSharpSemanticHighlighter highlighter;
readonly IDocument document;
#region Constructor + Dispose
public CSharpSemanticHighlighterVisitor(CSharpSemanticHighlighter highlighter, IDocument document)
{
if (highlighter == null)
throw new ArgumentNullException("highlighter");
if (document == null)
throw new ArgumentNullException("document");
this.document = document;
this.highlighter = highlighter;
var highlighting = HighlightingManager.Instance.GetDefinition("C#");
//this.defaultTextColor = ???;
this.referenceTypeColor = highlighting.GetNamedColor("ReferenceTypes");
this.valueTypeColor = highlighting.GetNamedColor("ValueTypes");
this.interfaceTypeColor = this.referenceTypeColor;
this.enumerationTypeColor = this.valueKeywordColor;
this.typeParameterTypeColor = this.referenceTypeColor;
this.delegateTypeColor = this.referenceTypeColor;
this.methodDeclarationColor = this.methodCallColor = highlighting.GetNamedColor("MethodCall");
//this.eventDeclarationColor = this.eventAccessColor = defaultTextColor;
//this.propertyDeclarationColor = this.propertyAccessColor = defaultTextColor;
this.fieldDeclarationColor = this.fieldAccessColor = highlighting.GetNamedColor("FieldAccess");
//this.variableDeclarationColor = this.variableAccessColor = defaultTextColor;
//this.parameterDeclarationColor = this.parameterAccessColor = defaultTextColor;
this.valueKeywordColor = highlighting.GetNamedColor("NullOrValueKeywords");
//this.externAliasKeywordColor = ...;
this.parameterModifierColor = highlighting.GetNamedColor("ParameterModifiers");
this.inactiveCodeColor = highlighting.GetNamedColor("InactiveCode");
this.syntaxErrorColor = highlighting.GetNamedColor("SemanticError");
}
public void Dispose()
{
resolver = null;
}
#endregion
#region Colorize
protected override void Colorize(TextLocation start, TextLocation end, HighlightingColor color)
{
highlighter.Colorize(start, end, color);
}
#endregion
#if DEBUG
public override void VisitSyntaxTree(ICSharpCode.NRefactory.CSharp.SyntaxTree syntaxTree)
{
base.VisitSyntaxTree(syntaxTree);
}
#endif
internal void UpdateLineInformation(int lineNumber)
{
regionStart = new TextLocation(lineNumber, 1);
regionEnd = new TextLocation(lineNumber, 1 + document.GetLineByNumber(lineNumber).Length);
}
internal CSharpAstResolver Resolver {
get {
return resolver;
}
set {
this.resolver = value;
}
}
}
}

222
src/AddIns/BackendBindings/CSharpBinding/Project/Src/CaretReferenceHighlightRenderer.cs

@ -0,0 +1,222 @@ @@ -0,0 +1,222 @@
// Copyright (c) 2014 AlphaSierraPapa for the SharpDevelop Team
//
// Permission is hereby granted, free of charge, to any person obtaining a copy of this
// software and associated documentation files (the "Software"), to deal in the Software
// without restriction, including without limitation the rights to use, copy, modify, merge,
// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons
// to whom the Software is furnished to do so, subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included in all copies or
// substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE
// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
// DEALINGS IN THE SOFTWARE.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading;
using System.Windows.Media;
using ICSharpCode.AvalonEdit.Document;
using ICSharpCode.AvalonEdit.Rendering;
using ICSharpCode.NRefactory;
using ICSharpCode.NRefactory.CSharp;
using ICSharpCode.NRefactory.CSharp.Resolver;
using ICSharpCode.NRefactory.Editor;
using ICSharpCode.NRefactory.Semantics;
using ICSharpCode.NRefactory.TypeSystem;
using ICSharpCode.SharpDevelop;
using ICSharpCode.SharpDevelop.Editor;
using ICSharpCode.SharpDevelop.Parser;
using CSharpBinding.Parser;
namespace CSharpBinding
{
class CaretReferenceHighlightRenderer : IDisposable, IBackgroundRenderer
{
readonly ITextEditor editor;
readonly TextView textView;
ISymbolReference currentSymbolReference;
CancellationTokenSource caretMovementTokenSource;
List<ISegment> currentReferences;
Pen borderPen;
Brush backgroundBrush;
public readonly Color DefaultBorderColor = Color.FromArgb(52, 30, 130, 255);
public readonly Color DefaultFillColor = Color.FromArgb(22, 30, 130, 255);
readonly int borderThickness = 1;
readonly int cornerRadius = 1;
public CaretReferenceHighlightRenderer(ITextEditor editor)
{
if (editor == null)
throw new ArgumentNullException("editor");
this.editor = editor;
this.textView = editor.GetService<TextView>();
this.borderPen = new Pen(new SolidColorBrush(DefaultBorderColor), borderThickness);
this.backgroundBrush = new SolidColorBrush(DefaultFillColor);
this.borderPen.Freeze();
this.backgroundBrush.Freeze();
editor.Caret.LocationChanged += CaretLocationChanged;
textView.VisualLinesChanged += VisualLinesChanged;
SD.ParserService.ParseInformationUpdated += ParseInformationUpdated;
SD.ParserService.LoadSolutionProjectsThread.Finished += LoadSolutionProjectsThreadFinished;
this.textView.BackgroundRenderers.Add(this);
}
public void Dispose()
{
this.textView.BackgroundRenderers.Remove(this);
editor.Caret.LocationChanged -= CaretLocationChanged;
}
public void Draw(TextView textView, DrawingContext drawingContext)
{
if (currentReferences == null) {
var start = textView.VisualLines.First().FirstDocumentLine.LineNumber;
var end = textView.VisualLines.Last().LastDocumentLine.LineNumber;
currentReferences = new List<ISegment>();
FindCurrentReferences(start, end);
}
if (currentReferences.Count == 0)
return;
BackgroundGeometryBuilder builder = new BackgroundGeometryBuilder();
builder.CornerRadius = cornerRadius;
builder.AlignToMiddleOfPixels = true;
foreach (var reference in this.currentReferences) {
builder.AddSegment(textView, new TextSegment() {
StartOffset = reference.Offset,
Length = reference.Length
});
builder.CloseFigure();
}
Geometry geometry = builder.CreateGeometry();
if (geometry != null) {
drawingContext.DrawGeometry(backgroundBrush, borderPen, geometry);
}
}
void VisualLinesChanged(object sender, System.EventArgs e)
{
currentReferences = null;
}
void ParseInformationUpdated(object sender, ParseInformationEventArgs e)
{
if (SD.ParserService.LoadSolutionProjectsThread.IsRunning)
return;
if (!e.FileName.Equals(editor.FileName))
return;
currentReferences = null;
textView.InvalidateLayer(KnownLayer.Selection);
}
void LoadSolutionProjectsThreadFinished(object sender, EventArgs e)
{
currentReferences = null;
textView.InvalidateLayer(KnownLayer.Selection);
}
void CaretLocationChanged(object sender, EventArgs e)
{
if (caretMovementTokenSource != null)
caretMovementTokenSource.Cancel();
caretMovementTokenSource = new CancellationTokenSource();
var rr = SD.ParserService.Resolve(editor.FileName, editor.Caret.Location, editor.Document, cancellationToken: caretMovementTokenSource.Token);
SetCurrentSymbol(rr.GetSymbol());
}
IResolveVisitorNavigator InitNavigator(ICompilation compilation)
{
if (currentSymbolReference == null || compilation == null)
return null;
var symbol = currentSymbolReference.Resolve(compilation.TypeResolveContext);
FindReferences findReferences = new FindReferences();
if (symbol == null) return null;
var searchScopes = findReferences.GetSearchScopes(symbol);
if (searchScopes.Count == 0)
return null;
var navigators = new IResolveVisitorNavigator[searchScopes.Count];
for (int i = 0; i < navigators.Length; i++) {
navigators[i] = searchScopes[i].GetNavigator(compilation, ColorizeMatch);
}
IResolveVisitorNavigator combinedNavigator;
if (searchScopes.Count == 1) {
combinedNavigator = navigators[0];
}
else {
combinedNavigator = new CompositeResolveVisitorNavigator(navigators);
}
return combinedNavigator;
}
void FindCurrentReferences(int start, int end)
{
ICompilation compilation = SD.ParserService.GetCompilationForFile(editor.FileName);
CSharpFullParseInformation parseInfo = SD.ParserService.GetCachedParseInformation(editor.FileName) as CSharpFullParseInformation;
if (currentSymbolReference == null || parseInfo == null)
return;
IResolveVisitorNavigator currentNavigator = InitNavigator(compilation);
CSharpAstResolver resolver = parseInfo.GetResolver(compilation);
if (currentNavigator == null || resolver == null)
return;
VisitVisibleNodes(parseInfo.SyntaxTree, currentNavigator, resolver, start, end);
}
void VisitVisibleNodes(AstNode node, IResolveVisitorNavigator currentNavigator, CSharpAstResolver resolver, int start, int end)
{
if (!CSharpAstResolver.IsUnresolvableNode(node))
currentNavigator.Resolved(node, resolver.Resolve(node, caretMovementTokenSource.Token));
for (var child = node.FirstChild; child != null; child = child.NextSibling) {
if (child.StartLocation.Line <= end && child.EndLocation.Line >= start)
VisitVisibleNodes(child, currentNavigator, resolver, start, end);
}
}
void ColorizeMatch(AstNode node, ResolveResult result)
{
var identifierNode = FindReferences.GetNodeToReplace(node);
TextLocation start, end;
if (!identifierNode.IsNull) {
start = identifierNode.StartLocation;
end = identifierNode.EndLocation;
}
else {
start = node.StartLocation;
end = node.EndLocation;
}
currentReferences.Add(new TextSegment {
StartOffset = editor.Document.GetOffset(start),
EndOffset = editor.Document.GetOffset(end)
});
}
public KnownLayer Layer {
get {
return KnownLayer.Selection;
}
}
void SetCurrentSymbol(ISymbol symbol)
{
currentSymbolReference = null;
if (symbol != null)
currentSymbolReference = symbol.ToReference();
currentReferences = null;
textView.InvalidateLayer(KnownLayer.Selection);
}
}
}

49
src/AddIns/BackendBindings/CSharpBinding/Project/Src/Refactoring/CSharpCodeGenerator.cs

@ -144,6 +144,35 @@ namespace CSharpBinding.Refactoring @@ -144,6 +144,35 @@ namespace CSharpBinding.Refactoring
}
}
public override void AddFieldAtStart(ITypeDefinition declaringType, Accessibility accessibility, IType fieldType, string name)
{
SDRefactoringContext context = declaringType.CreateRefactoringContext();
var typeDecl = context.GetNode<TypeDeclaration>();
using (var script = context.StartScript()) {
var astBuilder = context.CreateTypeSystemAstBuilder(typeDecl.FirstChild);
var fieldDecl = new FieldDeclaration();
fieldDecl.Modifiers = TypeSystemAstBuilder.ModifierFromAccessibility(accessibility);
fieldDecl.ReturnType = astBuilder.ConvertType(context.Compilation.Import(fieldType));
fieldDecl.Variables.Add(new VariableInitializer(name));
script.AddTo(typeDecl, fieldDecl);
}
}
public override void AddMethodAtStart(ITypeDefinition declaringType, Accessibility accessibility, IType returnType, string name)
{
SDRefactoringContext context = declaringType.CreateRefactoringContext();
var typeDecl = context.GetNode<TypeDeclaration>();
using (var script = context.StartScript()) {
var astBuilder = context.CreateTypeSystemAstBuilder(typeDecl.FirstChild);
var methodDecl = new MethodDeclaration();
methodDecl.Name = name;
methodDecl.ReturnType = astBuilder.ConvertType(context.Compilation.Import(returnType));
script.AddTo(typeDecl, methodDecl);
}
}
public override void ChangeAccessibility(IEntity entity, Accessibility newAccessiblity)
{
// TODO script.ChangeModifiers(...)
@ -159,5 +188,25 @@ namespace CSharpBinding.Refactoring @@ -159,5 +188,25 @@ namespace CSharpBinding.Refactoring
UsingHelper.InsertUsing(context, script, ns);
}
}
public override void MakePartial(ITypeDefinition td)
{
SDRefactoringContext refactoringContext = td.CreateRefactoringContext();
var typeDeclaration = refactoringContext.GetNode<TypeDeclaration>();
using (Script script = refactoringContext.StartScript()) {
script.ChangeModifier(typeDeclaration, typeDeclaration.Modifiers | Modifiers.Partial);
}
}
public override void MakeVirtual(IMember member)
{
SDRefactoringContext refactoringContext = member.CreateRefactoringContext();
var entityDeclaration = refactoringContext.GetNode<EntityDeclaration>();
using (Script script = refactoringContext.StartScript()) {
script.ChangeModifier(entityDeclaration, entityDeclaration.Modifiers | Modifiers.Virtual);
}
}
}
}

45
src/AddIns/BackendBindings/CSharpBinding/Tests/CSharpCodeGeneratorTests.cs

@ -16,12 +16,16 @@ @@ -16,12 +16,16 @@
// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
// DEALINGS IN THE SOFTWARE.
using System.Threading;
using System.Threading.Tasks;
using CSharpBinding.Completion;
using CSharpBinding.Parser;
using CSharpBinding.Refactoring;
using ICSharpCode.AvalonEdit.Document;
using ICSharpCode.Core;
using ICSharpCode.NRefactory;
using ICSharpCode.NRefactory.CSharp;
using ICSharpCode.NRefactory.Editor;
using ICSharpCode.NRefactory.TypeSystem;
using ICSharpCode.NRefactory.TypeSystem.Implementation;
using ICSharpCode.SharpDevelop;
@ -325,6 +329,47 @@ class TargetClass @@ -325,6 +329,47 @@ class TargetClass
}
}
interface TargetInterface
{
}
", textEditor.Document.Text);
}
[Test]
public void MakeClassPartial()
{
SD.ParserService.Stub(p => p.ParseAsync(
Arg<FileName>.Is.Equal(textEditor.FileName),
Arg<ITextSource>.Is.Equal(textEditor.TextEditor.Document),
Arg<IProject>.Is.Null,
Arg<CancellationToken>.Is.Anything))
.Return(new Task<ParseInformation>(() => SD.ParserService.GetCachedParseInformation(textEditor.FileName)));
var compilation = SD.ParserService.GetCompilationForFile(textEditor.FileName);
var entity = FindEntity<ITypeDefinition>("TargetClass");
gen.MakePartial(entity);
Assert.AreEqual(@"using System;
using System.Reflection;
[assembly: AssemblyTitle(""CSharpBinding.Tests"")]
class MySimpleAttribute : Attribute {}
partial class TargetClass
{
void TargetA()
{
}
public int TargetB { get; set; }
public int TargetC_ {
get {
return 0;
}
}
}
interface TargetInterface
{
}

3
src/AddIns/BackendBindings/XamlBinding/XamlBinding/XamlAstResolver.cs

@ -93,6 +93,9 @@ namespace ICSharpCode.XamlBinding @@ -93,6 +93,9 @@ namespace ICSharpCode.XamlBinding
return new TypeResolveResult(type);
}
}
if (attribute.ParentElement == null)
return ErrorResolveResult.UnknownError;
string propertyName = attribute.LocalName;
if (propertyName.Contains(".")) {
string namespaceName = string.IsNullOrEmpty(attribute.Namespace) ? attribute.ParentElement.LookupNamespace("") : attribute.Namespace;

4
src/AddIns/DisplayBindings/Data/ICSharpCode.Data.SQLServer/SQLServerDatabaseDriver.cs

@ -154,7 +154,9 @@ namespace ICSharpCode.Data.Core.DatabaseDrivers.SQLServer @@ -154,7 +154,9 @@ namespace ICSharpCode.Data.Core.DatabaseDrivers.SQLServer
public override string ODBCProviderName
{
get { return "SQLNCLI10.1"; }
// SqlServer 2012
get { return "SQLNCLI10.1"; }
// get { return "SQLNCLI11.0"; }
}
public override void PopulateDatasources()

12
src/AddIns/Misc/PackageManagement/Cmdlets/Project/Src/GetPackageCmdlet.cs

@ -200,12 +200,12 @@ namespace ICSharpCode.PackageManagement.Cmdlets @@ -200,12 +200,12 @@ namespace ICSharpCode.PackageManagement.Cmdlets
if (project != null) {
return new UpdatedPackages(project, repository);
}
return new UpdatedPackages(GetSolutionPackages(), repository);
return new UpdatedPackages(GetPackagesInstalledIntoAnyProject(), repository);
}
IQueryable<IPackage> GetSolutionPackages()
IQueryable<IPackage> GetPackagesInstalledIntoAnyProject()
{
return ConsoleHost.Solution.GetPackages();
return ConsoleHost.Solution.GetInstalledPackages();
}
IPackageManagementProject GetSelectedProject(IPackageRepository repository)
@ -223,17 +223,17 @@ namespace ICSharpCode.PackageManagement.Cmdlets @@ -223,17 +223,17 @@ namespace ICSharpCode.PackageManagement.Cmdlets
IQueryable<IPackage> GetInstalledPackages()
{
IQueryable<IPackage> packages = GetPackagesFromSelectedProjectOrSolution();
IQueryable<IPackage> packages = GetPackagesFromSelectedProjectOrPackagesFolder();
return FilterPackages(packages);
}
IQueryable<IPackage> GetPackagesFromSelectedProjectOrSolution()
IQueryable<IPackage> GetPackagesFromSelectedProjectOrPackagesFolder()
{
IPackageManagementProject project = GetSelectedProject();
if (project != null) {
return project.GetPackages();
}
return GetSolutionPackages();
return ConsoleHost.Solution.GetPackages();
}
IPackageManagementProject GetSelectedProject()

15
src/AddIns/Misc/PackageManagement/Cmdlets/Test/Src/GetPackageCmdletTests.cs

@ -23,7 +23,6 @@ using ICSharpCode.PackageManagement.Design; @@ -23,7 +23,6 @@ using ICSharpCode.PackageManagement.Design;
using NuGet;
using NUnit.Framework;
using PackageManagement.Cmdlets.Tests.Helpers;
using PackageManagement.Tests.Helpers;
namespace PackageManagement.Cmdlets.Tests
{
@ -715,5 +714,19 @@ namespace PackageManagement.Cmdlets.Tests @@ -715,5 +714,19 @@ namespace PackageManagement.Cmdlets.Tests
List<object> actualPackages = fakeCommandRuntime.ObjectsPassedToWriteObject;
CollectionAssert.AreEqual(expectedPackages, actualPackages);
}
[Test]
public void ProcessRecord_NoParametersPassedAndPackageOnlyInPackagesFolder_ReturnsPackageInPackagesFolder()
{
CreateCmdlet();
FakePackage package = FakePackage.CreatePackageWithVersion("One", "1.0");
fakeSolution.PackagesOnlyInPackagesFolder.Add(package);
RunCmdlet();
List<object> actualPackages = fakeCommandRuntime.ObjectsPassedToWriteObject;
List<FakePackage> expectedPackages = fakeSolution.PackagesOnlyInPackagesFolder;
Assert.AreEqual(expectedPackages, actualPackages);
}
}
}

16
src/AddIns/Misc/PackageManagement/Project/PackageManagement.csproj

@ -81,8 +81,6 @@ @@ -81,8 +81,6 @@
</Compile>
<Compile Include="Configuration\AssemblyInfo.cs" />
<Compile Include="Src\AcceptLicensesEventArgs.cs" />
<Compile Include="Src\ClassCodeGenerator.cs" />
<Compile Include="Src\ClassKindUpdater.cs" />
<Compile Include="Src\ConfigSettingsFileSystem.cs" />
<Compile Include="Src\DependentFile.cs" />
<Compile Include="Src\Design\DesignTimeSelectProjectsViewModel.cs" />
@ -90,7 +88,7 @@ @@ -90,7 +88,7 @@
<Compile Include="Src\Design\FakeProjectBuilder.cs" />
<Compile Include="Src\Design\FakeSelectedProject.cs" />
<Compile Include="Src\DocumentLoader.cs" />
<Compile Include="Src\DomRegionExtensions.cs" />
<Compile Include="Src\DocumentView.cs" />
<Compile Include="Src\EnvDTE\CodeAttribute.cs" />
<Compile Include="Src\EnvDTE\CodeAttribute2.cs" />
<Compile Include="Src\EnvDTE\CodeAttributeArgument.cs" />
@ -98,6 +96,7 @@ @@ -98,6 +96,7 @@
<Compile Include="Src\EnvDTE\CodeClass2.cs" />
<Compile Include="Src\EnvDTE\CodeDelegate.cs" />
<Compile Include="Src\EnvDTE\CodeElement.cs" />
<Compile Include="Src\EnvDTE\CodeElementsInNamespace.cs" />
<Compile Include="Src\EnvDTE\CodeElementsList.cs" />
<Compile Include="Src\EnvDTE\CodeFunction.cs" />
<Compile Include="Src\EnvDTE\CodeFunction2.cs" />
@ -128,6 +127,7 @@ @@ -128,6 +127,7 @@
<Compile Include="Src\EnvDTE\ImplementedInterfacesOnClass.cs" />
<Compile Include="Src\EnvDTE\IParameterExtensions.cs" />
<Compile Include="Src\EnvDTE\IReturnTypeExtensions.cs" />
<Compile Include="Src\EnvDTE\NamespaceName.cs" />
<Compile Include="Src\EnvDTE\ProjectKind.cs" />
<Compile Include="Src\EnvDTE\Projects.cs" />
<Compile Include="Src\EnvDTE\Reference3.cs" />
@ -149,7 +149,9 @@ @@ -149,7 +149,9 @@
<SubType>Code</SubType>
</Compile>
<Compile Include="Src\FileConflictViewModel.cs" />
<Compile Include="Src\IClassKindUpdater.cs" />
<Compile Include="Src\ICodeGenerator.cs" />
<Compile Include="Src\IDocumentView.cs" />
<Compile Include="Src\InstalledPackagesViewModel.cs" />
<Compile Include="Src\IPackageRepositoryFactoryEvents.cs" />
<Compile Include="Src\IPackageViewModelParent.cs" />
<Compile Include="Src\IUpdatePackagesAction.cs" />
@ -158,12 +160,9 @@ @@ -158,12 +160,9 @@
<Compile Include="Src\IProjectBuilder.cs" />
<Compile Include="Src\IProjectContentExtensions.cs" />
<Compile Include="Src\IUpdatePackageSettings.cs" />
<Compile Include="Src\IVirtualMethodUpdater.cs" />
<Compile Include="Src\IProjectBrowserUpdater.cs" />
<Compile Include="Src\IRefactoringDocumentView.cs" />
<Compile Include="Src\IFieldExtensions.cs" />
<Compile Include="Src\IDocumentLoader.cs" />
<Compile Include="Src\IMethodOrPropertyExtensions.cs" />
<Compile Include="Src\IPackageManagementSelectedProject.cs" />
<Compile Include="Src\ISelectProjectsService.cs" />
<Compile Include="Src\ISolutionPackageRepository.cs" />
@ -253,6 +252,7 @@ @@ -253,6 +252,7 @@
<Compile Include="Src\ServiceWithWorkbenchOwner.cs" />
<Compile Include="Src\SharpDevelopCredentialProvider.cs" />
<Compile Include="Src\SharpDevelopHttpUserAgent.cs" />
<Compile Include="Src\ThreadSafeCodeGenerator.cs" />
<Compile Include="Src\UpdatePackagesAction.cs" />
<Compile Include="Src\UpdatePackagesActionFactory.cs" />
<Compile Include="Src\UpdateSolutionPackagesAction.cs" />
@ -288,7 +288,6 @@ @@ -288,7 +288,6 @@
<Compile Include="Src\ProjectBrowserUpdater.cs" />
<Compile Include="Src\ProjectTemplatePackageRepositoryCache.cs" />
<Compile Include="Src\ProjectTemplatePackagesSettingsFileName.cs" />
<Compile Include="Src\RefactoringDocumentView.cs" />
<Compile Include="Src\RegisteredPackageRepositories.cs" />
<Compile Include="Src\ManagePackagesView.cs">
<DependentUpon>ManagePackagesView.xaml</DependentUpon>
@ -342,7 +341,6 @@ @@ -342,7 +341,6 @@
<Compile Include="Src\PackageRepositoryCache.cs" />
<Compile Include="Src\PackagesForSelectedPageResult.cs" />
<Compile Include="Src\ILicenseAcceptanceService.cs" />
<Compile Include="Src\InstalledPackagesViewModel.cs" />
<Compile Include="Src\IPackageManagementFileService.cs" />
<Compile Include="Src\IPackageManagementProjectService.cs" />
<Compile Include="Src\IPackageManagementSolution.cs" />

156
src/AddIns/Misc/PackageManagement/Project/Src/ClassCodeGenerator.cs

@ -1,156 +0,0 @@ @@ -1,156 +0,0 @@
// Copyright (c) 2014 AlphaSierraPapa for the SharpDevelop Team
//
// Permission is hereby granted, free of charge, to any person obtaining a copy of this
// software and associated documentation files (the "Software"), to deal in the Software
// without restriction, including without limitation the rights to use, copy, modify, merge,
// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons
// to whom the Software is furnished to do so, subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included in all copies or
// substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE
// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
// DEALINGS IN THE SOFTWARE.
//using System;
//using System.Collections.Generic;
//using System.Linq;
//using ICSharpCode.NRefactory.Ast;
//using ICSharpCode.PackageManagement.EnvDTE;
//using ICSharpCode.SharpDevelop.Dom;
//using ICSharpCode.SharpDevelop.Dom.Refactoring;
//
//namespace ICSharpCode.PackageManagement
//{
// public class ClassCodeGenerator
// {
// public ClassCodeGenerator(IClass c)
// : this(c, new DocumentLoader())
// {
// }
//
// public ClassCodeGenerator(IClass c, IDocumentLoader documentLoader)
// {
// this.Class = c;
// this.DocumentLoader = documentLoader;
// }
//
// IClass Class { get; set; }
// IDocumentLoader DocumentLoader { get; set; }
//
// ICompilationUnit CompilationUnit {
// get { return Class.CompilationUnit; }
// }
//
// public CodeVariable AddPublicVariable(string name, string type)
// {
// CodeGenerator codeGenerator = GetCodeGenerator();
// IRefactoringDocumentView view = LoadClassDocumentView();
// codeGenerator.InsertCodeAtEnd(Class.Region, view.RefactoringDocument, CreateField(name, type));
// return GetVariableInserted(view);
// }
//
// CodeGenerator GetCodeGenerator()
// {
// return CompilationUnit.Language.CodeGenerator;
// }
//
// IRefactoringDocumentView LoadClassDocumentView()
// {
// return DocumentLoader.LoadRefactoringDocumentView(CompilationUnit.FileName);
// }
//
// FieldDeclaration CreateField(string name, string type)
// {
// return new FieldDeclaration(new List<AttributeSection>()) {
// Fields = CreateVariableDeclarations(name),
// Modifier = Modifiers.Public,
// TypeReference = new TypeReference(type)
// };
// }
//
// List<VariableDeclaration> CreateVariableDeclarations(string name)
// {
// var variables = new List<VariableDeclaration>();
// variables.Add(new VariableDeclaration(name));
// return variables;
// }
//
// CodeVariable GetVariableInserted(IRefactoringDocumentView view)
// {
// IField field = FindField(view);
// return new CodeVariable(field);
// }
//
// IField FindField(IRefactoringDocumentView view)
// {
// return FindMatchingClass(view).Fields.Last();
// }
//
// IClass FindMatchingClass(IRefactoringDocumentView view)
// {
// ICompilationUnit unit = view.Parse();
// return FindMatchingClass(unit);
// }
//
// IClass FindMatchingClass(ICompilationUnit unit)
// {
// foreach (IClass c in unit.Classes) {
// if (c.FullyQualifiedName == Class.FullyQualifiedName) {
// return c;
// }
// }
// return null;
// }
//
// /// <summary>
// /// The fully qualified type will not be added as the method's return value since
// /// NRefactory returns the incorrect start column for the method's region in this case.
// /// Instead we add the last part of the type so for "System.Object" we add "Object" so the
// /// method's region is correct. This only seems to affect methods where there is no modifier
// /// (e.g. public, private) explicitly defined in code.
// ///
// /// For MvcScaffolding we only need the start and end points to be correctly defined since the
// /// function will be immediately replaced with different code.
// /// </summary>
// public CodeFunction AddPublicMethod(string name, string type)
// {
// CodeGenerator codeGenerator = GetCodeGenerator();
// IRefactoringDocumentView view = LoadClassDocumentView();
// codeGenerator.InsertCodeAtEnd(Class.Region, view.RefactoringDocument, CreateMethod(name, type));
// return GetMethodInserted(view);
// }
//
// MethodDeclaration CreateMethod(string name, string type)
// {
// return new MethodDeclaration {
// Name = name,
// TypeReference = new TypeReference(GetShortTypeName(type))
// };
// }
//
// string GetShortTypeName(string type)
// {
// int index = type.LastIndexOf('.');
// if (index > 0) {
// return type.Substring(index + 1);
// }
// return type;
// }
//
// CodeFunction GetMethodInserted(IRefactoringDocumentView view)
// {
// IMethod method = FindMethod(view);
// return new CodeFunction(method);
// }
//
// IMethod FindMethod(IRefactoringDocumentView view)
// {
// return FindMatchingClass(view).Methods.Last();
// }
// }
//}

81
src/AddIns/Misc/PackageManagement/Project/Src/ClassKindUpdater.cs

@ -1,81 +0,0 @@ @@ -1,81 +0,0 @@
// Copyright (c) 2014 AlphaSierraPapa for the SharpDevelop Team
//
// Permission is hereby granted, free of charge, to any person obtaining a copy of this
// software and associated documentation files (the "Software"), to deal in the Software
// without restriction, including without limitation the rights to use, copy, modify, merge,
// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons
// to whom the Software is furnished to do so, subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included in all copies or
// substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE
// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
// DEALINGS IN THE SOFTWARE.
//using System;
//using ICSharpCode.SharpDevelop.Dom;
//using ICSharpCode.SharpDevelop.Dom.Refactoring;
//
//namespace ICSharpCode.PackageManagement
//{
// public class ClassKindUpdater : IClassKindUpdater
// {
// public ClassKindUpdater(IClass c)
// : this(c, new DocumentLoader())
// {
// }
//
// public ClassKindUpdater(IClass c, IDocumentLoader documentLoader)
// {
// this.Class = c;
// this.DocumentLoader = documentLoader;
// }
//
// IClass Class { get; set; }
// IDocumentLoader DocumentLoader { get; set; }
// IRefactoringDocument Document { get; set; }
//
// public void MakeClassPartial()
// {
// if (Class.IsPartial)
// return;
//
// OpenFileContainingClass();
// int offset = GetPartialKeywordInsertOffset();
// InsertPartialKeyword(offset);
// }
//
// void OpenFileContainingClass()
// {
// Document = DocumentLoader.LoadRefactoringDocument(Class.CompilationUnit.FileName);
// }
//
// int GetPartialKeywordInsertOffset()
// {
// IRefactoringDocumentLine line = Document.GetLine(Class.Region.BeginLine);
// int offset = line.Text.IndexOf(" class", StringComparison.OrdinalIgnoreCase);
// if (offset >= 0) {
// return offset + line.Offset + 1;
// }
// throw new ApplicationException("Unable to find 'class' declaration.");
// }
//
// void InsertPartialKeyword(int offset)
// {
// string partialKeyword = GetLanguageSpecificPartialKeyword();
// Document.Insert(offset, partialKeyword + " ");
// }
//
// string GetLanguageSpecificPartialKeyword()
// {
// if (Class.ProjectContent.Language == LanguageProperties.VBNet) {
// return "Partial";
// }
// return "partial";
// }
// }
//}

12
src/AddIns/Misc/PackageManagement/Project/Src/Design/FakePackageManagementSolution.cs

@ -135,7 +135,10 @@ namespace ICSharpCode.PackageManagement.Design @@ -135,7 +135,10 @@ namespace ICSharpCode.PackageManagement.Design
public IQueryable<IPackage> GetPackages()
{
return FakeInstalledPackages.AsQueryable();
var allPackages = new List<FakePackage>();
allPackages.AddRange(FakeInstalledPackages);
allPackages.AddRange(PackagesOnlyInPackagesFolder);
return allPackages.AsQueryable();
}
public void NoProjectsSelected()
@ -184,6 +187,8 @@ namespace ICSharpCode.PackageManagement.Design @@ -184,6 +187,8 @@ namespace ICSharpCode.PackageManagement.Design
return package;
}
public List<FakePackage> PackagesOnlyInPackagesFolder = new List<FakePackage>();
public FakePackage AddPackageToSharedLocalRepository(string packageId)
{
var package = new FakePackage(packageId);
@ -195,5 +200,10 @@ namespace ICSharpCode.PackageManagement.Design @@ -195,5 +200,10 @@ namespace ICSharpCode.PackageManagement.Design
{
throw new NotImplementedException();
}
public IQueryable<IPackage> GetInstalledPackages()
{
return FakeInstalledPackages.AsQueryable();
}
}
}

38
src/AddIns/Misc/PackageManagement/Project/Src/DocumentLoader.cs

@ -16,26 +16,18 @@ @@ -16,26 +16,18 @@
// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
// DEALINGS IN THE SOFTWARE.
//using System;
//using ICSharpCode.SharpDevelop.Dom.Refactoring;
//using ICSharpCode.SharpDevelop.Gui;
//
//namespace ICSharpCode.PackageManagement
//{
// public class DocumentLoader : IDocumentLoader
// {
// public IRefactoringDocument LoadRefactoringDocument(string fileName)
// {
// return LoadRefactoringDocumentView(fileName).RefactoringDocument;
// }
//
// public IRefactoringDocumentView LoadRefactoringDocumentView(string fileName)
// {
// if (WorkbenchSingleton.InvokeRequired) {
// return WorkbenchSingleton.SafeThreadFunction(() => LoadRefactoringDocumentView(fileName));
// } else {
// return new RefactoringDocumentView(fileName);
// }
// }
// }
//}
using System;
using ICSharpCode.SharpDevelop;
namespace ICSharpCode.PackageManagement
{
public class DocumentLoader : IDocumentLoader
{
public IDocumentView LoadDocumentView(string fileName)
{
return SD.MainThread.InvokeIfRequired(() => {
return new DocumentView(fileName);
});
}
}
}

61
src/AddIns/Misc/PackageManagement/Project/Src/DocumentView.cs

@ -0,0 +1,61 @@ @@ -0,0 +1,61 @@
// Copyright (c) 2014 AlphaSierraPapa for the SharpDevelop Team
//
// Permission is hereby granted, free of charge, to any person obtaining a copy of this
// software and associated documentation files (the "Software"), to deal in the Software
// without restriction, including without limitation the rights to use, copy, modify, merge,
// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons
// to whom the Software is furnished to do so, subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included in all copies or
// substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE
// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
// DEALINGS IN THE SOFTWARE.
using System;
using ICSharpCode.NRefactory.Editor;
using ICSharpCode.SharpDevelop;
using ICSharpCode.SharpDevelop.Editor;
namespace ICSharpCode.PackageManagement
{
public class DocumentView : IDocumentView
{
public DocumentView(string fileName)
{
View = FileService.OpenFile(fileName);
TextEditor = GetTextEditor();
FormattingStrategy = TextEditor.Language.FormattingStrategy;
Document = LoadDocument();
}
IViewContent View { get; set; }
ITextEditor TextEditor { get; set; }
IFormattingStrategy FormattingStrategy { get; set; }
ITextEditor GetTextEditor()
{
return View.GetService<ITextEditor>();
}
public IDocument Document { get; private set; }
IDocument LoadDocument()
{
return new ThreadSafeDocument(TextEditor.Document);
}
public void IndentLines(int beginLine, int endLine)
{
SD.MainThread.InvokeIfRequired(() => {
using (IDisposable undoGroup = TextEditor.Document.OpenUndoGroup()) {
FormattingStrategy.IndentLines(TextEditor, beginLine, endLine);
}
});
}
}
}

37
src/AddIns/Misc/PackageManagement/Project/Src/DomRegionExtensions.cs

@ -1,37 +0,0 @@ @@ -1,37 +0,0 @@
// Copyright (c) 2014 AlphaSierraPapa for the SharpDevelop Team
//
// Permission is hereby granted, free of charge, to any person obtaining a copy of this
// software and associated documentation files (the "Software"), to deal in the Software
// without restriction, including without limitation the rights to use, copy, modify, merge,
// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons
// to whom the Software is furnished to do so, subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included in all copies or
// substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE
// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
// DEALINGS IN THE SOFTWARE.
//using System;
//using ICSharpCode.NRefactory.TypeSystem;
//using ICSharpCode.SharpDevelop.Dom;
//
//namespace ICSharpCode.PackageManagement
//{
// public static class DomRegionExtensions
// {
// public static FilePosition ToStartPosition(this DomRegion region, ICompilationUnit compilationUnit)
// {
// return new FilePosition(compilationUnit, region.BeginLine, region.BeginColumn);
// }
//
// public static FilePosition ToEndPosition(this DomRegion region, ICompilationUnit compilationUnit)
// {
// return new FilePosition(compilationUnit, region.EndLine, region.EndColumn);
// }
// }
//}

3
src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/CodeAttributeArgument.cs

@ -17,6 +17,7 @@ @@ -17,6 +17,7 @@
// DEALINGS IN THE SOFTWARE.
using System;
using ICSharpCode.NRefactory.CSharp;
using ICSharpCode.NRefactory.CSharp.Refactoring;
using ICSharpCode.NRefactory.Semantics;
@ -46,7 +47,7 @@ namespace ICSharpCode.PackageManagement.EnvDTE @@ -46,7 +47,7 @@ namespace ICSharpCode.PackageManagement.EnvDTE
string GetValue(ResolveResult value)
{
var astBuilder = new TypeSystemAstBuilder();
var ast = astBuilder.ConvertConstantValue(value);
Expression ast = astBuilder.ConvertConstantValue(value);
return ast.ToString();
}

61
src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/CodeClass.cs

@ -19,15 +19,14 @@ @@ -19,15 +19,14 @@
using System;
using System.Linq;
using ICSharpCode.NRefactory.TypeSystem;
using ICSharpCode.SharpDevelop.Dom;
using ICSharpCode.SharpDevelop.Project;
using ICSharpCode.NRefactory.TypeSystem.Implementation;
namespace ICSharpCode.PackageManagement.EnvDTE
{
public class CodeClass : CodeType, global::EnvDTE.CodeClass
{
public CodeClass(CodeModelContext context, ITypeDefinitionModel typeModel)
: base(context, typeModel)
public CodeClass(CodeModelContext context, ITypeDefinition typeDefinition)
: base(context, typeDefinition, typeDefinition.TypeArguments.ToArray())
{
}
@ -41,32 +40,52 @@ namespace ICSharpCode.PackageManagement.EnvDTE @@ -41,32 +40,52 @@ namespace ICSharpCode.PackageManagement.EnvDTE
public virtual global::EnvDTE.CodeElements ImplementedInterfaces {
get {
var list = new CodeElementsList<CodeType>();
var td = typeModel.Resolve();
if (td != null) {
foreach (var baseType in td.GetAllBaseTypes().Where(t => t.Kind == TypeKind.Interface)) {
CodeType element = Create(context, baseType);
if (element != null)
list.Add(element);
var interfaces = new CodeElementsList<CodeType>();
foreach (IType baseType in typeDefinition.DirectBaseTypes.Where(t => t.Kind == TypeKind.Interface)) {
CodeType element = Create(context, baseType);
if (element != null) {
interfaces.Add(element);
}
}
return list;
return interfaces;
}
}
public virtual global::EnvDTE.CodeVariable AddVariable(string name, object type, object Position = null, global::EnvDTE.vsCMAccess Access = global::EnvDTE.vsCMAccess.vsCMAccessPublic, object Location = null)
{
var fieldTypeName = new FullTypeName((string)type);
var td = typeModel.Resolve();
if (td == null)
return null;
IType fieldType = td.Compilation.FindType(fieldTypeName);
context.CodeGenerator.AddField(td, Access.ToAccessibility(), fieldType, name);
var fieldModel = typeModel.Members.OfType<IFieldModel>().FirstOrDefault(f => f.Name == name);
if (fieldModel != null) {
return new CodeVariable(context, fieldModel);
IType fieldType = GetFieldType((string)type);
context.CodeGenerator.AddFieldAtStart(typeDefinition, Access.ToAccessibility(), fieldType, name);
ReloadTypeDefinition();
IField field = typeDefinition.Fields.FirstOrDefault(f => f.Name == name);
if (field != null) {
return new CodeVariable(context, field);
}
return null;
}
IType GetFieldType(string type)
{
var fieldTypeName = new FullTypeName(type);
IType fieldType = typeDefinition.Compilation.FindType(fieldTypeName);
if (fieldType != null) {
return fieldType;
}
return new UnknownType(fieldTypeName);
}
void ReloadTypeDefinition()
{
ICompilation compilation = context.DteProject.GetCompilationUnit(typeDefinition.BodyRegion.FileName);
ITypeDefinition matchedTypeDefinition = compilation.MainAssembly.GetTypeDefinition(typeDefinition.FullTypeName);
if (matchedTypeDefinition != null) {
typeDefinition = matchedTypeDefinition;
}
}
}
}

37
src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/CodeClass2.cs

@ -18,60 +18,51 @@ @@ -18,60 +18,51 @@
using System;
using System.Linq;
using ICSharpCode.SharpDevelop.Dom;
using ICSharpCode.NRefactory.TypeSystem;
namespace ICSharpCode.PackageManagement.EnvDTE
{
public class CodeClass2 : CodeClass, global::EnvDTE.CodeClass2
{
public CodeClass2(CodeModelContext context, ITypeDefinitionModel typeModel)
: base(context, typeModel)
public CodeClass2(CodeModelContext context, ITypeDefinition typeDefinition)
: base(context, typeDefinition)
{
}
public global::EnvDTE.CodeElements PartialClasses {
get {
var list = new CodeElementsList<CodeType>();
var td = typeModel.Resolve();
if (td != null) {
foreach (var fileName in td.Parts.Select(p => p.UnresolvedFile.FileName).Distinct()) {
var newContext = context.WithFilteredFileName(fileName);
list.Add(CodeType.Create(newContext, typeModel));
}
} else {
list.Add(this);
}
return list;
var partialClasses = new CodeElementsList<CodeType>();
partialClasses.Add(this);
return partialClasses;
}
}
public bool IsGeneric {
get { return typeModel.FullTypeName.TypeParameterCount > 0; }
get { return typeDefinition.FullTypeName.TypeParameterCount > 0; }
}
public global::EnvDTE.vsCMClassKind ClassKind {
get {
if (typeModel.IsPartial) {
if (typeDefinition.Parts.First().IsPartial) {
return global::EnvDTE.vsCMClassKind.vsCMClassKindPartialClass;
}
return global::EnvDTE.vsCMClassKind.vsCMClassKindMainClass;
}
set {
if (value == this.ClassKind)
if (value == ClassKind) {
return;
}
if (value == global::EnvDTE.vsCMClassKind.vsCMClassKindPartialClass) {
var td = typeModel.Resolve();
if (td == null)
throw new NotSupportedException();
context.CodeGenerator.MakePartial(td);
context.CodeGenerator.MakePartial(typeDefinition);
} else {
throw new NotSupportedException();
throw new NotImplementedException();
}
}
}
public bool IsAbstract {
get { return typeModel.IsAbstract; }
get { return typeDefinition.IsAbstract; }
}
}
}

6
src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/CodeDelegate.cs

@ -17,14 +17,14 @@ @@ -17,14 +17,14 @@
// DEALINGS IN THE SOFTWARE.
using System;
using ICSharpCode.SharpDevelop.Dom;
using ICSharpCode.NRefactory.TypeSystem;
namespace ICSharpCode.PackageManagement.EnvDTE
{
public class CodeDelegate : CodeType, global::EnvDTE.CodeDelegate
{
public CodeDelegate(CodeModelContext context, ITypeDefinitionModel typeModel)
: base(context, typeModel)
public CodeDelegate(CodeModelContext context, ITypeDefinition typeDefinition)
: base(context, typeDefinition)
{
}

63
src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/CodeElement.cs

@ -19,15 +19,14 @@ @@ -19,15 +19,14 @@
using System;
using ICSharpCode.NRefactory.TypeSystem;
using ICSharpCode.SharpDevelop.Dom;
using ICSharpCode.SharpDevelop.Project;
namespace ICSharpCode.PackageManagement.EnvDTE
{
public class CodeElement : global::EnvDTE.CodeElementBase, global::EnvDTE.CodeElement
{
DTE dte;
protected readonly CodeModelContext context;
readonly ISymbolModel symbolModel;
protected CodeModelContext context;
IEntity entity;
public CodeElement()
{
@ -38,37 +37,35 @@ namespace ICSharpCode.PackageManagement.EnvDTE @@ -38,37 +37,35 @@ namespace ICSharpCode.PackageManagement.EnvDTE
this.context = context;
}
public CodeElement(CodeModelContext context, ISymbolModel symbolModel)
public CodeElement(CodeModelContext context, IEntity entity)
{
this.context = context;
this.symbolModel = symbolModel;
if (symbolModel.ParentProject != null)
this.Language = symbolModel.ParentProject.GetCodeModelLanguage();
this.entity = entity;
this.Language = context.CurrentProject.GetCodeModelLanguage();
}
public static CodeElement CreateMember(CodeModelContext context, IMemberModel m)
internal static CodeElement CreateMember(CodeModelContext context, IMember member)
{
switch (m.SymbolKind) {
switch (member.SymbolKind) {
case SymbolKind.Field:
return new CodeVariable(context, (IFieldModel)m);
return new CodeVariable(context, (IField)member);
case SymbolKind.Property:
case SymbolKind.Indexer:
// return new CodeProperty2(m);
throw new NotImplementedException();
return new CodeProperty2(context, (IProperty)member);
case SymbolKind.Event:
return null; // events are not supported in EnvDTE?
return null;
case SymbolKind.Method:
case SymbolKind.Operator:
case SymbolKind.Constructor:
case SymbolKind.Destructor:
return new CodeFunction2(context, (IMethodModel)m);
return new CodeFunction2(context, (IMethod)member);
default:
throw new NotSupportedException("Invalid value for SymbolKind");
}
}
public virtual string Name {
get { return symbolModel.Name; }
get { return entity.Name; }
}
public virtual string Language { get; protected set; }
@ -76,28 +73,15 @@ namespace ICSharpCode.PackageManagement.EnvDTE @@ -76,28 +73,15 @@ namespace ICSharpCode.PackageManagement.EnvDTE
// default is vsCMPart.vsCMPartWholeWithAttributes
public virtual global::EnvDTE.TextPoint GetStartPoint()
{
if (symbolModel != null)
return TextPoint.CreateStartPoint(context, symbolModel.Region);
else
return null;
return TextPoint.CreateStartPoint(context, entity.Region);
}
public virtual global::EnvDTE.TextPoint GetEndPoint()
{
if (symbolModel != null)
return TextPoint.CreateEndPoint(context, symbolModel.Region);
else
return null;
return TextPoint.CreateEndPoint(context, entity.Region);
}
public virtual global::EnvDTE.vsCMInfoLocation InfoLocation {
get {
if (symbolModel != null && symbolModel.ParentProject == context)
return global::EnvDTE.vsCMInfoLocation.vsCMInfoLocationProject;
else
return global::EnvDTE.vsCMInfoLocation.vsCMInfoLocationExternal;
}
}
public virtual global::EnvDTE.vsCMInfoLocation InfoLocation { get; protected set; }
public virtual global::EnvDTE.DTE DTE {
get {
@ -114,22 +98,21 @@ namespace ICSharpCode.PackageManagement.EnvDTE @@ -114,22 +98,21 @@ namespace ICSharpCode.PackageManagement.EnvDTE
protected bool IsInFilter(DomRegion region)
{
if (context.FilteredFileName == null)
if (context.FilteredFileName == null) {
return true;
}
return context.FilteredFileName == region.FileName;
}
protected CodeElementsList<CodeAttribute2> GetAttributes(IEntityModel entityModel)
protected CodeElementsList<CodeAttribute2> GetAttributes(IEntity entity)
{
var list = new CodeElementsList<CodeAttribute2>();
var td = entityModel.Resolve();
if (td != null) {
foreach (var attr in td.Attributes) {
if (IsInFilter(attr.Region))
list.Add(new CodeAttribute2(context, attr));
var attributes = new CodeElementsList<CodeAttribute2>();
foreach (IAttribute attribute in entity.Attributes) {
if (IsInFilter(attribute.Region)) {
attributes.Add(new CodeAttribute2(context, attribute));
}
}
return list;
return attributes;
}
protected override bool GetIsDerivedFrom(string fullName)

68
src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/CodeElementsInNamespace.cs

@ -0,0 +1,68 @@ @@ -0,0 +1,68 @@
// Copyright (c) 2014 AlphaSierraPapa for the SharpDevelop Team
//
// Permission is hereby granted, free of charge, to any person obtaining a copy of this
// software and associated documentation files (the "Software"), to deal in the Software
// without restriction, including without limitation the rights to use, copy, modify, merge,
// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons
// to whom the Software is furnished to do so, subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included in all copies or
// substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE
// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
// DEALINGS IN THE SOFTWARE.
using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using ICSharpCode.NRefactory.TypeSystem;
using ICSharpCode.SharpDevelop;
using ICSharpCode.SharpDevelop.Dom;
namespace ICSharpCode.PackageManagement.EnvDTE
{
public class CodeElementsInNamespace : CodeElementsList<CodeElement>
{
CodeModelContext context;
INamespace ns;
public CodeElementsInNamespace(CodeModelContext context)
: this(context, context.DteProject.GetCompilationUnit().RootNamespace)
{
}
public CodeElementsInNamespace(CodeModelContext context, INamespace ns)
{
this.context = context;
this.ns = ns;
GetCodeElements();
}
void GetCodeElements()
{
foreach (INamespace childNamespace in ns.ChildNamespaces) {
AddCodeNamespace(childNamespace);
}
foreach (IType type in ns.Types) {
AddType(type);
}
}
void AddCodeNamespace(INamespace ns)
{
Add(new CodeNamespace(context, ns));
}
void AddType(IType type)
{
Add(CodeType.Create(context, type));
}
}
}

66
src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/CodeElementsList.cs

@ -24,16 +24,11 @@ using ICSharpCode.SharpDevelop.Dom; @@ -24,16 +24,11 @@ using ICSharpCode.SharpDevelop.Dom;
namespace ICSharpCode.PackageManagement.EnvDTE
{
public class CodeElementsList<T> : MarshalByRefObject, global::EnvDTE.CodeElements, IList<T>
public class CodeElementsList<T> : MarshalByRefObject, global::EnvDTE.CodeElements
where T : global::EnvDTE.CodeElement
{
List<T> elements = new List<T>();
readonly List<T> elements = new List<T>();
public CodeElementsList()
{
}
#region EnvDTE.CodeElements implementation
public int Count {
get { return elements.Count; }
}
@ -60,62 +55,17 @@ namespace ICSharpCode.PackageManagement.EnvDTE @@ -60,62 +55,17 @@ namespace ICSharpCode.PackageManagement.EnvDTE
{
return elements.Single(item => item.Name == name);
}
#endregion
#region IList<T>
public T this[int index] {
get { return elements[index]; }
set { elements[index] = value; }
}
bool ICollection<T>.IsReadOnly {
get { return false; }
}
public int IndexOf(T item)
{
return elements.IndexOf(item);
}
public void Insert(int index, T item)
{
elements.Insert(index, item);
}
public void RemoveAt(int index)
{
elements.RemoveAt(index);
}
public void Add(T item)
{
elements.Add(item);
}
public void Clear()
internal void Add(T element)
{
elements.Clear();
elements.Add(element);
}
public bool Contains(T item)
internal void AddRange(IEnumerable<T> items)
{
return elements.Contains(item);
}
public void CopyTo(T[] array, int arrayIndex)
{
elements.CopyTo(array, arrayIndex);
}
public bool Remove(T item)
{
return elements.Remove(item);
}
IEnumerator<T> IEnumerable<T>.GetEnumerator()
{
return elements.GetEnumerator();
foreach (T element in items) {
Add(element);
}
}
#endregion
}
}

49
src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/CodeFunction.cs

@ -18,17 +18,17 @@ @@ -18,17 +18,17 @@
using System;
using ICSharpCode.NRefactory.TypeSystem;
using ICSharpCode.SharpDevelop.Dom;
namespace ICSharpCode.PackageManagement.EnvDTE
{
public class CodeFunction : CodeElement, global::EnvDTE.CodeFunction
{
protected readonly IMethodModel methodModel;
protected readonly IMethod method;
public CodeFunction(CodeModelContext context, IMethodModel methodModel)
: base(context, methodModel)
public CodeFunction(CodeModelContext context, IMethod method)
: base(context, method)
{
this.method = method;
}
public CodeFunction()
@ -40,49 +40,40 @@ namespace ICSharpCode.PackageManagement.EnvDTE @@ -40,49 +40,40 @@ namespace ICSharpCode.PackageManagement.EnvDTE
}
public virtual global::EnvDTE.vsCMAccess Access {
get { return methodModel.Accessibility.ToAccess(); }
get { return method.Accessibility.ToAccess(); }
set {
var method = methodModel.Resolve();
if (method == null)
throw new NotSupportedException();
context.CodeGenerator.ChangeAccessibility(method, value.ToAccessibility());
// var method = method.Resolve();
// if (method == null)
// throw new NotSupportedException();
// context.CodeGenerator.ChangeAccessibility(method, value.ToAccessibility());
}
}
public virtual global::EnvDTE.CodeElements Parameters {
get {
var list = new CodeElementsList<CodeParameter2>();
var method = (IParameterizedMember)methodModel.Resolve();
if (method != null) {
foreach (var p in method.Parameters) {
list.Add(new CodeParameter2(context, p));
}
var parameters = new CodeElementsList<CodeParameter2>();
foreach (IParameter parameter in method.Parameters) {
parameters.Add(new CodeParameter2(context, parameter));
}
return list;
return parameters;
}
}
public virtual global::EnvDTE.CodeTypeRef2 Type {
get {
var method = methodModel.Resolve();
if (method == null)
return null;
return new CodeTypeRef2(context, this, method.ReturnType);
}
}
public virtual global::EnvDTE.CodeElements Attributes {
get { return GetAttributes(methodModel); }
get { return GetAttributes(method); }
}
public virtual bool CanOverride {
get { return methodModel.IsOverridable; }
get { return method.IsOverridable; }
set {
if (value && !methodModel.IsOverridable) {
var method = methodModel.Resolve();
if (method != null) {
context.CodeGenerator.MakeVirtual(method);
}
if (value && !method.IsOverridable) {
context.CodeGenerator.MakeVirtual(method);
}
}
}
@ -93,7 +84,7 @@ namespace ICSharpCode.PackageManagement.EnvDTE @@ -93,7 +84,7 @@ namespace ICSharpCode.PackageManagement.EnvDTE
global::EnvDTE.vsCMFunction GetFunctionKind()
{
switch (methodModel.SymbolKind) {
switch (method.SymbolKind) {
case SymbolKind.Constructor:
return global::EnvDTE.vsCMFunction.vsCMFunctionConstructor;
//case SymbolKind.Destructor:
@ -105,11 +96,11 @@ namespace ICSharpCode.PackageManagement.EnvDTE @@ -105,11 +96,11 @@ namespace ICSharpCode.PackageManagement.EnvDTE
}
public virtual bool IsShared {
get { return methodModel.IsStatic; }
get { return method.IsStatic; }
}
public virtual bool MustImplement {
get { return methodModel.IsAbstract; }
get { return method.IsAbstract; }
}
}
}

18
src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/CodeFunction2.cs

@ -17,19 +17,19 @@ @@ -17,19 +17,19 @@
// DEALINGS IN THE SOFTWARE.
using System;
using ICSharpCode.SharpDevelop.Dom;
using ICSharpCode.NRefactory.TypeSystem;
namespace ICSharpCode.PackageManagement.EnvDTE
{
public class CodeFunction2 : CodeFunction, global::EnvDTE.CodeFunction2
{
public CodeFunction2(CodeModelContext context, IMethodModel methodModel)
: base(context, methodModel)
public CodeFunction2(CodeModelContext context, IMethod method)
: base(context, method)
{
}
public virtual bool IsGeneric {
get { return methodModel.TypeParameterCount > 0; }
get { return method.TypeParameters.Count > 0; }
}
public virtual global::EnvDTE.vsCMOverrideKind OverrideKind {
@ -39,15 +39,15 @@ namespace ICSharpCode.PackageManagement.EnvDTE @@ -39,15 +39,15 @@ namespace ICSharpCode.PackageManagement.EnvDTE
global::EnvDTE.vsCMOverrideKind GetOverrideKind()
{
global::EnvDTE.vsCMOverrideKind kind = 0;
if (methodModel.IsAbstract)
if (method.IsAbstract)
kind |= global::EnvDTE.vsCMOverrideKind.vsCMOverrideKindAbstract;
if (methodModel.IsOverride)
if (method.IsOverride)
kind |= global::EnvDTE.vsCMOverrideKind.vsCMOverrideKindOverride;
if (methodModel.IsVirtual && !methodModel.IsAbstract && !methodModel.IsOverride)
if (method.IsVirtual && !method.IsAbstract && !method.IsOverride)
kind |= global::EnvDTE.vsCMOverrideKind.vsCMOverrideKindVirtual;
if (methodModel.IsSealed)
if (method.IsSealed)
kind |= global::EnvDTE.vsCMOverrideKind.vsCMOverrideKindSealed;
if (methodModel.IsShadowing)
if (method.IsShadowing)
kind |= global::EnvDTE.vsCMOverrideKind.vsCMOverrideKindNew;
return kind;
}

106
src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/CodeInterface.cs

@ -16,51 +16,61 @@ @@ -16,51 +16,61 @@
// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
// DEALINGS IN THE SOFTWARE.
//using System;
//using ICSharpCode.SharpDevelop.Dom;
//
//namespace ICSharpCode.PackageManagement.EnvDTE
//{
// public class CodeInterface : CodeType, global::EnvDTE.CodeInterface
// {
// string fullName;
//
// public CodeInterface(IProjectContent projectContent, IClass c)
// : base(projectContent, c)
// {
// fullName = base.FullName;
// }
//
// public CodeInterface(IProjectContent projectContent, IReturnType type, IClass c)
// : base(projectContent, c)
// {
// fullName = type.GetFullName();
// }
//
// public override global::EnvDTE.vsCMElement Kind {
// get { return global::EnvDTE.vsCMElement.vsCMElementInterface; }
// }
//
// /// <summary>
// /// Returns null if base type is not an interface.
// /// </summary>
// public static CodeInterface CreateFromBaseType(IProjectContent projectContent, IReturnType baseType)
// {
// IClass baseTypeClass = baseType.GetUnderlyingClass();
// if (baseTypeClass.ClassType == ClassType.Interface) {
// return new CodeInterface(projectContent, baseType, baseTypeClass);
// }
// return null;
// }
//
// public global::EnvDTE.CodeFunction AddFunction(string name, global::EnvDTE.vsCMFunction kind, object type, object Position = null, global::EnvDTE.vsCMAccess Access = global::EnvDTE.vsCMAccess.vsCMAccessPublic)
// {
// var codeGenerator = new ClassCodeGenerator(Class);
// return codeGenerator.AddPublicMethod(name, (string)type);
// }
//
// public override string FullName {
// get { return fullName; }
// }
// }
//}
using System;
using System.Linq;
using System.Text;
using ICSharpCode.NRefactory.TypeSystem;
using ICSharpCode.NRefactory.TypeSystem.Implementation;
using ICSharpCode.SharpDevelop.Dom;
namespace ICSharpCode.PackageManagement.EnvDTE
{
public class CodeInterface : CodeType, global::EnvDTE.CodeInterface
{
public CodeInterface(CodeModelContext context, ITypeDefinition typeDefinition, params IType[] typeArguments)
: base(context, typeDefinition, typeArguments)
{
}
public override global::EnvDTE.vsCMElement Kind {
get { return global::EnvDTE.vsCMElement.vsCMElementInterface; }
}
public global::EnvDTE.CodeFunction AddFunction(string name, global::EnvDTE.vsCMFunction kind, object type, object Position = null, global::EnvDTE.vsCMAccess Access = global::EnvDTE.vsCMAccess.vsCMAccessPublic)
{
IType returnType = GetMethodReturnType((string)type);
context.CodeGenerator.AddMethodAtStart(typeDefinition, Access.ToAccessibility(), returnType, name);
ReloadTypeDefinition();
IMethod method = typeDefinition.Methods.FirstOrDefault(f => f.Name == name);
if (method != null) {
return new CodeFunction(context, method);
}
return null;
}
IType GetMethodReturnType(string typeName)
{
var fullTypeName = new FullTypeName(typeName);
IType type = typeDefinition.Compilation.FindType(fullTypeName);
if (type != null) {
return type;
}
return new UnknownType(fullTypeName);
}
void ReloadTypeDefinition()
{
ICompilation compilation = context.DteProject.GetCompilationUnit(typeDefinition.BodyRegion.FileName);
ITypeDefinition matchedTypeDefinition = compilation.MainAssembly.GetTypeDefinition(typeDefinition.FullTypeName);
if (matchedTypeDefinition != null) {
typeDefinition = matchedTypeDefinition;
}
}
}
}

111
src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/CodeModel.cs

@ -16,49 +16,68 @@ @@ -16,49 +16,68 @@
// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
// DEALINGS IN THE SOFTWARE.
//using System;
//using ICSharpCode.SharpDevelop.Dom;
//
//namespace ICSharpCode.PackageManagement.EnvDTE
//{
// public class CodeModel : MarshalByRefObject, global::EnvDTE.CodeModel
// {
// IProjectContent projectContent;
// CodeElementsInNamespace codeElements;
//
// public CodeModel(IProjectContent projectContent)
// {
// this.projectContent = projectContent;
// }
//
// public global::EnvDTE.CodeElements CodeElements {
// get {
// if (codeElements == null) {
// codeElements = new CodeElementsInNamespace(projectContent, String.Empty);
// }
// return codeElements;
// }
// }
//
// public global::EnvDTE.CodeType CodeTypeFromFullName(string name)
// {
// IClass matchedClass = projectContent.GetClass(name, 0);
// if (matchedClass != null) {
// return CreateCodeTypeForClass(matchedClass);
// }
// return null;
// }
//
// CodeType CreateCodeTypeForClass(IClass c)
// {
// if (c.ClassType == ClassType.Interface) {
// return new CodeInterface(projectContent, c);
// }
// return new CodeClass2(projectContent, c);
// }
//
// public string Language {
// get { return projectContent.GetCodeModelLanguage(); }
// }
// }
//}
using System;
using ICSharpCode.NRefactory.TypeSystem;
using ICSharpCode.SharpDevelop;
using ICSharpCode.SharpDevelop.Dom;
namespace ICSharpCode.PackageManagement.EnvDTE
{
public class CodeModel : MarshalByRefObject, global::EnvDTE.CodeModel
{
Project project;
CodeElementsInNamespace codeElements;
CodeModelContext context;
public CodeModel(CodeModelContext context, Project project)
{
this.context = context;
this.project = project;
}
public global::EnvDTE.CodeElements CodeElements {
get {
if (codeElements == null) {
codeElements = new CodeElementsInNamespace(context);
}
return codeElements;
}
}
public global::EnvDTE.CodeType CodeTypeFromFullName(string name)
{
ITypeDefinition typeDefinition = GetTypeDefinition(name);
if (typeDefinition != null) {
return CreateCodeTypeForTypeDefinition(typeDefinition);
}
return null;
}
ITypeDefinition GetTypeDefinition(string name)
{
ICompilation compilation = project.GetCompilationUnit();
var typeName = new TopLevelTypeName(name);
foreach (IAssembly assembly in compilation.Assemblies) {
ITypeDefinition typeDefinition = assembly.GetTypeDefinition(typeName);
if (typeDefinition != null) {
return typeDefinition;
}
}
return null;
}
CodeType CreateCodeTypeForTypeDefinition(ITypeDefinition typeDefinition)
{
if (typeDefinition.Kind == TypeKind.Interface) {
return new CodeInterface(context, typeDefinition);
}
return new CodeClass2(context, typeDefinition);
}
public string Language {
get { return project.MSBuildProject.GetCodeModelLanguage(); }
}
}
}

28
src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/CodeModelContext.cs

@ -24,9 +24,31 @@ namespace ICSharpCode.PackageManagement.EnvDTE @@ -24,9 +24,31 @@ namespace ICSharpCode.PackageManagement.EnvDTE
{
public class CodeModelContext
{
ICodeGenerator codeGenerator;
IDocumentLoader documentLoader;
public Project DteProject { get; set; }
public IProject CurrentProject { get; set; }
public IDocumentLoader DocumentLoader { get; set; }
public CodeGenerator CodeGenerator { get; set; }
public IDocumentLoader DocumentLoader {
get {
if (documentLoader == null) {
documentLoader = new DocumentLoader();
}
return documentLoader;
}
set { documentLoader = value; }
}
public ICodeGenerator CodeGenerator {
get {
if (codeGenerator == null) {
codeGenerator = new ThreadSafeCodeGenerator(CurrentProject.LanguageBinding.CodeGenerator);
}
return codeGenerator;
}
}
/// <summary>
/// Specifies the file name if this code model context refers to
@ -35,7 +57,7 @@ namespace ICSharpCode.PackageManagement.EnvDTE @@ -35,7 +57,7 @@ namespace ICSharpCode.PackageManagement.EnvDTE
public CodeModelContext WithFilteredFileName(string fileName)
{
CodeModelContext newContext = (CodeModelContext)MemberwiseClone();
var newContext = (CodeModelContext)MemberwiseClone();
newContext.FilteredFileName = fileName;
return newContext;
}

37
src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/CodeNamespace.cs

@ -18,52 +18,37 @@ @@ -18,52 +18,37 @@
using System;
using System.Collections.Generic;
using ICSharpCode.NRefactory.TypeSystem;
using ICSharpCode.SharpDevelop.Dom;
namespace ICSharpCode.PackageManagement.EnvDTE
{
public class CodeNamespace : CodeElement, global::EnvDTE.CodeNamespace
{
readonly string fullName;
INamespaceModel model;
INamespace ns;
public CodeNamespace(CodeModelContext context, INamespaceModel model)
: base(context, model)
{
this.model = model;
}
public CodeNamespace(CodeModelContext context, string fullName)
public CodeNamespace(CodeModelContext context, INamespace ns)
: base(context)
{
this.fullName = fullName;
this.ns = ns;
this.InfoLocation = global::EnvDTE.vsCMInfoLocation.vsCMInfoLocationExternal;
this.Language = context.CurrentProject.GetCodeModelLanguage();
}
public override global::EnvDTE.vsCMElement Kind {
get { return global::EnvDTE.vsCMElement.vsCMElementNamespace; }
}
public override global::EnvDTE.vsCMInfoLocation InfoLocation {
get { return global::EnvDTE.vsCMInfoLocation.vsCMInfoLocationExternal; }
}
public string FullName {
get { return fullName; }
get { return ns.FullName; }
}
CodeElementsList<CodeElement> members;
public override string Name {
get { return ns.Name; }
}
public virtual global::EnvDTE.CodeElements Members {
get {
if (members == null) {
if (model == null)
throw new NotSupportedException();
IModelCollection<CodeElement> namespaceMembers = model.ChildNamespaces.Select(ns => new CodeNamespace(context, ns));
IModelCollection<CodeElement> typeMembers = model.Types.Select(td => CodeType.Create(context, td));
members = namespaceMembers.Concat(typeMembers).AsCodeElements();
}
return members;
}
get { return new CodeElementsInNamespace(context, ns); }
}
}
}

17
src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/CodeParameter2.cs

@ -35,21 +35,18 @@ namespace ICSharpCode.PackageManagement.EnvDTE @@ -35,21 +35,18 @@ namespace ICSharpCode.PackageManagement.EnvDTE
global::EnvDTE.vsCMParameterKind GetParameterKind()
{
global::EnvDTE.vsCMParameterKind kind = 0;
global::EnvDTE.vsCMParameterKind kind = global::EnvDTE.vsCMParameterKind.vsCMParameterKindNone;
if (parameter.IsOptional) {
kind |= global::EnvDTE.vsCMParameterKind.vsCMParameterKindOptional;
return global::EnvDTE.vsCMParameterKind.vsCMParameterKindOptional;
}
if (parameter.IsOut) {
kind |= global::EnvDTE.vsCMParameterKind.vsCMParameterKindOut;
}
return global::EnvDTE.vsCMParameterKind.vsCMParameterKindOut;
}
if (parameter.IsRef) {
kind |= global::EnvDTE.vsCMParameterKind.vsCMParameterKindRef;
}
return global::EnvDTE.vsCMParameterKind.vsCMParameterKindRef;
}
if (parameter.IsParams) {
kind |= global::EnvDTE.vsCMParameterKind.vsCMParameterKindParamArray;
}
if (!(parameter.IsOut || parameter.IsRef)) {
kind |= global::EnvDTE.vsCMParameterKind.vsCMParameterKindIn;
return global::EnvDTE.vsCMParameterKind.vsCMParameterKindParamArray;
}
return kind;
}

130
src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/CodeProperty.cs

@ -16,68 +16,68 @@ @@ -16,68 +16,68 @@
// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
// DEALINGS IN THE SOFTWARE.
//using System;
//using ICSharpCode.SharpDevelop.Dom;
//
//namespace ICSharpCode.PackageManagement.EnvDTE
//{
// public class CodeProperty : CodeElement, global::EnvDTE.CodeProperty
// {
// public CodeProperty()
// {
// }
//
// public CodeProperty(IProperty property)
// : base(property)
// {
// this.Property = property;
// }
//
// protected IProperty Property { get; private set; }
//
// public override global::EnvDTE.vsCMElement Kind {
// get { return global::EnvDTE.vsCMElement.vsCMElementProperty; }
// }
//
// public virtual global::EnvDTE.vsCMAccess Access {
// get { return GetAccess(); }
// set { }
// }
//
// public virtual global::EnvDTE.CodeClass Parent {
// get { return new CodeClass(Property.ProjectContent, Property.DeclaringType); }
// }
//
// public virtual global::EnvDTE.CodeElements Attributes {
// get { return new CodeAttributes(Property); }
// }
//
// public virtual global::EnvDTE.CodeTypeRef Type {
// get { return new CodeTypeRef2(Property.ProjectContent, this, Property.ReturnType); }
// }
//
// public virtual global::EnvDTE.CodeFunction Getter {
// get { return GetGetter(); }
// }
//
// CodeFunction GetGetter()
// {
// if (Property.CanGet) {
// return new CodeGetterFunction(Property);
// }
// return null;
// }
//
// public virtual global::EnvDTE.CodeFunction Setter {
// get { return GetSetter(); }
// }
//
// CodeFunction GetSetter()
// {
// if (Property.CanSet) {
// return new CodeSetterFunction(Property);
// }
// return null;
// }
// }
//}
using System;
using ICSharpCode.NRefactory.TypeSystem;
namespace ICSharpCode.PackageManagement.EnvDTE
{
public class CodeProperty : CodeElement, global::EnvDTE.CodeProperty
{
protected readonly IProperty property;
public CodeProperty()
{
}
public CodeProperty(CodeModelContext context, IProperty property)
: base(context, property)
{
this.property = property;
}
public override global::EnvDTE.vsCMElement Kind {
get { return global::EnvDTE.vsCMElement.vsCMElementProperty; }
}
public virtual global::EnvDTE.vsCMAccess Access {
get { return property.Accessibility.ToAccess(); }
set { }
}
public virtual global::EnvDTE.CodeClass Parent {
get { return new CodeClass(context, property.DeclaringTypeDefinition); }
}
public virtual global::EnvDTE.CodeElements Attributes {
get { return GetAttributes(property); }
}
public virtual global::EnvDTE.CodeTypeRef Type {
get { return new CodeTypeRef2(context, this, property.ReturnType); }
}
public virtual global::EnvDTE.CodeFunction Getter {
get { return GetGetter(); }
}
CodeFunction GetGetter()
{
if (property.CanGet) {
return new CodeFunction2(context, property.Getter);
}
return null;
}
public virtual global::EnvDTE.CodeFunction Setter {
get { return GetSetter(); }
}
CodeFunction GetSetter()
{
if (property.CanSet) {
return new CodeFunction2(context, property.Setter);
}
return null;
}
}
}

76
src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/CodeProperty2.cs

@ -16,38 +16,44 @@ @@ -16,38 +16,44 @@
// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
// DEALINGS IN THE SOFTWARE.
//using System;
//using ICSharpCode.SharpDevelop.Dom;
//
//namespace ICSharpCode.PackageManagement.EnvDTE
//{
// public class CodeProperty2 : CodeProperty, global::EnvDTE.CodeProperty2
// {
// public CodeProperty2()
// {
// }
//
// public CodeProperty2(IProperty property)
// : base(property)
// {
// }
//
// public global::EnvDTE.vsCMPropertyKind ReadWrite {
// get { return GetPropertyKind(); }
// }
//
// global::EnvDTE.vsCMPropertyKind GetPropertyKind()
// {
// if (Property.CanSet && Property.CanGet) {
// return global::EnvDTE.vsCMPropertyKind.vsCMPropertyKindReadWrite;
// } else if (Property.CanSet) {
// return global::EnvDTE.vsCMPropertyKind.vsCMPropertyKindWriteOnly;
// }
// return global::EnvDTE.vsCMPropertyKind.vsCMPropertyKindReadOnly;
// }
//
// public global::EnvDTE.CodeElements Parameters {
// get { return new CodeParameters(null, Property.Parameters); }
// }
// }
//}
using System;
using System.Linq;
using ICSharpCode.NRefactory.TypeSystem;
using ICSharpCode.SharpDevelop;
namespace ICSharpCode.PackageManagement.EnvDTE
{
public class CodeProperty2 : CodeProperty, global::EnvDTE.CodeProperty2
{
public CodeProperty2()
{
}
public CodeProperty2(CodeModelContext context, IProperty property)
: base(context, property)
{
}
public global::EnvDTE.vsCMPropertyKind ReadWrite {
get { return GetPropertyKind(); }
}
global::EnvDTE.vsCMPropertyKind GetPropertyKind()
{
if (property.CanSet && property.CanGet) {
return global::EnvDTE.vsCMPropertyKind.vsCMPropertyKindReadWrite;
} else if (property.CanSet) {
return global::EnvDTE.vsCMPropertyKind.vsCMPropertyKindWriteOnly;
}
return global::EnvDTE.vsCMPropertyKind.vsCMPropertyKindReadOnly;
}
public global::EnvDTE.CodeElements Parameters {
get {
var parameters = new CodeElementsList<CodeElement>();
parameters.AddRange(property.Parameters.Select(parameter => new CodeParameter2(context, parameter)));
return parameters;
}
}
}
}

42
src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/CodeStruct.cs

@ -16,24 +16,24 @@ @@ -16,24 +16,24 @@
// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
// DEALINGS IN THE SOFTWARE.
//using System;
//using ICSharpCode.SharpDevelop.Dom;
//
//namespace ICSharpCode.PackageManagement.EnvDTE
//{
// public class CodeStruct : CodeType, global::EnvDTE.CodeStruct
// {
// public CodeStruct()
// {
// }
//
// public CodeStruct(IProjectContent projectContent, IClass c)
// : base(projectContent, c)
// {
// }
//
// public override global::EnvDTE.vsCMElement Kind {
// get { return global::EnvDTE.vsCMElement.vsCMElementStruct; }
// }
// }
//}
using System;
using ICSharpCode.NRefactory.TypeSystem;
namespace ICSharpCode.PackageManagement.EnvDTE
{
public class CodeStruct : CodeType, global::EnvDTE.CodeStruct
{
public CodeStruct()
{
}
public CodeStruct(CodeModelContext context, ITypeDefinition typeDefinition)
: base(context, typeDefinition)
{
}
public override global::EnvDTE.vsCMElement Kind {
get { return global::EnvDTE.vsCMElement.vsCMElementStruct; }
}
}
}

144
src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/CodeType.cs

@ -23,56 +23,59 @@ using System.Text; @@ -23,56 +23,59 @@ using System.Text;
using ICSharpCode.NRefactory.TypeSystem;
using ICSharpCode.SharpDevelop;
using ICSharpCode.SharpDevelop.Dom;
using ICSharpCode.SharpDevelop.Project;
namespace ICSharpCode.PackageManagement.EnvDTE
{
public class CodeType : CodeElement, global::EnvDTE.CodeType
{
protected readonly ITypeDefinitionModel typeModel;
protected ITypeDefinition typeDefinition;
IType[] typeArguments;
CodeElementsList<CodeElement> members;
public static CodeType Create(CodeModelContext context, IType type)
internal static CodeType Create(CodeModelContext context, IType type)
{
var typeDef = type.GetDefinition();
if (typeDef != null) {
var typeModel = typeDef.GetModel();
if (typeModel != null)
return Create(context.WithFilteredFileName(null), typeModel);
ITypeDefinition typeDefinition = type.GetDefinition();
if (typeDefinition != null) {
return Create(context.WithFilteredFileName(null), typeDefinition, type.TypeArguments.ToArray());
}
return null;
}
public static CodeType Create(CodeModelContext context, ITypeDefinitionModel typeModel)
internal static CodeType Create(
CodeModelContext context,
ITypeDefinition typeDefinition,
params IType[] typeArguments)
{
switch (typeModel.TypeKind) {
switch (typeDefinition.Kind) {
case TypeKind.Class:
case TypeKind.Module:
goto default;
return new CodeClass2(context, typeDefinition);
case TypeKind.Interface:
goto default;
return new CodeInterface(context, typeDefinition, typeArguments);
case TypeKind.Module:
case TypeKind.Struct:
case TypeKind.Void:
goto default;
case TypeKind.Delegate:
goto default;
case TypeKind.Enum:
goto default;
default:
return new CodeType(context, typeModel);
return new CodeType(context, typeDefinition, typeArguments);
}
}
/// <summary>
/// Note that projectContent may be different to the IClass.ProjectContent since the class
/// is retrieved from the namespace contents and could belong to a separate project or
/// referenced assembly.
/// </summary>
public CodeType(CodeModelContext context, ITypeDefinitionModel typeModel)
: base(context, typeModel)
public CodeType(CodeModelContext context, ITypeDefinition typeDefinition, params IType[] typeArguments)
: base(context, typeDefinition)
{
this.typeModel = typeModel;
this.typeDefinition = typeDefinition;
this.typeArguments = typeArguments;
this.InfoLocation = GetInfoLocation();
}
global::EnvDTE.vsCMInfoLocation GetInfoLocation()
{
if (typeDefinition.ParentAssembly.IsMainAssembly) {
return global::EnvDTE.vsCMInfoLocation.vsCMInfoLocationProject;
}
return global::EnvDTE.vsCMInfoLocation.vsCMInfoLocationExternal;
}
public CodeType()
@ -80,39 +83,46 @@ namespace ICSharpCode.PackageManagement.EnvDTE @@ -80,39 +83,46 @@ namespace ICSharpCode.PackageManagement.EnvDTE
}
public virtual global::EnvDTE.vsCMAccess Access {
get { return typeModel.Accessibility.ToAccess(); }
set {
var td = typeModel.Resolve();
if (td != null) {
context.CodeGenerator.ChangeAccessibility(td, value.ToAccessibility());
}
}
get { return typeDefinition.Accessibility.ToAccess(); }
set { }
}
public virtual string FullName {
get {
var fullTypeName = typeModel.FullTypeName;
StringBuilder b = new StringBuilder();
FullTypeName fullTypeName = typeDefinition.FullTypeName;
var fullName = new StringBuilder();
if (!string.IsNullOrEmpty(fullTypeName.TopLevelTypeName.Namespace)) {
b.Append(fullTypeName.TopLevelTypeName.Namespace);
b.Append('.');
fullName.Append(fullTypeName.TopLevelTypeName.Namespace);
fullName.Append('.');
}
b.Append(fullTypeName.TopLevelTypeName.Name);
fullName.Append(fullTypeName.TopLevelTypeName.Name);
for (int i = 0; i < fullTypeName.NestingLevel; i++) {
b.Append('.');
b.Append(fullTypeName.GetNestedTypeName(i));
fullName.Append('.');
fullName.Append(fullTypeName.GetNestedTypeName(i));
}
return b.ToString();
return fullName.ToString() + GetTypeArguments();
}
}
string GetTypeArguments()
{
if (typeArguments.Length == 0) {
return String.Empty;
}
return String.Format(
"<{0}>",
String.Join(", ", typeArguments.Select(type => type.FullName)));
}
public virtual global::EnvDTE.CodeElements Members {
get {
if (members == null) {
members = typeModel.Members
.Where(m => IsInFilter(m.Region))
.Select(m => CreateMember(context, m))
.AsCodeElements();
members = new CodeElementsList<CodeElement>();
members.AddRange(typeDefinition.Members
.Where(member => IsInFilter(member.Region))
.Where(member => !member.Region.End.IsEmpty || !typeDefinition.ParentAssembly.IsMainAssembly)
.Select(member => CreateMember(context, member)));
}
return members;
}
@ -120,44 +130,39 @@ namespace ICSharpCode.PackageManagement.EnvDTE @@ -120,44 +130,39 @@ namespace ICSharpCode.PackageManagement.EnvDTE
public virtual global::EnvDTE.CodeElements Bases {
get {
var list = new CodeElementsList<CodeType>();
var td = typeModel.Resolve();
if (td != null) {
IEnumerable<IType> baseTypes;
if (td.Kind == TypeKind.Interface)
baseTypes = td.DirectBaseTypes;
else
baseTypes = td.DirectBaseTypes.Where(t => t.Kind != TypeKind.Interface);
foreach (var baseType in baseTypes) {
CodeType element = Create(context, baseType);
if (element != null)
list.Add(element);
var types = new CodeElementsList<CodeType>();
foreach (IType baseType in GetBaseTypes()) {
CodeType element = Create(context, baseType);
if (element != null) {
types.Add(element);
}
}
return list;
return types;
}
}
IEnumerable<IType> GetBaseTypes()
{
if (typeDefinition.Kind == TypeKind.Interface) {
return typeDefinition.DirectBaseTypes;
}
return typeDefinition.DirectBaseTypes.Where(type => type.Kind != TypeKind.Interface);
}
public virtual global::EnvDTE.CodeElements Attributes {
get {
return GetAttributes(typeModel);
return GetAttributes(typeDefinition);
}
}
public virtual global::EnvDTE.CodeNamespace Namespace {
get {
if (context.FilteredFileName != null)
return new FileCodeModel2(context).GetNamespace(typeModel.Namespace);
else
throw new NotImplementedException();
// return new CodeNamespace(context, typeModel.Namespace);
}
get { return new FileCodeModelCodeNamespace(context, typeDefinition.Namespace); }
}
public virtual global::EnvDTE.ProjectItem ProjectItem {
get {
if (context.CurrentProject != null) {
return EnvDTE.ProjectItem.FindByEntity(context.CurrentProject, typeModel);
return EnvDTE.ProjectItem.FindByEntity(context.CurrentProject, typeDefinition);
}
return null;
}
@ -169,8 +174,9 @@ namespace ICSharpCode.PackageManagement.EnvDTE @@ -169,8 +174,9 @@ namespace ICSharpCode.PackageManagement.EnvDTE
/// </summary>
protected override bool GetIsDerivedFrom(string fullName)
{
var td = typeModel.Resolve();
return td != null && td.GetAllBaseTypeDefinitions().Any(b => b.FullName == fullName);
return typeDefinition
.GetAllBaseTypeDefinitions()
.Any(baseType => baseType.FullName == fullName);
}
}
}

43
src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/CodeTypeRef.cs

@ -42,12 +42,15 @@ namespace ICSharpCode.PackageManagement.EnvDTE @@ -42,12 +42,15 @@ namespace ICSharpCode.PackageManagement.EnvDTE
}
public virtual string AsFullName {
get { return type.ReflectionName; }
get { return CodeType.FullName; }
}
public virtual string AsString {
get {
return new CSharpAmbience().ConvertType(type);
if (TypeKind != global::EnvDTE.vsCMTypeRef.vsCMTypeRefCodeType) {
return new CSharpAmbience().ConvertType(type);
}
return AsFullName;
}
}
@ -65,16 +68,14 @@ namespace ICSharpCode.PackageManagement.EnvDTE @@ -65,16 +68,14 @@ namespace ICSharpCode.PackageManagement.EnvDTE
get {
switch (type.Kind) {
case NRefactory.TypeSystem.TypeKind.Class:
if (type.IsKnownType(KnownTypeCode.String))
return global::EnvDTE.vsCMTypeRef.vsCMTypeRefString;
else
return global::EnvDTE.vsCMTypeRef.vsCMTypeRefObject;
return GetClassType(type);
case NRefactory.TypeSystem.TypeKind.Struct:
var typeDef = type.GetDefinition();
if (typeDef != null)
ITypeDefinition typeDef = type.GetDefinition();
if (typeDef != null) {
return GetStructTypeKind(typeDef.KnownTypeCode);
else
} else {
return global::EnvDTE.vsCMTypeRef.vsCMTypeRefOther;
}
case NRefactory.TypeSystem.TypeKind.Delegate:
case NRefactory.TypeSystem.TypeKind.Interface:
case NRefactory.TypeSystem.TypeKind.Module:
@ -86,14 +87,26 @@ namespace ICSharpCode.PackageManagement.EnvDTE @@ -86,14 +87,26 @@ namespace ICSharpCode.PackageManagement.EnvDTE
case NRefactory.TypeSystem.TypeKind.Pointer:
return global::EnvDTE.vsCMTypeRef.vsCMTypeRefPointer;
default:
if (type.IsReferenceType == true)
if (type.IsReferenceType == true) {
return global::EnvDTE.vsCMTypeRef.vsCMTypeRefObject;
else
} else {
return global::EnvDTE.vsCMTypeRef.vsCMTypeRefOther;
}
}
}
}
global::EnvDTE.vsCMTypeRef GetClassType(IType type)
{
if (type.IsKnownType(KnownTypeCode.String)) {
return global::EnvDTE.vsCMTypeRef.vsCMTypeRefString;
} else if (type.IsKnownType(KnownTypeCode.Object)) {
return global::EnvDTE.vsCMTypeRef.vsCMTypeRefObject;
} else {
return global::EnvDTE.vsCMTypeRef.vsCMTypeRefCodeType;
}
}
global::EnvDTE.vsCMTypeRef GetStructTypeKind(KnownTypeCode knownTypeCode)
{
switch (knownTypeCode) {
@ -119,11 +132,9 @@ namespace ICSharpCode.PackageManagement.EnvDTE @@ -119,11 +132,9 @@ namespace ICSharpCode.PackageManagement.EnvDTE
return global::EnvDTE.vsCMTypeRef.vsCMTypeRefDouble;
case KnownTypeCode.Decimal:
return global::EnvDTE.vsCMTypeRef.vsCMTypeRefDecimal;
case KnownTypeCode.Void:
return global::EnvDTE.vsCMTypeRef.vsCMTypeRefVoid;
case KnownTypeCode.IntPtr:
case KnownTypeCode.UIntPtr:
return global::EnvDTE.vsCMTypeRef.vsCMTypeRefPointer;
// case KnownTypeCode.IntPtr:
// case KnownTypeCode.UIntPtr:
// return global::EnvDTE.vsCMTypeRef.vsCMTypeRefPointer;
default:
return global::EnvDTE.vsCMTypeRef.vsCMTypeRefOther;
}

12
src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/CodeVariable.cs

@ -17,19 +17,20 @@ @@ -17,19 +17,20 @@
// DEALINGS IN THE SOFTWARE.
using System;
using ICSharpCode.NRefactory.TypeSystem;
using ICSharpCode.SharpDevelop.Dom;
namespace ICSharpCode.PackageManagement.EnvDTE
{
public class CodeVariable : CodeElement, global::EnvDTE.CodeVariable
{
readonly IFieldModel field;
readonly IField field;
public CodeVariable()
{
}
public CodeVariable(CodeModelContext context, IFieldModel field)
public CodeVariable(CodeModelContext context, IField field)
: base(context, field)
{
this.field = field;
@ -41,12 +42,7 @@ namespace ICSharpCode.PackageManagement.EnvDTE @@ -41,12 +42,7 @@ namespace ICSharpCode.PackageManagement.EnvDTE
public global::EnvDTE.vsCMAccess Access {
get { return field.Accessibility.ToAccess(); }
set {
var f = field.Resolve();
if (f != null) {
context.CodeGenerator.ChangeAccessibility(f, value.ToAccessibility());
}
}
set { }
}
}
}

84
src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/EditPoint.cs

@ -18,14 +18,15 @@ @@ -18,14 +18,15 @@
using System;
using ICSharpCode.NRefactory;
using ICSharpCode.SharpDevelop.Dom;
using ICSharpCode.NRefactory.Editor;
using ICSharpCode.SharpDevelop;
namespace ICSharpCode.PackageManagement.EnvDTE
{
public class EditPoint : TextPoint, global::EnvDTE.EditPoint
{
// IRefactoringDocument document;
// IRefactoringDocumentView documentView;
IDocument document;
IDocumentView documentView;
internal EditPoint(string fileName, TextLocation location, IDocumentLoader documentLoader)
: base(fileName, location, documentLoader)
@ -39,47 +40,46 @@ namespace ICSharpCode.PackageManagement.EnvDTE @@ -39,47 +40,46 @@ namespace ICSharpCode.PackageManagement.EnvDTE
void ReplaceText(TextPoint endPoint, string text, global::EnvDTE.vsEPReplaceTextOptions textFormatOptions)
{
throw new NotImplementedException();
// OpenDocument();
// int offset = GetStartOffset();
// int endOffset = GetEndOffset(endPoint);
// document.Replace(offset, endOffset - offset, text);
// IndentReplacedText(text);
OpenDocument();
int offset = GetStartOffset();
int endOffset = GetEndOffset(endPoint);
document.Replace(offset, endOffset - offset, text);
IndentReplacedText(text);
}
void OpenDocument()
{
documentView = documentLoader.LoadDocumentView(fileName);
document = documentView.Document;
}
int GetStartOffset()
{
return document.PositionToOffset(Line, LineCharOffset);
}
int GetEndOffset(TextPoint endPoint)
{
return document.PositionToOffset(endPoint.Line, endPoint.LineCharOffset);
}
/// <summary>
/// Indents all lines apart from the first one since it is assumed
/// that the first line had the correct indentation.
/// </summary>
void IndentReplacedText(string text)
{
int lineCount = GetLineCount(text);
if (lineCount > 1) {
documentView.IndentLines(Line + 1, Line + lineCount);
}
}
int GetLineCount(string text)
{
return text.Split('\n').Length;
}
// void OpenDocument()
// {
// documentView = DocumentLoader.LoadRefactoringDocumentView(FilePosition.FileName);
// document = documentView.RefactoringDocument;
// }
//
// int GetStartOffset()
// {
// return document.PositionToOffset(Line, LineCharOffset);
// }
//
// int GetEndOffset(TextPoint endPoint)
// {
// return document.PositionToOffset(endPoint.Line, endPoint.LineCharOffset);
// }
//
// /// <summary>
// /// Indents all lines apart from the first one since it is assumed
// /// that the first line had the correct indentation.
// /// </summary>
// void IndentReplacedText(string text)
// {
// int lineCount = GetLineCount(text);
// if (lineCount > 1) {
// documentView.IndentLines(Line + 1, Line + lineCount);
// }
// }
//
// int GetLineCount(string text)
// {
// return text.Split('\n').Length;
// }
//
public void Insert(string text)
{
throw new NotImplementedException();

82
src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/FileCodeModel2.cs

@ -19,70 +19,90 @@ @@ -19,70 +19,90 @@
using System;
using System.Collections.Generic;
using System.Linq;
using ICSharpCode.Core;
using ICSharpCode.NRefactory.CSharp;
using ICSharpCode.NRefactory.CSharp.TypeSystem;
using ICSharpCode.NRefactory.TypeSystem;
using ICSharpCode.SharpDevelop;
using ICSharpCode.SharpDevelop.Dom;
using ICSharpCode.SharpDevelop.Project;
namespace ICSharpCode.PackageManagement.EnvDTE
{
public class FileCodeModel2 : MarshalByRefObject, global::EnvDTE.FileCodeModel2
{
readonly CodeModelContext context;
CodeElementsList<CodeElement> codeElements = new CodeElementsList<CodeElement>();
CodeModelContext context;
Project project;
CodeElementsList<CodeElement> codeElements;
Dictionary<string, FileCodeModelCodeNamespace> namespaces = new Dictionary<string, FileCodeModelCodeNamespace>();
public FileCodeModel2(CodeModelContext context)
public FileCodeModel2(CodeModelContext context, Project project)
{
if (context == null || context.FilteredFileName == null)
if (context == null || context.FilteredFileName == null) {
throw new ArgumentException("context must be restricted to a file");
}
this.context = context;
var compilation = SD.ParserService.GetCompilation(context.CurrentProject);
this.project = project;
}
public global::EnvDTE.CodeElements CodeElements {
get {
if (codeElements == null) {
codeElements = new CodeElementsList<CodeElement>();
AddCodeElements();
}
return codeElements;
}
}
void AddCodeElements()
{
ICompilation compilation = project.GetCompilationUnit();
var projectContent = compilation.MainAssembly.UnresolvedAssembly as IProjectContent;
if (projectContent != null) {
IUnresolvedFile file = projectContent.GetFile(context.FilteredFileName);
if (file != null) {
var csharpFile = file as CSharpUnresolvedFile;
if (csharpFile != null)
AddUsings(codeElements, csharpFile.RootUsingScope, compilation);
if (csharpFile != null) {
AddUsings(csharpFile.RootUsingScope, compilation);
}
var resolveContext = new SimpleTypeResolveContext(compilation.MainAssembly);
AddTypes(file.TopLevelTypeDefinitions
.Select(td => td.Resolve(resolveContext) as ITypeDefinition)
.Where(td => td != null).Distinct());
AddTypes(
file.TopLevelTypeDefinitions
.Select(td => td.Resolve(resolveContext) as ITypeDefinition)
.Where(td => td != null)
.Distinct());
}
}
}
public global::EnvDTE.CodeElements CodeElements {
get { return codeElements; }
}
void AddTypes(IEnumerable<ITypeDefinition> types)
{
foreach (var td in types) {
var model = td.GetModel();
if (model == null)
continue;
var codeType = CodeType.Create(context, td);
if (string.IsNullOrEmpty(td.Namespace))
foreach (ITypeDefinition typeDefinition in types) {
CodeType codeType = CodeType.Create(context, typeDefinition);
if (string.IsNullOrEmpty(typeDefinition.Namespace)) {
codeElements.Add(codeType);
else
GetNamespace(td.Namespace).AddMember(codeType);
} else {
GetNamespace(typeDefinition.Namespace).AddMember(codeType);
}
}
codeElements.AddRange(types.Select(td => CodeType.Create(context, td)));
}
public static void AddUsings(CodeElementsList<CodeElement> codeElements, UsingScope usingScope, ICompilation compilation)
public void AddUsings(UsingScope usingScope, ICompilation compilation)
{
var resolvedUsingScope = usingScope.Resolve(compilation);
foreach (var ns in resolvedUsingScope.Usings) {
codeElements.Add(new CodeImport(ns.FullName));
foreach (KeyValuePair<string, TypeOrNamespaceReference> alias in usingScope.UsingAliases) {
AddCodeImport(alias.Value.ToString());
}
foreach (TypeOrNamespaceReference typeOrNamespace in usingScope.Usings) {
AddCodeImport(typeOrNamespace.ToString());
}
}
void AddCodeImport(string namespaceName)
{
codeElements.Add(new CodeImport(namespaceName));
}
public void AddImport(string name, object position = null, string alias = null)
@ -98,7 +118,7 @@ namespace ICSharpCode.PackageManagement.EnvDTE @@ -98,7 +118,7 @@ namespace ICSharpCode.PackageManagement.EnvDTE
namespaces.Add(namespaceName, ns);
codeElements.Add(ns);
}
return null;
return ns;
}
}
}

35
src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/FileCodeModelCodeNamespace.cs

@ -28,24 +28,29 @@ namespace ICSharpCode.PackageManagement.EnvDTE @@ -28,24 +28,29 @@ namespace ICSharpCode.PackageManagement.EnvDTE
/// This differs from the CodeModel CodeNamespace which breaks up the namespaces into
/// parts.
/// </summary>
public class FileCodeModelCodeNamespace : CodeNamespace
public class FileCodeModelCodeNamespace : CodeElement, global::EnvDTE.CodeNamespace
{
NamespaceName namespaceName;
CodeElementsList<CodeElement> members = new CodeElementsList<CodeElement>();
public FileCodeModelCodeNamespace(CodeModelContext context, string namespaceName)
: base(context, namespaceName)
: this(context, new NamespaceName(namespaceName))
{
}
public override string Name {
get { return base.FullName; }
FileCodeModelCodeNamespace(CodeModelContext context, NamespaceName namespaceName)
{
this.context = context;
this.namespaceName = namespaceName;
this.InfoLocation = global::EnvDTE.vsCMInfoLocation.vsCMInfoLocationExternal;
this.Language = context.CurrentProject.GetCodeModelLanguage();
}
public override global::EnvDTE.vsCMInfoLocation InfoLocation {
get { return global::EnvDTE.vsCMInfoLocation.vsCMInfoLocationProject; }
}
CodeElementsList<CodeElement> members = new CodeElementsList<CodeElement>();
public override global::EnvDTE.CodeElements Members {
public global::EnvDTE.CodeElements Members {
get { return members; }
}
@ -53,5 +58,21 @@ namespace ICSharpCode.PackageManagement.EnvDTE @@ -53,5 +58,21 @@ namespace ICSharpCode.PackageManagement.EnvDTE
{
members.Add(member);
}
public override global::EnvDTE.vsCMElement Kind {
get { return global::EnvDTE.vsCMElement.vsCMElementNamespace; }
}
internal NamespaceName NamespaceName {
get { return namespaceName; }
}
public string FullName {
get { return namespaceName.QualifiedName; }
}
public override string Name {
get { return FullName; }
}
}
}

58
src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/NamespaceName.cs

@ -0,0 +1,58 @@ @@ -0,0 +1,58 @@
// Copyright (c) 2014 AlphaSierraPapa for the SharpDevelop Team
//
// Permission is hereby granted, free of charge, to any person obtaining a copy of this
// software and associated documentation files (the "Software"), to deal in the Software
// without restriction, including without limitation the rights to use, copy, modify, merge,
// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons
// to whom the Software is furnished to do so, subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included in all copies or
// substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE
// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
// DEALINGS IN THE SOFTWARE.
using System;
namespace ICSharpCode.PackageManagement.EnvDTE
{
public class NamespaceName
{
public NamespaceName(string parentNamespace, string name)
: this(GetQualifiedNamespaceName(parentNamespace, name))
{
}
static string GetQualifiedNamespaceName(string parentNamespace, string name)
{
if (String.IsNullOrEmpty(parentNamespace)) {
return name;
}
return String.Format("{0}.{1}", parentNamespace, name);
}
public NamespaceName(string qualifiedName)
{
this.QualifiedName = qualifiedName;
LastPart = GetLastPartOfNamespace();
}
string GetLastPartOfNamespace()
{
int index = QualifiedName.LastIndexOf('.');
return QualifiedName.Substring(index + 1);
}
public string LastPart { get; private set; }
public string QualifiedName { get; private set; }
public NamespaceName CreateChildNamespaceName(string name)
{
return new NamespaceName(QualifiedName, name);
}
}
}

20
src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/Project.cs

@ -37,6 +37,7 @@ namespace ICSharpCode.PackageManagement.EnvDTE @@ -37,6 +37,7 @@ namespace ICSharpCode.PackageManagement.EnvDTE
IPackageManagementProjectService projectService;
IPackageManagementFileService fileService;
DTE dte;
CodeModelContext context;
public Project(MSBuildBasedProject project)
: this(
@ -55,6 +56,11 @@ namespace ICSharpCode.PackageManagement.EnvDTE @@ -55,6 +56,11 @@ namespace ICSharpCode.PackageManagement.EnvDTE
this.projectService = projectService;
this.fileService = fileService;
context = new CodeModelContext {
CurrentProject = project,
DteProject = this
};
CreateProperties();
Object = new ProjectObject(this);
ProjectItems = new ProjectItems(this, this);
@ -243,8 +249,7 @@ namespace ICSharpCode.PackageManagement.EnvDTE @@ -243,8 +249,7 @@ namespace ICSharpCode.PackageManagement.EnvDTE
}
public virtual global::EnvDTE.CodeModel CodeModel {
get { throw new NotImplementedException(); }
//get { return new CodeModel(projectService.GetProjectContent(MSBuildProject) ); }
get { return new CodeModel(context, this); }
}
public virtual global::EnvDTE.ConfigurationManager ConfigurationManager {
@ -312,6 +317,11 @@ namespace ICSharpCode.PackageManagement.EnvDTE @@ -312,6 +317,11 @@ namespace ICSharpCode.PackageManagement.EnvDTE
return fileService.GetCompilationUnit(fileName);
}
internal ICompilation GetCompilationUnit()
{
return fileService.GetCompilationUnit(MSBuildProject);
}
internal void RemoveProjectItem(ProjectItem projectItem)
{
projectService.RemoveProjectItem(MSBuildProject, projectItem.MSBuildProjectItem);
@ -319,11 +329,7 @@ namespace ICSharpCode.PackageManagement.EnvDTE @@ -319,11 +329,7 @@ namespace ICSharpCode.PackageManagement.EnvDTE
internal ProjectItem FindProjectItem(string fileName)
{
SD.FileProjectItem item = MSBuildProject.FindFile(new FileName(fileName));
if (item != null) {
return new ProjectItem(this, item);
}
return null;
return ProjectItem.FindByFileName(MSBuildProject, fileName);
}
internal IViewContent GetOpenFile(string fileName)

44
src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/ProjectItem.cs

@ -17,12 +17,11 @@ @@ -17,12 +17,11 @@
// DEALINGS IN THE SOFTWARE.
using System;
using System.ComponentModel;
using System.IO;
using ICSharpCode.Core;
using ICSharpCode.NRefactory.TypeSystem;
using ICSharpCode.SharpDevelop;
using ICSharpCode.SharpDevelop.Dom;
using ICSharpCode.SharpDevelop.Project;
using SD = ICSharpCode.SharpDevelop.Project;
@ -55,20 +54,22 @@ namespace ICSharpCode.PackageManagement.EnvDTE @@ -55,20 +54,22 @@ namespace ICSharpCode.PackageManagement.EnvDTE
return new FileProjectItems(this);
}
internal static ProjectItem FindByEntity(IProject project, IEntityModel entity)
internal static ProjectItem FindByEntity(IProject project, IEntity entity)
{
throw new NotImplementedException();
if (entity.Region.FileName != null) {
return FindByFileName(project, entity.Region.FileName);
}
return null;
}
// internal ProjectItem(MSBuildBasedProject project, IClass c)
// : this(new Project(project), project.FindFile(c.CompilationUnit.FileName))
// {
// }
//
// internal ProjectItem(IProjectContent projectContent, IClass c)
// : this((MSBuildBasedProject)projectContent.Project, c)
// {
// }
internal static ProjectItem FindByFileName(IProject project, string fileName)
{
SD.FileProjectItem item = project.FindFile(new FileName(fileName));
if (item != null) {
return new ProjectItem(new Project(project as MSBuildBasedProject), item);
}
return null;
}
string GetKindFromFileProjectItemType()
{
@ -170,14 +171,21 @@ namespace ICSharpCode.PackageManagement.EnvDTE @@ -170,14 +171,21 @@ namespace ICSharpCode.PackageManagement.EnvDTE
public global::EnvDTE.FileCodeModel2 FileCodeModel {
get {
// if (!IsDirectory) {
// return new FileCodeModel2(containingProject, projectItem);
// }
// return null;
throw new NotImplementedException();
if (!IsDirectory) {
return new FileCodeModel2(CreateModelContext(), containingProject);
}
return null;
}
}
CodeModelContext CreateModelContext()
{
return new CodeModelContext {
CurrentProject = containingProject.MSBuildProject,
FilteredFileName = projectItem.FileName
};
}
internal string GetIncludePath(string fileName)
{
string relativeDirectory = GetProjectItemRelativePathToProject();

9
src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/ProjectKind.cs

@ -32,13 +32,18 @@ namespace ICSharpCode.PackageManagement.EnvDTE @@ -32,13 +32,18 @@ namespace ICSharpCode.PackageManagement.EnvDTE
{
string type = ProjectType.GetProjectType(project);
if (type == ProjectType.CSharp) {
return SD.ProjectTypeGuids.CSharp.ToString();
return GetProjectKind(SD.ProjectTypeGuids.CSharp);
} else if (type == ProjectType.VB) {
return SD.ProjectTypeGuids.VB.ToString();
return GetProjectKind(SD.ProjectTypeGuids.VB);
}
return String.Empty;
}
string GetProjectKind(Guid guid)
{
return "{" + guid.ToString().ToUpperInvariant() + "}";
}
public string Kind { get; private set; }
}
}

1
src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/TextPoint.cs

@ -19,7 +19,6 @@ @@ -19,7 +19,6 @@
using System;
using ICSharpCode.NRefactory;
using ICSharpCode.NRefactory.TypeSystem;
using ICSharpCode.SharpDevelop.Dom;
namespace ICSharpCode.PackageManagement.EnvDTE
{

33
src/AddIns/Misc/PackageManagement/Project/Src/ICodeGenerator.cs

@ -0,0 +1,33 @@ @@ -0,0 +1,33 @@
// Copyright (c) 2014 AlphaSierraPapa for the SharpDevelop Team
//
// Permission is hereby granted, free of charge, to any person obtaining a copy of this
// software and associated documentation files (the "Software"), to deal in the Software
// without restriction, including without limitation the rights to use, copy, modify, merge,
// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons
// to whom the Software is furnished to do so, subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included in all copies or
// substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE
// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
// DEALINGS IN THE SOFTWARE.
using System;
using ICSharpCode.Core;
using ICSharpCode.NRefactory.TypeSystem;
namespace ICSharpCode.PackageManagement
{
public interface ICodeGenerator
{
void AddImport(FileName fileName, string name);
void MakePartial(ITypeDefinition typeDefinition);
void MakeVirtual(IMember member);
void AddFieldAtStart(ITypeDefinition typeDefinition, Accessibility accessibility, IType fieldType, string name);
void AddMethodAtStart(ITypeDefinition typeDefinition, Accessibility accessibility, IType returnType, string name);
}
}

4
src/AddIns/Misc/PackageManagement/Project/Src/IDocumentLoader.cs

@ -17,13 +17,11 @@ @@ -17,13 +17,11 @@
// DEALINGS IN THE SOFTWARE.
using System;
using ICSharpCode.SharpDevelop.Editor;
namespace ICSharpCode.PackageManagement
{
public interface IDocumentLoader
{
// IRefactoringDocument LoadRefactoringDocument(string fileName);
// IRefactoringDocumentView LoadRefactoringDocumentView(string fileName);
IDocumentView LoadDocumentView(string fileName);
}
}

6
src/AddIns/Misc/PackageManagement/Project/Src/IClassKindUpdater.cs → src/AddIns/Misc/PackageManagement/Project/Src/IDocumentView.cs

@ -17,11 +17,13 @@ @@ -17,11 +17,13 @@
// DEALINGS IN THE SOFTWARE.
using System;
using ICSharpCode.NRefactory.Editor;
namespace ICSharpCode.PackageManagement
{
public interface IClassKindUpdater
public interface IDocumentView
{
void MakeClassPartial();
IDocument Document { get; }
void IndentLines(int beginLine, int endLine);
}
}

62
src/AddIns/Misc/PackageManagement/Project/Src/IMethodOrPropertyExtensions.cs

@ -1,62 +0,0 @@ @@ -1,62 +0,0 @@
// Copyright (c) 2014 AlphaSierraPapa for the SharpDevelop Team
//
// Permission is hereby granted, free of charge, to any person obtaining a copy of this
// software and associated documentation files (the "Software"), to deal in the Software
// without restriction, including without limitation the rights to use, copy, modify, merge,
// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons
// to whom the Software is furnished to do so, subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included in all copies or
// substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE
// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
// DEALINGS IN THE SOFTWARE.
//using System;
//using ICSharpCode.SharpDevelop.Dom;
//
//namespace ICSharpCode.PackageManagement
//{
// public static class IMethodOrPropertyExtensions
// {
// public static FilePosition GetStartPosition(this IMethodOrProperty method)
// {
// return method.Region.ToStartPosition(method.CompilationUnit);
// }
//
// public static FilePosition GetEndPosition(this IMethodOrProperty method)
// {
// if (method.DeclaringTypeIsInterface()) {
// return method.Region.ToEndPosition(method.CompilationUnit);
// }
// return method.BodyRegion.ToEndPosition(method.CompilationUnit);
// }
//
// public static bool DeclaringTypeIsInterface(this IMethodOrProperty method)
// {
// return method.DeclaringType.ClassType == ClassType.Interface;
// }
//
// public static bool IsConstructor(this IMethodOrProperty methodOrProperty)
// {
// var method = methodOrProperty as IMethod;
// if (method != null) {
// return method.IsConstructor;
// }
// return false;
// }
//
// public static bool HasTypeParameters(this IMethodOrProperty methodOrProperty)
// {
// var method = methodOrProperty as IMethod;
// if ((method != null) && (method.TypeParameters != null)) {
// return method.TypeParameters.Count > 0;
// }
// return false;
// }
// }
//}

2
src/AddIns/Misc/PackageManagement/Project/Src/IPackageManagementFileService.cs

@ -21,6 +21,7 @@ using ICSharpCode.NRefactory.TypeSystem; @@ -21,6 +21,7 @@ using ICSharpCode.NRefactory.TypeSystem;
using ICSharpCode.SharpDevelop;
using ICSharpCode.SharpDevelop.Dom;
using ICSharpCode.SharpDevelop.Gui;
using ICSharpCode.SharpDevelop.Project;
namespace ICSharpCode.PackageManagement
{
@ -38,5 +39,6 @@ namespace ICSharpCode.PackageManagement @@ -38,5 +39,6 @@ namespace ICSharpCode.PackageManagement
void ParseFile(string fileName);
ICompilation GetCompilationUnit(string fileName);
ICompilation GetCompilationUnit(IProject project);
}
}

8
src/AddIns/Misc/PackageManagement/Project/Src/IPackageManagementSolution.cs

@ -37,12 +37,18 @@ namespace ICSharpCode.PackageManagement @@ -37,12 +37,18 @@ namespace ICSharpCode.PackageManagement
IProject GetActiveMSBuildProject();
IEnumerable<IProject> GetMSBuildProjects();
bool HasMultipleProjects();
bool IsPackageInstalled(IPackage package);
IQueryable<IPackage> GetPackages();
IEnumerable<IPackage> GetPackagesInReverseDependencyOrder();
string GetInstallPath(IPackage package);
/// <summary>
/// Returns all packages that are installed into solution or a project.
/// GetPackages() will return any packages in the packages folder even if
/// they are not installed.
/// </summary>
IQueryable<IPackage> GetInstalledPackages();
bool IsOpen { get; }
string FileName { get; }
ISolutionPackageRepository CreateSolutionPackageRepository();

16
src/AddIns/Misc/PackageManagement/Project/Src/IProjectContentExtensions.cs

@ -37,10 +37,10 @@ namespace ICSharpCode.PackageManagement @@ -37,10 +37,10 @@ namespace ICSharpCode.PackageManagement
public static global::EnvDTE.vsCMAccess ToAccess(this Accessibility accessiblity)
{
if (accessiblity == Accessibility.Public)
if (accessiblity == Accessibility.Public) {
return global::EnvDTE.vsCMAccess.vsCMAccessPublic;
else
return global::EnvDTE.vsCMAccess.vsCMAccessPrivate;
}
return global::EnvDTE.vsCMAccess.vsCMAccessPrivate;
}
public static Accessibility ToAccessibility(this global::EnvDTE.vsCMAccess access)
@ -54,15 +54,5 @@ namespace ICSharpCode.PackageManagement @@ -54,15 +54,5 @@ namespace ICSharpCode.PackageManagement
throw new Exception("Invalid value for vsCMAccess");
}
}
public static CodeElementsList<T> AsCodeElements<T>(this IModelCollection<T> input)
where T : global::EnvDTE.CodeElement
{
var list = new CodeElementsList<T>();
// TODO: react to changes
foreach (var element in input)
list.Add(element);
return list;
}
}
}

2
src/AddIns/Misc/PackageManagement/Project/Src/InstalledPackagesViewModel.cs

@ -84,7 +84,7 @@ namespace ICSharpCode.PackageManagement @@ -84,7 +84,7 @@ namespace ICSharpCode.PackageManagement
if (project != null) {
return project.GetPackages();
}
return solution.GetPackages();
return solution.GetInstalledPackages();
}
void ThrowOriginalExceptionWhenTryingToGetProjectManager()

6
src/AddIns/Misc/PackageManagement/Project/Src/PackageManagementFileService.cs

@ -23,6 +23,7 @@ using ICSharpCode.NRefactory.TypeSystem; @@ -23,6 +23,7 @@ using ICSharpCode.NRefactory.TypeSystem;
using ICSharpCode.SharpDevelop;
using ICSharpCode.SharpDevelop.Dom;
using ICSharpCode.SharpDevelop.Gui;
using ICSharpCode.SharpDevelop.Project;
namespace ICSharpCode.PackageManagement
{
@ -98,5 +99,10 @@ namespace ICSharpCode.PackageManagement @@ -98,5 +99,10 @@ namespace ICSharpCode.PackageManagement
{
return SD.ParserService.GetCompilationForFile(new FileName(fileName));
}
public ICompilation GetCompilationUnit(IProject project)
{
return SD.ParserService.GetCompilation(project);
}
}
}

2
src/AddIns/Misc/PackageManagement/Project/Src/PackageManagementSelectedProjects.cs

@ -148,7 +148,7 @@ namespace ICSharpCode.PackageManagement @@ -148,7 +148,7 @@ namespace ICSharpCode.PackageManagement
public IQueryable<IPackage> GetPackagesInstalledInSolution()
{
return Solution.GetPackages();
return Solution.GetInstalledPackages();
}
public IQueryable<IPackage> GetInstalledPackages(IPackageRepository sourceRepository)

10
src/AddIns/Misc/PackageManagement/Project/Src/PackageManagementSolution.cs

@ -19,7 +19,6 @@ @@ -19,7 +19,6 @@
using System;
using System.Collections.Generic;
using System.Linq;
using ICSharpCode.Core;
using ICSharpCode.SharpDevelop.Project;
using NuGet;
@ -165,8 +164,15 @@ namespace ICSharpCode.PackageManagement @@ -165,8 +164,15 @@ namespace ICSharpCode.PackageManagement
public IQueryable<IPackage> GetPackages()
{
ISolutionPackageRepository repository = CreateSolutionPackageRepository();
return repository.GetPackages();
}
public IQueryable<IPackage> GetInstalledPackages()
{
ISolutionPackageRepository repository = CreateSolutionPackageRepository();
List<IPackageManagementProject> projects = GetProjects(ActivePackageRepository).ToList();
return CreateSolutionPackageRepository()
return repository
.GetPackages()
.Where(package => IsPackageInstalledInSolutionOrAnyProject(projects, package));
}

203
src/AddIns/Misc/PackageManagement/Project/Src/PackageManagementSolution.cs.BASE.cs

@ -0,0 +1,203 @@ @@ -0,0 +1,203 @@
// Copyright (c) 2014 AlphaSierraPapa for the SharpDevelop Team
//
// Permission is hereby granted, free of charge, to any person obtaining a copy of this
// software and associated documentation files (the "Software"), to deal in the Software
// without restriction, including without limitation the rights to use, copy, modify, merge,
// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons
// to whom the Software is furnished to do so, subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included in all copies or
// substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE
// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
// DEALINGS IN THE SOFTWARE.
using System;
using System.Collections.Generic;
using System.Linq;
using ICSharpCode.Core;
using ICSharpCode.SharpDevelop.Project;
using NuGet;
namespace ICSharpCode.PackageManagement
{
public class PackageManagementSolution : IPackageManagementSolution
{
IRegisteredPackageRepositories registeredPackageRepositories;
IPackageManagementProjectService projectService;
IPackageManagementProjectFactory projectFactory;
ISolutionPackageRepositoryFactory solutionPackageRepositoryFactory;
public PackageManagementSolution(
IRegisteredPackageRepositories registeredPackageRepositories,
IPackageManagementEvents packageManagementEvents)
: this(
registeredPackageRepositories,
new PackageManagementProjectService(),
new PackageManagementProjectFactory(packageManagementEvents),
new SolutionPackageRepositoryFactory())
{
}
public PackageManagementSolution(
IRegisteredPackageRepositories registeredPackageRepositories,
IPackageManagementProjectService projectService,
IPackageManagementProjectFactory projectFactory,
ISolutionPackageRepositoryFactory solutionPackageRepositoryFactory)
{
this.registeredPackageRepositories = registeredPackageRepositories;
this.projectFactory = projectFactory;
this.projectService = projectService;
this.solutionPackageRepositoryFactory = solutionPackageRepositoryFactory;
}
public string FileName {
get { return OpenSolution.FileName; }
}
ISolution OpenSolution {
get { return projectService.OpenSolution; }
}
public IPackageManagementProject GetActiveProject()
{
if (HasActiveProject()) {
return GetActiveProject(ActivePackageRepository);
}
return null;
}
bool HasActiveProject()
{
return GetActiveMSBuildBasedProject() != null;
}
public IProject GetActiveMSBuildProject()
{
return projectService.CurrentProject;
}
IPackageRepository ActivePackageRepository {
get { return registeredPackageRepositories.ActiveRepository; }
}
public IPackageManagementProject GetActiveProject(IPackageRepository sourceRepository)
{
MSBuildBasedProject activeProject = GetActiveMSBuildBasedProject();
if (activeProject != null) {
return CreateProject(sourceRepository, activeProject);
}
return null;
}
MSBuildBasedProject GetActiveMSBuildBasedProject()
{
return GetActiveMSBuildProject() as MSBuildBasedProject;
}
IPackageManagementProject CreateProject(IPackageRepository sourceRepository, MSBuildBasedProject project)
{
return projectFactory.CreateProject(sourceRepository, project);
}
IPackageRepository CreatePackageRepository(PackageSource source)
{
return registeredPackageRepositories.CreateRepository(source);
}
public IPackageManagementProject GetProject(PackageSource source, string projectName)
{
MSBuildBasedProject msbuildProject = GetMSBuildProject(projectName);
return CreateProject(source, msbuildProject);
}
MSBuildBasedProject GetMSBuildProject(string name)
{
var openProjects = new OpenMSBuildProjects(projectService);
return openProjects.FindProject(name);
}
IPackageManagementProject CreateProject(PackageSource source, MSBuildBasedProject project)
{
IPackageRepository sourceRepository = CreatePackageRepository(source);
return CreateProject(sourceRepository, project);
}
public IPackageManagementProject GetProject(IPackageRepository sourceRepository, string projectName)
{
MSBuildBasedProject msbuildProject = GetMSBuildProject(projectName);
return CreateProject(sourceRepository, msbuildProject);
}
public IPackageManagementProject GetProject(IPackageRepository sourceRepository, IProject project)
{
var msbuildProject = project as MSBuildBasedProject;
return CreateProject(sourceRepository, msbuildProject);
}
public IEnumerable<IProject> GetMSBuildProjects()
{
return projectService.AllProjects.OfType<MSBuildBasedProject>();;
}
public bool IsOpen {
get { return OpenSolution != null; }
}
public bool HasMultipleProjects()
{
return projectService.AllProjects.Count > 1;
}
public bool IsPackageInstalled(IPackage package)
{
ISolutionPackageRepository repository = CreateSolutionPackageRepository();
return repository.IsInstalled(package);
}
ISolutionPackageRepository CreateSolutionPackageRepository()
{
return solutionPackageRepositoryFactory.CreateSolutionPackageRepository(OpenSolution);
}
public IQueryable<IPackage> GetPackages()
{
ISolutionPackageRepository repository = CreateSolutionPackageRepository();
List<IPackageManagementProject> projects = GetProjects(ActivePackageRepository).ToList();
return repository
.GetPackages()
.Where(package => IsPackageInstalledInSolutionOrAnyProject(projects, package));
}
bool IsPackageInstalledInSolutionOrAnyProject(IList<IPackageManagementProject> projects, IPackage package)
{
if (projects.Any(project => project.IsPackageInstalled(package))) {
return true;
}
return false;
}
public string GetInstallPath(IPackage package)
{
ISolutionPackageRepository repository = CreateSolutionPackageRepository();
return repository.GetInstallPath(package);
}
public IEnumerable<IPackage> GetPackagesInReverseDependencyOrder()
{
ISolutionPackageRepository repository = CreateSolutionPackageRepository();
return repository.GetPackagesByReverseDependencyOrder();
}
public IEnumerable<IPackageManagementProject> GetProjects(IPackageRepository sourceRepository)
{
foreach (MSBuildBasedProject msbuildProject in GetMSBuildProjects()) {
yield return projectFactory.CreateProject(sourceRepository, msbuildProject);
}
}
}
}

204
src/AddIns/Misc/PackageManagement/Project/Src/PackageManagementSolution.cs.LOCAL.cs

@ -0,0 +1,204 @@ @@ -0,0 +1,204 @@
// Copyright (c) 2014 AlphaSierraPapa for the SharpDevelop Team
//
// Permission is hereby granted, free of charge, to any person obtaining a copy of this
// software and associated documentation files (the "Software"), to deal in the Software
// without restriction, including without limitation the rights to use, copy, modify, merge,
// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons
// to whom the Software is furnished to do so, subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included in all copies or
// substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE
// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
// DEALINGS IN THE SOFTWARE.
using System;
using System.Collections.Generic;
using System.Linq;
using ICSharpCode.Core;
using ICSharpCode.SharpDevelop.Project;
using NuGet;
namespace ICSharpCode.PackageManagement
{
public class PackageManagementSolution : IPackageManagementSolution
{
IRegisteredPackageRepositories registeredPackageRepositories;
IPackageManagementProjectService projectService;
IPackageManagementProjectFactory projectFactory;
ISolutionPackageRepositoryFactory solutionPackageRepositoryFactory;
public PackageManagementSolution(
IRegisteredPackageRepositories registeredPackageRepositories,
IPackageManagementEvents packageManagementEvents)
: this(
registeredPackageRepositories,
new PackageManagementProjectService(),
new PackageManagementProjectFactory(packageManagementEvents),
new SolutionPackageRepositoryFactory())
{
}
public PackageManagementSolution(
IRegisteredPackageRepositories registeredPackageRepositories,
IPackageManagementProjectService projectService,
IPackageManagementProjectFactory projectFactory,
ISolutionPackageRepositoryFactory solutionPackageRepositoryFactory)
{
this.registeredPackageRepositories = registeredPackageRepositories;
this.projectFactory = projectFactory;
this.projectService = projectService;
this.solutionPackageRepositoryFactory = solutionPackageRepositoryFactory;
}
public string FileName {
get { return OpenSolution.FileName; }
}
ISolution OpenSolution {
get { return projectService.OpenSolution; }
}
public IPackageManagementProject GetActiveProject()
{
if (HasActiveProject()) {
return GetActiveProject(ActivePackageRepository);
}
return null;
}
bool HasActiveProject()
{
return GetActiveMSBuildBasedProject() != null;
}
public IProject GetActiveMSBuildProject()
{
return projectService.CurrentProject;
}
IPackageRepository ActivePackageRepository {
get { return registeredPackageRepositories.ActiveRepository; }
}
public IPackageManagementProject GetActiveProject(IPackageRepository sourceRepository)
{
MSBuildBasedProject activeProject = GetActiveMSBuildBasedProject();
if (activeProject != null) {
return CreateProject(sourceRepository, activeProject);
}
return null;
}
MSBuildBasedProject GetActiveMSBuildBasedProject()
{
return GetActiveMSBuildProject() as MSBuildBasedProject;
}
IPackageManagementProject CreateProject(IPackageRepository sourceRepository, MSBuildBasedProject project)
{
return projectFactory.CreateProject(sourceRepository, project);
}
IPackageRepository CreatePackageRepository(PackageSource source)
{
return registeredPackageRepositories.CreateRepository(source);
}
public IPackageManagementProject GetProject(PackageSource source, string projectName)
{
MSBuildBasedProject msbuildProject = GetMSBuildProject(projectName);
return CreateProject(source, msbuildProject);
}
MSBuildBasedProject GetMSBuildProject(string name)
{
var openProjects = new OpenMSBuildProjects(projectService);
return openProjects.FindProject(name);
}
IPackageManagementProject CreateProject(PackageSource source, MSBuildBasedProject project)
{
IPackageRepository sourceRepository = CreatePackageRepository(source);
return CreateProject(sourceRepository, project);
}
public IPackageManagementProject GetProject(IPackageRepository sourceRepository, string projectName)
{
MSBuildBasedProject msbuildProject = GetMSBuildProject(projectName);
return CreateProject(sourceRepository, msbuildProject);
}
public IPackageManagementProject GetProject(IPackageRepository sourceRepository, IProject project)
{
var msbuildProject = project as MSBuildBasedProject;
return CreateProject(sourceRepository, msbuildProject);
}
public IEnumerable<IProject> GetMSBuildProjects()
{
return projectService.AllProjects.OfType<MSBuildBasedProject>();;
}
public bool IsOpen {
get { return OpenSolution != null; }
}
public bool HasMultipleProjects()
{
return projectService.AllProjects.Count > 1;
}
public bool IsPackageInstalled(IPackage package)
{
return CreateSolutionPackageRepository().IsInstalled(package);
}
public ISolutionPackageRepository CreateSolutionPackageRepository()
{
return solutionPackageRepositoryFactory.CreateSolutionPackageRepository(OpenSolution);
}
public IQueryable<IPackage> GetPackages()
{
List<IPackageManagementProject> projects = GetProjects(ActivePackageRepository).ToList();
return CreateSolutionPackageRepository()
.GetPackages()
.Where(package => IsPackageInstalledInSolutionOrAnyProject(projects, package));
}
bool IsPackageInstalledInSolutionOrAnyProject(IList<IPackageManagementProject> projects, IPackage package)
{
return IsPackageInstalled(package) || IsPackageInstalledInAnyProject(projects, package);
}
bool IsPackageInstalledInAnyProject(IList<IPackageManagementProject> projects, IPackage package)
{
if (projects.Any(project => project.IsPackageInstalled(package))) {
return true;
}
return false;
}
public string GetInstallPath(IPackage package)
{
return CreateSolutionPackageRepository().GetInstallPath(package);
}
public IEnumerable<IPackage> GetPackagesInReverseDependencyOrder()
{
return CreateSolutionPackageRepository().GetPackagesByReverseDependencyOrder();
}
public IEnumerable<IPackageManagementProject> GetProjects(IPackageRepository sourceRepository)
{
foreach (MSBuildBasedProject msbuildProject in GetMSBuildProjects()) {
yield return projectFactory.CreateProject(sourceRepository, msbuildProject);
}
}
}
}

208
src/AddIns/Misc/PackageManagement/Project/Src/PackageManagementSolution.cs.REMOTE.cs

@ -0,0 +1,208 @@ @@ -0,0 +1,208 @@
// Copyright (c) 2014 AlphaSierraPapa for the SharpDevelop Team
//
// Permission is hereby granted, free of charge, to any person obtaining a copy of this
// software and associated documentation files (the "Software"), to deal in the Software
// without restriction, including without limitation the rights to use, copy, modify, merge,
// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons
// to whom the Software is furnished to do so, subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included in all copies or
// substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE
// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
// DEALINGS IN THE SOFTWARE.
using System;
using System.Collections.Generic;
using System.Linq;
using ICSharpCode.SharpDevelop.Project;
using NuGet;
namespace ICSharpCode.PackageManagement
{
public class PackageManagementSolution : IPackageManagementSolution
{
IRegisteredPackageRepositories registeredPackageRepositories;
IPackageManagementProjectService projectService;
IPackageManagementProjectFactory projectFactory;
ISolutionPackageRepositoryFactory solutionPackageRepositoryFactory;
public PackageManagementSolution(
IRegisteredPackageRepositories registeredPackageRepositories,
IPackageManagementEvents packageManagementEvents)
: this(
registeredPackageRepositories,
new PackageManagementProjectService(),
new PackageManagementProjectFactory(packageManagementEvents),
new SolutionPackageRepositoryFactory())
{
}
public PackageManagementSolution(
IRegisteredPackageRepositories registeredPackageRepositories,
IPackageManagementProjectService projectService,
IPackageManagementProjectFactory projectFactory,
ISolutionPackageRepositoryFactory solutionPackageRepositoryFactory)
{
this.registeredPackageRepositories = registeredPackageRepositories;
this.projectFactory = projectFactory;
this.projectService = projectService;
this.solutionPackageRepositoryFactory = solutionPackageRepositoryFactory;
}
public string FileName {
get { return OpenSolution.FileName; }
}
ISolution OpenSolution {
get { return projectService.OpenSolution; }
}
public IPackageManagementProject GetActiveProject()
{
if (HasActiveProject()) {
return GetActiveProject(ActivePackageRepository);
}
return null;
}
bool HasActiveProject()
{
return GetActiveMSBuildBasedProject() != null;
}
public IProject GetActiveMSBuildProject()
{
return projectService.CurrentProject;
}
IPackageRepository ActivePackageRepository {
get { return registeredPackageRepositories.ActiveRepository; }
}
public IPackageManagementProject GetActiveProject(IPackageRepository sourceRepository)
{
MSBuildBasedProject activeProject = GetActiveMSBuildBasedProject();
if (activeProject != null) {
return CreateProject(sourceRepository, activeProject);
}
return null;
}
MSBuildBasedProject GetActiveMSBuildBasedProject()
{
return GetActiveMSBuildProject() as MSBuildBasedProject;
}
IPackageManagementProject CreateProject(IPackageRepository sourceRepository, MSBuildBasedProject project)
{
return projectFactory.CreateProject(sourceRepository, project);
}
IPackageRepository CreatePackageRepository(PackageSource source)
{
return registeredPackageRepositories.CreateRepository(source);
}
public IPackageManagementProject GetProject(PackageSource source, string projectName)
{
MSBuildBasedProject msbuildProject = GetMSBuildProject(projectName);
return CreateProject(source, msbuildProject);
}
MSBuildBasedProject GetMSBuildProject(string name)
{
var openProjects = new OpenMSBuildProjects(projectService);
return openProjects.FindProject(name);
}
IPackageManagementProject CreateProject(PackageSource source, MSBuildBasedProject project)
{
IPackageRepository sourceRepository = CreatePackageRepository(source);
return CreateProject(sourceRepository, project);
}
public IPackageManagementProject GetProject(IPackageRepository sourceRepository, string projectName)
{
MSBuildBasedProject msbuildProject = GetMSBuildProject(projectName);
return CreateProject(sourceRepository, msbuildProject);
}
public IPackageManagementProject GetProject(IPackageRepository sourceRepository, IProject project)
{
var msbuildProject = project as MSBuildBasedProject;
return CreateProject(sourceRepository, msbuildProject);
}
public IEnumerable<IProject> GetMSBuildProjects()
{
return projectService.AllProjects.OfType<MSBuildBasedProject>();;
}
public bool IsOpen {
get { return OpenSolution != null; }
}
public bool HasMultipleProjects()
{
return projectService.AllProjects.Count > 1;
}
public bool IsPackageInstalled(IPackage package)
{
ISolutionPackageRepository repository = CreateSolutionPackageRepository();
return repository.IsInstalled(package);
}
ISolutionPackageRepository CreateSolutionPackageRepository()
{
return solutionPackageRepositoryFactory.CreateSolutionPackageRepository(OpenSolution);
}
public IQueryable<IPackage> GetPackages()
{
ISolutionPackageRepository repository = CreateSolutionPackageRepository();
return repository.GetPackages();
}
public IQueryable<IPackage> GetInstalledPackages()
{
ISolutionPackageRepository repository = CreateSolutionPackageRepository();
List<IPackageManagementProject> projects = GetProjects(ActivePackageRepository).ToList();
return repository
.GetPackages()
.Where(package => IsPackageInstalledInSolutionOrAnyProject(projects, package));
}
bool IsPackageInstalledInSolutionOrAnyProject(IList<IPackageManagementProject> projects, IPackage package)
{
if (projects.Any(project => project.IsPackageInstalled(package))) {
return true;
}
return false;
}
public string GetInstallPath(IPackage package)
{
ISolutionPackageRepository repository = CreateSolutionPackageRepository();
return repository.GetInstallPath(package);
}
public IEnumerable<IPackage> GetPackagesInReverseDependencyOrder()
{
ISolutionPackageRepository repository = CreateSolutionPackageRepository();
return repository.GetPackagesByReverseDependencyOrder();
}
public IEnumerable<IPackageManagementProject> GetProjects(IPackageRepository sourceRepository)
{
foreach (MSBuildBasedProject msbuildProject in GetMSBuildProjects()) {
yield return projectFactory.CreateProject(sourceRepository, msbuildProject);
}
}
}
}

5
src/AddIns/Misc/PackageManagement/Project/Src/ProjectBrowserUpdater.cs

@ -17,6 +17,7 @@ @@ -17,6 +17,7 @@
// DEALINGS IN THE SOFTWARE.
using System;
using ICSharpCode.SharpDevelop;
using ICSharpCode.SharpDevelop.Project;
namespace ICSharpCode.PackageManagement
@ -33,7 +34,7 @@ namespace ICSharpCode.PackageManagement @@ -33,7 +34,7 @@ namespace ICSharpCode.PackageManagement
public ProjectBrowserUpdater(ProjectBrowserControl projectBrowser)
{
this.projectBrowser = projectBrowser;
ProjectService.ProjectItemAdded += ProjectItemAdded;
SD.ProjectService.ProjectItemAdded += ProjectItemAdded;
}
protected virtual void ProjectItemAdded(object sender, ProjectItemEventArgs e)
@ -53,7 +54,7 @@ namespace ICSharpCode.PackageManagement @@ -53,7 +54,7 @@ namespace ICSharpCode.PackageManagement
public void Dispose()
{
ProjectService.ProjectItemAdded -= ProjectItemAdded;
SD.ProjectService.ProjectItemAdded -= ProjectItemAdded;
}
}
}

74
src/AddIns/Misc/PackageManagement/Project/Src/RefactoringDocumentView.cs

@ -1,74 +0,0 @@ @@ -1,74 +0,0 @@
// Copyright (c) 2014 AlphaSierraPapa for the SharpDevelop Team
//
// Permission is hereby granted, free of charge, to any person obtaining a copy of this
// software and associated documentation files (the "Software"), to deal in the Software
// without restriction, including without limitation the rights to use, copy, modify, merge,
// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons
// to whom the Software is furnished to do so, subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included in all copies or
// substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE
// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
// DEALINGS IN THE SOFTWARE.
//using System;
//using ICSharpCode.SharpDevelop;
//using ICSharpCode.SharpDevelop.Dom;
//using ICSharpCode.SharpDevelop.Dom.Refactoring;
//using ICSharpCode.SharpDevelop.Editor;
//using ICSharpCode.SharpDevelop.Gui;
//
//namespace ICSharpCode.PackageManagement
//{
// public class RefactoringDocumentView : IRefactoringDocumentView
// {
// public RefactoringDocumentView(string fileName)
// {
// View = FileService.OpenFile(fileName);
// TextEditor = GetTextEditor();
// FormattingStrategy = TextEditor.Language.FormattingStrategy;
// RefactoringDocument = LoadDocument();
// }
//
// IViewContent View { get; set; }
// ITextEditor TextEditor { get; set; }
// IFormattingStrategy FormattingStrategy { get; set; }
//
// ITextEditor GetTextEditor()
// {
// var textEditorProvider = View as ITextEditorProvider;
// return textEditorProvider.TextEditor;
// }
//
// public IRefactoringDocument RefactoringDocument { get; private set; }
//
// IRefactoringDocument LoadDocument()
// {
// return new RefactoringDocumentAdapter(new ThreadSafeDocument(TextEditor.Document));
// }
//
// public ICompilationUnit Parse()
// {
// if (WorkbenchSingleton.InvokeRequired) {
// return WorkbenchSingleton.SafeThreadFunction(() => Parse());
// }
// return ParserService.ParseViewContent(View).CompilationUnit;
// }
//
// public void IndentLines(int beginLine, int endLine)
// {
// if (WorkbenchSingleton.InvokeRequired) {
// WorkbenchSingleton.SafeThreadCall(() => IndentLines(beginLine, endLine));
// } else {
// using (IDisposable undoGroup = TextEditor.Document.OpenUndoGroup()) {
// FormattingStrategy.IndentLines(TextEditor, beginLine, endLine);
// }
// }
// }
// }
//}

10
src/AddIns/Misc/PackageManagement/Project/Src/Scripting/PackageManagementConsoleHost.cs

@ -126,6 +126,7 @@ namespace ICSharpCode.PackageManagement.Scripting @@ -126,6 +126,7 @@ namespace ICSharpCode.PackageManagement.Scripting
powerShellHost.SetRemoteSignedExecutionPolicy();
UpdateFormatting();
RedefineClearHostFunction();
DefineTabExpansionFunction();
UpdateWorkingDirectory();
}
@ -163,6 +164,15 @@ namespace ICSharpCode.PackageManagement.Scripting @@ -163,6 +164,15 @@ namespace ICSharpCode.PackageManagement.Scripting
powerShellHost.ExecuteCommand(command);
}
void DefineTabExpansionFunction()
{
string command =
"function TabExpansion($line, $lastWord) {" +
" return New-Object PSObject -Property @{ NoResult = $true }" +
"}";
powerShellHost.ExecuteCommand(command);
}
void WriteInfoBeforeFirstPrompt()
{
WriteNuGetVersionInfo();

68
src/AddIns/Misc/PackageManagement/Project/Src/ThreadSafeCodeGenerator.cs

@ -0,0 +1,68 @@ @@ -0,0 +1,68 @@
// Copyright (c) 2014 AlphaSierraPapa for the SharpDevelop Team
//
// Permission is hereby granted, free of charge, to any person obtaining a copy of this
// software and associated documentation files (the "Software"), to deal in the Software
// without restriction, including without limitation the rights to use, copy, modify, merge,
// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons
// to whom the Software is furnished to do so, subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included in all copies or
// substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE
// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
// DEALINGS IN THE SOFTWARE.
using System;
using ICSharpCode.Core;
using ICSharpCode.NRefactory.TypeSystem;
using ICSharpCode.SharpDevelop;
using ICSharpCode.SharpDevelop.Refactoring;
namespace ICSharpCode.PackageManagement
{
public class ThreadSafeCodeGenerator : ICodeGenerator
{
readonly CodeGenerator codeGenerator;
readonly IMessageLoop mainThread;
public ThreadSafeCodeGenerator(CodeGenerator codeGenerator)
{
this.codeGenerator = codeGenerator;
this.mainThread = SD.MainThread;
}
public void AddImport(FileName fileName, string name)
{
InvokeIfRequired(() => codeGenerator.AddImport(fileName, name));
}
public void MakePartial(ITypeDefinition typeDefinition)
{
InvokeIfRequired(() => codeGenerator.MakePartial(typeDefinition));
}
void InvokeIfRequired(Action action)
{
mainThread.InvokeIfRequired(action);
}
public void AddFieldAtStart(ITypeDefinition typeDefinition, Accessibility accessibility, IType fieldType, string name)
{
InvokeIfRequired(() => codeGenerator.AddFieldAtStart(typeDefinition, accessibility, fieldType, name));
}
public void AddMethodAtStart(ITypeDefinition typeDefinition, Accessibility accessibility, IType returnType, string name)
{
InvokeIfRequired(() => codeGenerator.AddMethodAtStart(typeDefinition, accessibility, returnType, name));
}
public void MakeVirtual(IMember member)
{
InvokeIfRequired(() => codeGenerator.MakeVirtual(member));
}
}
}

24
src/AddIns/Misc/PackageManagement/Project/Src/VisualStudio/SDTE.cs

@ -16,15 +16,15 @@ @@ -16,15 +16,15 @@
// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
// DEALINGS IN THE SOFTWARE.
//using System;
//using ICSharpCode.PackageManagement.EnvDTE;
//
//namespace Microsoft.VisualStudio.Shell.Interop
//{
// public class SDTE : DTE
// {
// public SDTE()
// {
// }
// }
//}
using System;
using ICSharpCode.PackageManagement.EnvDTE;
namespace Microsoft.VisualStudio.Shell.Interop
{
public class SDTE : DTE
{
public SDTE()
{
}
}
}

31
src/AddIns/Misc/PackageManagement/Test/PackageManagement.Tests.csproj

@ -80,26 +80,18 @@ @@ -80,26 +80,18 @@
<Compile Include="..\..\..\..\Main\GlobalAssemblyInfo.cs">
<Link>Properties\GlobalAssemblyInfo.cs</Link>
</Compile>
<Compile Include="Src\ClassCodeGeneratorTests.cs" />
<Compile Include="Src\ClassKindUpdaterTests.cs" />
<Compile Include="Src\CodeGeneratorTests.cs" />
<Compile Include="Src\DependentFileNameTests.cs" />
<Compile Include="Src\EnvDTE\CodeAttribute2Tests.cs" />
<Compile Include="Src\EnvDTE\CodeAttributesTests.cs" />
<Compile Include="Src\EnvDTE\CodeClass2Tests.cs" />
<Compile Include="Src\EnvDTE\CodeDelegateTests.cs" />
<Compile Include="Src\EnvDTE\CodeElementsInNamespaceTests.cs" />
<Compile Include="Src\EnvDTE\CodeFunction2Tests.cs" />
<Compile Include="Src\EnvDTE\CodeFunctionTests.cs" />
<Compile Include="Src\EnvDTE\CodeImportTests.cs" />
<Compile Include="Src\EnvDTE\CodeInterfaceTests.cs" />
<Compile Include="Src\EnvDTE\CodeModelTestBase.cs" />
<Compile Include="Src\EnvDTE\CodeModelTests.cs">
<DependentUpon>CodeTypeTests.cs</DependentUpon>
</Compile>
<Compile Include="Src\EnvDTE\CodeModelTests.cs" />
<Compile Include="Src\EnvDTE\CodeNamespaceTests.cs" />
<Compile Include="Src\EnvDTE\CodeParameter2Tests.cs" />
<Compile Include="Src\EnvDTE\CodeParameterTests.cs" />
<Compile Include="Src\EnvDTE\CodeProperty2Tests.cs" />
<Compile Include="Src\EnvDTE\CodeStructTests.cs" />
<Compile Include="Src\EnvDTE\CodeTypeRef2Tests.cs" />
@ -114,39 +106,27 @@ @@ -114,39 +106,27 @@
<Compile Include="Src\EnvDTE\SolutionGlobalsTests.cs" />
<Compile Include="Src\EnvDTE\SolutionPropertyTests.cs" />
<Compile Include="Src\EnvDTE\SolutionTests.cs" />
<Compile Include="Src\Helpers\AttributeHelper.cs" />
<Compile Include="Src\Helpers\ClassHelper.cs" />
<Compile Include="Src\Helpers\CodeElementsExtensions.cs" />
<Compile Include="Src\Helpers\CompilationUnitHelper.cs" />
<Compile Include="Src\Helpers\ExceptionThrowingPackageActionRunner.cs" />
<Compile Include="Src\Helpers\ExceptionThrowingProcessPackageAction.cs" />
<Compile Include="Src\Helpers\FakeCodeGenerator.cs" />
<Compile Include="Src\Helpers\FakeOperationAwarePackageRepository.cs" />
<Compile Include="Src\Helpers\FieldHelper.cs" />
<Compile Include="Src\Helpers\FakeSelectProjectsService.cs" />
<Compile Include="Src\Helpers\FakeSolutionPackageRepositoryFactory.cs" />
<Compile Include="Src\Helpers\FakeUpdatePackageActions.cs" />
<Compile Include="Src\Helpers\FakeUpdatePackageActionsFactory.cs" />
<Compile Include="Src\Helpers\MethodHelper.cs" />
<Compile Include="Src\Helpers\MethodOrPropertyHelper.cs" />
<Compile Include="Src\Helpers\PackageOperationHelper.cs" />
<Compile Include="Src\Helpers\ParameterHelper.cs" />
<Compile Include="Src\Helpers\ProjectContentHelper.cs" />
<Compile Include="Src\Helpers\PropertiesHelper.cs" />
<Compile Include="Src\Helpers\PropertyHelper.cs" />
<Compile Include="Src\Helpers\ReturnTypeHelper.cs" />
<Compile Include="Src\Helpers\SelectedProjectCollectionAssert.cs" />
<Compile Include="Src\Helpers\SolutionHelper.cs" />
<Compile Include="Src\Helpers\TestableInstalledPackageViewModel.cs" />
<Compile Include="Src\Helpers\TestablePackageFromRepository.cs" />
<Compile Include="Src\Helpers\TestableProjectBehaviour.cs" />
<Compile Include="Src\Helpers\TestableSelectedProjectsForUpdatedPackages.cs" />
<Compile Include="Src\Helpers\TestableSolutionSnapshot.cs" />
<Compile Include="Src\Helpers\TestableUpdatePackagesAction.cs" />
<Compile Include="Src\Helpers\TestableUpdateSolutionPackagesAction.cs" />
<Compile Include="Src\Helpers\TestPackageHelper.cs" />
<Compile Include="Src\Helpers\TypeParameterHelper.cs" />
<Compile Include="Src\Helpers\UsingHelper.cs" />
<Compile Include="Src\Helpers\UsingScopeHelper.cs" />
<Compile Include="Src\InstalledPackageViewModelTests.cs" />
<Compile Include="Src\IPackageExtensionsTests.cs" />
<Compile Include="Src\ManagePackagesCommandTests.cs" />
@ -218,7 +198,6 @@ @@ -218,7 +198,6 @@
<Compile Include="Src\UpdatePackagesActionTests.cs" />
<Compile Include="Src\UpdateSolutionPackagesActionTests.cs" />
<Compile Include="Src\UserAgentGeneratorForRepositoryRequestsTests.cs" />
<Compile Include="Src\VirtualMethodUpdaterTests.cs" />
<Compile Include="Src\PackageActionRunnerTests.cs" />
<Compile Include="Src\PackageActionsToRunTests.cs" />
<Compile Include="Src\PackageFilesTests.cs" />
@ -417,11 +396,5 @@ @@ -417,11 +396,5 @@
<Folder Include="Src\VisualStudio" />
<Folder Include="Src\Scripting" />
</ItemGroup>
<ItemGroup>
<None Include="..\..\..\..\..\bin\SharpDevelop.exe">
<Link>SharpDevelop.exe</Link>
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None>
</ItemGroup>
<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.Targets" />
</Project>

327
src/AddIns/Misc/PackageManagement/Test/Src/ClassCodeGeneratorTests.cs

@ -1,327 +0,0 @@ @@ -1,327 +0,0 @@
// Copyright (c) 2014 AlphaSierraPapa for the SharpDevelop Team
//
// Permission is hereby granted, free of charge, to any person obtaining a copy of this
// software and associated documentation files (the "Software"), to deal in the Software
// without restriction, including without limitation the rights to use, copy, modify, merge,
// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons
// to whom the Software is furnished to do so, subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included in all copies or
// substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE
// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
// DEALINGS IN THE SOFTWARE.
//using System;
//using ICSharpCode.NRefactory.Ast;
//using ICSharpCode.PackageManagement;
//using ICSharpCode.PackageManagement.EnvDTE;
//using ICSharpCode.SharpDevelop.Dom;
//using ICSharpCode.SharpDevelop.Dom.Refactoring;
//using NUnit.Framework;
//using PackageManagement.Tests.Helpers;
//using Rhino.Mocks;
//
//namespace PackageManagement.Tests
//{
// [TestFixture]
// public class ClassCodeGeneratorTests
// {
// ClassHelper helper;
// ClassCodeGenerator codeGenerator;
// CodeVariable codeVariable;
// CodeFunction codeFunction;
// IDocumentLoader documentLoader;
// IRefactoringDocument document;
// FakeCodeGenerator fakeCodeGenerator;
// IRefactoringDocumentView documentView;
//
// [SetUp]
// public void Init()
// {
// helper = new ClassHelper();
// document = MockRepository.GenerateStub<IRefactoringDocument>();
// documentView = MockRepository.GenerateStub<IRefactoringDocumentView>();
// documentLoader = MockRepository.GenerateStub<IDocumentLoader>();
// fakeCodeGenerator = helper.CompilationUnitHelper.FakeCodeGenerator;
// }
//
// void CreateClass(string name)
// {
// helper.CreatePublicClass(name);
// helper.SetClassType(ICSharpCode.SharpDevelop.Dom.ClassType.Class);
// }
//
// void CreateCodeGenerator()
// {
// codeGenerator = new ClassCodeGenerator(helper.Class, documentLoader);
// }
//
// void SetClassFileName(string fileName)
// {
// helper.SetClassFileName(fileName);
// }
//
// void SetDocumentFileName(string fileName)
// {
// documentView.Stub(view => view.RefactoringDocument).Return(document);
// documentLoader.Stub(loader => loader.LoadRefactoringDocumentView(fileName)).Return(documentView);
// }
//
// void AddFieldToClassForReparse(string name)
// {
// AddFieldToClassForReparse(name, DomRegion.Empty);
// }
//
// void AddFieldToClassForReparse(string name, DomRegion region)
// {
// ClassHelper helper = CreateClassHelper("MyClass");
// helper.AddFieldToClass(name, region);
// AddClassesToReparsedCompilationUnit(helper);
// }
//
// void AddFieldsToClassForReparse(params string[] names)
// {
// ClassHelper helper = CreateClassHelper("MyClass");
// foreach (string name in names) {
// helper.AddFieldToClass(name);
// }
// AddClassesToReparsedCompilationUnit(helper);
// }
//
// void AddClassesToReparsedCompilationUnit(params ClassHelper[] classHelpers)
// {
// var compilationUnitHelper = new CompilationUnitHelper();
// foreach (ClassHelper helper in classHelpers) {
// compilationUnitHelper.AddClass(helper.Class);
// }
// documentView.Stub(d => d.Parse()).Return(compilationUnitHelper.CompilationUnit);
// }
//
// ClassHelper CreateClassHelper(string name)
// {
// var helper = new ClassHelper();
// helper.CreateClass(name);
// return helper;
// }
//
// void AddMethodToClassForReparse(string name)
// {
// AddMethodToClassForReparse(name, DomRegion.Empty, DomRegion.Empty);
// }
//
// void AddMethodToClassForReparse(string name, DomRegion region, DomRegion bodyRegion)
// {
// ClassHelper helper = CreateClassHelper("MyClass");
// helper.AddMethodToClass(name, region, bodyRegion);
// AddClassesToReparsedCompilationUnit(helper);
// }
//
// void AddMethodsToClassForReparse(params string[] names)
// {
// ClassHelper helper = CreateClassHelper("MyClass");
// foreach (string name in names) {
// helper.AddMethodToClass(name);
// }
// AddClassesToReparsedCompilationUnit(helper);
// }
//
// void AddPublicVariable(string name, string type)
// {
// codeVariable = codeGenerator.AddPublicVariable(name, type);
// }
//
// void AddPublicMethod(string name, string type)
// {
// codeFunction = codeGenerator.AddPublicMethod(name, type);
// }
//
// [Test]
// public void AddPublicVariable_VariableTypeIsString_ReturnsCodeVariable()
// {
// CreateClass("MyClass");
// CreateCodeGenerator();
// string fileName = @"d:\projects\myproject\MyClass.cs";
// SetClassFileName(fileName);
// SetDocumentFileName(fileName);
// AddFieldToClassForReparse("MyClass.MyVariable", new DomRegion(1, 2, 1, 5));
//
// AddPublicVariable("MyVariable", "System.String");
//
// TextPoint start = (TextPoint)codeVariable.GetStartPoint();
// TextPoint end = (TextPoint)codeVariable.GetEndPoint();
// Assert.AreEqual("MyVariable", codeVariable.Name);
// Assert.AreEqual(1, start.Line);
// Assert.AreEqual(2, start.LineCharOffset);
// Assert.AreEqual(1, end.Line);
// Assert.AreEqual(5, end.LineCharOffset);
// }
//
// [Test]
// public void AddPublicVariable_VariableTypeIsCustomType_CodeForFieldAddedAtEndOfClass()
// {
// CreateClass("MyClass");
// CreateCodeGenerator();
// var classRegion = new DomRegion(1, 2, 3, 4);
// helper.SetClassRegion(classRegion);
// string fileName = @"d:\projects\myproject\MyClass.cs";
// SetClassFileName(fileName);
// SetDocumentFileName(fileName);
// AddFieldToClassForReparse("MyClass.MyVariable");
//
// AddPublicVariable("MyVar", "MyType");
//
// FieldDeclaration field = fakeCodeGenerator.NodePassedToInsertCodeAtEnd as FieldDeclaration;
// Assert.AreEqual(classRegion, fakeCodeGenerator.RegionPassedToInsertCodeAtEnd);
// Assert.AreEqual(document, fakeCodeGenerator.DocumentPassedToInsertCodeAtEnd);
// Assert.AreEqual(Modifiers.Public, field.Modifier);
// Assert.AreEqual("MyType", field.TypeReference.Type);
// Assert.AreEqual("MyVar", field.Fields[0].Name);
// }
//
// [Test]
// public void AddPublicVariable_ReparsedClassHasTwoFields_LastFieldReturned()
// {
// CreateClass("MyClass");
// CreateCodeGenerator();
// string fileName = @"d:\projects\myproject\MyClass.cs";
// SetClassFileName(fileName);
// SetDocumentFileName(fileName);
// AddFieldsToClassForReparse("MyClass.First", "MyClass.MyVariable");
//
// AddPublicVariable("MyVariable", "System.String");
//
// Assert.AreEqual("MyVariable", codeVariable.Name);
// }
//
// [Test]
// public void AddPublicVariable_ReparsedCompilationUnitHasThreeClasses_VariableReturnedFromCorrectClass()
// {
// CreateClass("MyClass2");
// CreateCodeGenerator();
// string fileName = @"d:\projects\myproject\MyClass2.cs";
// SetClassFileName(fileName);
// SetDocumentFileName(fileName);
// ClassHelper class1 = CreateClassHelper("MyClass1");
// ClassHelper class2 = CreateClassHelper("MyClass2");
// ClassHelper class3 = CreateClassHelper("MyClass3");
//
// class2.AddFieldToClass("MyClass2.MyVariable");
//
// AddClassesToReparsedCompilationUnit(class1, class2, class3);
//
// AddPublicVariable("MyVariable", "System.String");
//
// Assert.AreEqual("MyVariable", codeVariable.Name);
// }
//
// [Test]
// public void AddPublicMethod_MethodReturnTypeIsSystemCustomType_CodeForMethodAddedAtEndOfClass()
// {
// CreateClass("MyClass");
// CreateCodeGenerator();
// var classRegion = new DomRegion(1, 2, 3, 4);
// helper.SetClassRegion(classRegion);
// string fileName = @"d:\projects\myproject\MyClass.cs";
// SetClassFileName(fileName);
// SetDocumentFileName(fileName);
// AddMethodToClassForReparse("MyClass.MyMethod");
//
// AddPublicMethod("MyMethod", "MyType");
//
// MethodDeclaration method = fakeCodeGenerator.NodePassedToInsertCodeAtEnd as MethodDeclaration;
// Assert.AreEqual(classRegion, fakeCodeGenerator.RegionPassedToInsertCodeAtEnd);
// Assert.AreEqual(document, fakeCodeGenerator.DocumentPassedToInsertCodeAtEnd);
// Assert.AreEqual(Modifiers.None, method.Modifier);
// Assert.AreEqual("MyType", method.TypeReference.Type);
// Assert.AreEqual("MyMethod", method.Name);
// Assert.IsNotNull(method.Body);
// Assert.IsTrue(method.Body.IsNull);
// }
//
// /// <summary>
// /// Workaround NRefactory giving incorrect begin column for interface methods that use fully
// /// qualified return types (e.g. System.Object). Begin column points to the "Object" part of the
// /// return type not the start of the return type.
// /// </summary>
// [Test]
// public void AddPublicMethod_MethodReturnTypeIsSystemObject_SystemNotAddedToReturnType()
// {
// CreateClass("MyClass");
// CreateCodeGenerator();
// var classRegion = new DomRegion(1, 2, 3, 4);
// helper.SetClassRegion(classRegion);
// string fileName = @"d:\projects\myproject\MyClass.cs";
// SetClassFileName(fileName);
// SetDocumentFileName(fileName);
// AddMethodToClassForReparse("MyClass.MyMethod");
//
// AddPublicMethod("MyMethod", "System.Object");
//
// MethodDeclaration method = fakeCodeGenerator.NodePassedToInsertCodeAtEnd as MethodDeclaration;
// Assert.AreEqual("Object", method.TypeReference.Type);
// }
//
// [Test]
// public void AddPublicMethod_MethodReturnTypeIsString_ReturnsCodeMethod()
// {
// CreateClass("MyClass");
// CreateCodeGenerator();
// string fileName = @"d:\projects\myproject\MyClass.cs";
// SetClassFileName(fileName);
// SetDocumentFileName(fileName);
//
// AddMethodToClassForReparse("MyClass.MyMethod", new DomRegion(1, 2, 1, 5), new DomRegion(1, 5, 3, 3));
//
// AddPublicMethod("MyMethod", "System.String");
//
// TextPoint start = (TextPoint)codeFunction.GetStartPoint();
// TextPoint end = (TextPoint)codeFunction.GetEndPoint();
// Assert.AreEqual("MyMethod", codeFunction.Name);
// Assert.AreEqual(1, start.Line);
// Assert.AreEqual(2, start.LineCharOffset);
// Assert.AreEqual(3, end.Line);
// Assert.AreEqual(3, end.LineCharOffset);
// }
//
// [Test]
// public void AddPublicMethod_ReparsedClassHasTwoMethods_LastMethodReturned()
// {
// CreateClass("MyClass");
// CreateCodeGenerator();
// string fileName = @"d:\projects\myproject\MyClass.cs";
// SetClassFileName(fileName);
// SetDocumentFileName(fileName);
// AddMethodsToClassForReparse("MyClass.First", "MyClass.MyMethod");
//
// AddPublicMethod("MyMethod", "System.String");
//
// Assert.AreEqual("MyMethod", codeFunction.Name);
// }
//
// [Test]
// public void AddPublicFunction_ReparsedCompilationUnitHasThreeClasses_MethodReturnedFromCorrectClass()
// {
// CreateClass("MyClass2");
// CreateCodeGenerator();
// string fileName = @"d:\projects\myproject\MyClass2.cs";
// SetClassFileName(fileName);
// SetDocumentFileName(fileName);
// ClassHelper class1 = CreateClassHelper("MyClass1");
// ClassHelper class2 = CreateClassHelper("MyClass2");
// ClassHelper class3 = CreateClassHelper("MyClass3");
//
// class2.AddMethodToClass("MyClass2.MyMethod");
//
// AddClassesToReparsedCompilationUnit(class1, class2, class3);
//
// AddPublicMethod("MyMethod", "System.String");
//
// Assert.AreEqual("MyMethod", codeFunction.Name);
// }
// }
//}

180
src/AddIns/Misc/PackageManagement/Test/Src/ClassKindUpdaterTests.cs

@ -1,180 +0,0 @@ @@ -1,180 +0,0 @@
// Copyright (c) 2014 AlphaSierraPapa for the SharpDevelop Team
//
// Permission is hereby granted, free of charge, to any person obtaining a copy of this
// software and associated documentation files (the "Software"), to deal in the Software
// without restriction, including without limitation the rights to use, copy, modify, merge,
// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons
// to whom the Software is furnished to do so, subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included in all copies or
// substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE
// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
// DEALINGS IN THE SOFTWARE.
//using System;
//using ICSharpCode.PackageManagement;
//using ICSharpCode.SharpDevelop.Dom.Refactoring;
//using NUnit.Framework;
//using PackageManagement.Tests.Helpers;
//using Rhino.Mocks;
//
//namespace PackageManagement.Tests
//{
// [TestFixture]
// public class ClassKindUpdaterTests
// {
// ClassKindUpdater updater;
// ClassHelper classHelper;
// IRefactoringDocument document;
// IDocumentLoader documentLoader;
//
// [SetUp]
// public void Init()
// {
// classHelper = new ClassHelper();
// document = MockRepository.GenerateStub<IRefactoringDocument>();
// documentLoader = MockRepository.GenerateStub<IDocumentLoader>();
// }
//
// void CreatePublicCSharpClass()
// {
// classHelper.CreatePublicClass("MyClass");
// classHelper.ProjectContentHelper.ProjectContentIsForCSharpProject();
// }
//
// void CreatePublicVisualBasicClass()
// {
// classHelper.CreatePublicClass("MyClass");
// classHelper.ProjectContentHelper.ProjectContentIsForVisualBasicProject();
// }
//
// void SetDocumentFileName(string fileName)
// {
// documentLoader.Stub(loader => loader.LoadRefactoringDocument(fileName)).Return(document);
// }
//
// void CreateClassKindUpdater()
// {
// updater = new ClassKindUpdater(classHelper.Class, documentLoader);
// }
//
// void SetClassFileName(string fileName)
// {
// classHelper.SetClassFileName(fileName);
// SetDocumentFileName(fileName);
// }
//
// void SetClassDeclarationLineWithOffset(int line, string text, int offset)
// {
// classHelper.SetRegionBeginLine(line);
// SetDocumentLineText(line, text, offset);
// }
//
// void SetClassDeclarationLine(int line, string text)
// {
// SetClassDeclarationLineWithOffset(line, text, 0);
// }
//
// void SetDocumentLineText(int lineNumber, string text, int offset)
// {
// IRefactoringDocumentLine documentLine = MockRepository.GenerateStub<IRefactoringDocumentLine>();
// documentLine.Stub(line => line.Text).Return(text);
// documentLine.Stub(line => line.Offset).Return(offset);
// document.Stub(doc => doc.GetLine(lineNumber)).Return(documentLine);
// }
//
// [Test]
// public void MakeClassPartial_PublicCSharpClassWithNoOtherModifiers_OpensFileContainingClassInSharpDevelop()
// {
// CreatePublicCSharpClass();
// CreateClassKindUpdater();
// string fileName = @"d:\projects\MyProject\MyClass.cs";
// SetClassFileName(fileName);
// SetClassDeclarationLine(1, "public class MyClass");
//
// updater.MakeClassPartial();
//
// documentLoader.AssertWasCalled(loader => loader.LoadRefactoringDocument(fileName));
// }
//
// [Test]
// public void MakeClassPartial_PublicCSharpClassWithNoOtherModifiers_AddsPartialKeywordToClassDefinition()
// {
// CreatePublicCSharpClass();
// CreateClassKindUpdater();
// SetClassFileName(@"d:\projects\MyProject\MyClass.cs");
// SetClassDeclarationLine(1, "public class MyClass");
//
// updater.MakeClassPartial();
//
// document.AssertWasCalled(doc => doc.Insert(7, "partial "));
// }
//
// [Test]
// public void MakeClassPartial_PublicCSharpClassThatIsAlreadyPartial_ClassDefinitionIsUnchanged()
// {
// CreatePublicCSharpClass();
// CreateClassKindUpdater();
// classHelper.MakeClassPartial();
// SetClassFileName(@"d:\projects\MyProject\MyClass.cs");
// SetClassDeclarationLine(1, "public class MyClass");
//
// updater.MakeClassPartial();
//
// document.AssertWasNotCalled(doc => doc.Insert(Arg<int>.Is.Anything, Arg<string>.Is.Anything));
// }
//
// [Test]
// public void MakeClassPartial_PublicVisualBasicClassWithNoOtherModifiers_AddsVisualBasicPartialKeywordToClassDefinition()
// {
// CreatePublicVisualBasicClass();
// CreateClassKindUpdater();
// SetClassFileName(@"d:\projects\MyProject\MyClass.vb");
// SetClassDeclarationLine(1, "Public Class MyClass");
//
// updater.MakeClassPartial();
//
// document.AssertWasCalled(doc => doc.Insert(7, "Partial "));
// }
//
// [Test]
// public void MakeClassPartial_NoClassKeywordInClassDeclarationLine_ExceptionIsThrown()
// {
// CreatePublicCSharpClass();
// CreateClassKindUpdater();
// SetClassFileName(@"d:\projects\MyProject\test.cs");
// SetClassDeclarationLine(1, "public test");
//
// Assert.Throws<ApplicationException>(() => updater.MakeClassPartial());
// }
//
// [Test]
// public void MakeClassPartial_NoClassKeywordButClassNameIncludesClassKeyword_ExceptionIsThrown()
// {
// CreatePublicCSharpClass();
// CreateClassKindUpdater();
// SetClassFileName(@"d:\projects\MyProject\MyClass.cs");
// SetClassDeclarationLine(1, "public MyClass");
//
// Assert.Throws<ApplicationException>(() => updater.MakeClassPartial());
// }
//
// [Test]
// public void MakeClassPartial_PublicCSharpClassNotOnFirstLine_AddsPartialKeywordToClassDefinitionAtCorrectOffset()
// {
// CreatePublicCSharpClass();
// CreateClassKindUpdater();
// SetClassFileName(@"d:\projects\MyProject\MyClass.cs");
// SetClassDeclarationLineWithOffset(1, "public class MyClass", offset: 10);
//
// updater.MakeClassPartial();
//
// document.AssertWasCalled(doc => doc.Insert(17, "partial "));
// }
// }
//}

161
src/AddIns/Misc/PackageManagement/Test/Src/EnvDTE/CodeAttribute2Tests.cs

@ -37,10 +37,12 @@ namespace PackageManagement.Tests.EnvDTE @@ -37,10 +37,12 @@ namespace PackageManagement.Tests.EnvDTE
namespace Test {
public class MyAttribute : Attribute
{
public MyAttribute() {}
public MyAttribute(object arg) {}
public MyAttribute(object arg1, object arg2) {}
public object One, Two;
public object One { get; set; }
public object Two { get; set; }
}
}");
}
@ -85,18 +87,16 @@ namespace Test { @@ -85,18 +87,16 @@ namespace Test {
}
[Test]
[Ignore("Why is true expected to be uppercase?")]
public void Value_AttributeHasOneBooleanPositionalArgument_ReturnsBooleanValue()
{
CreateAttribute("[Test.MyAttribute(true)]");
string attributeValue = codeAttribute.Value;
Assert.AreEqual("True", attributeValue);
Assert.AreEqual("true", attributeValue);
}
[Test]
[Ignore("Why is true expected to be uppercase?")]
public void Value_AttributeHasStringAndBooleanPositionalArgument_ReturnsArgumentCommandSeparated()
{
CreateAttribute("[Test.MyAttribute(\"Test\", true)]");
@ -106,86 +106,77 @@ namespace Test { @@ -106,86 +106,77 @@ namespace Test {
Assert.AreEqual("\"Test\", true", attributeValue);
}
// [Test]
// public void Arguments_AttributeHasOneStringPositionalArgument_ReturnsOneAttributeArgumentWithNoName()
// {
// CreateMSBuildAttribute("Test.MyAttribute");
// helper.AddPositionalArguments("StringValue");
// CreateAttribute();
//
// global::EnvDTE.CodeElements args = codeAttribute.Arguments;
//
// CodeAttributeArgument attributeArg = args.FirstCodeAttributeArgumentOrDefault();
//
// Assert.AreEqual(1, args.Count);
// Assert.AreEqual(String.Empty, attributeArg.Name);
// Assert.AreEqual("\"StringValue\"", attributeArg.Value);
// }
//
// [Test]
// public void Arguments_AttributeHasOneStringNamedArgument_ReturnsOneAttributeArgumentWithName()
// {
// CreateMSBuildAttribute("Test.MyAttribute");
// helper.AddNamedArgument("Name", "StringValue");
// CreateAttribute();
//
// global::EnvDTE.CodeElements args = codeAttribute.Arguments;
//
// CodeAttributeArgument attributeArg = args.FirstCodeAttributeArgumentOrDefault();
//
// Assert.AreEqual("Name", attributeArg.Name);
// Assert.AreEqual("\"StringValue\"", attributeArg.Value);
// }
//
// [Test]
// public void Arguments_GetArgumentByItemIndexWhenTwoPositionalArguments_ReturnsArgumentAtIndex()
// {
// CreateMSBuildAttribute("Test.MyAttribute");
// helper.AddPositionalArguments("StringValue", false);
// CreateAttribute();
//
// global::EnvDTE.CodeElements args = codeAttribute.Arguments;
//
// CodeAttributeArgument arg = args.Item(2) as CodeAttributeArgument;
//
// Assert.AreEqual("False", arg.Value);
// }
//
// [Test]
// public void Arguments_GetArgumentByItemNameWhenTwoNamedArguments_ReturnsArgument()
// {
// CreateMSBuildAttribute("Test.MyAttribute");
// helper.AddNamedArgument("One", "OneValue");
// helper.AddNamedArgument("Two", false);
// CreateAttribute();
//
// global::EnvDTE.CodeElements args = codeAttribute.Arguments;
//
// CodeAttributeArgument arg = args.Item("Two") as CodeAttributeArgument;
//
// Assert.AreEqual("False", arg.Value);
// }
//
// [Test]
// public void Name_AttributeIsNotLastPartOfName_ReturnsShortNameContainingAttributePart()
// {
// CreateMSBuildAttribute("Tests.TestAttributeColumn", "TestAttributeColumn");
// CreateAttribute();
//
// string name = codeAttribute.Name;
//
// Assert.AreEqual("TestAttributeColumn", name);
// }
//
// [Test]
// public void Kind_AttributeIsDataAnnotationsDisplayColumnAttribute_ReturnsAttribute()
// {
// CreateMSBuildAttribute("System.ComponentModel.DataAnnotations.DisplayColumnAttribute");
// CreateAttribute();
//
// global::EnvDTE.vsCMElement kind = codeAttribute.Kind;
//
// Assert.AreEqual(global::EnvDTE.vsCMElement.vsCMElementAttribute, kind);
// }
[Test]
public void Arguments_AttributeHasOneStringPositionalArgument_ReturnsOneAttributeArgumentWithNoName()
{
CreateAttribute("[Test.MyAttribute(\"StringValue\")]");
global::EnvDTE.CodeElements args = codeAttribute.Arguments;
CodeAttributeArgument attributeArg = args.FirstCodeAttributeArgumentOrDefault();
Assert.AreEqual(1, args.Count);
Assert.AreEqual(String.Empty, attributeArg.Name);
Assert.AreEqual("\"StringValue\"", attributeArg.Value);
}
[Test]
public void Arguments_AttributeHasOneStringNamedArgument_ReturnsOneAttributeArgumentWithName()
{
CreateAttribute("[Test.MyAttribute(One = \"StringValue\")]");
global::EnvDTE.CodeElements args = codeAttribute.Arguments;
CodeAttributeArgument attributeArg = args.FirstCodeAttributeArgumentOrDefault();
Assert.AreEqual("One", attributeArg.Name);
Assert.AreEqual("\"StringValue\"", attributeArg.Value);
}
[Test]
public void Arguments_GetArgumentByItemIndexWhenTwoPositionalArguments_ReturnsArgumentAtIndex()
{
CreateAttribute("[Test.MyAttribute(\"StringValue\", false)]");
global::EnvDTE.CodeElements args = codeAttribute.Arguments;
CodeAttributeArgument arg = args.Item(2) as CodeAttributeArgument;
Assert.AreEqual("false", arg.Value);
}
[Test]
public void Arguments_GetArgumentByItemNameWhenTwoNamedArguments_ReturnsArgument()
{
CreateAttribute("[Test.MyAttribute(One = \"OneValue\", Two = false)]");
global::EnvDTE.CodeElements args = codeAttribute.Arguments;
var arg = args.Item("Two") as CodeAttributeArgument;
Assert.AreEqual("false", arg.Value);
}
[Test]
public void Name_AttributeIsNotLastPartOfName_ReturnsShortNameContainingAttributePart()
{
CreateAttribute(
"public class TestAttributeColumn : Attribute {}\r\n" +
"[TestAttributeColumn]");
string name = codeAttribute.Name;
Assert.AreEqual("TestAttributeColumn", name);
}
[Test]
public void Kind_AttributeIsDataAnnotationsDisplayColumnAttribute_ReturnsAttribute()
{
CreateAttribute("[System.FlagsAttribute]");
global::EnvDTE.vsCMElement kind = codeAttribute.Kind;
Assert.AreEqual(global::EnvDTE.vsCMElement.vsCMElementAttribute, kind);
}
}
}

86
src/AddIns/Misc/PackageManagement/Test/Src/EnvDTE/CodeAttributesTests.cs

@ -1,86 +0,0 @@ @@ -1,86 +0,0 @@
// Copyright (c) 2014 AlphaSierraPapa for the SharpDevelop Team
//
// Permission is hereby granted, free of charge, to any person obtaining a copy of this
// software and associated documentation files (the "Software"), to deal in the Software
// without restriction, including without limitation the rights to use, copy, modify, merge,
// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons
// to whom the Software is furnished to do so, subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included in all copies or
// substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE
// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
// DEALINGS IN THE SOFTWARE.
//using System;
//using System.Collections.Generic;
//using System.Linq;
//using ICSharpCode.PackageManagement.EnvDTE;
//using ICSharpCode.SharpDevelop.Dom;
//using NUnit.Framework;
//using PackageManagement.Tests.Helpers;
//
//namespace PackageManagement.Tests.EnvDTE
//{
// [TestFixture]
// public class CodeAttributesTests
// {
// CodeAttributes attributes;
// ClassHelper helper;
//
// [SetUp]
// public void Init()
// {
// helper = new ClassHelper();
// }
//
// void CreateCodeAttributes()
// {
// attributes = new CodeAttributes(helper.Class);
// }
//
// void CreateMSBuildClass()
// {
// helper.CreateClass("MyClass");
// }
//
// void AddAttributeToClass(string name)
// {
// helper.AddAttributeToClass(name);
// }
//
// List<CodeElement> GetEnumerator()
// {
// return attributes.ToList();
// }
//
// [Test]
// public void GetEnumerator_ClassHasOneAttribute_ReturnsOneAttribute()
// {
// CreateMSBuildClass();
// AddAttributeToClass("TestAttribute");
// CreateCodeAttributes();
//
// CodeAttribute2 attribute = attributes.FirstCodeAttribute2OrDefault();
//
// Assert.AreEqual(1, attributes.Count);
// Assert.AreEqual("Test", attribute.Name);
// }
//
// [Test]
// public void Item_GetItemByNameWhenClassHasOneAttribute_ReturnsOneAttribute()
// {
// CreateMSBuildClass();
// AddAttributeToClass("TestAttribute");
// CreateCodeAttributes();
//
// CodeAttribute2 attribute = attributes.Item("Test") as CodeAttribute2;
//
// Assert.AreEqual("Test", attribute.Name);
// }
// }
//}

579
src/AddIns/Misc/PackageManagement/Test/Src/EnvDTE/CodeClass2Tests.cs

@ -19,6 +19,7 @@ @@ -19,6 +19,7 @@
using System;
using System.Collections.Generic;
using System.Linq;
using ICSharpCode.NRefactory.TypeSystem;
using ICSharpCode.PackageManagement;
using ICSharpCode.PackageManagement.EnvDTE;
using ICSharpCode.SharpDevelop.Dom;
@ -36,8 +37,18 @@ namespace PackageManagement.Tests.EnvDTE @@ -36,8 +37,18 @@ namespace PackageManagement.Tests.EnvDTE
void CreateClass(string code)
{
AddCodeFile("class.cs", code);
ITypeDefinitionModel typeModel = assemblyModel.TopLevelTypeDefinitions.Single();
codeClass = new CodeClass2(codeModelContext, typeModel);
ITypeDefinition typeDefinition = GetFirstTypeDefinition();
CreateClass(typeDefinition);
}
ITypeDefinition GetFirstTypeDefinition()
{
return assemblyModel.TopLevelTypeDefinitions.First().Resolve();
}
void CreateClass(ITypeDefinition typeDefinition)
{
codeClass = new CodeClass2(codeModelContext, typeDefinition);
}
[Test]
@ -72,7 +83,7 @@ namespace PackageManagement.Tests.EnvDTE @@ -72,7 +83,7 @@ namespace PackageManagement.Tests.EnvDTE
}
[Test]
public void Access_InternalClass_ReturnsPrivate()
public void Access_PrivateClass_ReturnsPrivate()
{
CreateClass("class MyClass {}");
@ -81,254 +92,318 @@ namespace PackageManagement.Tests.EnvDTE @@ -81,254 +92,318 @@ namespace PackageManagement.Tests.EnvDTE
Assert.AreEqual(global::EnvDTE.vsCMAccess.vsCMAccessPrivate, access);
}
// [Test]
// public void ImplementedInterfaces_ClassImplementsGenericICollectionOfString_ReturnsCodeInterfaceForICollection()
// {
// CreateClass("using System.Collection.Generic;" +
// "class MyClass : ICollection<string> {}");
//
// global::EnvDTE.CodeElements codeElements = codeClass.ImplementedInterfaces;
// CodeInterface codeInterface = codeElements.FirstCodeInterfaceOrDefault();
//
// Assert.AreEqual(1, codeElements.Count);
// Assert.AreEqual("System.Collections.Generic.ICollection<System.String>", codeInterface.FullName);
// }
//
// [Test]
// public void ImplementedInterfaces_ClassHasBaseTypeButNoInterfaces_ReturnsNoItems()
// {
// CreateProjectContent();
// CreatePublicClass("MyClass");
// AddClassToClassBaseTypes("MyNamespace.MyBaseClass");
//
// global::EnvDTE.CodeElements codeElements = codeClass.ImplementedInterfaces;
//
// Assert.AreEqual(0, codeElements.Count);
// }
//
// [Test]
// public void BaseTypes_ClassBaseTypeIsSystemObject_ReturnsSystemObject()
// {
// CreateProjectContent();
// CreatePublicClass("MyClass");
// AddBaseTypeToClass("System.Object");
//
// global::EnvDTE.CodeElements codeElements = codeClass.Bases;
// CodeClass2 baseClass = codeElements.FirstCodeClass2OrDefault();
//
// Assert.AreEqual(1, codeElements.Count);
// Assert.AreEqual("System.Object", baseClass.FullName);
// Assert.AreEqual("Object", baseClass.Name);
// }
//
// [Test]
// public void BaseTypes_ClassBaseTypeIsNull_ReturnsNoCodeElements()
// {
// CreateProjectContent();
// CreatePublicClass("System.Object");
//
// global::EnvDTE.CodeElements codeElements = codeClass.Bases;
//
// Assert.AreEqual(0, codeElements.Count);
// }
//
// [Test]
// public void Members_ClassHasOneMethod_ReturnsOneMethod()
// {
// CreateProjectContent();
// CreatePublicClass("MyClass");
// AddMethodToClass("MyClass.MyMethod");
//
// global::EnvDTE.CodeElements codeElements = codeClass.Members;
// CodeFunction2 codeFunction = codeElements.FirstCodeFunction2OrDefault();
//
// Assert.AreEqual(1, codeElements.Count);
// Assert.AreEqual("MyMethod", codeFunction.Name);
// }
//
// [Test]
// public void Members_ClassHasOneProperty_ReturnsOneProperty()
// {
// CreateProjectContent();
// CreatePublicClass("MyClass");
// AddPropertyToClass("MyClass.MyProperty");
//
// global::EnvDTE.CodeElements codeElements = codeClass.Members;
// CodeProperty2 codeFunction = codeElements.FirstCodeProperty2OrDefault();
//
// Assert.AreEqual(1, codeElements.Count);
// Assert.AreEqual("MyProperty", codeFunction.Name);
// }
//
// [Test]
// public void Members_ClassHasOneField_ReturnsOneField()
// {
// CreateProjectContent();
// CreatePublicClass("MyClass");
// AddFieldToClass("MyClass.MyField");
//
// global::EnvDTE.CodeElements codeElements = codeClass.Members;
// CodeVariable codeVariable = codeElements.FirstCodeVariableOrDefault();
//
// Assert.AreEqual(1, codeElements.Count);
// Assert.AreEqual("MyField", codeVariable.Name);
// }
//
// [Test]
// public void Kind_PublicClass_ReturnsClass()
// {
// CreateProjectContent();
// CreatePublicClass("MyClass");
//
// global::EnvDTE.vsCMElement kind = codeClass.Kind;
//
// Assert.AreEqual(global::EnvDTE.vsCMElement.vsCMElementClass, kind);
// }
//
// [Test]
// public void Namespace_PublicClass_ReturnsClassNamespace()
// {
// CreateProjectContent();
// helper.CreatePublicClass("MyNamespace.Test.MyClass");
// helper.AddClassNamespace("MyNamespace.Test");
// CreateClass();
//
// global::EnvDTE.CodeNamespace codeNamespace = codeClass.Namespace;
//
// Assert.AreEqual("MyNamespace.Test", codeNamespace.FullName);
// }
//
// [Test]
// public void Namespace_PublicClassAndNamespaceNameChecked_ReturnsFullyQualifiedClassNamespace()
// {
// CreateProjectContent();
// helper.CreatePublicClass("MyNamespace.Test.MyClass");
// helper.AddClassNamespace("MyNamespace.Test");
// CreateClass();
//
// global::EnvDTE.CodeNamespace codeNamespace = codeClass.Namespace;
//
// Assert.AreEqual("MyNamespace.Test", codeNamespace.Name);
// }
//
// [Test]
// public void PartialClasses_ClassIsNotPartial_ReturnsClass()
// {
// CreateProjectContent();
// CreatePublicClass("MyNamespace.MyClass");
// CreateClass();
//
// global::EnvDTE.CodeElements partialClasses = codeClass.PartialClasses;
// CodeClass firstClass = partialClasses.FirstCodeClass2OrDefault();
//
// Assert.AreEqual(1, partialClasses.Count);
// Assert.AreEqual(codeClass, firstClass);
// }
//
// [Test]
// public void Members_GetFirstPropertyTwice_PropertiesAreConsideredEqualWhenAddedToList()
// {
// CreateProjectContent();
// CreatePublicClass("MyClass");
// helper.AddPropertyToClass("MyClass.MyProperty");
// CodeProperty2 property = codeClass.Members.FirstCodeProperty2OrDefault();
// var properties = new List<CodeProperty2>();
// properties.Add(property);
//
// CodeProperty2 property2 = codeClass.Members.FirstCodeProperty2OrDefault();
//
// bool contains = properties.Contains(property2);
// Assert.IsTrue(contains);
// }
//
// [Test]
// public void IsAbstract_ClassIsAbstract_ReturnsTrue()
// {
// CreateProjectContent();
// CreatePublicClass("MyClass");
// ClassIsAbstract();
//
// bool isAbstract = codeClass.IsAbstract;
//
// Assert.IsTrue(isAbstract);
// }
//
// [Test]
// public void IsAbstract_ClassIsNotAbstract_ReturnsFalse()
// {
// CreateProjectContent();
// CreatePublicClass("MyClass");
//
// bool isAbstract = codeClass.IsAbstract;
//
// Assert.IsFalse(isAbstract);
// }
//
// [Test]
// public void ClassKind_ClassIsPartial_ReturnsPartialClassKind()
// {
// CreateProjectContent();
// CreatePublicClass("MyClass");
// ClassIsPartial();
//
// global::EnvDTE.vsCMClassKind kind = codeClass.ClassKind;
//
// Assert.AreEqual(global::EnvDTE.vsCMClassKind.vsCMClassKindPartialClass, kind);
// }
//
// [Test]
// public void ClassKind_ClassIsNotPartial_ReturnsMainClassKind()
// {
// CreateProjectContent();
// CreatePublicClass("MyClass");
//
// global::EnvDTE.vsCMClassKind kind = codeClass.ClassKind;
//
// Assert.AreEqual(global::EnvDTE.vsCMClassKind.vsCMClassKindMainClass, kind);
// }
//
// [Test]
// public void IsGeneric_ClassIsGeneric_ReturnsTrue()
// {
// CreateProjectContent();
// CreatePublicClass("MyClass");
// ClassIsGeneric();
//
// bool generic = codeClass.IsGeneric;
//
// Assert.IsTrue(generic);
// }
//
// [Test]
// public void IsGeneric_ClassIsNotGeneric_ReturnsFalse()
// {
// CreateProjectContent();
// CreatePublicClass("MyClass");
// ClassIsNotGeneric();
//
// bool generic = codeClass.IsGeneric;
//
// Assert.IsFalse(generic);
// }
//
// [Test]
// public void ClassKind_ChangeClassToBePartial_UsesClassKindUpdaterToModifyClass()
// {
// CreateProjectContent();
// CreatePublicClass("MyClass");
//
// codeClass.ClassKind = global::EnvDTE.vsCMClassKind.vsCMClassKindPartialClass;
//
// classKindUpdater.AssertWasCalled(updater => updater.MakeClassPartial());
// }
//
// [Test]
// public void ClassKind_ChangeClassToBeMainClass_ThrowsNotImplementedException()
// {
// CreateProjectContent();
// CreatePublicClass("MyClass");
//
// Assert.Throws<NotImplementedException>(() => codeClass.ClassKind = global::EnvDTE.vsCMClassKind.vsCMClassKindMainClass);
// }
[Test]
public void ImplementedInterfaces_ClassImplementsGenericICollectionOfString_ReturnsCodeInterfaceForICollection()
{
CreateClass(
"using System;\r\n" +
"using System.Collections.Generic;\r\n" +
"class MyClass : ICollection<string> {}");
global::EnvDTE.CodeElements codeElements = codeClass.ImplementedInterfaces;
CodeInterface codeInterface = codeElements.FirstCodeInterfaceOrDefault();
Assert.AreEqual(1, codeElements.Count);
Assert.AreEqual("System.Collections.Generic.ICollection<System.String>", codeInterface.FullName);
}
[Test]
public void ImplementedInterfaces_ClassHasBaseTypeButNoInterfaces_ReturnsNoItems()
{
CreateClass(
"namespace MyNamespace {\r\n" +
" public class MyClass : MyBaseClass {}\r\n" +
" public class MyBaseClass {}\r\n" +
"}");
global::EnvDTE.CodeElements codeElements = codeClass.ImplementedInterfaces;
Assert.AreEqual(0, codeElements.Count);
}
[Test]
public void BaseTypes_ClassBaseTypeIsSystemObject_ReturnsSystemObject()
{
CreateClass("public class MyClass {}");
global::EnvDTE.CodeElements codeElements = codeClass.Bases;
CodeClass2 baseClass = codeElements.FirstCodeClass2OrDefault();
Assert.AreEqual(1, codeElements.Count);
Assert.AreEqual("System.Object", baseClass.FullName);
Assert.AreEqual("Object", baseClass.Name);
}
[Test]
public void BaseTypes_ClassIsSystemObject_ReturnsNoCodeElements()
{
CreateClass("public class MyClass {}");
ITypeDefinition myClassType = GetFirstTypeDefinition();
ITypeDefinition systemObject = myClassType.DirectBaseTypes.First().GetDefinition();
CreateClass(systemObject);
global::EnvDTE.CodeElements codeElements = codeClass.Bases;
Assert.AreEqual(0, codeElements.Count);
}
[Test]
public void Members_ClassHasOneMethod_ReturnsOneMethod()
{
CreateClass(
"public class MyClass {\r\n" +
" public void MyMethod() {}\r\n" +
"}");
global::EnvDTE.CodeElements codeElements = codeClass.Members;
CodeFunction2 codeFunction = codeElements.FirstCodeFunction2OrDefault();
Assert.AreEqual(1, codeElements.Count);
Assert.AreEqual("MyMethod", codeFunction.Name);
}
[Test]
public void Members_ClassHasOneProperty_ReturnsOneProperty()
{
CreateClass(
"public class MyClass {\r\n" +
" public int MyProperty { get; set; }\r\n" +
"}");
global::EnvDTE.CodeElements codeElements = codeClass.Members;
CodeProperty2 codeProperty = codeElements.FirstCodeProperty2OrDefault();
Assert.AreEqual(1, codeElements.Count);
Assert.AreEqual("MyProperty", codeProperty.Name);
}
[Test]
public void Members_ClassHasOneField_ReturnsOneField()
{
CreateClass(
"public class MyClass {\r\n" +
" public int MyField;\r\n" +
"}");
global::EnvDTE.CodeElements codeElements = codeClass.Members;
CodeVariable codeVariable = codeElements.FirstCodeVariableOrDefault();
Assert.AreEqual(1, codeElements.Count);
Assert.AreEqual("MyField", codeVariable.Name);
}
[Test]
public void Kind_PublicClass_ReturnsClass()
{
CreateClass("public class MyClass {}");
global::EnvDTE.vsCMElement kind = codeClass.Kind;
Assert.AreEqual(global::EnvDTE.vsCMElement.vsCMElementClass, kind);
}
[Test]
public void Namespace_PublicClass_ReturnsClassNamespace()
{
CreateClass(
"namespace MyNamespace.Test {\r\n" +
" public class MyClass {}\r\n" +
"}");
global::EnvDTE.CodeNamespace codeNamespace = codeClass.Namespace;
Assert.AreEqual("MyNamespace.Test", codeNamespace.FullName);
}
[Test]
public void PartialClasses_ClassIsNotPartial_ReturnsClass()
{
CreateClass("public class MyClass {}");
global::EnvDTE.CodeElements partialClasses = codeClass.PartialClasses;
CodeClass firstClass = partialClasses.FirstCodeClass2OrDefault();
Assert.AreEqual(1, partialClasses.Count);
Assert.AreEqual(codeClass, firstClass);
}
[Test]
public void Members_GetFirstPropertyTwice_PropertiesAreConsideredEqualWhenAddedToList()
{
CreateClass(
"public class MyClass {\r\n" +
" public int MyProperty { get; set; }\r\n" +
"}");
CodeProperty2 property = codeClass.Members.FirstCodeProperty2OrDefault();
var properties = new List<CodeProperty2>();
properties.Add(property);
CodeProperty2 property2 = codeClass.Members.FirstCodeProperty2OrDefault();
bool contains = properties.Contains(property2);
Assert.IsTrue(contains);
}
[Test]
public void IsAbstract_ClassIsAbstract_ReturnsTrue()
{
CreateClass("public abstract class MyClass {}");
bool isAbstract = codeClass.IsAbstract;
Assert.IsTrue(isAbstract);
}
[Test]
public void IsAbstract_ClassIsNotAbstract_ReturnsFalse()
{
CreateClass("public class MyClass {}");
bool isAbstract = codeClass.IsAbstract;
Assert.IsFalse(isAbstract);
}
[Test]
public void ClassKind_ClassIsPartial_ReturnsPartialClassKind()
{
CreateClass("public partial class MyClass {}");
global::EnvDTE.vsCMClassKind kind = codeClass.ClassKind;
Assert.AreEqual(global::EnvDTE.vsCMClassKind.vsCMClassKindPartialClass, kind);
}
[Test]
public void ClassKind_ClassIsNotPartial_ReturnsMainClassKind()
{
CreateClass("public class MyClass {}");
global::EnvDTE.vsCMClassKind kind = codeClass.ClassKind;
Assert.AreEqual(global::EnvDTE.vsCMClassKind.vsCMClassKindMainClass, kind);
}
[Test]
public void IsGeneric_ClassIsGeneric_ReturnsTrue()
{
CreateClass("public class MyClass<T> {}");
bool generic = codeClass.IsGeneric;
Assert.IsTrue(generic);
}
[Test]
public void IsGeneric_ClassIsNotGeneric_ReturnsFalse()
{
CreateClass("public class MyClass {}");
bool generic = codeClass.IsGeneric;
Assert.IsFalse(generic);
}
[Test]
public void ClassKind_ChangeClassToBePartial_UsesCodeGeneratorToModifyClass()
{
CreateClass("public class MyClass {}");
codeClass.ClassKind = global::EnvDTE.vsCMClassKind.vsCMClassKindPartialClass;
codeGenerator.AssertWasCalled(generator => generator.MakePartial(
Arg<ITypeDefinition>.Matches(typeDef => typeDef.Name == "MyClass")));
}
[Test]
public void ClassKind_ChangeClassToBePartialWhenClassIsAlreadyPartial_CodeGeneratorIsNotChanged()
{
CreateClass("public partial class MyClass {}");
codeClass.ClassKind = global::EnvDTE.vsCMClassKind.vsCMClassKindPartialClass;
codeGenerator.AssertWasNotCalled(generator => generator.MakePartial(
Arg<ITypeDefinition>.Is.Anything));
}
[Test]
public void ClassKind_ChangeClassToBeMainClass_ThrowsNotImplementedException()
{
CreateClass("public partial class MyClass {}");
Assert.Throws<NotImplementedException>(() => codeClass.ClassKind = global::EnvDTE.vsCMClassKind.vsCMClassKindMainClass);
}
[Test]
public void ImplementedInterfaces_ClassImplementsIDisposable_ReturnsCodeInterfaceForIDisposable()
{
CreateClass(
"using System;\r\n" +
"class MyClass : IDisposable {}");
global::EnvDTE.CodeElements codeElements = codeClass.ImplementedInterfaces;
CodeInterface codeInterface = codeElements.FirstCodeInterfaceOrDefault();
Assert.AreEqual(1, codeElements.Count);
Assert.AreEqual("System.IDisposable", codeInterface.FullName);
}
[Test]
public void FullName_GenericClass_ReturnsTypeArguments()
{
CreateClass(
"namespace Test {\r\n" +
" class MyClass<T> {}\r\n" +
"}");
string name = codeClass.FullName;
Assert.AreEqual("Test.MyClass<T>", name);
}
[Test]
public void Attributes_ClassHasOneAttribute_ReturnsOneAttribute()
{
CreateClass("[System.ObsoleteAttribute] class MyClass {}");
CodeAttribute2 attribute = codeClass.Attributes.FirstCodeAttribute2OrDefault();
Assert.AreEqual(1, codeClass.Attributes.Count);
Assert.AreEqual("Obsolete", attribute.Name);
}
[Test]
public void Attributes_GetItemByNameWhenClassHasOneAttribute_ReturnsOneAttribute()
{
CreateClass("[System.ObsoleteAttribute] class MyClass {}");
var attribute = codeClass.Attributes.Item("Obsolete") as CodeAttribute2;
Assert.AreEqual("Obsolete", attribute.Name);
}
[Test]
public void Members_ClassIsSystemAttributeAsReturnTypeFromClassMethod_HasMembersForSystemAttribute()
{
CreateClass(
"using System;\r\n" +
"class MyClass {\r\n" +
" public Attribute GetAttribute() {\r\n" +
" return null;\r\n" +
" }\r\n" +
"}");
CodeClass2 returnType = codeClass
.Members
.OfType<CodeFunction2>()
.First(member => member.Name == "GetAttribute")
.Type
.CodeType as CodeClass2;
List<CodeElement> members = returnType.Members.ToList();
Assert.AreEqual("System.Attribute", returnType.FullName);
Assert.That(members.Count, Is.GreaterThan(0));
Assert.IsTrue(members.Any(member => member.Name == "IsDefaultAttribute"));
}
}
}

121
src/AddIns/Misc/PackageManagement/Test/Src/EnvDTE/CodeDelegateTests.cs

@ -16,72 +16,55 @@ @@ -16,72 +16,55 @@
// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
// DEALINGS IN THE SOFTWARE.
//using System;
//using ICSharpCode.PackageManagement.EnvDTE;
//using ICSharpCode.SharpDevelop.Dom;
//using NUnit.Framework;
//using PackageManagement.Tests.Helpers;
//
//namespace PackageManagement.Tests.EnvDTE
//{
// [TestFixture]
// public class CodeDelegateTests
// {
// CodeDelegate codeDelegate;
// ProjectContentHelper helper;
// IClass fakeDelegate;
//
// [SetUp]
// public void Init()
// {
// helper = new ProjectContentHelper();
// }
//
// void CreatePublicDelegate(string name)
// {
// fakeDelegate = helper.AddPublicDelegateToProjectContent(name);
// CreateDelegate();
// }
//
// void CreatePrivateDelegate(string name)
// {
// fakeDelegate = helper.AddPrivateDelegateToProjectContent(name);
// CreateDelegate();
// }
//
// void CreateDelegate()
// {
// codeDelegate = new CodeDelegate(helper.ProjectContent, fakeDelegate);
// }
//
// [Test]
// public void Access_PublicDelegate_ReturnsPublic()
// {
// CreatePublicDelegate("MyDelegate");
//
// global::EnvDTE.vsCMAccess access = codeDelegate.Access;
//
// Assert.AreEqual(global::EnvDTE.vsCMAccess.vsCMAccessPublic, access);
// }
//
// [Test]
// public void Access_PrivateDelegate_ReturnsPrivate()
// {
// CreatePrivateDelegate("MyDelegate");
//
// global::EnvDTE.vsCMAccess access = codeDelegate.Access;
//
// Assert.AreEqual(global::EnvDTE.vsCMAccess.vsCMAccessPrivate, access);
// }
//
// [Test]
// public void Kind_PublicDelegate_ReturnsClass()
// {
// CreatePublicDelegate("MyDelegate");
//
// global::EnvDTE.vsCMElement kind = codeDelegate.Kind;
//
// Assert.AreEqual(global::EnvDTE.vsCMElement.vsCMElementDelegate, kind);
// }
// }
//}
using System;
using System.Linq;
using ICSharpCode.NRefactory.TypeSystem;
using ICSharpCode.PackageManagement.EnvDTE;
using NUnit.Framework;
namespace PackageManagement.Tests.EnvDTE
{
[TestFixture]
public class CodeDelegateTests : CodeModelTestBase
{
CodeDelegate codeDelegate;
void CreateDelegate(string code)
{
AddCodeFile("delegate.cs", code);
codeDelegate = new CodeDelegate(
codeModelContext,
assemblyModel.TopLevelTypeDefinitions.First().Resolve());
}
[Test]
public void Access_PublicDelegate_ReturnsPublic()
{
CreateDelegate("public delegate void MyDelegate(string param1);");
global::EnvDTE.vsCMAccess access = codeDelegate.Access;
Assert.AreEqual(global::EnvDTE.vsCMAccess.vsCMAccessPublic, access);
}
[Test]
public void Access_PrivateDelegate_ReturnsPrivate()
{
CreateDelegate("delegate void MyDelegate(string param1);");
global::EnvDTE.vsCMAccess access = codeDelegate.Access;
Assert.AreEqual(global::EnvDTE.vsCMAccess.vsCMAccessPrivate, access);
}
[Test]
public void Kind_PublicDelegate_ReturnsDelegate()
{
CreateDelegate("public delegate void MyDelegate(string param1);");
global::EnvDTE.vsCMElement kind = codeDelegate.Kind;
Assert.AreEqual(global::EnvDTE.vsCMElement.vsCMElementDelegate, kind);
}
}
}

162
src/AddIns/Misc/PackageManagement/Test/Src/EnvDTE/CodeElementsInNamespaceTests.cs

@ -1,162 +0,0 @@ @@ -1,162 +0,0 @@
// Copyright (c) 2014 AlphaSierraPapa for the SharpDevelop Team
//
// Permission is hereby granted, free of charge, to any person obtaining a copy of this
// software and associated documentation files (the "Software"), to deal in the Software
// without restriction, including without limitation the rights to use, copy, modify, merge,
// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons
// to whom the Software is furnished to do so, subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included in all copies or
// substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE
// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
// DEALINGS IN THE SOFTWARE.
//using System;
//using System.Collections.Generic;
//using System.Linq;
//using ICSharpCode.PackageManagement.EnvDTE;
//using NUnit.Framework;
//using PackageManagement.Tests.Helpers;
//
//namespace PackageManagement.Tests.EnvDTE
//{
// [TestFixture]
// public class CodeElementsInNamespaceTests
// {
// CodeElementsInNamespace codeElements;
// ProjectContentHelper helper;
//
// [SetUp]
// public void Init()
// {
// helper = new ProjectContentHelper();
// }
//
// void CreateCodeElements(string namespaceName)
// {
// codeElements = new CodeElementsInNamespace(helper.ProjectContent, namespaceName);
// }
//
// [Test]
// public void Count_NoItemsInNamespace_ReturnsZero()
// {
// helper.NoCompletionItemsInNamespace("Test");
// CreateCodeElements("Test");
//
// int count = codeElements.Count;
//
// Assert.AreEqual(0, count);
// }
//
// [Test]
// public void GetEnumerator_NoItemsInNamespace_ReturnsNoItems()
// {
// helper.NoCompletionItemsInNamespace("Test");
// CreateCodeElements("Test");
//
// List<CodeElement> codeElementsList = codeElements.ToList();
//
// Assert.AreEqual(0, codeElementsList.Count);
// }
//
// [Test]
// public void GetEnumerator_OneNamespaceCompletionEntryInNamespace_ReturnsOneCodeNamespace()
// {
// helper.AddNamespaceCompletionEntryInNamespace("Parent", "Child");
// CreateCodeElements("Parent");
//
// CodeNamespace codeNamespace = codeElements.FirstCodeNamespaceOrDefault();
//
// Assert.AreEqual(1, codeElements.Count);
// Assert.AreEqual("Child", codeNamespace.Name);
// Assert.AreEqual("Parent.Child", codeNamespace.FullName);
// }
//
// [Test]
// public void GetEnumerator_OneClassCompletionEntryInNamespace_ReturnsOneCodeClass()
// {
// helper.AddClassToProjectContentAndCompletionEntries("Test", "Test.MyClass");
// CreateCodeElements("Test");
//
// CodeClass2 codeClass = codeElements.ToList().FirstOrDefault() as CodeClass2;
//
// Assert.AreEqual(1, codeElements.Count);
// Assert.AreEqual("MyClass", codeClass.Name);
// Assert.AreEqual("Test.MyClass", codeClass.FullName);
// }
//
// [Test]
// public void GetEnumerator_UnknownCompletionEntryInNamespace_ReturnsNoItems()
// {
// helper.AddUnknownCompletionEntryTypeToNamespace("Test");
// CreateCodeElements("Test");
//
// List<CodeElement> codeElementsList = codeElements.ToList();
//
// Assert.AreEqual(0, codeElementsList.Count);
// }
//
// [Test]
// public void GetEnumerator_EmptyNamespaceEntry_ReturnsNoItems()
// {
// helper.AddNamespaceCompletionEntryInNamespace(String.Empty, String.Empty);
// CreateCodeElements(String.Empty);
//
// List<CodeElement> codeElementsList = codeElements.ToList();
//
// Assert.AreEqual(0, codeElementsList.Count);
// }
//
// [Test]
// public void GetEnumerator_ParentChildAndGrandChildNamespaces_ReturnsOneCodeNamespaceWhichHasGrandChildNamespace()
// {
// helper.AddNamespaceCompletionEntryInNamespace("Parent", "Child");
// helper.AddNamespaceCompletionEntryInNamespace("Parent.Child", "GrandChild");
// helper.NoCompletionItemsInNamespace("Parent.Child.GrandChild");
// CreateCodeElements("Parent");
//
// CodeNamespace codeNamespace = codeElements.FirstCodeNamespaceOrDefault();
// CodeNamespace grandChildNamespace = codeNamespace.Members.FirstCodeNamespaceOrDefault();
//
// Assert.AreEqual("GrandChild", grandChildNamespace.Name);
// }
//
// [Test]
// public void Item_OneClassCompletionEntryAndFirstItemSelected_ReturnsOneCodeClass()
// {
// helper.AddClassToProjectContentAndCompletionEntries("Test", "Test.MyClass");
// CreateCodeElements("Test");
//
// CodeClass2 codeClass = codeElements.Item(1) as CodeClass2;
//
// Assert.AreEqual("Test.MyClass", codeClass.FullName);
// }
//
// [Test]
// public void Item_OneClassCompletionEntryAndItemSelectedByName_ReturnsOneCodeClass()
// {
// helper.AddClassToProjectContentAndCompletionEntries("Test", "Test.MyClass");
// CreateCodeElements("Test");
//
// CodeClass2 codeClass = codeElements.Item("MyClass") as CodeClass2;
//
// Assert.AreEqual("Test.MyClass", codeClass.FullName);
// }
//
// [Test]
// public void Item_OneInterfaceCompletionEntryAndItemSelectedByName_ReturnsOneCodeInterface()
// {
// helper.AddInterfaceToProjectContentAndCompletionEntries("Test", "Test.IClass");
// CreateCodeElements("Test");
//
// CodeInterface codeInterface = codeElements.Item("IClass") as CodeInterface;
//
// Assert.AreEqual("Test.IClass", codeInterface.FullName);
// }
// }
//}

260
src/AddIns/Misc/PackageManagement/Test/Src/EnvDTE/CodeFunction2Tests.cs

@ -16,131 +16,135 @@ @@ -16,131 +16,135 @@
// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
// DEALINGS IN THE SOFTWARE.
//using System;
//using ICSharpCode.PackageManagement.EnvDTE;
//using NUnit.Framework;
//using PackageManagement.Tests.Helpers;
//
//namespace PackageManagement.Tests.EnvDTE
//{
// [TestFixture]
// public class CodeFunction2Tests
// {
// CodeFunction2 codeFunction;
// MethodHelper helper;
//
// [SetUp]
// public void Init()
// {
// helper = new MethodHelper();
// }
//
// void CreatePublicFunction(string name)
// {
// helper.CreatePublicMethod(name);
// CreateFunction();
// }
//
// void CreateFunction()
// {
// codeFunction = new CodeFunction2(helper.Method);
// }
//
// [Test]
// public void OverrideKind_OrdinaryMethod_ReturnsNone()
// {
// CreatePublicFunction("MyClass.MyFunction");
//
// global::EnvDTE.vsCMOverrideKind kind = codeFunction.OverrideKind;
//
// Assert.AreEqual(global::EnvDTE.vsCMOverrideKind.vsCMOverrideKindNone, kind);
// }
//
// [Test]
// public void OverrideKind_AbstractMethod_ReturnsAbstract()
// {
// CreatePublicFunction("MyClass.MyFunction");
// helper.MakeMethodAbstract();
//
// global::EnvDTE.vsCMOverrideKind kind = codeFunction.OverrideKind;
//
// Assert.AreEqual(global::EnvDTE.vsCMOverrideKind.vsCMOverrideKindAbstract, kind);
// }
//
// [Test]
// public void OverrideKind_VirtualMethod_ReturnsVirtual()
// {
// CreatePublicFunction("MyClass.MyFunction");
// helper.MakeMethodVirtual();
//
// global::EnvDTE.vsCMOverrideKind kind = codeFunction.OverrideKind;
//
// Assert.AreEqual(global::EnvDTE.vsCMOverrideKind.vsCMOverrideKindVirtual, kind);
// }
//
// [Test]
// public void OverrideKind_MethodOverride_ReturnsOverride()
// {
// CreatePublicFunction("MyClass.MyFunction");
// helper.MakeMethodOverride();
//
// global::EnvDTE.vsCMOverrideKind kind = codeFunction.OverrideKind;
//
// Assert.AreEqual(global::EnvDTE.vsCMOverrideKind.vsCMOverrideKindOverride, kind);
// }
//
// [Test]
// public void OverrideKind_SealedMethod_ReturnsSealed()
// {
// CreatePublicFunction("MyClass.MyFunction");
// helper.MakeMethodSealed();
//
// global::EnvDTE.vsCMOverrideKind kind = codeFunction.OverrideKind;
//
// Assert.AreEqual(global::EnvDTE.vsCMOverrideKind.vsCMOverrideKindSealed, kind);
// }
//
// [Test]
// public void OverrideKind_MethodHiddenByNewKeyword_ReturnsNew()
// {
// CreatePublicFunction("MyClass.MyFunction");
// helper.MakeMethodNewOverride();
//
// global::EnvDTE.vsCMOverrideKind kind = codeFunction.OverrideKind;
//
// Assert.AreEqual(global::EnvDTE.vsCMOverrideKind.vsCMOverrideKindNew, kind);
// }
//
// [Test]
// public void IsGeneric_MethodHasTypeParameter_ReturnsTrue()
// {
// CreatePublicFunction("MyClass.MyFunction");
// helper.AddTypeParameter("TResult");
//
// bool generic = codeFunction.IsGeneric;
//
// Assert.IsTrue(generic);
// }
//
// [Test]
// public void IsGeneric_MethodHasTypeParameters_ReturnsFalse()
// {
// CreatePublicFunction("MyClass.MyFunction");
// helper.NoTypeParameters();
//
// bool generic = codeFunction.IsGeneric;
//
// Assert.IsFalse(generic);
// }
//
// [Test]
// public void IsGeneric_MethodTypeParametersIsNull_ReturnsFalse()
// {
// CreatePublicFunction("MyClass.MyFunction");
//
// bool generic = codeFunction.IsGeneric;
//
// Assert.IsFalse(generic);
// }
// }
//}
using System;
using System.Linq;
using ICSharpCode.NRefactory.TypeSystem;
using ICSharpCode.PackageManagement.EnvDTE;
using NUnit.Framework;
namespace PackageManagement.Tests.EnvDTE
{
[TestFixture]
public class CodeFunction2Tests : CodeModelTestBase
{
CodeFunction2 codeFunction;
void CreateFunction(string code)
{
AddCodeFile("class.cs", code);
IMethod method = assemblyModel
.TopLevelTypeDefinitions
.First()
.Members
.First()
.Resolve() as IMethod;
codeFunction = new CodeFunction2(codeModelContext, method);
}
[Test]
public void OverrideKind_OrdinaryMethod_ReturnsNone()
{
CreateFunction(
"public class MyClass {\r\n" +
" public void MyFunction() {}\r\n" +
"}");
global::EnvDTE.vsCMOverrideKind kind = codeFunction.OverrideKind;
Assert.AreEqual(global::EnvDTE.vsCMOverrideKind.vsCMOverrideKindNone, kind);
}
[Test]
public void OverrideKind_AbstractMethod_ReturnsAbstract()
{
CreateFunction(
"public class MyClass {\r\n" +
" public abstract void MyFunction();\r\n" +
"}");
global::EnvDTE.vsCMOverrideKind kind = codeFunction.OverrideKind;
Assert.AreEqual(global::EnvDTE.vsCMOverrideKind.vsCMOverrideKindAbstract, kind);
}
[Test]
public void OverrideKind_VirtualMethod_ReturnsVirtual()
{
CreateFunction(
"public class MyClass {\r\n" +
" public virtual void MyFunction() {}\r\n" +
"}");
global::EnvDTE.vsCMOverrideKind kind = codeFunction.OverrideKind;
Assert.AreEqual(global::EnvDTE.vsCMOverrideKind.vsCMOverrideKindVirtual, kind);
}
[Test]
public void OverrideKind_MethodOverride_ReturnsOverride()
{
CreateFunction(
"public class MyClass {\r\n" +
" public override string ToString() { return \"MyClass\"; }\r\n" +
"}");
global::EnvDTE.vsCMOverrideKind kind = codeFunction.OverrideKind;
Assert.AreEqual(global::EnvDTE.vsCMOverrideKind.vsCMOverrideKindOverride, kind);
}
[Test]
public void OverrideKind_SealedMethod_ReturnsSealed()
{
CreateFunction(
"public class MyClass {\r\n" +
" public sealed void MyFunction() {}\r\n" +
"}");
global::EnvDTE.vsCMOverrideKind kind = codeFunction.OverrideKind;
Assert.AreEqual(global::EnvDTE.vsCMOverrideKind.vsCMOverrideKindSealed, kind);
}
[Test]
public void OverrideKind_MethodHiddenByNewKeyword_ReturnsNew()
{
CreateFunction(
"public class MyClass {\r\n" +
" public new string ToString() { return \"MyClass\"; }\r\n" +
"}");
global::EnvDTE.vsCMOverrideKind kind = codeFunction.OverrideKind;
Assert.AreEqual(global::EnvDTE.vsCMOverrideKind.vsCMOverrideKindNew, kind);
}
[Test]
public void IsGeneric_MethodHasTypeParameter_ReturnsTrue()
{
CreateFunction(
"public class MyClass {\r\n" +
" public void MyFunction<TResult>() {}\r\n" +
"}");
bool generic = codeFunction.IsGeneric;
Assert.IsTrue(generic);
}
[Test]
public void IsGeneric_MethodHasNoTypeParameters_ReturnsFalse()
{
CreateFunction(
"public class MyClass {\r\n" +
" public void MyFunction() {}\r\n" +
"}");
bool generic = codeFunction.IsGeneric;
Assert.IsFalse(generic);
}
}
}

816
src/AddIns/Misc/PackageManagement/Test/Src/EnvDTE/CodeFunctionTests.cs

@ -16,400 +16,422 @@ @@ -16,400 +16,422 @@
// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
// DEALINGS IN THE SOFTWARE.
//using System;
//using ICSharpCode.PackageManagement;
//using ICSharpCode.PackageManagement.EnvDTE;
//using ICSharpCode.SharpDevelop.Dom;
//using NUnit.Framework;
//using PackageManagement.Tests.Helpers;
//using Rhino.Mocks;
//
//namespace PackageManagement.Tests.EnvDTE
//{
// [TestFixture]
// public class CodeFunctionTests
// {
// CodeFunction codeFunction;
// MethodHelper helper;
// IVirtualMethodUpdater methodUpdater;
//
// [SetUp]
// public void Init()
// {
// helper = new MethodHelper();
// }
//
// void CreatePublicFunction(string name)
// {
// helper.CreatePublicMethod(name);
// CreateFunction();
// }
//
// void CreatePrivateFunction(string name)
// {
// helper.CreatePrivateMethod(name);
// CreateFunction();
// }
//
// void CreateFunction()
// {
// methodUpdater = MockRepository.GenerateStub<IVirtualMethodUpdater>();
// codeFunction = new CodeFunction(helper.Method, null, methodUpdater);
// }
//
// void CreatePublicConstructor(string name)
// {
// helper.CreatePublicConstructor(name);
// CreateFunction();
// }
//
// void SetDeclaringTypeAsInterface(string name)
// {
// helper.AddDeclaringTypeAsInterface(name);
// }
//
// void SetDeclaringType(string name)
// {
// helper.AddDeclaringType(name);
// }
//
// void AddParameterToMethod(string name)
// {
// helper.AddParameter(name);
// }
//
// void AddParameterToMethod(string type, string name)
// {
// helper.AddParameter(type, name);
// }
//
// void AddReturnTypeToMethod(string type)
// {
// helper.AddReturnTypeToMethod(type);
// }
//
// void MakeMethodStatic()
// {
// helper.MakeMethodStatic();
// }
//
// void MakeMethodAbstract()
// {
// helper.MakeMethodAbstract();
// }
//
// void MakeMethodVirtual()
// {
// helper.MakeMethodVirtual();
// }
//
// void AddMethodAttribute(string attributeTypeName)
// {
// helper.AddAttributeToMethod(attributeTypeName);
// }
//
// void MakeMethodOverridable()
// {
// helper.MakeMethodOverridable();
// }
//
// [Test]
// public void Access_PublicFunction_ReturnsPublic()
// {
// CreatePublicFunction("Class1.MyFunction");
//
// global::EnvDTE.vsCMAccess access = codeFunction.Access;
//
// Assert.AreEqual(global::EnvDTE.vsCMAccess.vsCMAccessPublic, access);
// }
//
// [Test]
// public void Access_PrivateFunction_ReturnsPrivate()
// {
// CreatePrivateFunction("Class1.MyFunction");
//
// global::EnvDTE.vsCMAccess access = codeFunction.Access;
//
// Assert.AreEqual(global::EnvDTE.vsCMAccess.vsCMAccessPrivate, access);
// }
//
// [Test]
// public void GetStartPoint_FunctionStartsAtColumn3_ReturnsPointWithOffset3()
// {
// CreatePublicFunction("Class1.MyFunction");
// SetDeclaringType("Class1");
// helper.FunctionStartsAtColumn(3);
//
// global::EnvDTE.TextPoint point = codeFunction.GetStartPoint();
// int offset = point.LineCharOffset;
//
// Assert.AreEqual(3, offset);
// }
//
// [Test]
// public void GetStartPoint_FunctionStartsAtLine2_ReturnsPointWithLine2()
// {
// CreatePublicFunction("Class1.MyFunction");
// SetDeclaringType("Class1");
// helper.FunctionStartsAtLine(2);
//
// global::EnvDTE.TextPoint point = codeFunction.GetStartPoint();
// int line = point.Line;
//
// Assert.AreEqual(2, line);
// }
//
// [Test]
// public void GetEndPoint_FunctionBodyEndsAtColumn4_ReturnsPointWithOffset4()
// {
// CreatePublicFunction("Class1.MyFunction");
// SetDeclaringType("Class1");
// helper.FunctionBodyEndsAtColumn(4);
//
// global::EnvDTE.TextPoint point = codeFunction.GetEndPoint();
// int offset = point.LineCharOffset;
//
// Assert.AreEqual(4, offset);
// }
//
// [Test]
// public void GetEndPoint_FunctionBodyEndsAtLine4_ReturnsPointWithLine4()
// {
// CreatePublicFunction("Class1.MyFunction");
// SetDeclaringType("Class1");
// helper.FunctionBodyEndsAtLine(4);
//
// global::EnvDTE.TextPoint point = codeFunction.GetEndPoint();
// int line = point.Line;
//
// Assert.AreEqual(4, line);
// }
//
// [Test]
// public void Kind_PublicFunction_ReturnsFunction()
// {
// CreatePublicFunction("MyFunction");
//
// global::EnvDTE.vsCMElement kind = codeFunction.Kind;
//
// Assert.AreEqual(global::EnvDTE.vsCMElement.vsCMElementFunction, kind);
// }
//
// [Test]
// public void GetEndPoint_InterfaceMethod_ReturnsMethodsDeclarationRegionEndNotBodyRegionEnd()
// {
// CreatePublicFunction("MyInterface.MyMethod");
// SetDeclaringTypeAsInterface("MyInterface");
// helper.SetRegion(new DomRegion(1, 1, 1, 10));
// helper.SetBodyRegion(new DomRegion(1, 10, 0, 0));
//
// global::EnvDTE.TextPoint point = codeFunction.GetEndPoint();
//
// Assert.AreEqual(1, point.Line);
// Assert.AreEqual(10, point.LineCharOffset);
// }
//
// [Test]
// public void Parameters_MethodHasNoParameters_ReturnsEmptyListOfItems()
// {
// CreatePublicFunction("MyClass.MyMethod");
//
// global::EnvDTE.CodeElements parameters = codeFunction.Parameters;
//
// Assert.AreEqual(0, parameters.Count);
// }
//
// [Test]
// public void Parameters_MethodHasOneParameter_ReturnsOneCodeParameter2()
// {
// AddParameterToMethod("test");
// CreatePublicFunction("MyClass.MyMethod");
//
// CodeParameter2 parameter = codeFunction.Parameters.FirstCodeParameter2OrDefault();
//
// Assert.AreEqual("test", parameter.Name);
// }
//
// [Test]
// public void Parameters_MethodHasOneStringParameter_ReturnsOneCodeParameterWithStringType()
// {
// AddParameterToMethod("System.String", "test");
// CreatePublicFunction("MyClass.MyMethod");
//
// CodeParameter parameter = codeFunction.Parameters.FirstCodeParameterOrDefault();
//
// Assert.AreEqual("System.String", parameter.Type.AsFullName);
// }
//
// [Test]
// public void Parameters_MethodHasOneStringParameter_CreatesCodeParameterWithProjectContent()
// {
// AddParameterToMethod("System.String", "test");
// CreatePublicFunction("MyClass.MyMethod");
//
// CodeParameter parameter = codeFunction.Parameters.FirstCodeParameterOrDefault();
//
// Assert.AreEqual("string", parameter.Type.AsString);
// }
//
// [Test]
// public void Parameters_MethodHasOneStringParameter_CreatesCodeParameterWithCodeTypeRefThatHasParameterAsParent()
// {
// AddParameterToMethod("System.String", "test");
// CreatePublicFunction("MyClass.MyMethod");
//
// CodeParameter parameter = codeFunction.Parameters.FirstCodeParameterOrDefault();
//
// Assert.AreEqual(parameter, parameter.Type.Parent);
// }
//
// [Test]
// public void Type_MethodReturnsString_TypeRefHasSystemStringAsFullName()
// {
// CreatePublicFunction("MyClass.MyFunction");
// AddReturnTypeToMethod("System.String");
//
// global::EnvDTE.CodeTypeRef2 typeRef = codeFunction.Type;
//
// Assert.AreEqual("System.String", typeRef.AsFullName);
// }
//
// [Test]
// public void Type_MethodReturnsString_TypeRefUsesProjectContentFromMethod()
// {
// CreatePublicFunction("MyClass.MyFunction");
// AddReturnTypeToMethod("System.String");
//
// global::EnvDTE.CodeTypeRef2 typeRef = codeFunction.Type;
//
// Assert.AreEqual("string", typeRef.AsString);
// }
//
// [Test]
// public void Type_MethodReturnsString_TypeRefParentIsCodeFunction()
// {
// CreatePublicFunction("MyClass.MyFunction");
// AddReturnTypeToMethod("System.String");
//
// global::EnvDTE.CodeTypeRef2 typeRef = codeFunction.Type;
//
// Assert.AreEqual(codeFunction, typeRef.Parent);
// }
//
// [Test]
// public void FunctionKind_ClassMethod_ReturnsFunctionKind()
// {
// CreatePublicFunction("MyClass.MyFunction");
//
// global::EnvDTE.vsCMFunction kind = codeFunction.FunctionKind;
//
// Assert.AreEqual(global::EnvDTE.vsCMFunction.vsCMFunctionFunction, kind);
// }
//
// [Test]
// public void FunctionKind_ClassConstructor_ReturnsConstructorKind()
// {
// CreatePublicConstructor("MyClass.MyClass");
//
// global::EnvDTE.vsCMFunction kind = codeFunction.FunctionKind;
//
// Assert.AreEqual(global::EnvDTE.vsCMFunction.vsCMFunctionConstructor, kind);
// }
//
// [Test]
// public void IsShared_StaticMethod_ReturnsTrue()
// {
// CreatePublicFunction("MyClass.MyFunction");
// MakeMethodStatic();
//
// bool shared = codeFunction.IsShared;
//
// Assert.IsTrue(shared);
// }
//
// [Test]
// public void IsShared_MethodIsNotStatic_ReturnsFalse()
// {
// CreatePublicFunction("MyClass.MyFunction");
//
// bool shared = codeFunction.IsShared;
//
// Assert.IsFalse(shared);
// }
//
// [Test]
// public void MustImplement_AbstractMethod_ReturnsTrue()
// {
// CreatePublicFunction("MyClass.MyFunction");
// MakeMethodAbstract();
//
// bool mustImplement = codeFunction.MustImplement;
//
// Assert.IsTrue(mustImplement);
// }
//
// [Test]
// public void MustImplement_MethodIsNotAbstract_ReturnsFalse()
// {
// CreatePublicFunction("MyClass.MyFunction");
//
// bool mustImplement = codeFunction.MustImplement;
//
// Assert.IsFalse(mustImplement);
// }
//
// [Test]
// public void CanOverride_MethodIsOverridable_ReturnsTrue()
// {
// CreatePublicFunction("MyClass.MyFunction");
// MakeMethodOverridable();
//
// bool canOverride = codeFunction.CanOverride;
//
// Assert.IsTrue(canOverride);
// }
//
// [Test]
// public void CanOverride_MethodIsNotAbstractOrVirtual_ReturnsFalse()
// {
// CreatePublicFunction("MyClass.MyFunction");
//
// bool canOverride = codeFunction.CanOverride;
//
// Assert.IsFalse(canOverride);
// }
//
// [Test]
// public void Attributes_MethodHasOneAttribute_ReturnsOneAttribute()
// {
// CreatePublicFunction("MyClass.MyFunction");
// AddMethodAttribute("System.ObsoleteAttribute");
//
// global::EnvDTE.CodeElements attributes = codeFunction.Attributes;
//
// CodeAttribute2 attribute = attributes.FirstCodeAttribute2OrDefault();
// Assert.AreEqual(1, attributes.Count);
// Assert.AreEqual("System.ObsoleteAttribute", attribute.FullName);
// }
//
// [Test]
// public void CanOverride_SetToTrueForFunction_VirtualKeywordAddedToFunction()
// {
// CreatePublicFunction("MyClass.MyFunction");
//
// codeFunction.CanOverride = true;
//
// methodUpdater.AssertWasCalled(updater => updater.MakeMethodVirtual());
// }
//
// [Test]
// public void CanOverride_SetToFalseForFunction_VirtualKeywordNotAddedToFunction()
// {
// CreatePublicFunction("MyClass.MyFunction");
//
// codeFunction.CanOverride = false;
//
// methodUpdater.AssertWasNotCalled(updater => updater.MakeMethodVirtual());
// }
// }
//}
using System;
using System.Linq;
using ICSharpCode.NRefactory.TypeSystem;
using ICSharpCode.PackageManagement;
using ICSharpCode.PackageManagement.EnvDTE;
using NUnit.Framework;
using Rhino.Mocks;
using PackageManagement.Tests.Helpers;
namespace PackageManagement.Tests.EnvDTE
{
[TestFixture]
public class CodeFunctionTests : CodeModelTestBase
{
CodeFunction codeFunction;
void CreateFunction(string code)
{
AddCodeFile("class.cs", code);
IMethod method = assemblyModel
.TopLevelTypeDefinitions
.First()
.Members
.First()
.Resolve() as IMethod;
codeFunction = new CodeFunction(codeModelContext, method);
}
[Test]
public void Access_PublicFunction_ReturnsPublic()
{
CreateFunction(
"public class Class1 {\r\n" +
" public void MyFunction() {}\r\n" +
"}");
global::EnvDTE.vsCMAccess access = codeFunction.Access;
Assert.AreEqual(global::EnvDTE.vsCMAccess.vsCMAccessPublic, access);
}
[Test]
public void Access_PrivateFunction_ReturnsPrivate()
{
CreateFunction(
"public class Class1 {\r\n" +
" private void MyFunction() {}\r\n" +
"}");
global::EnvDTE.vsCMAccess access = codeFunction.Access;
Assert.AreEqual(global::EnvDTE.vsCMAccess.vsCMAccessPrivate, access);
}
[Test]
public void GetStartPoint_FunctionStartsAtColumnOne_ReturnsPointWithOffsetOne()
{
CreateFunction(
"public class Class1 {\r\n" +
"public void MyFunction() {}\r\n" +
"}");
global::EnvDTE.TextPoint point = codeFunction.GetStartPoint();
int offset = point.LineCharOffset;
Assert.AreEqual(1, offset);
}
[Test]
public void GetStartPoint_FunctionStartsAtLine2_ReturnsPointWithLine2()
{
CreateFunction(
"public class Class1 {\r\n" +
" public void MyFunction() {}\r\n" +
"}");
global::EnvDTE.TextPoint point = codeFunction.GetStartPoint();
int line = point.Line;
Assert.AreEqual(2, line);
}
[Test]
public void GetEndPoint_FunctionBodyEndsAtColumnTwo_ReturnsPointWithOffsetTwo()
{
CreateFunction(
"public class Class1 {\r\n" +
" public void MyFunction() {\r\n" +
"}\r\n" +
"}");
global::EnvDTE.TextPoint point = codeFunction.GetEndPoint();
int offset = point.LineCharOffset;
Assert.AreEqual(2, offset);
}
[Test]
public void GetEndPoint_FunctionBodyEndsAtLine4_ReturnsPointWithLine4()
{
CreateFunction(
"public class Class1 {\r\n" +
" public void MyFunction()\r\n" +
" {\r\n" +
" }\r\n" +
"}");
global::EnvDTE.TextPoint point = codeFunction.GetEndPoint();
int line = point.Line;
Assert.AreEqual(4, line);
}
[Test]
public void Kind_PublicFunction_ReturnsFunction()
{
CreateFunction(
"public class Class1 {\r\n" +
" public void MyFunction() {}\r\n" +
"}");
global::EnvDTE.vsCMElement kind = codeFunction.Kind;
Assert.AreEqual(global::EnvDTE.vsCMElement.vsCMElementFunction, kind);
}
[Test]
public void GetEndPoint_InterfaceMethod_ReturnsMethodsDeclarationRegionEndNotBodyRegionEnd()
{
CreateFunction(
"public interface Foo {\r\n" +
" void Bar();\r\n" +
"}");
global::EnvDTE.TextPoint point = codeFunction.GetEndPoint();
Assert.AreEqual(2, point.Line);
Assert.AreEqual(16, point.LineCharOffset);
}
[Test]
public void Parameters_MethodHasNoParameters_ReturnsEmptyListOfItems()
{
CreateFunction(
"public class Class1 {\r\n" +
" public void MyFunction() {}\r\n" +
"}");
global::EnvDTE.CodeElements parameters = codeFunction.Parameters;
Assert.AreEqual(0, parameters.Count);
}
[Test]
public void Parameters_MethodHasOneParameter_ReturnsOneCodeParameter2()
{
CreateFunction(
"public class MyClass {\r\n" +
" public void MyMethod(int test) {}\r\n" +
"}");
CodeParameter2 parameter = codeFunction.Parameters.FirstCodeParameter2OrDefault();
Assert.AreEqual("test", parameter.Name);
}
[Test]
public void Parameters_MethodHasOneStringParameter_ReturnsOneCodeParameterWithStringType()
{
CreateFunction(
"using System;\r\n" +
"public class MyClass {\r\n" +
" public void MyMethod(string test) {}\r\n" +
"}");
CodeParameter parameter = codeFunction.Parameters.FirstCodeParameterOrDefault();
Assert.AreEqual("System.String", parameter.Type.AsFullName);
Assert.AreEqual("string", parameter.Type.AsString);
}
[Test]
public void Parameters_MethodHasOneStringParameter_CreatesCodeParameterWithContext()
{
CreateFunction(
"public class MyClass {\r\n" +
" public void MyMethod(System.String test) {}\r\n" +
"}");
CodeParameter parameter = codeFunction.Parameters.FirstCodeParameterOrDefault();
global::EnvDTE.TextPoint textPoint = parameter.Type.CodeType.GetStartPoint();
Assert.IsNotNull(textPoint);
}
[Test]
public void Parameters_MethodHasOneStringParameter_CreatesCodeParameterWithCodeTypeRefThatHasParameterAsParent()
{
CreateFunction(
"using System;\r\n" +
"public class MyClass {\r\n" +
" public void MyMethod(string test) {}\r\n" +
"}");
CodeParameter parameter = codeFunction.Parameters.FirstCodeParameterOrDefault();
Assert.AreEqual(parameter, parameter.Type.Parent);
}
[Test]
public void Type_MethodReturnsString_TypeRefHasSystemStringAsFullName()
{
CreateFunction(
"using System;\r\n" +
"public class MyClass {\r\n" +
" public string MyMethod() {}\r\n" +
"}");
global::EnvDTE.CodeTypeRef2 typeRef = codeFunction.Type;
Assert.AreEqual("System.String", typeRef.AsFullName);
Assert.AreEqual("string", typeRef.AsString);
}
[Test]
public void Type_MethodReturnsString_TypeRefUsesProjectContentFromMethod()
{
CreateFunction(
"using System;\r\n" +
"public class MyClass {\r\n" +
" public string MyMethod() {}\r\n" +
"}");
global::EnvDTE.CodeTypeRef2 typeRef = codeFunction.Type;
global::EnvDTE.TextPoint textPoint = typeRef.CodeType.GetStartPoint();
Assert.IsNotNull(textPoint);
}
[Test]
public void Type_MethodReturnsString_TypeRefParentIsCodeFunction()
{
CreateFunction(
"using System;\r\n" +
"public class MyClass {\r\n" +
" public string MyMethod() {}\r\n" +
"}");
global::EnvDTE.CodeTypeRef2 typeRef = codeFunction.Type;
Assert.AreEqual(codeFunction, typeRef.Parent);
}
[Test]
public void FunctionKind_ClassMethod_ReturnsFunctionKind()
{
CreateFunction(
"public class MyClass {\r\n" +
" public void MyMethod() {}\r\n" +
"}");
global::EnvDTE.vsCMFunction kind = codeFunction.FunctionKind;
Assert.AreEqual(global::EnvDTE.vsCMFunction.vsCMFunctionFunction, kind);
}
[Test]
public void FunctionKind_ClassConstructor_ReturnsConstructorKind()
{
CreateFunction(
"public class MyClass {\r\n" +
" public MyClass() {}\r\n" +
"}");
global::EnvDTE.vsCMFunction kind = codeFunction.FunctionKind;
Assert.AreEqual(global::EnvDTE.vsCMFunction.vsCMFunctionConstructor, kind);
}
[Test]
public void IsShared_StaticMethod_ReturnsTrue()
{
CreateFunction(
"public class MyClass {\r\n" +
" public static void MyFunction() {}\r\n" +
"}");
bool shared = codeFunction.IsShared;
Assert.IsTrue(shared);
}
[Test]
public void IsShared_MethodIsNotStatic_ReturnsFalse()
{
CreateFunction(
"public class MyClass {\r\n" +
" public void MyFunction() {}\r\n" +
"}");
bool shared = codeFunction.IsShared;
Assert.IsFalse(shared);
}
[Test]
public void MustImplement_AbstractMethod_ReturnsTrue()
{
CreateFunction(
"public class MyClass {\r\n" +
" public abstract void MyFunction();\r\n" +
"}");
bool mustImplement = codeFunction.MustImplement;
Assert.IsTrue(mustImplement);
}
[Test]
public void MustImplement_MethodIsNotAbstract_ReturnsFalse()
{
CreateFunction(
"public class MyClass {\r\n" +
" public void MyFunction() {}\r\n" +
"}");
bool mustImplement = codeFunction.MustImplement;
Assert.IsFalse(mustImplement);
}
[Test]
public void CanOverride_MethodIsOverridable_ReturnsTrue()
{
CreateFunction(
"public class MyClass {\r\n" +
" public virtual void MyFunction() {}\r\n" +
"}");
bool canOverride = codeFunction.CanOverride;
Assert.IsTrue(canOverride);
}
[Test]
public void CanOverride_MethodIsNotAbstractOrVirtual_ReturnsFalse()
{
CreateFunction(
"public class MyClass {\r\n" +
" public void MyFunction() {}\r\n" +
"}");
bool canOverride = codeFunction.CanOverride;
Assert.IsFalse(canOverride);
}
[Test]
public void Attributes_MethodHasOneAttribute_ReturnsOneAttribute()
{
CreateFunction(
"using System;\r\n" +
"public class MyClass {\r\n" +
" [Obsolete]\r\n" +
" public void MyFunction() {}\r\n" +
"}");
global::EnvDTE.CodeElements attributes = codeFunction.Attributes;
CodeAttribute2 attribute = attributes.FirstCodeAttribute2OrDefault();
Assert.AreEqual(1, attributes.Count);
Assert.AreEqual("System.ObsoleteAttribute", attribute.FullName);
}
[Test]
public void CanOverride_SetToTrueForFunction_VirtualKeywordAddedToFunction()
{
CreateFunction(
"public class MyClass {\r\n" +
" public void MyFunction() {}\r\n" +
"}");
codeFunction.CanOverride = true;
codeGenerator.AssertWasCalled(generator => generator.MakeVirtual(
Arg<IMember>.Matches(member => member.Name == "MyFunction")));
}
[Test]
public void CanOverride_SetToFalseForFunction_VirtualKeywordNotAddedToFunction()
{
CreateFunction(
"public class MyClass {\r\n" +
" public void MyFunction() {}\r\n" +
"}");
codeFunction.CanOverride = false;
codeGenerator.AssertWasNotCalled(generator => generator.MakeVirtual(
Arg<IMember>.Is.Anything));
}
[Test]
public void CanOverride_SetToTrueForFunctionThatIsAlreadyVirtual_VirtualKeywordNotAddedToFunction()
{
CreateFunction(
"public class MyClass {\r\n" +
" public virtual void MyFunction() {}\r\n" +
"}");
codeFunction.CanOverride = true;
codeGenerator.AssertWasNotCalled(generator => generator.MakeVirtual(
Arg<IMember>.Is.Anything));
}
}
}

66
src/AddIns/Misc/PackageManagement/Test/Src/EnvDTE/CodeImportTests.cs

@ -1,66 +0,0 @@ @@ -1,66 +0,0 @@
// Copyright (c) 2014 AlphaSierraPapa for the SharpDevelop Team
//
// Permission is hereby granted, free of charge, to any person obtaining a copy of this
// software and associated documentation files (the "Software"), to deal in the Software
// without restriction, including without limitation the rights to use, copy, modify, merge,
// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons
// to whom the Software is furnished to do so, subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included in all copies or
// substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE
// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
// DEALINGS IN THE SOFTWARE.
//using System;
//using ICSharpCode.PackageManagement.EnvDTE;
//using NUnit.Framework;
//using PackageManagement.Tests.Helpers;
//using Rhino.Mocks;
//
//namespace PackageManagement.Tests.EnvDTE
//{
// [TestFixture]
// public class CodeImportTests
// {
// CodeImport codeImport;
// UsingHelper helper;
//
// void CreateCodeImport(string namespaceName)
// {
// helper = new UsingHelper();
// helper.AddNamespace(namespaceName);
// codeImport = new CodeImport(helper.Using);
// }
//
// void CreateCodeImportWithNoNamespace()
// {
// helper = new UsingHelper();
// codeImport = new CodeImport(helper.Using);
// }
//
// [Test]
// public void Kind_SystemXmlNamespace_ReturnsImport()
// {
// CreateCodeImport("System.Xml");
//
// global::EnvDTE.vsCMElement kind = codeImport.Kind;
//
// Assert.AreEqual(global::EnvDTE.vsCMElement.vsCMElementImportStmt, kind);
// }
//
// [Test]
// public void Namespace_UsingHasNoNamespacesAndAliasesIsNull_ReturnsEmptyString()
// {
// CreateCodeImportWithNoNamespace();
//
// string name = codeImport.Namespace;
//
// Assert.AreEqual(String.Empty, name);
// }
// }
//}

68
src/AddIns/Misc/PackageManagement/Test/Src/EnvDTE/CodeInterfaceTests.cs

@ -16,40 +16,34 @@ @@ -16,40 +16,34 @@
// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
// DEALINGS IN THE SOFTWARE.
//using System;
//using ICSharpCode.PackageManagement.EnvDTE;
//using ICSharpCode.SharpDevelop.Dom;
//using NUnit.Framework;
//using PackageManagement.Tests.Helpers;
//
//namespace PackageManagement.Tests.EnvDTE
//{
// [TestFixture]
// public class CodeInterfaceTests
// {
// ProjectContentHelper helper;
// CodeInterface codeInterface;
//
// [SetUp]
// public void Init()
// {
// helper = new ProjectContentHelper();
// }
//
// void CreateInterface()
// {
// IClass c = helper.AddInterfaceToProjectContent("MyInterface");
// codeInterface = new CodeInterface(helper.ProjectContent, c);
// }
//
// [Test]
// public void Kind_Interface_ReturnsInterface()
// {
// CreateInterface();
//
// global::EnvDTE.vsCMElement kind = codeInterface.Kind;
//
// Assert.AreEqual(global::EnvDTE.vsCMElement.vsCMElementInterface, kind);
// }
// }
//}
using System;
using System.Linq;
using ICSharpCode.NRefactory.TypeSystem;
using ICSharpCode.PackageManagement.EnvDTE;
using NUnit.Framework;
namespace PackageManagement.Tests.EnvDTE
{
[TestFixture]
public class CodeInterfaceTests : CodeModelTestBase
{
CodeInterface codeInterface;
void CreateInterface(string code)
{
AddCodeFile("interface.cs", code);
ITypeDefinition typeDefinition = assemblyModel.TopLevelTypeDefinitions.First().Resolve();
codeInterface = new CodeInterface(codeModelContext, typeDefinition);
}
[Test]
public void Kind_Interface_ReturnsInterface()
{
CreateInterface("interface MyInterface {}");
global::EnvDTE.vsCMElement kind = codeInterface.Kind;
Assert.AreEqual(global::EnvDTE.vsCMElement.vsCMElementInterface, kind);
}
}
}

49
src/AddIns/Misc/PackageManagement/Test/Src/EnvDTE/CodeModelTestBase.cs

@ -17,14 +17,14 @@ @@ -17,14 +17,14 @@
// DEALINGS IN THE SOFTWARE.
using System;
using ICSharpCode.NRefactory.CSharp;
using ICSharpCode.NRefactory.TypeSystem;
using ICSharpCode.NRefactory.TypeSystem.Implementation;
using ICSharpCode.PackageManagement;
using ICSharpCode.PackageManagement.EnvDTE;
using ICSharpCode.SharpDevelop;
using ICSharpCode.SharpDevelop.Dom;
using ICSharpCode.SharpDevelop.Project;
using ICSharpCode.SharpDevelop.Refactoring;
using NUnit.Framework;
using PackageManagement.Tests.Helpers;
using Rhino.Mocks;
namespace PackageManagement.Tests.EnvDTE
@ -34,16 +34,55 @@ namespace PackageManagement.Tests.EnvDTE @@ -34,16 +34,55 @@ namespace PackageManagement.Tests.EnvDTE
protected CodeGenerator codeGenerator;
protected CodeModelContext codeModelContext;
protected string projectLanguage = "C#";
protected ILanguageBinding languageBinding;
public override void SetUp()
{
base.SetUp();
project.Stub(p => p.Language).Return(null).WhenCalled(mi => mi.ReturnValue = projectLanguage);
codeGenerator = MockRepository.GenerateStrictMock<CodeGenerator>();
codeGenerator = MockRepository.GenerateMock<CodeGenerator>();
languageBinding = MockRepository.GenerateMock<ILanguageBinding>();
languageBinding.Stub(binding => binding.CodeGenerator).Return(codeGenerator);
project.Stub(p => p.LanguageBinding).Return(languageBinding);
codeModelContext = new CodeModelContext {
CodeGenerator = codeGenerator,
CurrentProject = project
};
}
protected CodeModel codeModel;
protected Project dteProject;
protected IPackageManagementProjectService projectService;
protected IPackageManagementFileService fileService;
protected TestableProject msbuildProject;
protected void CreateCodeModel()
{
msbuildProject = ProjectHelper.CreateTestProject();
projectService = MockRepository.GenerateStub<IPackageManagementProjectService>();
fileService = MockRepository.GenerateStub<IPackageManagementFileService>();
dteProject = new Project(msbuildProject, projectService, fileService);
codeModelContext.DteProject = dteProject;
codeModel = new CodeModel(codeModelContext, dteProject);
msbuildProject.SetAssemblyModel(assemblyModel);
project.Stub(p => p.AssemblyModel).Return(assemblyModel);
fileService
.Stub(fs => fs.GetCompilationUnit(msbuildProject))
.WhenCalled(compilation => compilation.ReturnValue = CreateCompilation());
}
ICompilation CreateCompilation()
{
var solutionSnapshot = new TestableSolutionSnapshot(msbuildProject);
msbuildProject.SetProjectContent(projectContent);
ICompilation compilation = new SimpleCompilation(solutionSnapshot, projectContent, projectContent.AssemblyReferences);
solutionSnapshot.AddCompilation(projectContent, compilation);
return compilation;
}
}
}

499
src/AddIns/Misc/PackageManagement/Test/Src/EnvDTE/CodeModelTests.cs

@ -16,280 +16,225 @@ @@ -16,280 +16,225 @@
// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
// DEALINGS IN THE SOFTWARE.
//using System;
//using System.Collections.Generic;
//using System.Linq;
//using ICSharpCode.PackageManagement.EnvDTE;
//using ICSharpCode.SharpDevelop.Dom;
//using NUnit.Framework;
//using PackageManagement.Tests.Helpers;
//using Rhino.Mocks;
//
//namespace PackageManagement.Tests.EnvDTE
//{
// [TestFixture]
// public class CodeModelTests
// {
// CodeModel codeModel;
// ProjectContentHelper helper;
// TestableProject msbuildProject;
//
// void CreateCodeModel()
// {
// CreateProjectContentHelper();
// CreateProjectForProjectContent();
// CreateCodeModel(helper.ProjectContent);
// }
//
// void CreateProjectForProjectContent()
// {
// msbuildProject = ProjectHelper.CreateTestProject();
// helper.SetProjectForProjectContent(msbuildProject);
// }
//
// void CreateProjectContentHelper()
// {
// helper = new ProjectContentHelper();
// }
//
// void CreateCodeModel(IProjectContent projectContent)
// {
// codeModel = new CodeModel(projectContent);
// }
//
// void CreateCodeModelWithCSharpProject()
// {
// CreateProjectContentHelper();
// helper.ProjectContentIsForCSharpProject();
// CreateCodeModel(helper.ProjectContent);
// }
//
// void CreateCodeModelWithVisualBasicProject()
// {
// CreateProjectContentHelper();
// helper.ProjectContentIsForVisualBasicProject();
// CreateCodeModel(helper.ProjectContent);
// }
//
// void AddClassToProjectContent(string className)
// {
// helper.AddClassToProjectContent(className);
// }
//
// void AddClassToDifferentProjectContent(string className)
// {
// helper.AddClassToDifferentProjectContent(className);
// }
//
// void AddClassToProjectContent(string namespaceName, string className)
// {
// helper.AddClassToProjectContentAndCompletionEntries(namespaceName, className);
// }
//
// void AddInterfaceToProjectContent(string interfaceName)
// {
// helper.AddInterfaceToProjectContent(interfaceName);
// }
//
// void AddInterfaceToDifferentProjectContent(string interfaceName)
// {
// helper.AddInterfaceToDifferentProjectContent(interfaceName);
// }
//
// void ProjectIsCSharpProject()
// {
// helper.ProjectContentIsForCSharpProject();
// }
//
// void ProjectIsVisualBasicProject()
// {
// helper.ProjectContentIsForVisualBasicProject();
// }
//
// [Test]
// public void CodeTypeFromFullName_NoSuchTypeInProject_ReturnsNull()
// {
// CreateCodeModel();
//
// global::EnvDTE.CodeType codeType = codeModel.CodeTypeFromFullName("UnknownType");
//
// Assert.IsNull(codeType);
// }
//
// [Test]
// public void CodeTypeFromFullName_ClassExistsInProject_ReturnsCodeClass2()
// {
// CreateCodeModel();
// AddClassToProjectContent("Tests.TestClass");
//
// var codeClass = codeModel.CodeTypeFromFullName("Tests.TestClass") as CodeClass2;
//
// Assert.AreEqual("Tests.TestClass", codeClass.FullName);
// Assert.AreEqual("TestClass", codeClass.Name);
// }
//
// [Test]
// public void CodeTypeFromFullName_ClassWithoutNamespaceExistsInProject_ReturnsCodeClass2()
// {
// CreateCodeModel();
// AddClassToProjectContent("TestClass");
//
// var codeClass = codeModel.CodeTypeFromFullName("TestClass") as CodeClass2;
//
// Assert.AreEqual("TestClass", codeClass.FullName);
// }
//
// [Test]
// public void CodeTypeFromFullName_InterfaceExistsInProject_ReturnsCodeInterface()
// {
// CreateCodeModel();
// AddInterfaceToProjectContent("Interface1");
//
// var codeInterface = codeModel.CodeTypeFromFullName("Interface1") as CodeInterface;
//
// Assert.AreEqual("Interface1", codeInterface.FullName);
// }
//
// [Test]
// public void CodeElements_OneNamespaceInProject_ReturnsOneCodeNamespaceItem()
// {
// CreateCodeModel();
// helper.AddNamespaceCompletionEntryInNamespace(String.Empty, "Test");
//
// global::EnvDTE.CodeElements codeElements = codeModel.CodeElements;
// global::EnvDTE.CodeNamespace codeNamespace = codeElements.FirstCodeNamespaceOrDefault();
//
// Assert.AreEqual(1, codeElements.Count);
// Assert.AreEqual("Test", codeNamespace.FullName);
// Assert.AreEqual("Test", codeNamespace.Name);
// }
//
// [Test]
// public void CodeElements_OneNamespaceInProjectWithTwoPartsToName_ReturnsOneCodeNamespaceItemWithFirstPartOfNamespaceAsName()
// {
// CreateCodeModel();
// helper.AddNamespaceCompletionEntryInNamespace(String.Empty, "First");
// helper.AddNamespaceCompletionEntryInNamespace("First", "Second");
//
// global::EnvDTE.CodeElements codeElements = codeModel.CodeElements;
// global::EnvDTE.CodeNamespace codeNamespace = codeElements.FirstCodeNamespaceOrDefault();
//
// Assert.AreEqual(1, codeElements.Count);
// Assert.AreEqual("First", codeNamespace.FullName);
// Assert.AreEqual("First", codeNamespace.Name);
// }
//
// [Test]
// public void CodeElements_OneClassWithNoNamespaceInProject_ReturnsOneCodeClassItem()
// {
// CreateCodeModel();
// AddClassToProjectContent(String.Empty, "TestClass");
//
// global::EnvDTE.CodeElements codeElements = codeModel.CodeElements;
// CodeClass2 codeClass = codeElements.FirstCodeClass2OrDefault();
//
// Assert.AreEqual(1, codeElements.Count);
// Assert.AreEqual("TestClass", codeClass.FullName);
// }
//
// [Test]
// public void CodeElements_TwoNamespacesInProjectWithFirstPartsTheName_ReturnsOneParentNamespaceWithTwoChildNamespaces()
// {
// CreateCodeModel();
// helper.AddNamespaceCompletionEntryInNamespace(String.Empty, "First");
// helper.AddNamespaceCompletionEntriesInNamespace("First", "A", "B");
// helper.NoCompletionItemsInNamespace("First.A");
// helper.NoCompletionItemsInNamespace("First.B");
//
// global::EnvDTE.CodeElements codeElements = codeModel.CodeElements;
// CodeNamespace codeNamespace = codeElements.FirstCodeNamespaceOrDefault();
//
// global::EnvDTE.CodeElements members = codeNamespace.Members;
// CodeNamespace firstChildNamespace = members.FirstCodeNamespaceOrDefault();
// CodeNamespace secondChildNamespace = members.LastCodeNamespaceOrDefault();
//
// Assert.AreEqual(1, codeElements.Count);
// Assert.AreEqual("First", codeNamespace.FullName);
// Assert.AreEqual(2, codeNamespace.Members.Count);
// Assert.AreEqual("A", firstChildNamespace.Name);
// Assert.AreEqual("B", secondChildNamespace.Name);
// }
//
// [Test]
// public void CodeElements_ProjectHasEmptyNamespaceName_EmptyNamespaceNameNotIncludedInMembers()
// {
// CreateCodeModel();
// helper.AddNamespaceCompletionEntriesInNamespace(String.Empty, String.Empty, "Tests");
//
// global::EnvDTE.CodeElements members = codeModel.CodeElements;
// CodeNamespace codeNamespace = members.FirstCodeNamespaceOrDefault();
//
// Assert.AreEqual(1, members.Count);
// Assert.AreEqual("Tests", codeNamespace.Name);
// }
//
// [Test]
// public void CodeTypeFromFullName_ClassExistsInProject_InfoLocationIsLocalProject()
// {
// CreateCodeModel();
// AddClassToProjectContent("Tests.TestClass");
//
// var codeClass = codeModel.CodeTypeFromFullName("Tests.TestClass") as CodeClass2;
//
// Assert.AreEqual(global::EnvDTE.vsCMInfoLocation.vsCMInfoLocationProject, codeClass.InfoLocation);
// }
//
// [Test]
// public void CodeTypeFromFullName_ClassExistsInDifferentProject_InfoLocationIsExternal()
// {
// CreateCodeModel();
// AddClassToDifferentProjectContent("Tests.TestClass");
//
// var codeClass = codeModel.CodeTypeFromFullName("Tests.TestClass") as CodeClass2;
//
// Assert.AreEqual(global::EnvDTE.vsCMInfoLocation.vsCMInfoLocationExternal, codeClass.InfoLocation);
// }
//
// [Test]
// public void CodeTypeFromFullName_InterfaceExistsInProject_InfoLocationIsLocalProject()
// {
// CreateCodeModel();
// AddInterfaceToProjectContent("Tests.ITest");
//
// var codeInterface = codeModel.CodeTypeFromFullName("Tests.ITest") as CodeInterface;
//
// Assert.AreEqual(global::EnvDTE.vsCMInfoLocation.vsCMInfoLocationProject, codeInterface.InfoLocation);
// }
//
// [Test]
// public void CodeTypeFromFullName_InterfaceExistsInDifferentProject_InfoLocationIsExternal()
// {
// CreateCodeModel();
// AddInterfaceToDifferentProjectContent("Tests.ITest");
//
// var codeInterface = codeModel.CodeTypeFromFullName("Tests.ITest") as CodeInterface;
//
// Assert.AreEqual(global::EnvDTE.vsCMInfoLocation.vsCMInfoLocationExternal, codeInterface.InfoLocation);
// }
//
// [Test]
// public void Language_CSharpProject_ReturnsCSharpProjectGuid()
// {
// CreateCodeModelWithCSharpProject();
//
// string language = codeModel.Language;
//
// Assert.AreEqual(global::EnvDTE.CodeModelLanguageConstants.vsCMLanguageCSharp, language);
// }
//
// [Test]
// public void Language_VisualBasicProject_ReturnsVisualBasicProjectGuid()
// {
// CreateCodeModelWithVisualBasicProject();
//
// string language = codeModel.Language;
//
// Assert.AreEqual(global::EnvDTE.CodeModelLanguageConstants.vsCMLanguageVB, language);
// }
// }
//}
using System;
using System.Linq;
using ICSharpCode.Core;
using ICSharpCode.PackageManagement.EnvDTE;
using NUnit.Framework;
using PackageManagement.Tests.Helpers;
namespace PackageManagement.Tests.EnvDTE
{
[TestFixture]
public class CodeModelTests : CodeModelTestBase
{
void CreateCodeModelWithCSharpProject()
{
CreateCodeModel();
msbuildProject.FileName = new FileName(@"c:\projects\MyProject.csproj");
}
void CreateCodeModelWithVisualBasicProject()
{
CreateCodeModel();
msbuildProject.FileName = new FileName(@"c:\projects\MyProject.vbproj");
}
void AddClassToProject(string code)
{
AddCodeFile("class.cs", code);
}
[Test]
public void CodeTypeFromFullName_NoSuchTypeInProject_ReturnsNull()
{
CreateCodeModel();
global::EnvDTE.CodeType codeType = codeModel.CodeTypeFromFullName("UnknownType");
Assert.IsNull(codeType);
}
[Test]
public void CodeTypeFromFullName_ClassExistsInProject_ReturnsCodeClass2()
{
CreateCodeModel();
AddClassToProject(
"namespace Tests {\r\n" +
" public class TestClass {} \r\n" +
"}");
var codeClass = codeModel.CodeTypeFromFullName("Tests.TestClass") as CodeClass2;
Assert.AreEqual("Tests.TestClass", codeClass.FullName);
Assert.AreEqual("TestClass", codeClass.Name);
}
[Test]
public void CodeTypeFromFullName_ClassWithoutNamespaceExistsInProject_ReturnsCodeClass2()
{
CreateCodeModel();
AddClassToProject("public class TestClass {}");
var codeClass = codeModel.CodeTypeFromFullName("TestClass") as CodeClass2;
Assert.AreEqual("TestClass", codeClass.FullName);
}
[Test]
public void CodeTypeFromFullName_InterfaceExistsInProject_ReturnsCodeInterface()
{
CreateCodeModel();
AddClassToProject("public interface Interface1 {}");
var codeInterface = codeModel.CodeTypeFromFullName("Interface1") as CodeInterface;
Assert.AreEqual("Interface1", codeInterface.FullName);
}
[Test]
public void CodeElements_OneNamespaceInProject_ReturnsOneCodeNamespaceItem()
{
CreateCodeModel();
AddClassToProject("namespace Test {}");
global::EnvDTE.CodeElements codeElements = codeModel.CodeElements;
global::EnvDTE.CodeNamespace codeNamespace = codeElements
.FindFirstCodeNamespaceOrDefault(e => e.Name == "Test");
Assert.AreEqual("Test", codeNamespace.FullName);
Assert.AreEqual("Test", codeNamespace.Name);
}
[Test]
public void CodeElements_OneNamespaceInProjectWithTwoPartsToName_ReturnsOneCodeNamespaceItemWithFirstPartOfNamespaceAsName()
{
CreateCodeModel();
AddClassToProject("namespace First.Second {}");
global::EnvDTE.CodeElements codeElements = codeModel.CodeElements;
global::EnvDTE.CodeNamespace codeNamespace = codeElements
.FindFirstCodeNamespaceOrDefault(e => e.Name == "First");
global::EnvDTE.CodeNamespace secondCodeNamespace = codeNamespace.Members.FirstCodeNamespaceOrDefault();
Assert.AreEqual("First", codeNamespace.FullName);
Assert.AreEqual("First", codeNamespace.Name);
Assert.AreEqual("Second", secondCodeNamespace.Name);
Assert.AreEqual("First.Second", secondCodeNamespace.FullName);
}
[Test]
public void CodeElements_OneClassWithNoNamespaceInProject_ReturnsOneCodeClassItem()
{
CreateCodeModel();
AddClassToProject("public class TestClass { }");
global::EnvDTE.CodeElements codeElements = codeModel.CodeElements;
CodeClass2 codeClass = codeElements
.FindFirstCodeClass2OrDefault(e => e.FullName == "TestClass");
Assert.AreEqual("TestClass", codeClass.Name);
}
[Test]
public void CodeElements_TwoNamespacesInProjectWithFirstPartsTheName_ReturnsOneParentNamespaceWithTwoChildNamespaces()
{
CreateCodeModel();
string code =
"namespace First.A { }\r\n" +
"namespace First.B { }\r\n";
AddClassToProject(code);
global::EnvDTE.CodeElements codeElements = codeModel.CodeElements;
CodeNamespace codeNamespace = codeElements.FirstCodeNamespaceOrDefault();
global::EnvDTE.CodeElements members = codeNamespace.Members;
CodeNamespace firstChildNamespace = members.FirstCodeNamespaceOrDefault();
CodeNamespace secondChildNamespace = members.LastCodeNamespaceOrDefault();
Assert.AreEqual("First", codeNamespace.FullName);
Assert.AreEqual(2, codeNamespace.Members.Count);
Assert.AreEqual("A", firstChildNamespace.Name);
Assert.AreEqual("B", secondChildNamespace.Name);
}
[Test]
public void CodeTypeFromFullName_ClassExistsInProject_InfoLocationIsLocalProject()
{
CreateCodeModel();
AddClassToProject(
"namespace Tests {\r\n" +
" public class TestClass {} \r\n" +
"}");
var codeClass = codeModel.CodeTypeFromFullName("Tests.TestClass") as CodeClass2;
Assert.AreEqual(global::EnvDTE.vsCMInfoLocation.vsCMInfoLocationProject, codeClass.InfoLocation);
}
[Test]
public void CodeTypeFromFullName_ClassExistsInDifferentAssembly_InfoLocationIsExternal()
{
CreateCodeModel();
var codeClass = codeModel.CodeTypeFromFullName("System.String") as CodeClass2;
Assert.AreEqual(global::EnvDTE.vsCMInfoLocation.vsCMInfoLocationExternal, codeClass.InfoLocation);
}
[Test]
public void CodeTypeFromFullName_InterfaceExistsInProject_InfoLocationIsLocalProject()
{
CreateCodeModel();
AddClassToProject(
"namespace Tests {\r\n" +
" public interface ITest {} \r\n" +
"}");
var codeInterface = codeModel.CodeTypeFromFullName("Tests.ITest") as CodeInterface;
Assert.AreEqual(global::EnvDTE.vsCMInfoLocation.vsCMInfoLocationProject, codeInterface.InfoLocation);
}
[Test]
public void CodeTypeFromFullName_InterfaceExistsInDifferentAssembly_InfoLocationIsExternal()
{
CreateCodeModel();
var codeInterface = codeModel.CodeTypeFromFullName("System.IDisposable") as CodeInterface;
Assert.AreEqual(global::EnvDTE.vsCMInfoLocation.vsCMInfoLocationExternal, codeInterface.InfoLocation);
}
[Test]
public void Language_CSharpProject_ReturnsCSharpProjectGuid()
{
CreateCodeModelWithCSharpProject();
string language = codeModel.Language;
Assert.AreEqual(global::EnvDTE.CodeModelLanguageConstants.vsCMLanguageCSharp, language);
}
[Test]
public void Language_VisualBasicProject_ReturnsVisualBasicProjectGuid()
{
CreateCodeModelWithVisualBasicProject();
string language = codeModel.Language;
Assert.AreEqual(global::EnvDTE.CodeModelLanguageConstants.vsCMLanguageVB, language);
}
[Test]
public void CodeTypeFromFullName_SystemString_ReturnsCodeClass2()
{
CreateCodeModel();
AddClassToProject("public class TestClass {}");
var codeClass = codeModel.CodeTypeFromFullName("System.String") as CodeClass2;
Assert.AreEqual("System.String", codeClass.FullName);
}
}
}

353
src/AddIns/Misc/PackageManagement/Test/Src/EnvDTE/CodeNamespaceTests.cs

@ -16,164 +16,195 @@ @@ -16,164 +16,195 @@
// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
// DEALINGS IN THE SOFTWARE.
//using System;
//using ICSharpCode.PackageManagement.EnvDTE;
//using ICSharpCode.SharpDevelop.Dom;
//using NUnit.Framework;
//using PackageManagement.Tests.Helpers;
//
//namespace PackageManagement.Tests.EnvDTE
//{
// [TestFixture]
// public class CodeNamespaceTests
// {
// CodeNamespace codeNamespace;
// ProjectContentHelper helper;
//
// void CreateCodeNamespace(string namespaceName)
// {
// codeNamespace = new CodeNamespace(helper.ProjectContent, namespaceName);
// }
//
// void CreateProjectContent()
// {
// helper = new ProjectContentHelper();
// }
//
// void AddClassToProjectContent(string namespaceName, string className)
// {
// helper.AddClassToProjectContentAndCompletionEntries(namespaceName, className);
// }
//
// void AddUnknownCompletionEntryToNamespace(string namespaceName)
// {
// helper.AddUnknownCompletionEntryTypeToNamespace(namespaceName);
// }
//
// [Test]
// public void Members_NamespaceHasOneClass_ReturnsOneClass()
// {
// CreateProjectContent();
// AddClassToProjectContent("Tests", "Tests.MyClass");
// CreateCodeNamespace("Tests");
//
// global::EnvDTE.CodeElements members = codeNamespace.Members;
// CodeClass2 codeClass = members.FirstCodeClass2OrDefault();
//
// Assert.AreEqual(1, members.Count);
// Assert.AreEqual("Tests.MyClass", codeClass.FullName);
// }
//
// [Test]
// public void Members_NamespaceHasOneChildNamespace_ReturnsOneChildNamespace()
// {
// CreateProjectContent();
// helper.AddNamespaceCompletionEntryInNamespace("First", "Second");
// CreateCodeNamespace("First");
//
// global::EnvDTE.CodeElements members = codeNamespace.Members;
// CodeNamespace childNamespace = members.FirstCodeNamespaceOrDefault();
//
// Assert.AreEqual("First", codeNamespace.Name);
// Assert.AreEqual(1, members.Count);
// Assert.AreEqual("Second", childNamespace.Name);
// Assert.AreEqual("First.Second", childNamespace.FullName);
// }
//
// [Test]
// public void InfoLocation_NamespaceHasNoClasses_ReturnsExternal()
// {
// CreateProjectContent();
// CreateCodeNamespace("Test");
//
// Assert.AreEqual(global::EnvDTE.vsCMInfoLocation.vsCMInfoLocationExternal, codeNamespace.InfoLocation);
// }
//
// [Test]
// public void Members_NamespaceHasOneChildNamespaceWithThreeNamespaceParts_ReturnsOneChildNamespaceWhichHasOneChildNamespace()
// {
// CreateProjectContent();
// helper.AddNamespaceCompletionEntryInNamespace("First", "Second");
// helper.AddNamespaceCompletionEntryInNamespace("First.Second", "Third");
// helper.NoCompletionItemsInNamespace("First.Second.Third");
// CreateCodeNamespace("First");
//
// global::EnvDTE.CodeElements members = codeNamespace.Members;
// CodeNamespace secondNamespace = members.FirstCodeNamespaceOrDefault();
// CodeNamespace thirdNamespace = secondNamespace.Members.FirstCodeNamespaceOrDefault();
//
// Assert.AreEqual("First", codeNamespace.Name);
// Assert.AreEqual(1, members.Count);
// Assert.AreEqual("Second", secondNamespace.Name);
// Assert.AreEqual("First.Second", secondNamespace.FullName);
// Assert.AreEqual(1, secondNamespace.Members.Count);
// Assert.AreEqual("First.Second.Third", thirdNamespace.FullName);
// Assert.AreEqual(0, thirdNamespace.Members.Count);
// }
//
// [Test]
// public void Members_ProjectHasTwoNamespacesWithCommonFirstAndSecondPartOfThreePartNamespace_ReturnsOneChildNamespaceWhichHasOneChildNamespace()
// {
// CreateProjectContent();
// helper.AddNamespaceCompletionEntryInNamespace("First", "Second");
// helper.AddNamespaceCompletionEntriesInNamespace("First.Second", "Third", "Different");
// CreateCodeNamespace("First");
//
// global::EnvDTE.CodeElements members = codeNamespace.Members;
// CodeNamespace secondNamespace = members.FirstOrDefault() as CodeNamespace;
//
// Assert.AreEqual("First", codeNamespace.Name);
// Assert.AreEqual(1, members.Count);
// Assert.AreEqual("Second", secondNamespace.Name);
// Assert.AreEqual("First.Second", secondNamespace.FullName);
// Assert.AreEqual(2, secondNamespace.Members.Count);
// }
//
// [Test]
// public void Members_NamespaceHasUnknownNamespaceEntryType_ReturnsNoItems()
// {
// CreateProjectContent();
// AddUnknownCompletionEntryToNamespace("Tests");
// CreateCodeNamespace("Tests");
//
// global::EnvDTE.CodeElements members = codeNamespace.Members;
//
// Assert.AreEqual(0, members.Count);
// }
//
// [Test]
// public void Language_CSharpProject_ReturnsCSharpModelLanguage()
// {
// CreateProjectContent();
// helper.ProjectContentIsForCSharpProject();
// CreateCodeNamespace(String.Empty);
//
// string language = codeNamespace.Language;
//
// Assert.AreEqual(global::EnvDTE.CodeModelLanguageConstants.vsCMLanguageCSharp, language);
// }
//
// [Test]
// public void Language_VisualBasicProject_ReturnsVisualBasicModelLanguage()
// {
// CreateProjectContent();
// helper.ProjectContentIsForVisualBasicProject();
// CreateCodeNamespace(String.Empty);
//
// string language = codeNamespace.Language;
//
// Assert.AreEqual(global::EnvDTE.CodeModelLanguageConstants.vsCMLanguageVB, language);
// }
//
// [Test]
// public void Kind_EmptyStringNamespace_ReturnsNamespace()
// {
// CreateProjectContent();
// CreateCodeNamespace(String.Empty);
//
// global::EnvDTE.vsCMElement kind = codeNamespace.Kind;
//
// Assert.AreEqual(global::EnvDTE.vsCMElement.vsCMElementNamespace, kind);
// }
// }
//}
using System;
using ICSharpCode.PackageManagement.EnvDTE;
using NUnit.Framework;
using PackageManagement.Tests.Helpers;
namespace PackageManagement.Tests.EnvDTE
{
[TestFixture]
public class CodeNamespaceTests : CodeModelTestBase
{
CodeNamespace codeNamespace;
void CreateCodeNamespace(string code, string rootNamespace)
{
CreateCodeModel();
AddCodeFile("class.cs", code);
codeNamespace = codeModel
.CodeElements
.FindFirstCodeNamespaceOrDefault(n => n.Name == rootNamespace);
}
[Test]
public void Members_NamespaceHasOneClass_ReturnsOneClass()
{
string code =
"namespace Tests {\r\n" +
" public class MyClass {}\r\n" +
"}";
CreateCodeNamespace(code, "Tests");
global::EnvDTE.CodeElements members = codeNamespace.Members;
CodeClass2 codeClass = members.FirstCodeClass2OrDefault();
Assert.AreEqual(1, members.Count);
Assert.AreEqual("Tests.MyClass", codeClass.FullName);
}
[Test]
public void Members_NamespaceHasOneChildNamespace_ReturnsOneChildNamespace()
{
string code = "namespace First.Second {}";
CreateCodeNamespace(code, "First");
global::EnvDTE.CodeElements members = codeNamespace.Members;
CodeNamespace childNamespace = members.FirstCodeNamespaceOrDefault();
Assert.AreEqual("First", codeNamespace.Name);
Assert.AreEqual(1, members.Count);
Assert.AreEqual("Second", childNamespace.Name);
Assert.AreEqual("First.Second", childNamespace.FullName);
}
[Test]
public void InfoLocation_NamespaceHasNoClasses_ReturnsExternal()
{
string code = "namespace Test {}";
CreateCodeNamespace(code, "Test");
Assert.AreEqual(global::EnvDTE.vsCMInfoLocation.vsCMInfoLocationExternal, codeNamespace.InfoLocation);
}
[Test]
public void Members_NamespaceHasOneChildNamespaceWithThreeNamespaceParts_ReturnsOneChildNamespaceWhichHasOneChildNamespace()
{
string code = "namespace First.Second.Third {}";
CreateCodeNamespace(code, "First");
global::EnvDTE.CodeElements members = codeNamespace.Members;
CodeNamespace secondNamespace = members.FirstCodeNamespaceOrDefault();
CodeNamespace thirdNamespace = secondNamespace.Members.FirstCodeNamespaceOrDefault();
Assert.AreEqual("First", codeNamespace.Name);
Assert.AreEqual(1, members.Count);
Assert.AreEqual("Second", secondNamespace.Name);
Assert.AreEqual("First.Second", secondNamespace.FullName);
Assert.AreEqual(1, secondNamespace.Members.Count);
Assert.AreEqual("First.Second.Third", thirdNamespace.FullName);
Assert.AreEqual(0, thirdNamespace.Members.Count);
}
[Test]
public void Members_ProjectHasTwoNamespacesWithCommonFirstAndSecondPartOfThreePartNamespace_ReturnsOneChildNamespaceWhichHasOneChildNamespace()
{
string code =
"namespace First.Second {\r\n" +
" namespace Third {}\r\n" +
" namespace Different {}\r\n" +
"}";
CreateCodeNamespace(code, "First");
global::EnvDTE.CodeElements members = codeNamespace.Members;
CodeNamespace secondNamespace = members.FirstOrDefault() as CodeNamespace;
Assert.AreEqual("First", codeNamespace.Name);
Assert.AreEqual(1, members.Count);
Assert.AreEqual("Second", secondNamespace.Name);
Assert.AreEqual("First.Second", secondNamespace.FullName);
Assert.AreEqual(2, secondNamespace.Members.Count);
}
[Test]
public void Language_CSharpProject_ReturnsCSharpModelLanguage()
{
string code = "namespace Test {}";
CreateCodeNamespace(code, "Test");
string language = codeNamespace.Language;
Assert.AreEqual(global::EnvDTE.CodeModelLanguageConstants.vsCMLanguageCSharp, language);
}
[Test]
[Ignore("VB.NET not supported")]
public void Language_VisualBasicProject_ReturnsVisualBasicModelLanguage()
{
string code =
"Namespace Test\r\n" +
"End Namespace";
CreateCodeNamespace(code, "Test");
string language = codeNamespace.Language;
Assert.AreEqual(global::EnvDTE.CodeModelLanguageConstants.vsCMLanguageVB, language);
}
[Test]
public void Kind_NamespaceHasNoClasses_ReturnsNamespace()
{
string code = "namespace Test {}";
CreateCodeNamespace(code, "Test");
global::EnvDTE.vsCMElement kind = codeNamespace.Kind;
Assert.AreEqual(global::EnvDTE.vsCMElement.vsCMElementNamespace, kind);
}
[Test]
public void Members_ParentChildAndGrandChildNamespaces_ReturnsOneCodeNamespaceWhichHasGrandChildNamespace()
{
string code = "namespace Parent.Child.GrandChild {}";
CreateCodeNamespace(code, "Parent");
CodeNamespace childNamespace = codeNamespace.Members.FirstCodeNamespaceOrDefault();
CodeNamespace grandChildNamespace = childNamespace.Members.FirstCodeNamespaceOrDefault();
Assert.AreEqual("GrandChild", grandChildNamespace.Name);
}
[Test]
public void Members_OneInterfaceCompletionEntryAndItemSelectedByName_ReturnsOneCodeInterface()
{
string code =
"namespace Test {\r\n" +
" public interface IClass {}\r\n" +
"}";
CreateCodeNamespace(code, "Test");
var codeInterface = codeNamespace.Members.Item("IClass") as CodeInterface;
Assert.AreEqual("Test.IClass", codeInterface.FullName);
}
[Test]
public void Members_OneClassCompletionEntryAndFirstItemSelected_ReturnsOneCodeClass()
{
string code =
"namespace Test {\r\n" +
" public class MyClass {}\r\n" +
"}";
CreateCodeNamespace(code, "Test");
var codeClass = codeNamespace.Members.Item(1) as CodeClass2;
Assert.AreEqual("Test.MyClass", codeClass.FullName);
}
[Test]
public void Members_OneClassCompletionEntryAndItemSelectedByName_ReturnsOneCodeClass()
{
string code =
"namespace Test {\r\n" +
" public class MyClass {}\r\n" +
"}";
CreateCodeNamespace(code, "Test");
var codeClass = codeNamespace.Members.Item("MyClass") as CodeClass2;
Assert.AreEqual("Test.MyClass", codeClass.FullName);
}
}
}

228
src/AddIns/Misc/PackageManagement/Test/Src/EnvDTE/CodeParameter2Tests.cs

@ -16,93 +16,141 @@ @@ -16,93 +16,141 @@
// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
// DEALINGS IN THE SOFTWARE.
//using System;
//using ICSharpCode.PackageManagement.EnvDTE;
//using NUnit.Framework;
//using PackageManagement.Tests.Helpers;
//
//namespace PackageManagement.Tests.EnvDTE
//{
// [TestFixture]
// public class CodeParameter2Tests
// {
// ParameterHelper helper;
// CodeParameter2 parameter;
//
// [SetUp]
// public void Init()
// {
// helper = new ParameterHelper();
// }
//
// void CreateParameter()
// {
// parameter = new CodeParameter2(null, helper.Parameter);
// }
//
// [Test]
// public void ParameterKind_NormalParameter_ReturnsNone()
// {
// CreateParameter();
//
// global::EnvDTE.vsCMParameterKind kind = parameter.ParameterKind;
//
// Assert.AreEqual(global::EnvDTE.vsCMParameterKind.vsCMParameterKindNone, kind);
// }
//
// [Test]
// public void ParameterKind_OptionalParameter_ReturnsOptional()
// {
// CreateParameter();
// helper.MakeOptionalParameter();
//
// global::EnvDTE.vsCMParameterKind kind = parameter.ParameterKind;
//
// Assert.AreEqual(global::EnvDTE.vsCMParameterKind.vsCMParameterKindOptional, kind);
// }
//
// [Test]
// public void ParameterKind_OutParameter_ReturnsOut()
// {
// CreateParameter();
// helper.MakeOutParameter();
//
// global::EnvDTE.vsCMParameterKind kind = parameter.ParameterKind;
//
// Assert.AreEqual(global::EnvDTE.vsCMParameterKind.vsCMParameterKindOut, kind);
// }
//
// [Test]
// public void ParameterKind_RefParameter_ReturnsRef()
// {
// CreateParameter();
// helper.MakeRefParameter();
//
// global::EnvDTE.vsCMParameterKind kind = parameter.ParameterKind;
//
// Assert.AreEqual(global::EnvDTE.vsCMParameterKind.vsCMParameterKindRef, kind);
// }
//
// [Test]
// public void ParameterKind_ParamArrayParameter_ReturnsParamArray()
// {
// CreateParameter();
// helper.MakeParamArrayParameter();
//
// global::EnvDTE.vsCMParameterKind kind = parameter.ParameterKind;
//
// Assert.AreEqual(global::EnvDTE.vsCMParameterKind.vsCMParameterKindParamArray, kind);
// }
//
// [Test]
// public void ParameterKind_InParameter_ReturnsIn()
// {
// CreateParameter();
// helper.MakeInParameter();
//
// global::EnvDTE.vsCMParameterKind kind = parameter.ParameterKind;
//
// Assert.AreEqual(global::EnvDTE.vsCMParameterKind.vsCMParameterKindIn, kind);
// }
// }
//}
using System;
using System.Linq;
using ICSharpCode.NRefactory.TypeSystem;
using ICSharpCode.PackageManagement.EnvDTE;
using ICSharpCode.SharpDevelop.Dom;
using NUnit.Framework;
using PackageManagement.Tests.Helpers;
namespace PackageManagement.Tests.EnvDTE
{
[TestFixture]
public class CodeParameter2Tests : CodeModelTestBase
{
CodeParameter2 parameter;
void CreateParameter(string code)
{
AddCodeFile("class.cs", code);
IMethod method = assemblyModel
.TopLevelTypeDefinitions
.First()
.Members
.First()
.Resolve() as IMethod;
IParameter member = method.Parameters.First();
parameter = new CodeParameter2(codeModelContext, member);
}
[Test]
public void ParameterKind_NormalParameter_ReturnsNone()
{
CreateParameter(
"public class MyClass {\r\n" +
" public void MyMethod(int parameter) {}\r\n" +
"}");
global::EnvDTE.vsCMParameterKind kind = parameter.ParameterKind;
Assert.AreEqual(global::EnvDTE.vsCMParameterKind.vsCMParameterKindNone, kind);
}
[Test]
public void ParameterKind_OptionalParameter_ReturnsOptional()
{
CreateParameter(
"public class MyClass {\r\n" +
" public void MyMethod(int parameter = 0) {}\r\n" +
"}");
global::EnvDTE.vsCMParameterKind kind = parameter.ParameterKind;
Assert.AreEqual(global::EnvDTE.vsCMParameterKind.vsCMParameterKindOptional, kind);
}
[Test]
public void ParameterKind_OutParameter_ReturnsOut()
{
CreateParameter(
"public class MyClass {\r\n" +
" public void MyMethod(out int parameter) { parameter = 2; }\r\n" +
"}");
global::EnvDTE.vsCMParameterKind kind = parameter.ParameterKind;
Assert.AreEqual(global::EnvDTE.vsCMParameterKind.vsCMParameterKindOut, kind);
}
[Test]
public void ParameterKind_RefParameter_ReturnsRef()
{
CreateParameter(
"public class MyClass {\r\n" +
" public void MyMethod(ref int parameter) {}\r\n" +
"}");
global::EnvDTE.vsCMParameterKind kind = parameter.ParameterKind;
Assert.AreEqual(global::EnvDTE.vsCMParameterKind.vsCMParameterKindRef, kind);
}
[Test]
public void ParameterKind_ParamArrayParameter_ReturnsParamArray()
{
CreateParameter(
"public class MyClass {\r\n" +
" public void MyMethod(params int[] parameters) {}\r\n" +
"}");
global::EnvDTE.vsCMParameterKind kind = parameter.ParameterKind;
Assert.AreEqual(global::EnvDTE.vsCMParameterKind.vsCMParameterKindParamArray, kind);
}
[Test]
[Ignore("Not supported by NRefactory. Maps to VB.NET's ByVal. For C# vsCMParameterKindNone is returned.")]
public void ParameterKind_InParameter_ReturnsIn()
{
CreateParameter(
"public class MyClass {\r\n" +
" public void MyMethod(int parameter) {}\r\n" +
"}");
global::EnvDTE.vsCMParameterKind kind = parameter.ParameterKind;
Assert.AreEqual(global::EnvDTE.vsCMParameterKind.vsCMParameterKindIn, kind);
}
[Test]
public void Kind_Parameter_ReturnsParameter()
{
CreateParameter(
"public class MyClass {\r\n" +
" public void MyMethod(int parameter) {}\r\n" +
"}");
global::EnvDTE.vsCMElement kind = parameter.Kind;
Assert.AreEqual(global::EnvDTE.vsCMElement.vsCMElementParameter, kind);
}
[Test]
public void Attributes_ParameterHasOneAttribute_ReturnsOneAttribute()
{
CreateParameter(
"using System;\r\n" +
"public class MyClass {\r\n" +
" public void MyMethod([Obsolete] int parameter) {}\r\n" +
"}");
global::EnvDTE.CodeElements attributes = parameter.Attributes;
CodeAttribute2 attribute = parameter.Attributes.FirstCodeAttribute2OrDefault();
Assert.AreEqual(1, attributes.Count);
Assert.AreEqual("System.ObsoleteAttribute", attribute.FullName);
}
}
}

66
src/AddIns/Misc/PackageManagement/Test/Src/EnvDTE/CodeParameterTests.cs

@ -1,66 +0,0 @@ @@ -1,66 +0,0 @@
// Copyright (c) 2014 AlphaSierraPapa for the SharpDevelop Team
//
// Permission is hereby granted, free of charge, to any person obtaining a copy of this
// software and associated documentation files (the "Software"), to deal in the Software
// without restriction, including without limitation the rights to use, copy, modify, merge,
// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons
// to whom the Software is furnished to do so, subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included in all copies or
// substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE
// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
// DEALINGS IN THE SOFTWARE.
//using System;
//using ICSharpCode.PackageManagement.EnvDTE;
//using NUnit.Framework;
//using PackageManagement.Tests.Helpers;
//
//namespace PackageManagement.Tests.EnvDTE
//{
// [TestFixture]
// public class CodeParameterTests
// {
// ParameterHelper helper;
// CodeParameter parameter;
//
// [SetUp]
// public void Init()
// {
// helper = new ParameterHelper();
// }
//
// void CreateParameter()
// {
// parameter = new CodeParameter(null, helper.Parameter);
// }
//
// [Test]
// public void Kind_Parameter_ReturnsParameter()
// {
// CreateParameter();
//
// global::EnvDTE.vsCMElement kind = parameter.Kind;
//
// Assert.AreEqual(global::EnvDTE.vsCMElement.vsCMElementParameter, kind);
// }
//
// [Test]
// public void Attributes_ParameterHasOneAttribute_ReturnsOneAttribute()
// {
// CreateParameter();
// helper.AddAttributeToParameter("System.Web.Mvc.BindAttribute");
//
// global::EnvDTE.CodeElements attributes = parameter.Attributes;
//
// CodeAttribute2 attribute = parameter.Attributes.FirstCodeAttribute2OrDefault();
// Assert.AreEqual(1, attributes.Count);
// Assert.AreEqual("System.Web.Mvc.BindAttribute", attribute.FullName);
// }
// }
//}

649
src/AddIns/Misc/PackageManagement/Test/Src/EnvDTE/CodeProperty2Tests.cs

@ -16,316 +16,339 @@ @@ -16,316 +16,339 @@
// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
// DEALINGS IN THE SOFTWARE.
//using System;
//using ICSharpCode.PackageManagement.EnvDTE;
//using NUnit.Framework;
//using PackageManagement.Tests.Helpers;
//
//namespace PackageManagement.Tests.EnvDTE
//{
// [TestFixture]
// public class CodeProperty2Tests
// {
// CodeProperty2 property;
// PropertyHelper helper;
//
// [SetUp]
// public void Init()
// {
// helper = new PropertyHelper();
// }
//
// void CreateCodeProperty2()
// {
// property = new CodeProperty2(helper.Property);
// }
//
// [Test]
// public void Attributes_PropertyHasOneAttribute_ReturnsOneAttribute()
// {
// helper.CreateProperty("MyProperty");
// helper.AddAttribute("Tests.TestAttribute", "TestAttribute");
// CreateCodeProperty2();
//
// global::EnvDTE.CodeElements attributes = property.Attributes;
//
// CodeAttribute2 attribute = attributes.Item(1) as CodeAttribute2;
//
// Assert.AreEqual(1, attributes.Count);
// Assert.AreEqual("Tests.TestAttribute", attribute.FullName);
// }
//
// [Test]
// public void Name_PropertyCalledMyProperty_ReturnsMyProperty()
// {
// helper.CreateProperty("MyProperty");
// CreateCodeProperty2();
//
// string name = property.Name;
//
// Assert.AreEqual("MyProperty", name);
// }
//
// [Test]
// public void Parent_Class1ContainsProperty_ReturnsClass1()
// {
// helper.CreateProperty("MyProperty");
// helper.AddParentClass("Tests.Class1");
// CreateCodeProperty2();
//
// global::EnvDTE.CodeClass parentClass = property.Parent;
//
// Assert.AreEqual("Tests.Class1", parentClass.FullName);
// }
//
// [Test]
// public void Access_PublicProperty_AccessIsPublic()
// {
// helper.CreatePublicProperty("MyProperty");
// CreateCodeProperty2();
//
// global::EnvDTE.vsCMAccess access = property.Access;
//
// Assert.AreEqual(global::EnvDTE.vsCMAccess.vsCMAccessPublic, access);
// }
//
// [Test]
// public void Access_PrivateProperty_AccessIsPrivate()
// {
// helper.CreatePrivateProperty("MyProperty");
// CreateCodeProperty2();
//
// global::EnvDTE.vsCMAccess access = property.Access;
//
// Assert.AreEqual(global::EnvDTE.vsCMAccess.vsCMAccessPrivate, access);
// }
//
// [Test]
// public void ReadWrite_PropertyHasGetterAndSetter_ReturnsReadWriteProperty()
// {
// helper.CreatePublicProperty("MyProperty");
// helper.HasGetterAndSetter();
// CreateCodeProperty2();
//
// global::EnvDTE.vsCMPropertyKind kind = property.ReadWrite;
//
// Assert.AreEqual(global::EnvDTE.vsCMPropertyKind.vsCMPropertyKindReadWrite, kind);
// }
//
// [Test]
// public void ReadWrite_PropertyHasGetterOnly_ReturnsReadOnlyProperty()
// {
// helper.CreatePublicProperty("MyProperty");
// helper.HasGetterOnly();
// CreateCodeProperty2();
//
// global::EnvDTE.vsCMPropertyKind kind = property.ReadWrite;
//
// Assert.AreEqual(global::EnvDTE.vsCMPropertyKind.vsCMPropertyKindReadOnly, kind);
// }
//
// [Test]
// public void ReadWrite_PropertyHasSetterOnly_ReturnsWriteOnlyProperty()
// {
// helper.CreatePublicProperty("MyProperty");
// helper.HasSetterOnly();
// CreateCodeProperty2();
//
// global::EnvDTE.vsCMPropertyKind kind = property.ReadWrite;
//
// Assert.AreEqual(global::EnvDTE.vsCMPropertyKind.vsCMPropertyKindWriteOnly, kind);
// }
//
// [Test]
// public void Parameters_PropertyIsIndexerWithOneParameter_ReturnsOneParameter()
// {
// helper.CreatePublicProperty("MyProperty");
// helper.AddParameter("item");
// CreateCodeProperty2();
//
// global::EnvDTE.CodeElements parameters = property.Parameters;
// CodeParameter parameter = parameters.FirstCodeParameterOrDefault();
//
// Assert.AreEqual(1, parameters.Count);
// Assert.AreEqual("item", parameter.Name);
// }
//
// [Test]
// public void Getter_PublicGetter_ReturnsPublicGetterCodeFunction()
// {
// helper.CreatePublicProperty("MyProperty");
// helper.HasGetterOnly();
// helper.GetterModifierIsNone();
// CreateCodeProperty2();
//
// global::EnvDTE.CodeFunction getter = property.Getter;
// global::EnvDTE.vsCMAccess access = getter.Access;
//
// Assert.AreEqual(global::EnvDTE.vsCMAccess.vsCMAccessPublic, access);
// }
//
// [Test]
// public void Getter_PrivateGetter_ReturnsPrivateGetterCodeFunction()
// {
// helper.CreatePrivateProperty("MyProperty");
// helper.HasGetterOnly();
// helper.GetterModifierIsNone();
// CreateCodeProperty2();
//
// global::EnvDTE.CodeFunction getter = property.Getter;
// global::EnvDTE.vsCMAccess access = getter.Access;
//
// Assert.AreEqual(global::EnvDTE.vsCMAccess.vsCMAccessPrivate, access);
// }
//
// [Test]
// public void Getter_NoGetter_ReturnsNull()
// {
// helper.CreatePublicProperty("MyProperty");
// CreateCodeProperty2();
//
// global::EnvDTE.CodeFunction getter = property.Getter;
//
// Assert.IsNull(getter);
// }
//
// [Test]
// public void Getter_PublicPropertyButPrivateGetter_ReturnsPrivateGetterCodeFunction()
// {
// helper.CreatePublicProperty("MyProperty");
// helper.HasGetterAndSetter();
// helper.GetterModifierIsPrivate();
// CreateCodeProperty2();
//
// global::EnvDTE.CodeFunction getter = property.Getter;
// global::EnvDTE.vsCMAccess access = getter.Access;
//
// Assert.AreEqual(global::EnvDTE.vsCMAccess.vsCMAccessPrivate, access);
// }
//
// [Test]
// public void Setter_PublicSetter_ReturnsPublicSetterCodeFunction()
// {
// helper.CreatePublicProperty("MyProperty");
// helper.HasSetterOnly();
// helper.SetterModifierIsNone();
// CreateCodeProperty2();
//
// global::EnvDTE.CodeFunction setter = property.Setter;
// global::EnvDTE.vsCMAccess access = setter.Access;
//
// Assert.AreEqual(global::EnvDTE.vsCMAccess.vsCMAccessPublic, access);
// }
//
// [Test]
// public void Setter_PrivateSetter_ReturnsPrivateSetterCodeFunction()
// {
// helper.CreatePrivateProperty("MyProperty");
// helper.HasSetterOnly();
// helper.SetterModifierIsNone();
// CreateCodeProperty2();
//
// global::EnvDTE.CodeFunction setter = property.Setter;
// global::EnvDTE.vsCMAccess access = setter.Access;
//
// Assert.AreEqual(global::EnvDTE.vsCMAccess.vsCMAccessPrivate, access);
// }
//
// [Test]
// public void Setter_NoSetter_ReturnsNull()
// {
// helper.CreatePublicProperty("MyProperty");
// CreateCodeProperty2();
//
// global::EnvDTE.CodeFunction setter = property.Setter;
//
// Assert.IsNull(setter);
// }
//
// [Test]
// public void Setter_PublicPropertyButPrivateSetter_ReturnsPrivateSetterCodeFunction()
// {
// helper.CreatePublicProperty("MyProperty");
// helper.HasGetterAndSetter();
// helper.SetterModifierIsPrivate();
// CreateCodeProperty2();
//
// global::EnvDTE.CodeFunction setter = property.Setter;
// global::EnvDTE.vsCMAccess access = setter.Access;
//
// Assert.AreEqual(global::EnvDTE.vsCMAccess.vsCMAccessPrivate, access);
// }
//
// [Test]
// public void Type_PropertyTypeIsSystemString_ReturnsSystemString()
// {
// helper.CreatePublicProperty("MyProperty");
// helper.SetPropertyReturnType("System.String");
// CreateCodeProperty2();
//
// global::EnvDTE.CodeTypeRef typeRef = property.Type;
// string fullName = typeRef.AsFullName;
//
// Assert.AreEqual("System.String", fullName);
// }
//
// [Test]
// public void Type_PropertyTypeIsSystemString_TypesParentIsProperty()
// {
// helper.CreatePublicProperty("MyProperty");
// helper.SetPropertyReturnType("System.String");
// CreateCodeProperty2();
//
// global::EnvDTE.CodeTypeRef typeRef = property.Type;
// global::EnvDTE.CodeElement parent = typeRef.Parent;
//
// Assert.AreEqual(property, parent);
// }
//
// [Test]
// public void Type_PropertyTypeIsSystemString_TypeRefTypeInfoLocationIsExternal()
// {
// helper.CreatePublicProperty("MyProperty");
// helper.SetPropertyReturnType("System.String");
// helper.CreateProjectForProjectContent();
// var classHelper = new ClassHelper();
// classHelper.CreateClass("System.String");
// classHelper.SetProjectForProjectContent(null);
// helper.ReturnTypeHelper.AddUnderlyingClass(classHelper.Class);
// CreateCodeProperty2();
//
// global::EnvDTE.CodeTypeRef typeRef = property.Type;
// global::EnvDTE.vsCMInfoLocation location = typeRef.CodeType.InfoLocation;
//
// Assert.AreEqual(global::EnvDTE.vsCMInfoLocation.vsCMInfoLocationExternal, location);
// }
//
// [Test]
// public void Type_PropertyTypeExistsInProject_TypeRefTypeInfoLocationIsProject()
// {
// helper.CreatePublicProperty("MyProperty");
// helper.SetPropertyReturnType("MyType");
// helper.CreateProjectForProjectContent();
// var classHelper = new ClassHelper();
// classHelper.CreateClass("MyType");
// classHelper.SetProjectForProjectContent(helper.Project);
// helper.ReturnTypeHelper.AddUnderlyingClass(classHelper.Class);
// CreateCodeProperty2();
//
// global::EnvDTE.CodeTypeRef typeRef = property.Type;
// global::EnvDTE.vsCMInfoLocation location = typeRef.CodeType.InfoLocation;
//
// Assert.AreEqual(global::EnvDTE.vsCMInfoLocation.vsCMInfoLocationProject, location);
// }
//
// [Test]
// public void Kind_PublicProperty_ReturnsProperty()
// {
// helper.CreatePublicProperty("MyProperty");
//
// global::EnvDTE.vsCMElement kind = property.Kind;
//
// Assert.AreEqual(global::EnvDTE.vsCMElement.vsCMElementProperty, kind);
// }
// }
//}
using System;
using System.Linq;
using ICSharpCode.NRefactory.TypeSystem;
using ICSharpCode.PackageManagement.EnvDTE;
using NUnit.Framework;
using PackageManagement.Tests.Helpers;
namespace PackageManagement.Tests.EnvDTE
{
[TestFixture]
public class CodeProperty2Tests : CodeModelTestBase
{
CodeProperty2 property;
void CreateCodeProperty2(string code)
{
AddCodeFile("class.cs", code);
IProperty member = assemblyModel
.TopLevelTypeDefinitions
.First()
.Members
.First()
.Resolve() as IProperty;
property = new CodeProperty2(codeModelContext, member);
}
[Test]
public void Attributes_PropertyHasOneAttribute_ReturnsOneAttribute()
{
CreateCodeProperty2(
"class MyClass {\r\n" +
" [System.Obsolete]\r\n" +
" public int MyProperty { get; set; }\r\n" +
"}");
global::EnvDTE.CodeElements attributes = property.Attributes;
CodeAttribute2 attribute = attributes.Item(1) as CodeAttribute2;
Assert.AreEqual(1, attributes.Count);
Assert.AreEqual("System.ObsoleteAttribute", attribute.FullName);
}
[Test]
public void Name_PropertyCalledMyProperty_ReturnsMyProperty()
{
CreateCodeProperty2(
"class MyClass {\r\n" +
" public int MyProperty { get; set; }\r\n" +
"}");
string name = property.Name;
Assert.AreEqual("MyProperty", name);
}
[Test]
public void Parent_Class1ContainsProperty_ReturnsClass1()
{
CreateCodeProperty2(
"namespace Tests {\r\n" +
" class Class1 {\r\n" +
" public int MyProperty { get; set; }\r\n" +
" }\r\n" +
"}");
global::EnvDTE.CodeClass parentClass = property.Parent;
Assert.AreEqual("Tests.Class1", parentClass.FullName);
}
[Test]
public void Access_PublicProperty_AccessIsPublic()
{
CreateCodeProperty2(
"class MyClass {\r\n" +
" public int MyProperty { get; set; }\r\n" +
"}");
global::EnvDTE.vsCMAccess access = property.Access;
Assert.AreEqual(global::EnvDTE.vsCMAccess.vsCMAccessPublic, access);
}
[Test]
public void Access_PrivateProperty_AccessIsPrivate()
{
CreateCodeProperty2(
"class MyClass {\r\n" +
" private int MyProperty { get; set; }\r\n" +
"}");
global::EnvDTE.vsCMAccess access = property.Access;
Assert.AreEqual(global::EnvDTE.vsCMAccess.vsCMAccessPrivate, access);
}
[Test]
public void ReadWrite_PropertyHasGetterAndSetter_ReturnsReadWriteProperty()
{
CreateCodeProperty2(
"class MyClass {\r\n" +
" public int MyProperty { get; set; }\r\n" +
"}");
global::EnvDTE.vsCMPropertyKind kind = property.ReadWrite;
Assert.AreEqual(global::EnvDTE.vsCMPropertyKind.vsCMPropertyKindReadWrite, kind);
}
[Test]
public void ReadWrite_PropertyHasGetterOnly_ReturnsReadOnlyProperty()
{
CreateCodeProperty2(
"class MyClass {\r\n" +
" public int MyProperty { get { return 0; } }\r\n" +
"}");
global::EnvDTE.vsCMPropertyKind kind = property.ReadWrite;
Assert.AreEqual(global::EnvDTE.vsCMPropertyKind.vsCMPropertyKindReadOnly, kind);
}
[Test]
public void ReadWrite_PropertyHasSetterOnly_ReturnsWriteOnlyProperty()
{
CreateCodeProperty2(
"class MyClass {\r\n" +
" public int MyProperty { set { } }\r\n" +
"}");
global::EnvDTE.vsCMPropertyKind kind = property.ReadWrite;
Assert.AreEqual(global::EnvDTE.vsCMPropertyKind.vsCMPropertyKindWriteOnly, kind);
}
[Test]
public void Parameters_PropertyIsIndexerWithOneParameter_ReturnsOneParameter()
{
CreateCodeProperty2(
"class MyClass {\r\n" +
" public int this[int item] { get { return 0; } }\r\n" +
"}");
global::EnvDTE.CodeElements parameters = property.Parameters;
CodeParameter parameter = parameters.FirstCodeParameterOrDefault();
Assert.AreEqual(1, parameters.Count);
Assert.AreEqual("item", parameter.Name);
}
[Test]
public void Getter_PublicGetter_ReturnsPublicGetterCodeFunction()
{
CreateCodeProperty2(
"class MyClass {\r\n" +
" public int MyProperty { get { return 0; } }\r\n" +
"}");
global::EnvDTE.CodeFunction getter = property.Getter;
global::EnvDTE.vsCMAccess access = getter.Access;
Assert.AreEqual(global::EnvDTE.vsCMAccess.vsCMAccessPublic, access);
}
[Test]
public void Getter_PrivateGetter_ReturnsPrivateGetterCodeFunction()
{
CreateCodeProperty2(
"class MyClass {\r\n" +
" private int MyProperty { get { return 0; } }\r\n" +
"}");
global::EnvDTE.CodeFunction getter = property.Getter;
global::EnvDTE.vsCMAccess access = getter.Access;
Assert.AreEqual(global::EnvDTE.vsCMAccess.vsCMAccessPrivate, access);
}
[Test]
public void Getter_NoGetter_ReturnsNull()
{
CreateCodeProperty2(
"class MyClass {\r\n" +
" public int MyProperty { set { } }\r\n" +
"}");
global::EnvDTE.CodeFunction getter = property.Getter;
Assert.IsNull(getter);
}
[Test]
public void Getter_PublicPropertyButPrivateGetter_ReturnsPrivateGetterCodeFunction()
{
CreateCodeProperty2(
"class MyClass {\r\n" +
" public int MyProperty { private get; public set; }\r\n" +
"}");
global::EnvDTE.CodeFunction getter = property.Getter;
global::EnvDTE.vsCMAccess access = getter.Access;
Assert.AreEqual(global::EnvDTE.vsCMAccess.vsCMAccessPrivate, access);
}
[Test]
public void Setter_PublicSetter_ReturnsPublicSetterCodeFunction()
{
CreateCodeProperty2(
"class MyClass {\r\n" +
" public int MyProperty { set { } }\r\n" +
"}");
global::EnvDTE.CodeFunction setter = property.Setter;
global::EnvDTE.vsCMAccess access = setter.Access;
Assert.AreEqual(global::EnvDTE.vsCMAccess.vsCMAccessPublic, access);
}
[Test]
public void Setter_PrivateSetter_ReturnsPrivateSetterCodeFunction()
{
CreateCodeProperty2(
"class MyClass {\r\n" +
" private int MyProperty { set { } }\r\n" +
"}");
global::EnvDTE.CodeFunction setter = property.Setter;
global::EnvDTE.vsCMAccess access = setter.Access;
Assert.AreEqual(global::EnvDTE.vsCMAccess.vsCMAccessPrivate, access);
}
[Test]
public void Setter_NoSetter_ReturnsNull()
{
CreateCodeProperty2(
"class MyClass {\r\n" +
" public int MyProperty { get { return 0; } }\r\n" +
"}");
global::EnvDTE.CodeFunction setter = property.Setter;
Assert.IsNull(setter);
}
[Test]
public void Setter_PublicPropertyButPrivateSetter_ReturnsPrivateSetterCodeFunction()
{
CreateCodeProperty2(
"class MyClass {\r\n" +
" public int MyProperty { get; private set; }\r\n" +
"}");
global::EnvDTE.CodeFunction setter = property.Setter;
global::EnvDTE.vsCMAccess access = setter.Access;
Assert.AreEqual(global::EnvDTE.vsCMAccess.vsCMAccessPrivate, access);
}
[Test]
public void Type_PropertyTypeIsSystemString_ReturnsSystemString()
{
CreateCodeProperty2(
"using System;\r\n" +
"class MyClass {\r\n" +
" public string MyProperty { get; set; }\r\n" +
"}");
global::EnvDTE.CodeTypeRef typeRef = property.Type;
string fullName = typeRef.AsFullName;
Assert.AreEqual("System.String", fullName);
}
[Test]
public void Type_PropertyTypeIsSystemString_TypesParentIsProperty()
{
CreateCodeProperty2(
"using System;\r\n" +
"class MyClass {\r\n" +
" public string MyProperty { get; set; }\r\n" +
"}");
global::EnvDTE.CodeTypeRef typeRef = property.Type;
global::EnvDTE.CodeElement parent = typeRef.Parent;
Assert.AreEqual(property, parent);
}
[Test]
public void Type_PropertyTypeIsSystemString_TypeRefTypeInfoLocationIsExternal()
{
CreateCodeProperty2(
"using System;\r\n" +
"class MyClass {\r\n" +
" public string MyProperty { get; set; }\r\n" +
"}");
global::EnvDTE.CodeTypeRef typeRef = property.Type;
global::EnvDTE.vsCMInfoLocation location = typeRef.CodeType.InfoLocation;
Assert.AreEqual(global::EnvDTE.vsCMInfoLocation.vsCMInfoLocationExternal, location);
}
[Test]
public void Type_PropertyTypeExistsInProject_TypeRefTypeInfoLocationIsProject()
{
CreateCodeProperty2(
"using System;\r\n" +
"public class MyClass {\r\n" +
" public MyType MyProperty { get; set; }\r\n" +
"}\r\n" +
"public class MyType {}");
global::EnvDTE.CodeTypeRef typeRef = property.Type;
global::EnvDTE.vsCMInfoLocation location = typeRef.CodeType.InfoLocation;
Assert.AreEqual(global::EnvDTE.vsCMInfoLocation.vsCMInfoLocationProject, location);
}
[Test]
public void Kind_PublicProperty_ReturnsProperty()
{
CreateCodeProperty2(
"class MyClass {\r\n" +
" public int MyProperty { get; set; }\r\n" +
"}");
global::EnvDTE.vsCMElement kind = property.Kind;
Assert.AreEqual(global::EnvDTE.vsCMElement.vsCMElementProperty, kind);
}
}
}

125
src/AddIns/Misc/PackageManagement/Test/Src/EnvDTE/CodeStructTests.cs

@ -16,72 +16,59 @@ @@ -16,72 +16,59 @@
// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
// DEALINGS IN THE SOFTWARE.
//using System;
//using ICSharpCode.PackageManagement.EnvDTE;
//using ICSharpCode.SharpDevelop.Dom;
//using NUnit.Framework;
//using PackageManagement.Tests.Helpers;
//
//namespace PackageManagement.Tests.EnvDTE
//{
// [TestFixture]
// public class CodeStructTests
// {
// CodeStruct codeStruct;
// ProjectContentHelper helper;
// IClass fakeStruct;
//
// [SetUp]
// public void Init()
// {
// helper = new ProjectContentHelper();
// }
//
// void CreatePublicStruct(string name)
// {
// fakeStruct = helper.AddPublicStructToProjectContent(name);
// CreateStruct();
// }
//
// void CreatePrivateStruct(string name)
// {
// fakeStruct = helper.AddPrivateStructToProjectContent(name);
// CreateStruct();
// }
//
// void CreateStruct()
// {
// codeStruct = new CodeStruct(helper.ProjectContent, fakeStruct);
// }
//
// [Test]
// public void Access_PublicStruct_ReturnsPublic()
// {
// CreatePublicStruct("MyStruct");
//
// global::EnvDTE.vsCMAccess access = codeStruct.Access;
//
// Assert.AreEqual(global::EnvDTE.vsCMAccess.vsCMAccessPublic, access);
// }
//
// [Test]
// public void Access_PrivateStruct_ReturnsPrivate()
// {
// CreatePrivateStruct("MyStruct");
//
// global::EnvDTE.vsCMAccess access = codeStruct.Access;
//
// Assert.AreEqual(global::EnvDTE.vsCMAccess.vsCMAccessPrivate, access);
// }
//
// [Test]
// public void Kind_PublicStruct_ReturnsStruct()
// {
// CreatePublicStruct("MyStruct");
//
// global::EnvDTE.vsCMElement kind = codeStruct.Kind;
//
// Assert.AreEqual(global::EnvDTE.vsCMElement.vsCMElementStruct, kind);
// }
// }
//}
using System;
using System.Linq;
using ICSharpCode.NRefactory.TypeSystem;
using ICSharpCode.PackageManagement.EnvDTE;
using NUnit.Framework;
namespace PackageManagement.Tests.EnvDTE
{
[TestFixture]
public class CodeStructTests : CodeModelTestBase
{
CodeStruct codeStruct;
void CreateStruct(string code)
{
AddCodeFile("class.cs", code);
ITypeDefinition typeDefinition = assemblyModel
.TopLevelTypeDefinitions
.First()
.Resolve();
codeStruct = new CodeStruct(codeModelContext, typeDefinition);
}
[Test]
public void Access_PublicStruct_ReturnsPublic()
{
CreateStruct("public struct MyStruct {}");
global::EnvDTE.vsCMAccess access = codeStruct.Access;
Assert.AreEqual(global::EnvDTE.vsCMAccess.vsCMAccessPublic, access);
}
[Test]
public void Access_PrivateStruct_ReturnsPrivate()
{
CreateStruct("struct MyStruct {}");
global::EnvDTE.vsCMAccess access = codeStruct.Access;
Assert.AreEqual(global::EnvDTE.vsCMAccess.vsCMAccessPrivate, access);
}
[Test]
public void Kind_PublicStruct_ReturnsStruct()
{
CreateStruct("public struct MyStruct {}");
global::EnvDTE.vsCMElement kind = codeStruct.Kind;
Assert.AreEqual(global::EnvDTE.vsCMElement.vsCMElementStruct, kind);
}
}
}

760
src/AddIns/Misc/PackageManagement/Test/Src/EnvDTE/CodeTypeRef2Tests.cs

@ -16,169 +16,154 @@ @@ -16,169 +16,154 @@
// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
// DEALINGS IN THE SOFTWARE.
//using System;
//using ICSharpCode.PackageManagement.EnvDTE;
//using ICSharpCode.SharpDevelop.Dom;
//using NUnit.Framework;
//using PackageManagement.Tests.Helpers;
//
//namespace PackageManagement.Tests.EnvDTE
//{
// [TestFixture]
// public class CodeTypeRef2Tests
// {
// CodeTypeRef2 typeRef;
// ReturnTypeHelper helper;
// CodeElement parent;
// ClassHelper classHelper;
//
// [SetUp]
// public void Init()
// {
// helper = new ReturnTypeHelper();
// classHelper = new ClassHelper();
// parent = new CodeElement();
// }
//
// void AddUnderlyingClassToReturnType(string fullyQualifiedName)
// {
// classHelper.CreatePublicClass(fullyQualifiedName);
// helper.AddUnderlyingClass(classHelper.Class);
// }
//
// void CreateCodeTypeRef2()
// {
// typeRef = new CodeTypeRef2(classHelper.ProjectContentHelper.ProjectContent, parent, helper.ReturnType);
// }
//
// void ReturnTypeUsesDifferentProjectContent()
// {
// classHelper = new ClassHelper();
// classHelper.ProjectContentHelper.SetProjectForProjectContent(ProjectHelper.CreateTestProject());
// }
//
// void ReturnTypeSameProjectContent()
// {
// var project = ProjectHelper.CreateTestProject();
// classHelper.ProjectContentHelper.SetProjectForProjectContent(project);
// }
//
// void ProjectContentIsForVisualBasicProject()
// {
// classHelper.ProjectContentHelper.ProjectContentIsForVisualBasicProject();
// }
//
// void ProjectContentIsForCSharpProject()
// {
// classHelper.ProjectContentHelper.ProjectContentIsForCSharpProject();
// }
//
// [Test]
// public void CodeType_ReturnTypeIsSystemString_ReturnsCodeClass2ForSystemStringType()
// {
// helper.CreateReturnType("System.String");
// AddUnderlyingClassToReturnType("System.String");
// CreateCodeTypeRef2();
//
// CodeClass2 codeClass = typeRef.CodeType as CodeClass2;
// string name = codeClass.FullName;
//
// Assert.AreEqual("System.String", name);
// }
//
// [Test]
// public void CodeType_ReturnTypeFromDifferentProjectContent_CodeTypeLocationIsExternal()
// {
// helper.CreateReturnType("System.String");
// AddUnderlyingClassToReturnType("System.String");
// ReturnTypeUsesDifferentProjectContent();
// CreateCodeTypeRef2();
//
// CodeClass2 codeClass = typeRef.CodeType as CodeClass2;
// global::EnvDTE.vsCMInfoLocation location = codeClass.InfoLocation;
//
// Assert.AreEqual(global::EnvDTE.vsCMInfoLocation.vsCMInfoLocationExternal, location);
// }
//
// [Test]
// public void CodeType_ReturnTypeFromSameProjectContent_CodeTypeLocationIsProject()
// {
// helper.CreateReturnType("MyType");
// AddUnderlyingClassToReturnType("MyType");
// ReturnTypeSameProjectContent();
// CreateCodeTypeRef2();
//
// CodeClass2 codeClass = typeRef.CodeType as CodeClass2;
// global::EnvDTE.vsCMInfoLocation location = codeClass.InfoLocation;
//
// Assert.AreEqual(global::EnvDTE.vsCMInfoLocation.vsCMInfoLocationProject, location);
// }
//
// [Test]
// public void IsGeneric_NotGenericReturnType_ReturnsFalse()
// {
// helper.CreateReturnType("MyType");
// helper.AddDotNetName("MyType");
// CreateCodeTypeRef2();
//
// bool generic = typeRef.IsGeneric;
//
// Assert.IsFalse(generic);
// }
//
// [Test]
// public void IsGeneric_GenericReturnType_ReturnsTrue()
// {
// helper.CreateReturnType("System.Nullable");
// helper.AddDotNetName("System.Nullable{System.String}");
// CreateCodeTypeRef2();
//
// bool generic = typeRef.IsGeneric;
//
// Assert.IsTrue(generic);
// }
//
// [Test]
// public void AsFullName_GenericReturnType_ReturnsDotNetNameWithCurlyBracesReplacedWithAngleBrackets()
// {
// helper.CreateReturnType("System.Nullable");
// helper.AddDotNetName("System.Nullable{System.String}");
// CreateCodeTypeRef2();
//
// string name = typeRef.AsFullName;
//
// Assert.AreEqual("System.Nullable<System.String>", name);
// }
//
// [Test]
// public void AsString_ReturnTypeIsSystemStringInCSharpProject_ReturnsString()
// {
// helper.CreateReturnType("System.String");
// ProjectContentIsForCSharpProject();
// AddUnderlyingClassToReturnType("System.String");
// CreateCodeTypeRef2();
//
// string name = typeRef.AsString;
//
// Assert.AreEqual("string", name);
// }
//
// [Test]
// public void AsString_ReturnTypeIsSystemInt32InCSharpProject_ReturnsInt()
// {
// helper.CreateReturnType("System.Int32");
// AddUnderlyingClassToReturnType("System.Int32");
// ProjectContentIsForCSharpProject();
// CreateCodeTypeRef2();
//
// string name = typeRef.AsString;
//
// Assert.AreEqual("int", name);
// }
//
// [Test]
// public void AsString_ReturnTypeIsSystemInt32InVisualBasicProject_ReturnsInteger()
// {
using System;
using System.Linq;
using ICSharpCode.NRefactory.TypeSystem;
using ICSharpCode.PackageManagement.EnvDTE;
using NUnit.Framework;
namespace PackageManagement.Tests.EnvDTE
{
[TestFixture]
public class CodeTypeRef2Tests : CodeModelTestBase
{
CodeTypeRef2 typeRef;
CodeFunction2 parent;
void CreateCodeTypeRef2(string code)
{
AddCodeFile("class.cs", code);
IMethod method = assemblyModel
.TopLevelTypeDefinitions
.First()
.Members
.First()
.Resolve() as IMethod;
parent = new CodeFunction2(codeModelContext, method);
typeRef = parent.Type as CodeTypeRef2;
}
[Test]
public void CodeType_ReturnTypeIsSystemString_ReturnsCodeClass2ForSystemStringType()
{
CreateCodeTypeRef2(
"using System;\r\n" +
"class MyClass {\r\n" +
" string MyMethod() { return null; }\r\n" +
"}");
CodeClass2 codeClass = typeRef.CodeType as CodeClass2;
string name = codeClass.FullName;
Assert.AreEqual("System.String", name);
}
[Test]
public void CodeType_ReturnTypeFromDifferentAssemblyFromProjectt_CodeTypeLocationIsExternal()
{
CreateCodeTypeRef2(
"using System;\r\n" +
"class MyClass {\r\n" +
" string MyMethod() { return null; }\r\n" +
"}");
CodeClass2 codeClass = typeRef.CodeType as CodeClass2;
global::EnvDTE.vsCMInfoLocation location = codeClass.InfoLocation;
Assert.AreEqual(global::EnvDTE.vsCMInfoLocation.vsCMInfoLocationExternal, location);
}
[Test]
public void CodeType_ReturnTypeFromSameProjectContent_CodeTypeLocationIsProject()
{
CreateCodeTypeRef2(
"using System;\r\n" +
"class MyClass {\r\n" +
" MyType MyMethod() { return null; }\r\n" +
"}\r\n" +
"class MyType {}");
CodeClass2 codeClass = typeRef.CodeType as CodeClass2;
global::EnvDTE.vsCMInfoLocation location = codeClass.InfoLocation;
Assert.AreEqual(global::EnvDTE.vsCMInfoLocation.vsCMInfoLocationProject, location);
}
[Test]
public void IsGeneric_NotGenericReturnType_ReturnsFalse()
{
CreateCodeTypeRef2(
"using System;\r\n" +
"class MyClass {\r\n" +
" string MyMethod() { return null; }\r\n" +
"}");
bool generic = typeRef.IsGeneric;
Assert.IsFalse(generic);
}
[Test]
public void IsGeneric_GenericReturnType_ReturnsTrue()
{
CreateCodeTypeRef2(
"using System;\r\n" +
"class MyClass {\r\n" +
" Nullable<int> MyMethod() { return null; }\r\n" +
"}");
bool generic = typeRef.IsGeneric;
Assert.IsTrue(generic);
}
[Test]
public void AsFullName_GenericReturnType_ReturnsDotNetNameWithCurlyBracesReplacedWithAngleBrackets()
{
CreateCodeTypeRef2(
"using System;\r\n" +
"class MyClass {\r\n" +
" Nullable<int> MyMethod() { return null; }\r\n" +
"}");
string name = typeRef.AsFullName;
Assert.AreEqual("System.Nullable<System.Int32>", name);
}
[Test]
public void AsString_ReturnTypeIsSystemStringInCSharpProject_ReturnsString()
{
CreateCodeTypeRef2(
"using System;\r\n" +
"class MyClass {\r\n" +
" string MyMethod() { return null; }\r\n" +
"}");
string name = typeRef.AsString;
Assert.AreEqual("string", name);
}
[Test]
public void AsString_ReturnTypeIsSystemInt32InCSharpProject_ReturnsInt()
{
CreateCodeTypeRef2(
"using System;\r\n" +
"class MyClass {\r\n" +
" System.Int32 MyMethod() { return 10; }\r\n" +
"}");
string name = typeRef.AsString;
Assert.AreEqual("int", name);
}
[Test]
[Ignore("VB.NET not supported")]
public void AsString_ReturnTypeIsSystemInt32InVisualBasicProject_ReturnsInteger()
{
// helper.CreateReturnType("System.Int32");
// AddUnderlyingClassToReturnType("System.Int32");
// ProjectContentIsForVisualBasicProject();
@ -187,210 +172,245 @@ @@ -187,210 +172,245 @@
// string name = typeRef.AsString;
//
// Assert.AreEqual("Integer", name);
// }
//
// [Test]
// public void AsString_ReturnTypeIsCustomType_ReturnsFullTypeName()
// {
// helper.CreateReturnType("Test.MyClass");
// AddUnderlyingClassToReturnType("Test.MyClass");
// ProjectContentIsForCSharpProject();
// helper.AddDotNetName("Test.MyClass");
// CreateCodeTypeRef2();
//
// string name = typeRef.AsString;
//
// Assert.AreEqual("Test.MyClass", name);
// }
//
// [Test]
// public void TypeKind_ReturnTypeIsReferenceType_ReturnsClassType()
// {
// helper.CreateReturnType("Test.MyClass");
// AddUnderlyingClassToReturnType("Test.MyClass");
// helper.MakeReferenceType();
// CreateCodeTypeRef2();
//
// global::EnvDTE.vsCMTypeRef kind = typeRef.TypeKind;
//
// Assert.AreEqual(global::EnvDTE.vsCMTypeRef.vsCMTypeRefCodeType, kind);
// }
//
// [Test]
// public void TypeKind_ReturnTypeIsNotReferenceType_ReturnsNonClassType()
// {
// helper.CreateReturnType("Test.MyClass");
// CreateCodeTypeRef2();
//
// global::EnvDTE.vsCMTypeRef kind = typeRef.TypeKind;
//
// Assert.AreEqual(global::EnvDTE.vsCMTypeRef.vsCMTypeRefOther, kind);
// }
//
// [Test]
// public void TypeKind_ReturnTypeIsSystemVoid_ReturnsVoidType()
// {
// helper.CreateReturnType("System.Void");
// CreateCodeTypeRef2();
//
// global::EnvDTE.vsCMTypeRef kind = typeRef.TypeKind;
//
// Assert.AreEqual(global::EnvDTE.vsCMTypeRef.vsCMTypeRefVoid, kind);
// }
//
// [Test]
// public void TypeKind_ReturnTypeIsSystemString_ReturnsStringType()
// {
// helper.CreateReturnType("System.String");
// helper.MakeReferenceType();
// CreateCodeTypeRef2();
//
// global::EnvDTE.vsCMTypeRef kind = typeRef.TypeKind;
//
// Assert.AreEqual(global::EnvDTE.vsCMTypeRef.vsCMTypeRefString, kind);
// }
//
// [Test]
// public void TypeKind_ReturnTypeIsSystemBoolean_ReturnsBooleanType()
// {
// helper.CreateReturnType("System.Boolean");
// CreateCodeTypeRef2();
//
// global::EnvDTE.vsCMTypeRef kind = typeRef.TypeKind;
//
// Assert.AreEqual(global::EnvDTE.vsCMTypeRef.vsCMTypeRefBool, kind);
// }
//
// [Test]
// public void TypeKind_ReturnTypeIsSystemByte_ReturnsByteType()
// {
// helper.CreateReturnType("System.Byte");
// CreateCodeTypeRef2();
//
// global::EnvDTE.vsCMTypeRef kind = typeRef.TypeKind;
//
// Assert.AreEqual(global::EnvDTE.vsCMTypeRef.vsCMTypeRefByte, kind);
// }
//
// [Test]
// public void TypeKind_ReturnTypeIsSystemChar_ReturnsCharType()
// {
// helper.CreateReturnType("System.Char");
// CreateCodeTypeRef2();
//
// global::EnvDTE.vsCMTypeRef kind = typeRef.TypeKind;
//
// Assert.AreEqual(global::EnvDTE.vsCMTypeRef.vsCMTypeRefChar, kind);
// }
//
// [Test]
// public void TypeKind_ReturnTypeIsSystemDecimal_ReturnsDecimalType()
// {
// helper.CreateReturnType("System.Decimal");
// CreateCodeTypeRef2();
//
// global::EnvDTE.vsCMTypeRef kind = typeRef.TypeKind;
//
// Assert.AreEqual(global::EnvDTE.vsCMTypeRef.vsCMTypeRefDecimal, kind);
// }
//
// [Test]
// public void TypeKind_ReturnTypeIsSystemDouble_ReturnsDoubleType()
// {
// helper.CreateReturnType("System.Double");
// CreateCodeTypeRef2();
//
// global::EnvDTE.vsCMTypeRef kind = typeRef.TypeKind;
//
// Assert.AreEqual(global::EnvDTE.vsCMTypeRef.vsCMTypeRefDouble, kind);
// }
//
// [Test]
// public void TypeKind_ReturnTypeIsSystemSingle_ReturnsFloatType()
// {
// helper.CreateReturnType("System.Single");
// CreateCodeTypeRef2();
//
// global::EnvDTE.vsCMTypeRef kind = typeRef.TypeKind;
//
// Assert.AreEqual(global::EnvDTE.vsCMTypeRef.vsCMTypeRefFloat, kind);
// }
//
// [Test]
// public void TypeKind_ReturnTypeIsSystemInt32_ReturnsIntType()
// {
// helper.CreateReturnType("System.Int32");
// CreateCodeTypeRef2();
//
// global::EnvDTE.vsCMTypeRef kind = typeRef.TypeKind;
//
// Assert.AreEqual(global::EnvDTE.vsCMTypeRef.vsCMTypeRefInt, kind);
// }
//
// [Test]
// public void TypeKind_ReturnTypeIsSystemInt16_ReturnsShortType()
// {
// helper.CreateReturnType("System.Int16");
// CreateCodeTypeRef2();
//
// global::EnvDTE.vsCMTypeRef kind = typeRef.TypeKind;
//
// Assert.AreEqual(global::EnvDTE.vsCMTypeRef.vsCMTypeRefShort, kind);
// }
//
// [Test]
// public void TypeKind_ReturnTypeIsSystemInt64_ReturnsLongType()
// {
// helper.CreateReturnType("System.Int64");
// CreateCodeTypeRef2();
//
// global::EnvDTE.vsCMTypeRef kind = typeRef.TypeKind;
//
// Assert.AreEqual(global::EnvDTE.vsCMTypeRef.vsCMTypeRefLong, kind);
// }
//
// [Test]
// public void TypeKind_ReturnTypeIsSystemUInt32_ReturnsIntType()
// {
// helper.CreateReturnType("System.UInt32");
// CreateCodeTypeRef2();
//
// global::EnvDTE.vsCMTypeRef kind = typeRef.TypeKind;
//
// Assert.AreEqual(global::EnvDTE.vsCMTypeRef.vsCMTypeRefInt, kind);
// }
//
// [Test]
// public void TypeKind_ReturnTypeIsSystemUInt16_ReturnsShortType()
// {
// helper.CreateReturnType("System.UInt16");
// CreateCodeTypeRef2();
//
// global::EnvDTE.vsCMTypeRef kind = typeRef.TypeKind;
//
// Assert.AreEqual(global::EnvDTE.vsCMTypeRef.vsCMTypeRefShort, kind);
// }
//
// [Test]
// public void TypeKind_ReturnTypeIsSystemUInt64_ReturnsLongType()
// {
// helper.CreateReturnType("System.UInt64");
// CreateCodeTypeRef2();
//
// global::EnvDTE.vsCMTypeRef kind = typeRef.TypeKind;
//
// Assert.AreEqual(global::EnvDTE.vsCMTypeRef.vsCMTypeRefLong, kind);
// }
//
// [Test]
// public void TypeKind_ReturnTypeIsSystemObject_ReturnsObjectType()
// {
// helper.CreateReturnType("System.Object");
// CreateCodeTypeRef2();
//
// global::EnvDTE.vsCMTypeRef kind = typeRef.TypeKind;
//
// Assert.AreEqual(global::EnvDTE.vsCMTypeRef.vsCMTypeRefObject, kind);
// }
// }
//}
}
[Test]
public void AsString_ReturnTypeIsCustomType_ReturnsFullTypeName()
{
CreateCodeTypeRef2(
"using System;\r\n" +
"namespace Test {\r\n" +
" class MyClass {\r\n" +
" CustomType MyMethod() { return null; }\r\n" +
" }\r\n" +
" class CustomType {}\r\n" +
"}");
string name = typeRef.AsString;
Assert.AreEqual("Test.CustomType", name);
}
[Test]
public void TypeKind_ReturnTypeIsReferenceType_ReturnsClassType()
{
CreateCodeTypeRef2(
"class MyClass {\r\n" +
" MyType MyMethod() { return null; }\r\n" +
"}\r\n" +
"class MyType {}");
global::EnvDTE.vsCMTypeRef kind = typeRef.TypeKind;
Assert.AreEqual(global::EnvDTE.vsCMTypeRef.vsCMTypeRefCodeType, kind);
}
[Test]
public void TypeKind_ReturnTypeIsUnknownTypeAndNotReferenceType_ReturnsNonClassType()
{
CreateCodeTypeRef2(
"class MyClass {\r\n" +
" MyType MyMethod() { return null; }\r\n" +
"}");
global::EnvDTE.vsCMTypeRef kind = typeRef.TypeKind;
Assert.AreEqual(global::EnvDTE.vsCMTypeRef.vsCMTypeRefOther, kind);
}
[Test]
public void TypeKind_ReturnTypeIsSystemVoid_ReturnsVoidType()
{
CreateCodeTypeRef2(
"class MyClass {\r\n" +
" void MyMethod() { }\r\n" +
"}");
global::EnvDTE.vsCMTypeRef kind = typeRef.TypeKind;
Assert.AreEqual(global::EnvDTE.vsCMTypeRef.vsCMTypeRefVoid, kind);
}
[Test]
public void TypeKind_ReturnTypeIsSystemString_ReturnsStringType()
{
CreateCodeTypeRef2(
"class MyClass {\r\n" +
" string MyMethod() { return null; }\r\n" +
"}");
global::EnvDTE.vsCMTypeRef kind = typeRef.TypeKind;
Assert.AreEqual(global::EnvDTE.vsCMTypeRef.vsCMTypeRefString, kind);
}
[Test]
public void TypeKind_ReturnTypeIsSystemBoolean_ReturnsBooleanType()
{
CreateCodeTypeRef2(
"class MyClass {\r\n" +
" bool MyMethod() { return false; }\r\n" +
"}");
global::EnvDTE.vsCMTypeRef kind = typeRef.TypeKind;
Assert.AreEqual(global::EnvDTE.vsCMTypeRef.vsCMTypeRefBool, kind);
}
[Test]
public void TypeKind_ReturnTypeIsSystemByte_ReturnsByteType()
{
CreateCodeTypeRef2(
"class MyClass {\r\n" +
" byte MyMethod() { return 0x1; }\r\n" +
"}");
global::EnvDTE.vsCMTypeRef kind = typeRef.TypeKind;
Assert.AreEqual(global::EnvDTE.vsCMTypeRef.vsCMTypeRefByte, kind);
}
[Test]
public void TypeKind_ReturnTypeIsSystemChar_ReturnsCharType()
{
CreateCodeTypeRef2(
"class MyClass {\r\n" +
" char MyMethod() { return 'a'; }\r\n" +
"}");
global::EnvDTE.vsCMTypeRef kind = typeRef.TypeKind;
Assert.AreEqual(global::EnvDTE.vsCMTypeRef.vsCMTypeRefChar, kind);
}
[Test]
public void TypeKind_ReturnTypeIsSystemDecimal_ReturnsDecimalType()
{
CreateCodeTypeRef2(
"class MyClass {\r\n" +
" decimal MyMethod() { return 0; }\r\n" +
"}");
global::EnvDTE.vsCMTypeRef kind = typeRef.TypeKind;
Assert.AreEqual(global::EnvDTE.vsCMTypeRef.vsCMTypeRefDecimal, kind);
}
[Test]
public void TypeKind_ReturnTypeIsSystemDouble_ReturnsDoubleType()
{
CreateCodeTypeRef2(
"class MyClass {\r\n" +
" double MyMethod() { return 0; }\r\n" +
"}");
global::EnvDTE.vsCMTypeRef kind = typeRef.TypeKind;
Assert.AreEqual(global::EnvDTE.vsCMTypeRef.vsCMTypeRefDouble, kind);
}
[Test]
public void TypeKind_ReturnTypeIsSystemSingle_ReturnsFloatType()
{
CreateCodeTypeRef2(
"class MyClass {\r\n" +
" System.Single MyMethod() { return 0.1; }\r\n" +
"}");
global::EnvDTE.vsCMTypeRef kind = typeRef.TypeKind;
Assert.AreEqual(global::EnvDTE.vsCMTypeRef.vsCMTypeRefFloat, kind);
}
[Test]
public void TypeKind_ReturnTypeIsSystemInt32_ReturnsIntType()
{
CreateCodeTypeRef2(
"class MyClass {\r\n" +
" System.Int32 MyMethod() { return 0; }\r\n" +
"}");
global::EnvDTE.vsCMTypeRef kind = typeRef.TypeKind;
Assert.AreEqual(global::EnvDTE.vsCMTypeRef.vsCMTypeRefInt, kind);
}
[Test]
public void TypeKind_ReturnTypeIsSystemInt16_ReturnsShortType()
{
CreateCodeTypeRef2(
"class MyClass {\r\n" +
" System.Int16 MyMethod() { return 0; }\r\n" +
"}");
global::EnvDTE.vsCMTypeRef kind = typeRef.TypeKind;
Assert.AreEqual(global::EnvDTE.vsCMTypeRef.vsCMTypeRefShort, kind);
}
[Test]
public void TypeKind_ReturnTypeIsSystemInt64_ReturnsLongType()
{
CreateCodeTypeRef2(
"class MyClass {\r\n" +
" System.Int64 MyMethod() { return 0; }\r\n" +
"}");
global::EnvDTE.vsCMTypeRef kind = typeRef.TypeKind;
Assert.AreEqual(global::EnvDTE.vsCMTypeRef.vsCMTypeRefLong, kind);
}
[Test]
public void TypeKind_ReturnTypeIsSystemUInt32_ReturnsIntType()
{
CreateCodeTypeRef2(
"class MyClass {\r\n" +
" System.UInt32 MyMethod() { return 0; }\r\n" +
"}");
global::EnvDTE.vsCMTypeRef kind = typeRef.TypeKind;
Assert.AreEqual(global::EnvDTE.vsCMTypeRef.vsCMTypeRefInt, kind);
}
[Test]
public void TypeKind_ReturnTypeIsSystemUInt16_ReturnsShortType()
{
CreateCodeTypeRef2(
"class MyClass {\r\n" +
" System.UInt16 MyMethod() { return 0; }\r\n" +
"}");
global::EnvDTE.vsCMTypeRef kind = typeRef.TypeKind;
Assert.AreEqual(global::EnvDTE.vsCMTypeRef.vsCMTypeRefShort, kind);
}
[Test]
public void TypeKind_ReturnTypeIsSystemUInt64_ReturnsLongType()
{
CreateCodeTypeRef2(
"class MyClass {\r\n" +
" System.UInt64 MyMethod() { return 0; }\r\n" +
"}");
global::EnvDTE.vsCMTypeRef kind = typeRef.TypeKind;
Assert.AreEqual(global::EnvDTE.vsCMTypeRef.vsCMTypeRefLong, kind);
}
[Test]
public void TypeKind_ReturnTypeIsSystemObject_ReturnsObjectType()
{
CreateCodeTypeRef2(
"class MyClass {\r\n" +
" System.Object MyMethod() { return null; }\r\n" +
"}");
global::EnvDTE.vsCMTypeRef kind = typeRef.TypeKind;
Assert.AreEqual(global::EnvDTE.vsCMTypeRef.vsCMTypeRefObject, kind);
}
}
}

367
src/AddIns/Misc/PackageManagement/Test/Src/EnvDTE/CodeTypeTests.cs

@ -16,198 +16,175 @@ @@ -16,198 +16,175 @@
// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
// DEALINGS IN THE SOFTWARE.
//using System;
//using ICSharpCode.PackageManagement.EnvDTE;
//using ICSharpCode.SharpDevelop.Dom;
//using SDProject = ICSharpCode.SharpDevelop.Project;
//using NUnit.Framework;
//using PackageManagement.Tests.Helpers;
//
//namespace PackageManagement.Tests.EnvDTE
//{
// [TestFixture]
// public class CodeTypeTests
// {
// CodeType codeType;
// ClassHelper helper;
//
// void CreateProjectContent()
// {
// helper = new ClassHelper();
// }
//
// void CreateClass(string name)
// {
// helper.CreateClass(name);
// }
//
// void CreateCodeType()
// {
// codeType = new CodeType(helper.ProjectContentHelper.ProjectContent, helper.Class);
// }
//
// TestableProject AddProjectToProjectContent()
// {
// TestableProject project = ProjectHelper.CreateTestProject();
// helper.ProjectContentHelper.SetProjectForProjectContent(project);
// return project;
// }
//
// void AddAttributeToClass(string name)
// {
// helper.AddAttributeToClass(name);
// }
//
// SDProject.FileProjectItem AddFileToProjectAndProjectContent(TestableProject project, string fileName)
// {
// helper.CompilationUnitHelper.SetFileName(fileName);
// return project.AddFile(fileName);
// }
//
// /// <summary>
// /// Classes at the end of the array are at the top of the inheritance tree.
// /// </summary>
// void AddClassInheritanceTree(params string[] classNames)
// {
// helper.AddClassInheritanceTreeClassesOnly(classNames);
// }
//
// [Test]
// public void Attributes_ClassHasOneAttribute_ReturnsOneAttribute()
// {
// CreateProjectContent();
// CreateClass("TestClass");
// AddAttributeToClass("TestAttribute");
// CreateCodeType();
//
// global::EnvDTE.CodeElements attributes = codeType.Attributes;
//
// CodeAttribute2 attribute = attributes.Item(1) as CodeAttribute2;
//
// Assert.AreEqual(1, attributes.Count);
// Assert.AreEqual("Test", attribute.Name);
// }
//
// [Test]
// public void ProjectItem_ProjectContentHasNullProject_ReturnsNull()
// {
// CreateProjectContent();
// CreateClass("Class1");
// CreateCodeType();
//
// global::EnvDTE.ProjectItem item = codeType.ProjectItem;
//
// Assert.IsNull(item);
// }
//
// [Test]
// public void ProjectItem_ProjectContentHasProject_ReturnsNonNullProjectItem()
// {
// CreateProjectContent();
// TestableProject project = AddProjectToProjectContent();
// AddFileToProjectAndProjectContent(project, @"d:\projects\MyProject\class1.cs");
// CreateClass("Class1");
// CreateCodeType();
//
// global::EnvDTE.ProjectItem item = codeType.ProjectItem;
//
// Assert.IsNotNull(item);
// }
//
// [Test]
// public void ProjectItem_ProjectContentHasProject_ReturnsProjectItemThatUsesProject()
// {
// CreateProjectContent();
// TestableProject project = AddProjectToProjectContent();
// project.FileName = @"d:\projects\MyProject\MyProject.csproj";
// AddFileToProjectAndProjectContent(project, @"d:\projects\MyProject\class1.cs");
// CreateClass("Class1");
// CreateCodeType();
//
// global::EnvDTE.ProjectItem item = codeType.ProjectItem;
//
// Assert.AreEqual(@"d:\projects\MyProject\MyProject.csproj", item.ContainingProject.FileName);
// }
//
// [Test]
// public void ProjectItem_ProjectContentHasProject_ReturnsProjectItemThatUsesProjectFileItem()
// {
// CreateProjectContent();
// TestableProject project = AddProjectToProjectContent();
// string fileName = @"d:\projects\MyProject\test.cs";
// SDProject.FileProjectItem fileProjectItem = AddFileToProjectAndProjectContent(project, fileName);
//
// CreateClass("Class1");
// CreateCodeType();
//
// global::EnvDTE.ProjectItem item = codeType.ProjectItem;
//
// Assert.AreEqual("test.cs", item.Name);
// }
//
// [Test]
// public void IsDerivedFrom_ClassFullyQualifiedNameMatchesTypeNameBeingChecked_ReturnsTrue()
// {
// CreateProjectContent();
// CreateClass("System.Web.Mvc.ActionResult");
// CreateCodeType();
//
// bool derivedFrom = codeType.get_IsDerivedFrom("System.Web.Mvc.ActionResult");
//
// Assert.IsTrue(derivedFrom);
// }
//
// [Test]
// public void IsDerivedFrom_ClassFullyQualifiedNameDoesNotMatcheTypeNameBeingChecked_ReturnsFalse()
// {
// CreateProjectContent();
// CreateClass("TestClass");
// AddClassInheritanceTree("System.Object");
// CreateCodeType();
//
// bool derivedFrom = codeType.get_IsDerivedFrom("System.Web.Mvc.ActionResult");
//
// Assert.IsFalse(derivedFrom);
// }
//
// [Test]
// public void IsDerivedFrom_ClassBaseTypeFullyQualifiedNameMatchesTypeName_ReturnsTrue()
// {
// CreateProjectContent();
// CreateClass("CustomActionResult");
// helper.AddBaseTypeToClass("System.Web.Mvc.ActionResult");
// CreateCodeType();
//
// bool derivedFrom = codeType.get_IsDerivedFrom("System.Web.Mvc.ActionResult");
//
// Assert.IsTrue(derivedFrom);
// }
//
// [Test]
// public void IsDerivedFrom_ClassHasTypeInClassInheritanceTreeButNotImmediateBaseType_ReturnsTrue()
// {
// CreateProjectContent();
// CreateClass("CustomActionResult");
// AddClassInheritanceTree("CustomActionResultBase", "System.Web.Mvc.ActionResult");
// CreateCodeType();
//
// bool derivedFrom = codeType.get_IsDerivedFrom("System.Web.Mvc.ActionResult");
//
// Assert.IsTrue(derivedFrom);
// }
//
// [Test]
// public void IsDerivedFrom_ClassHasClassInInheritanceTreeButNotImmediateParentAndClassBaseTypePropertyIsNotNull_ReturnsTrue()
// {
// CreateProjectContent();
// CreateClass("CustomActionResult");
// helper.AddBaseTypeToClass("CustomActionResultBase");
// AddClassInheritanceTree("CustomActionResultBase", "System.Web.Mvc.ActionResult");
// CreateCodeType();
//
// bool derivedFrom = codeType.get_IsDerivedFrom("System.Web.Mvc.ActionResult");
//
// Assert.IsTrue(derivedFrom);
// }
// }
//}
using System;
using System.Linq;
using ICSharpCode.Core;
using ICSharpCode.NRefactory.TypeSystem;
using ICSharpCode.PackageManagement.EnvDTE;
using ICSharpCode.SharpDevelop.Dom;
using FileProjectItem = ICSharpCode.SharpDevelop.Project.FileProjectItem;
using NUnit.Framework;
using PackageManagement.Tests.Helpers;
using Rhino.Mocks;
using SDProject = ICSharpCode.SharpDevelop.Project;
namespace PackageManagement.Tests.EnvDTE
{
[TestFixture]
public class CodeTypeTests : CodeModelTestBase
{
CodeType codeType;
void CreateCodeType(string code, string fileName = "class.cs")
{
AddCodeFile(fileName, code);
ITypeDefinition typeDefinition = assemblyModel.TopLevelTypeDefinitions.Single().Resolve();
CreateCodeType(typeDefinition);
}
void CreateCodeType(ITypeDefinition typeDefinition)
{
codeType = new CodeType(codeModelContext, typeDefinition);
}
FileProjectItem AddFileToProject(string fileName)
{
var projectItem = new FileProjectItem(project, ICSharpCode.SharpDevelop.Project.ItemType.Compile);
project
.Stub(p => p.FindFile(new FileName(fileName)))
.Return(projectItem);
project
.Stub(p => p.SyncRoot)
.Return(new object());
return projectItem;
}
[Test]
public void Attributes_ClassHasOneAttribute_ReturnsOneAttribute()
{
CreateCodeType("[TestAttribute] public class TestClass {}");
global::EnvDTE.CodeElements attributes = codeType.Attributes;
CodeAttribute2 attribute = attributes.Item(1) as CodeAttribute2;
Assert.AreEqual(1, attributes.Count);
Assert.AreEqual("Test", attribute.Name);
}
[Test]
public void ProjectItem_TypeNotFromProject_ReturnsNull()
{
AddCodeFile("class.cs", "public class TestClass {}");
ITypeDefinition typeDefinition = projectContent
.CreateCompilation()
.ReferencedAssemblies
.FirstOrDefault()
.TopLevelTypeDefinitions.First();
CreateCodeType(typeDefinition);
global::EnvDTE.ProjectItem item = codeType.ProjectItem;
Assert.IsNull(item);
}
[Test]
public void ProjectItem_TypeIsFromProject_ReturnsNonNullProjectItem()
{
string fileName = @"d:\projects\MyProject\class1.cs";
CreateCodeType("public class TestClass {}", fileName);
AddFileToProject(fileName);
global::EnvDTE.ProjectItem item = codeType.ProjectItem;
Assert.IsNotNull(item);
}
[Test]
public void ProjectItem_TypeIsFromProject_ReturnsProjectItemThatUsesProject()
{
string fileName = @"d:\projects\MyProject\class1.cs";
CreateCodeType("public class TestClass {}", fileName);
TestableProject testableProject = ProjectHelper.CreateTestProject();
testableProject.FileName = new FileName(@"d:\projects\MyProject\MyProject.csproj");
codeModelContext.CurrentProject = testableProject;
testableProject.AddFile(fileName);
global::EnvDTE.ProjectItem item = codeType.ProjectItem;
Assert.AreEqual(@"d:\projects\MyProject\MyProject.csproj", item.ContainingProject.FileName);
}
[Test]
public void ProjectItem_ProjectContentHasProject_ReturnsProjectItemThatUsesProjectFileItem()
{
string fileName = @"d:\projects\MyProject\test.cs";
CreateCodeType("public class TestClass {}", fileName);
TestableProject testableProject = ProjectHelper.CreateTestProject();
testableProject.FileName = new FileName(@"d:\projects\MyProject\MyProject.csproj");
codeModelContext.CurrentProject = testableProject;
testableProject.AddFile(fileName);
global::EnvDTE.ProjectItem item = codeType.ProjectItem;
Assert.AreEqual("test.cs", item.Name);
}
[Test]
public void IsDerivedFrom_ClassFullyQualifiedNameMatchesTypeNameBeingChecked_ReturnsTrue()
{
CreateCodeType(
"namespace System.Web.Mvc {\r\n" +
" public class ActionResult {}\r\n" +
"}");
bool derivedFrom = codeType.get_IsDerivedFrom("System.Web.Mvc.ActionResult");
Assert.IsTrue(derivedFrom);
}
[Test]
public void IsDerivedFrom_ClassFullyQualifiedNameDoesNotMatchTypeNameBeingChecked_ReturnsFalse()
{
CreateCodeType("public class Test {}");
bool derivedFrom = codeType.get_IsDerivedFrom("System.Web.Mvc.ActionResult");
Assert.IsFalse(derivedFrom);
}
[Test]
public void IsDerivedFrom_ClassBaseTypeFullyQualifiedNameMatchesTypeName_ReturnsTrue()
{
AddCodeFile(
"class.cs",
"namespace System.Web.Mvc {\r\n" +
" public class CustomActionResult : ActionResult {}\r\n" +
" public class ActionResult {}\r\n" +
"}");
CreateCodeType(assemblyModel.TopLevelTypeDefinitions.First().Resolve());
bool derivedFrom = codeType.get_IsDerivedFrom("System.Web.Mvc.ActionResult");
Assert.IsTrue(derivedFrom);
}
[Test]
public void IsDerivedFrom_ClassHasTypeInClassInheritanceTreeButNotImmediateBaseType_ReturnsTrue()
{
AddCodeFile(
"class.cs",
"namespace System.Web.Mvc {\r\n" +
" public class CustomActionResult : CustomActionResultBase {}\r\n" +
" public class CustomActionResultBase : ActionResult {}\r\n" +
" public class ActionResult {}\r\n" +
"}");
CreateCodeType(assemblyModel.TopLevelTypeDefinitions.First().Resolve());
bool derivedFrom = codeType.get_IsDerivedFrom("System.Web.Mvc.ActionResult");
Assert.IsTrue(derivedFrom);
}
}
}

Some files were not shown because too many files have changed in this diff Show More

Loading…
Cancel
Save