Browse Source

Started refactoring the project service / solution API.

pull/32/merge
Daniel Grunwald 13 years ago
parent
commit
b88947a4fe
  1. 4
      SharpDevelop.Tests.sln
  2. 6
      src/AddIns/Analysis/CodeCoverage/Project/Src/SolutionCodeCoverageResults.cs
  3. 2
      src/AddIns/Analysis/CodeCoverage/Test/Coverage/SolutionCodeCoverageResultsTests.cs
  4. 2
      src/AddIns/Analysis/UnitTesting/Test/Utils/MockCSharpProject.cs
  5. 2
      src/AddIns/BackendBindings/AspNet.Mvc/Test/Helpers/TestableProject.cs
  6. 10
      src/AddIns/BackendBindings/CSharpBinding/Project/Src/Project/CSharpProject.cs
  7. 2
      src/AddIns/BackendBindings/CppBinding/CppBinding/Project/ApplicationOptions.cs
  8. 4
      src/AddIns/BackendBindings/Scripting/Test/Utils/MockProject.cs
  9. 2
      src/AddIns/BackendBindings/WixBinding/Test/Utils/WixBindingTestsHelper.cs
  10. 2
      src/AddIns/Misc/PackageManagement/Project/Src/ConfigSettingsFileSystem.cs
  11. 12
      src/AddIns/Misc/PackageManagement/Project/Src/Design/FakePackageManagementProjectService.cs
  12. 6
      src/AddIns/Misc/PackageManagement/Project/Src/IPackageManagementProjectService.cs
  13. 2
      src/AddIns/Misc/PackageManagement/Project/Src/ISolutionPackageRepositoryFactory.cs
  14. 8
      src/AddIns/Misc/PackageManagement/Project/Src/PackageManagementProjectService.cs
  15. 2
      src/AddIns/Misc/PackageManagement/Project/Src/PackageManagementSolution.cs
  16. 2
      src/AddIns/Misc/PackageManagement/Project/Src/Scripting/IPackageInitializationScriptsFactory.cs
  17. 4
      src/AddIns/Misc/PackageManagement/Project/Src/Scripting/PackageManagementConsoleViewModel.cs
  18. 2
      src/AddIns/Misc/PackageManagement/Project/Src/Scripting/PowerShellWorkingDirectory.cs
  19. 2
      src/AddIns/Misc/PackageManagement/Project/Src/SharpDevelopPackageManagerFactory.cs
  20. 4
      src/AddIns/Misc/PackageManagement/Project/Src/SolutionPackageRepository.cs
  21. 2
      src/AddIns/Misc/PackageManagement/Project/Src/SolutionPackageRepositoryFactory.cs
  22. 4
      src/AddIns/Misc/PackageManagement/Project/Src/SolutionPackageRepositoryPath.cs
  23. 4
      src/AddIns/Misc/PackageManagement/Test/Src/Helpers/FakePackageInitializationScriptsInSolutionFactory.cs
  24. 4
      src/AddIns/Misc/PackageManagement/Test/Src/Helpers/FakeSolutionPackageRepositoryFactory.cs
  25. 4
      src/AddIns/Misc/PackageManagement/Test/Src/Helpers/ProjectHelper.cs
  26. 2
      src/AddIns/Misc/PackageManagement/Test/Src/PackageManagementSelectedProjectsTests.cs
  27. 4
      src/AddIns/Misc/PackageManagement/Test/Src/PackageManagementSolutionTests.cs
  28. 16
      src/AddIns/Misc/PackageManagement/Test/Src/Scripting/PackageManagementConsoleViewModelTests.cs
  29. 2
      src/AddIns/Misc/PackageManagement/Test/Src/SelectedProjectsForInstalledPackagesTests.cs
  30. 2
      src/AddIns/Misc/PackageManagement/Test/Src/SelectedProjectsForUpdatedPackagesTests.cs
  31. 4
      src/AddIns/Misc/PackageManagement/Test/Src/SolutionPackageRepositoryPathTests.cs
  32. 6
      src/AddIns/Misc/PackageManagement/Test/Src/SolutionPackageRepositoryTests.cs
  33. 4
      src/AddIns/VersionControl/SubversionAddIn/Src/Commands/ProjectBrowserCommands.cs
  34. 9
      src/Main/Base/Project/Designer/TypeResolutionService.cs
  35. 15
      src/Main/Base/Project/Dom/IModelCollection.cs
  36. 15
      src/Main/Base/Project/Dom/SimpleModelCollection.cs
  37. 22
      src/Main/Base/Project/ICSharpCode.SharpDevelop.csproj
  38. 2
      src/Main/Base/Project/Project/Build/IBuildService.cs
  39. 104
      src/Main/Base/Project/Project/ConfigurationAndPlatform.cs
  40. 42
      src/Main/Base/Project/Project/IConfigurable.cs
  41. 33
      src/Main/Base/Project/Project/IConfigurationMapping.cs
  42. 54
      src/Main/Base/Project/Project/IConfigurationOrPlatformNameCollection.cs
  43. 80
      src/Main/Base/Project/Project/IProjectService.cs
  44. 88
      src/Main/Base/Project/Project/ISolution.cs
  45. 40
      src/Main/Base/Project/Project/ISolutionFolder.cs
  46. 41
      src/Main/Base/Project/Project/ISolutionItem.cs
  47. 5
      src/Main/Base/Project/Services/SD.cs
  48. 25
      src/Main/Base/Project/Src/Commands/BuildCommands.cs
  49. 2
      src/Main/Base/Project/Src/Commands/FileCommands.cs
  50. 2
      src/Main/Base/Project/Src/Gui/Components/LocalizedPropertyGrid/LocalizedObject.cs
  51. 4
      src/Main/Base/Project/Src/Gui/Components/LocalizedPropertyGrid/LocalizedPropertyDescriptor.cs
  52. 2
      src/Main/Base/Project/Src/Gui/Dialogs/OptionPanels/ProjectOptions/ApplicationSettings.xaml.cs
  53. 2
      src/Main/Base/Project/Src/Gui/Dialogs/OptionPanels/ProjectOptions/BuildAdvanced.xaml.cs
  54. 12
      src/Main/Base/Project/Src/Gui/Dialogs/OptionPanels/ProjectOptions/ProjectOptionPanel.cs
  55. 168
      src/Main/Base/Project/Src/Gui/Dialogs/SolutionConfiguration/EditAvailableConfigurationsDialog.cs
  56. 96
      src/Main/Base/Project/Src/Gui/Dialogs/SolutionConfiguration/SolutionConfigurationEditor.cs
  57. 2
      src/Main/Base/Project/Src/Gui/Dialogs/WordCountDialog.cs
  58. 11
      src/Main/Base/Project/Src/Gui/Pads/FileScout.cs
  59. 4
      src/Main/Base/Project/Src/Gui/Pads/ProjectBrowser/Commands/ProjectNodeCommands.cs
  60. 32
      src/Main/Base/Project/Src/Gui/Pads/ProjectBrowser/Commands/SolutionNodeCommands.cs
  61. 21
      src/Main/Base/Project/Src/Gui/Pads/ProjectBrowser/ProjectBrowserControl.cs
  62. 10
      src/Main/Base/Project/Src/Gui/Pads/ProjectBrowser/ProjectBrowserPad.cs
  63. 2
      src/Main/Base/Project/Src/Gui/Pads/ProjectBrowser/ProjectBrowserPanel.cs
  64. 2
      src/Main/Base/Project/Src/Gui/Pads/ProjectBrowser/TreeNodes/AbstractProjectBrowserTreeNode.cs
  65. 2
      src/Main/Base/Project/Src/Gui/Pads/ProjectBrowser/TreeNodes/DirectoryNode.cs
  66. 2
      src/Main/Base/Project/Src/Gui/Pads/ProjectBrowser/TreeNodes/FileNode.cs
  67. 4
      src/Main/Base/Project/Src/Gui/Pads/ProjectBrowser/TreeNodes/ProjectNode.cs
  68. 2
      src/Main/Base/Project/Src/Gui/Pads/ProjectBrowser/TreeNodes/ReferenceNode.cs
  69. 47
      src/Main/Base/Project/Src/Gui/Pads/ProjectBrowser/TreeNodes/SolutionFolderNode.cs
  70. 10
      src/Main/Base/Project/Src/Gui/Pads/ProjectBrowser/TreeNodes/SolutionItemNode.cs
  71. 27
      src/Main/Base/Project/Src/Gui/Pads/ProjectBrowser/TreeNodes/SolutionNode.cs
  72. 6
      src/Main/Base/Project/Src/Gui/Pads/ProjectBrowser/TreeNodes/Util/SolutionFolderRemoveVisitor.cs
  73. 2
      src/Main/Base/Project/Src/Internal/ConditionEvaluators/WriteableProjectEvaluator.cs
  74. 2
      src/Main/Base/Project/Src/Internal/ConditionEvaluators/WriteableSolutionEvaluator.cs
  75. 2
      src/Main/Base/Project/Src/Internal/Templates/Project/ProjectCreateInformation.cs
  76. 4
      src/Main/Base/Project/Src/Internal/Templates/Project/ProjectTemplate.cs
  77. 4
      src/Main/Base/Project/Src/Internal/Templates/Project/SolutionDescriptor.cs
  78. 101
      src/Main/Base/Project/Src/Project/AbstractProject.cs
  79. 10
      src/Main/Base/Project/Src/Project/Behaviors/DotNetStartBehavior.cs
  80. 14
      src/Main/Base/Project/Src/Project/CompilableProject.cs
  81. 4
      src/Main/Base/Project/Src/Project/ConfigurationGuiHelper.cs
  82. 3
      src/Main/Base/Project/Src/Project/Converter/LanguageConverter.cs
  83. 6
      src/Main/Base/Project/Src/Project/Converter/UpgradeView.xaml.cs
  84. 8
      src/Main/Base/Project/Src/Project/Converter/UpgradeViewContent.cs
  85. 2
      src/Main/Base/Project/Src/Project/CustomTool.cs
  86. 63
      src/Main/Base/Project/Src/Project/IProject.cs
  87. 4
      src/Main/Base/Project/Src/Project/Items/ProjectItem.cs
  88. 41
      src/Main/Base/Project/Src/Project/MSBuildBasedProject.cs
  89. 10
      src/Main/Base/Project/Src/Project/MSBuildEngine/MSBuildEngine.cs
  90. 2
      src/Main/Base/Project/Src/Project/MSBuildEngine/TargetingPackWarningWorkaround.cs
  91. 32
      src/Main/Base/Project/Src/Project/MSBuildInternals.cs
  92. 2
      src/Main/Base/Project/Src/Project/MissingProject.cs
  93. 8
      src/Main/Base/Project/Src/Project/ProjectLoadInformation.cs
  94. 2
      src/Main/Base/Project/Src/Services/ProjectService/ProjectEventHandler.cs
  95. 40
      src/Main/Base/Project/Src/Services/ProjectService/ProjectLoader.cs
  96. 56
      src/Main/Base/Project/Src/Services/ProjectService/ProjectService.cs
  97. 6
      src/Main/Base/Project/Src/Services/ProjectService/SolutionConfigurationEventHandler.cs
  98. 12
      src/Main/Base/Project/Src/Services/ProjectService/SolutionEventHandler.cs
  99. 6
      src/Main/Base/Project/Src/Services/ProjectService/SolutionFolderEventHandler.cs
  100. 2
      src/Main/Base/Project/Src/Services/RefactoringService/FindReferenceService.cs
  101. Some files were not shown because too many files have changed in this diff Show More

4
SharpDevelop.Tests.sln

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

Microsoft Visual Studio Solution File, Format Version 11.00
# Visual Studio 2010
# SharpDevelop 5.0
# SharpDevelop 4.3
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Main", "Main", "{256F5C28-532C-44C0-8AB8-D8EC5E492E01}"
ProjectSection(SolutionItems) = postProject
EndProjectSection
@ -137,7 +137,7 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "PackageManagement.Tests", " @@ -137,7 +137,7 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "PackageManagement.Tests", "
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "PackageManagement.PowerShell", "src\AddIns\Misc\PackageManagement\PowerShell\Project\PackageManagement.PowerShell.csproj", "{A406803B-C584-43A3-BCEE-A0BB3132CB5F}"
EndProject
Project("") = "SharpDevelop.EnvDTE", "src\AddIns\Misc\PackageManagement\SharpDevelop.EnvDTE\SharpDevelop.EnvDTE.vbproj", "C3F15E22-5793-4129-AF8C-6229112B86D2"
Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "SharpDevelop.EnvDTE", "src\AddIns\Misc\PackageManagement\SharpDevelop.EnvDTE\SharpDevelop.EnvDTE.vbproj", "C3F15E22-5793-4129-AF8C-6229112B86D2"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Display Bindings", "Display Bindings", "{11BF9245-88A3-4A0A-9A8A-EC9D98036B0F}"
ProjectSection(SolutionItems) = postProject

6
src/AddIns/Analysis/CodeCoverage/Project/Src/SolutionCodeCoverageResults.cs

@ -11,15 +11,15 @@ namespace ICSharpCode.CodeCoverage @@ -11,15 +11,15 @@ namespace ICSharpCode.CodeCoverage
{
public class SolutionCodeCoverageResults
{
Solution solution;
ISolution solution;
IFileSystem fileSystem;
public SolutionCodeCoverageResults(Solution solution)
public SolutionCodeCoverageResults(ISolution solution)
: this(solution, new FileSystem())
{
}
public SolutionCodeCoverageResults(Solution solution, IFileSystem fileSystem)
public SolutionCodeCoverageResults(ISolution solution, IFileSystem fileSystem)
{
this.solution = solution;
this.fileSystem = fileSystem;

2
src/AddIns/Analysis/CodeCoverage/Test/Coverage/SolutionCodeCoverageResultsTests.cs

@ -20,7 +20,7 @@ namespace ICSharpCode.CodeCoverage.Tests.Coverage @@ -20,7 +20,7 @@ namespace ICSharpCode.CodeCoverage.Tests.Coverage
public class SolutionCodeCoverageResultsTests : SDTestFixtureBase
{
SolutionCodeCoverageResults solutionCodeCoverageResults;
Solution solution;
ISolution solution;
IFileSystem fakeFileSystem;
void CreateSolutionCodeCoverageResults()

2
src/AddIns/Analysis/UnitTesting/Test/Utils/MockCSharpProject.cs

@ -21,7 +21,7 @@ namespace UnitTesting.Tests.Utils @@ -21,7 +21,7 @@ namespace UnitTesting.Tests.Utils
{
}
public MockCSharpProject(Solution solution, string name)
public MockCSharpProject(ISolution solution, string name)
: base(new ProjectCreateInformation {
Solution = solution,
ProjectName = name,

2
src/AddIns/BackendBindings/AspNet.Mvc/Test/Helpers/TestableProject.cs

@ -50,7 +50,7 @@ namespace AspNet.Mvc.Tests.Helpers @@ -50,7 +50,7 @@ namespace AspNet.Mvc.Tests.Helpers
IsSaved = true;
}
public override bool ReadOnly {
public override bool IsReadOnly {
get { return false; }
}

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

@ -84,7 +84,7 @@ namespace CSharpBinding @@ -84,7 +84,7 @@ namespace CSharpBinding
public override Task<bool> BuildAsync(ProjectBuildOptions options, IBuildFeedbackSink feedbackSink, IProgressMonitor progressMonitor)
{
if (this.MinimumSolutionVersion == Solution.SolutionVersionVS2005) {
if (this.MinimumSolutionVersion == ISolution.SolutionVersionVS2005) {
return MSBuildEngine.BuildAsync(
this, options, feedbackSink, progressMonitor.CancellationToken,
MSBuildEngine.AdditionalTargetFiles.Concat(
@ -177,12 +177,12 @@ namespace CSharpBinding @@ -177,12 +177,12 @@ namespace CSharpBinding
public override CompilerVersion CurrentCompilerVersion {
get {
switch (Project.MinimumSolutionVersion) {
case Solution.SolutionVersionVS2005:
case ISolution.SolutionVersionVS2005:
return msbuild20;
case Solution.SolutionVersionVS2008:
case ISolution.SolutionVersionVS2008:
return msbuild35;
case Solution.SolutionVersionVS2010:
case Solution.SolutionVersionVS2012:
case ISolution.SolutionVersionVS2010:
case ISolution.SolutionVersionVS2012:
return msbuild40;
default:
throw new NotSupportedException();

2
src/AddIns/BackendBindings/CppBinding/CppBinding/Project/ApplicationOptions.cs

@ -61,7 +61,7 @@ namespace ICSharpCode.CppBinding.Project @@ -61,7 +61,7 @@ namespace ICSharpCode.CppBinding.Project
void project_MinimumSolutionVersionChanged(object sender, EventArgs e)
{
// embedding manifests requires the project to target MSBuild 3.5 or higher
applicationManifestComboBox.IsEnabled = base.Project.MinimumSolutionVersion >= Solution.SolutionVersionVS2008;
applicationManifestComboBox.IsEnabled = base.Project.MinimumSolutionVersion >= ISolution.SolutionVersionVS2008;
}

4
src/AddIns/BackendBindings/Scripting/Test/Utils/MockProject.cs

@ -52,7 +52,7 @@ namespace ICSharpCode.Scripting.Tests.Utils @@ -52,7 +52,7 @@ namespace ICSharpCode.Scripting.Tests.Utils
get { return syncRoot; }
}
public Solution ParentSolution {
public ISolution ParentSolution {
get { return new Solution(new MockProjectChangeWatcher()); }
}
@ -181,7 +181,7 @@ namespace ICSharpCode.Scripting.Tests.Utils @@ -181,7 +181,7 @@ namespace ICSharpCode.Scripting.Tests.Utils
}
}
public ISolutionFolderContainer Parent {
public ISolutionFolder Parent {
get {
throw new NotImplementedException();
}

2
src/AddIns/BackendBindings/WixBinding/Test/Utils/WixBindingTestsHelper.cs

@ -25,7 +25,7 @@ namespace WixBinding.Tests.Utils @@ -25,7 +25,7 @@ namespace WixBinding.Tests.Utils
{
}
public override bool ReadOnly {
public override bool IsReadOnly {
get { return false; }
}
}

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

@ -15,7 +15,7 @@ namespace ICSharpCode.PackageManagement @@ -15,7 +15,7 @@ namespace ICSharpCode.PackageManagement
{
}
public static ConfigSettingsFileSystem CreateConfigSettingsFileSystem(Solution solution)
public static ConfigSettingsFileSystem CreateConfigSettingsFileSystem(ISolution solution)
{
string configSettingsFolder = Path.Combine(solution.Directory, ".nuget");
return new ConfigSettingsFileSystem(configSettingsFolder);

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

@ -15,9 +15,9 @@ namespace ICSharpCode.PackageManagement.Design @@ -15,9 +15,9 @@ namespace ICSharpCode.PackageManagement.Design
public bool IsRefreshProjectBrowserCalled;
public IProject CurrentProject { get; set; }
public Solution OpenSolution { get; set; }
public ISolution OpenSolution { get; set; }
public event ProjectEventHandler ProjectAdded;
public event EventHandler<ProjectEventArgs> ProjectAdded;
public event SolutionFolderEventHandler SolutionFolderRemoved;
public event EventHandler SolutionClosed;
public event EventHandler<SolutionEventArgs> SolutionLoaded;
@ -41,14 +41,14 @@ namespace ICSharpCode.PackageManagement.Design @@ -41,14 +41,14 @@ namespace ICSharpCode.PackageManagement.Design
}
}
public void FireSolutionLoadedEvent(Solution solution)
public void FireSolutionLoadedEvent(ISolution solution)
{
if (SolutionLoaded != null) {
SolutionLoaded(this, new SolutionEventArgs(solution));
}
}
public void FireSolutionFolderRemoved(ISolutionFolder solutionFolder)
public void FireSolutionFolderRemoved(ISolutionItem solutionFolder)
{
if (SolutionFolderRemoved != null) {
SolutionFolderRemoved(this, new SolutionFolderEventArgs(solutionFolder));
@ -82,9 +82,9 @@ namespace ICSharpCode.PackageManagement.Design @@ -82,9 +82,9 @@ namespace ICSharpCode.PackageManagement.Design
project.Save();
}
public Solution SavedSolution;
public ISolution SavedSolution;
public void Save(Solution solution)
public void Save(ISolution solution)
{
SavedSolution = solution;
}

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

@ -12,10 +12,10 @@ namespace ICSharpCode.PackageManagement @@ -12,10 +12,10 @@ namespace ICSharpCode.PackageManagement
public interface IPackageManagementProjectService
{
IProject CurrentProject { get; }
Solution OpenSolution { get; }
ISolution OpenSolution { get; }
IProjectBuilder ProjectBuilder { get; }
event ProjectEventHandler ProjectAdded;
event EventHandler<ProjectEventArgs> ProjectAdded;
event SolutionFolderEventHandler SolutionFolderRemoved;
event EventHandler SolutionClosed;
event EventHandler<SolutionEventArgs> SolutionLoaded;
@ -24,7 +24,7 @@ namespace ICSharpCode.PackageManagement @@ -24,7 +24,7 @@ namespace ICSharpCode.PackageManagement
void AddProjectItem(IProject project, ProjectItem item);
void RemoveProjectItem(IProject project, ProjectItem item);
void Save(IProject project);
void Save(Solution solution);
void Save(ISolution solution);
IEnumerable<IProject> GetOpenProjects();

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

@ -8,6 +8,6 @@ namespace ICSharpCode.PackageManagement @@ -8,6 +8,6 @@ namespace ICSharpCode.PackageManagement
{
public interface ISolutionPackageRepositoryFactory
{
ISolutionPackageRepository CreateSolutionPackageRepository(Solution solution);
ISolutionPackageRepository CreateSolutionPackageRepository(ISolution solution);
}
}

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

@ -24,7 +24,7 @@ namespace ICSharpCode.PackageManagement @@ -24,7 +24,7 @@ namespace ICSharpCode.PackageManagement
get { return ProjectService.CurrentProject; }
}
public Solution OpenSolution {
public ISolution OpenSolution {
get { return ProjectService.OpenSolution; }
}
@ -50,7 +50,7 @@ namespace ICSharpCode.PackageManagement @@ -50,7 +50,7 @@ namespace ICSharpCode.PackageManagement
public IEnumerable<IProject> GetOpenProjects()
{
Solution solution = OpenSolution;
ISolution solution = OpenSolution;
if (solution != null) {
return solution.Projects;
}
@ -72,7 +72,7 @@ namespace ICSharpCode.PackageManagement @@ -72,7 +72,7 @@ namespace ICSharpCode.PackageManagement
InvokeIfRequired(() => project.Save());
}
public void Save(Solution solution)
public void Save(ISolution solution)
{
InvokeIfRequired(() => solution.Save());
}
@ -82,7 +82,7 @@ namespace ICSharpCode.PackageManagement @@ -82,7 +82,7 @@ namespace ICSharpCode.PackageManagement
// return SD.ParserService.GetProjectContent(project);
// }
public event ProjectEventHandler ProjectAdded {
public event EventHandler<ProjectEventArgs> ProjectAdded {
add { ProjectService.ProjectAdded += value; }
remove { ProjectService.ProjectAdded -= value; }
}

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

@ -44,7 +44,7 @@ namespace ICSharpCode.PackageManagement @@ -44,7 +44,7 @@ namespace ICSharpCode.PackageManagement
get { return OpenSolution.FileName; }
}
Solution OpenSolution {
ISolution OpenSolution {
get { return projectService.OpenSolution; }
}

2
src/AddIns/Misc/PackageManagement/Project/Src/Scripting/IPackageInitializationScriptsFactory.cs

@ -9,6 +9,6 @@ namespace ICSharpCode.PackageManagement.Scripting @@ -9,6 +9,6 @@ namespace ICSharpCode.PackageManagement.Scripting
public interface IPackageInitializationScriptsFactory
{
IPackageInitializationScripts CreatePackageInitializationScripts(
Solution solution);
ISolution solution);
}
}

4
src/AddIns/Misc/PackageManagement/Project/Src/Scripting/PackageManagementConsoleViewModel.cs

@ -139,7 +139,7 @@ namespace ICSharpCode.PackageManagement.Scripting @@ -139,7 +139,7 @@ namespace ICSharpCode.PackageManagement.Scripting
void AddProjects()
{
Solution solution = projectService.OpenSolution;
ISolution solution = projectService.OpenSolution;
if (solution != null) {
AddProjects(solution);
}
@ -151,7 +151,7 @@ namespace ICSharpCode.PackageManagement.Scripting @@ -151,7 +151,7 @@ namespace ICSharpCode.PackageManagement.Scripting
DefaultProject = projects.FirstOrDefault();
}
void AddProjects(Solution solution)
void AddProjects(ISolution solution)
{
foreach (IProject project in solution.Projects) {
projects.Add(project);

2
src/AddIns/Misc/PackageManagement/Project/Src/Scripting/PowerShellWorkingDirectory.cs

@ -17,7 +17,7 @@ namespace ICSharpCode.PackageManagement.Scripting @@ -17,7 +17,7 @@ namespace ICSharpCode.PackageManagement.Scripting
public string GetWorkingDirectory()
{
Solution solution = projectService.OpenSolution;
ISolution solution = projectService.OpenSolution;
if (solution != null) {
return QuotedDirectory(solution.Directory);
}

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

@ -46,7 +46,7 @@ namespace ICSharpCode.PackageManagement @@ -46,7 +46,7 @@ namespace ICSharpCode.PackageManagement
packageOperationResolverFactory);
}
SolutionPackageRepository CreateSolutionPackageRepository(Solution solution)
SolutionPackageRepository CreateSolutionPackageRepository(ISolution solution)
{
return new SolutionPackageRepository(solution, packageRepositoryFactory, options);
}

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

@ -18,7 +18,7 @@ namespace ICSharpCode.PackageManagement @@ -18,7 +18,7 @@ namespace ICSharpCode.PackageManagement
PhysicalFileSystem fileSystem;
ISharedPackageRepository repository;
public SolutionPackageRepository(Solution solution)
public SolutionPackageRepository(ISolution solution)
: this(
solution,
new SharpDevelopPackageRepositoryFactory(),
@ -27,7 +27,7 @@ namespace ICSharpCode.PackageManagement @@ -27,7 +27,7 @@ namespace ICSharpCode.PackageManagement
}
public SolutionPackageRepository(
Solution solution,
ISolution solution,
ISharpDevelopPackageRepositoryFactory repositoryFactory,
PackageManagementOptions options)
{

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

@ -26,7 +26,7 @@ namespace ICSharpCode.PackageManagement @@ -26,7 +26,7 @@ namespace ICSharpCode.PackageManagement
this.options = options;
}
public ISolutionPackageRepository CreateSolutionPackageRepository(Solution solution)
public ISolutionPackageRepository CreateSolutionPackageRepository(ISolution solution)
{
return new SolutionPackageRepository(solution, repositoryFactory, options);
}

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

@ -11,7 +11,7 @@ namespace ICSharpCode.PackageManagement @@ -11,7 +11,7 @@ namespace ICSharpCode.PackageManagement
public class SolutionPackageRepositoryPath
{
string packagesRelativeDirectory;
Solution solution;
ISolution solution;
DefaultPackagePathResolver pathResolver;
public SolutionPackageRepositoryPath(IProject project)
@ -24,7 +24,7 @@ namespace ICSharpCode.PackageManagement @@ -24,7 +24,7 @@ namespace ICSharpCode.PackageManagement
{
}
public SolutionPackageRepositoryPath(Solution solution, PackageManagementOptions options)
public SolutionPackageRepositoryPath(ISolution solution, PackageManagementOptions options)
{
packagesRelativeDirectory = options.PackagesDirectory;
this.solution = solution;

4
src/AddIns/Misc/PackageManagement/Test/Src/Helpers/FakePackageInitializationScriptsInSolutionFactory.cs

@ -12,10 +12,10 @@ namespace PackageManagement.Tests.Helpers @@ -12,10 +12,10 @@ namespace PackageManagement.Tests.Helpers
public FakePackageInitializationScripts FakePackageInitializationScripts =
new FakePackageInitializationScripts();
public Solution SolutionPassedToCreatePackageInitializationScripts;
public ISolution SolutionPassedToCreatePackageInitializationScripts;
public IPackageInitializationScripts CreatePackageInitializationScripts(
Solution solution)
ISolution solution)
{
SolutionPassedToCreatePackageInitializationScripts = solution;
return FakePackageInitializationScripts;

4
src/AddIns/Misc/PackageManagement/Test/Src/Helpers/FakeSolutionPackageRepositoryFactory.cs

@ -10,9 +10,9 @@ namespace PackageManagement.Tests.Helpers @@ -10,9 +10,9 @@ namespace PackageManagement.Tests.Helpers
public class FakeSolutionPackageRepositoryFactory : ISolutionPackageRepositoryFactory
{
public FakeSolutionPackageRepository FakeSolutionPackageRepository = new FakeSolutionPackageRepository();
public Solution SolutionPassedToCreateSolutionPackageRepository;
public ISolution SolutionPassedToCreateSolutionPackageRepository;
public ISolutionPackageRepository CreateSolutionPackageRepository(Solution solution)
public ISolutionPackageRepository CreateSolutionPackageRepository(ISolution solution)
{
SolutionPassedToCreateSolutionPackageRepository = solution;
return FakeSolutionPackageRepository;

4
src/AddIns/Misc/PackageManagement/Test/Src/Helpers/ProjectHelper.cs

@ -18,14 +18,14 @@ namespace PackageManagement.Tests.Helpers @@ -18,14 +18,14 @@ namespace PackageManagement.Tests.Helpers
public static TestableProject CreateTestProject(string name)
{
Solution solution = new Solution(new MockProjectChangeWatcher());
ISolution solution = new Solution(new MockProjectChangeWatcher());
solution.FileName = @"d:\projects\Test\TestSolution.sln";
return CreateTestProject(solution, name);
}
public static TestableProject CreateTestProject(
Solution parentSolution,
ISolution parentSolution,
string name,
string fileName = @"d:\projects\Test\TestProject\TestProject.csproj")
{

2
src/AddIns/Misc/PackageManagement/Test/Src/PackageManagementSelectedProjectsTests.cs

@ -43,7 +43,7 @@ namespace PackageManagement.Tests @@ -43,7 +43,7 @@ namespace PackageManagement.Tests
TestableProject project1 = ProjectHelper.CreateTestProject("Test1");
TestableProject project2 = ProjectHelper.CreateTestProject("Test2");
Solution solution = project1.ParentSolution;
ISolution solution = project1.ParentSolution;
project2.Parent = solution;
fakeSolution.FakeMSBuildProjects.Add(project1);

4
src/AddIns/Misc/PackageManagement/Test/Src/PackageManagementSolutionTests.cs

@ -415,8 +415,8 @@ namespace PackageManagement.Tests @@ -415,8 +415,8 @@ namespace PackageManagement.Tests
solution.IsPackageInstalled(package);
Solution expectedSolution = fakeProjectService.OpenSolution;
Solution solutionUsedToCreateSolutionPackageRepository =
ISolution expectedSolution = fakeProjectService.OpenSolution;
ISolution solutionUsedToCreateSolutionPackageRepository =
fakeSolutionPackageRepositoryFactory.SolutionPassedToCreateSolutionPackageRepository;
Assert.AreEqual(expectedSolution, solutionUsedToCreateSolutionPackageRepository);

16
src/AddIns/Misc/PackageManagement/Test/Src/Scripting/PackageManagementConsoleViewModelTests.cs

@ -95,10 +95,10 @@ namespace PackageManagement.Tests.Scripting @@ -95,10 +95,10 @@ namespace PackageManagement.Tests.Scripting
return enabledPackageSource;
}
Solution CreateViewModelWithOneProjectOpen()
ISolution CreateViewModelWithOneProjectOpen()
{
CreateConsoleHost();
Solution solution = CreateSolutionWithOneProject();
ISolution solution = CreateSolutionWithOneProject();
projectService = new FakePackageManagementProjectService();
projectService.OpenSolution = solution;
CreateViewModel(consoleHost, projectService);
@ -106,10 +106,10 @@ namespace PackageManagement.Tests.Scripting @@ -106,10 +106,10 @@ namespace PackageManagement.Tests.Scripting
return solution;
}
Solution CreateSolutionWithOneProject()
ISolution CreateSolutionWithOneProject()
{
TestableProject project = ProjectHelper.CreateTestProject();
Solution solution = project.ParentSolution;
ISolution solution = project.ParentSolution;
solution.AddFolder(project);
return solution;
@ -146,7 +146,7 @@ namespace PackageManagement.Tests.Scripting @@ -146,7 +146,7 @@ namespace PackageManagement.Tests.Scripting
viewModel.PropertyChanged += (sender, e) => propertiesChanged.Add(e.PropertyName);
}
Solution CreateViewModelWithEmptySolutionOpen()
ISolution CreateViewModelWithEmptySolutionOpen()
{
CreateConsoleHost();
var solution = new Solution(new MockProjectChangeWatcher());
@ -156,7 +156,7 @@ namespace PackageManagement.Tests.Scripting @@ -156,7 +156,7 @@ namespace PackageManagement.Tests.Scripting
return solution;
}
TestableProject AddProjectToSolution(Solution solution)
TestableProject AddProjectToSolution(ISolution solution)
{
var project = ProjectHelper.CreateTestProject();
solution.AddFolder(project);
@ -169,13 +169,13 @@ namespace PackageManagement.Tests.Scripting @@ -169,13 +169,13 @@ namespace PackageManagement.Tests.Scripting
projectService.FireSolutionClosedEvent();
}
void OpenSolution(Solution solution)
void OpenSolution(ISolution solution)
{
projectService.OpenSolution = solution;
projectService.FireSolutionLoadedEvent(solution);
}
IProject RemoveProjectFromSolution(Solution solution)
IProject RemoveProjectFromSolution(ISolution solution)
{
var project = solution.Projects.FirstOrDefault();
solution.RemoveFolder(project);

2
src/AddIns/Misc/PackageManagement/Test/Src/SelectedProjectsForInstalledPackagesTests.cs

@ -34,7 +34,7 @@ namespace PackageManagement.Tests @@ -34,7 +34,7 @@ namespace PackageManagement.Tests
TestableProject project1 = ProjectHelper.CreateTestProject("Test1");
TestableProject project2 = ProjectHelper.CreateTestProject("Test2");
Solution solution = project1.ParentSolution;
ISolution solution = project1.ParentSolution;
project2.Parent = solution;
fakeSolution.FakeMSBuildProjects.Add(project1);

2
src/AddIns/Misc/PackageManagement/Test/Src/SelectedProjectsForUpdatedPackagesTests.cs

@ -34,7 +34,7 @@ namespace PackageManagement.Tests @@ -34,7 +34,7 @@ namespace PackageManagement.Tests
TestableProject project1 = ProjectHelper.CreateTestProject(projectName1);
TestableProject project2 = ProjectHelper.CreateTestProject(projectName2);
Solution solution = project1.ParentSolution;
ISolution solution = project1.ParentSolution;
project2.Parent = solution;
fakeSolution.FakeMSBuildProjects.Add(project1);

4
src/AddIns/Misc/PackageManagement/Test/Src/SolutionPackageRepositoryPathTests.cs

@ -17,14 +17,14 @@ namespace PackageManagement.Tests @@ -17,14 +17,14 @@ namespace PackageManagement.Tests
SolutionPackageRepositoryPath repositoryPath;
IProject testProject;
PackageManagementOptions options;
Solution solution;
ISolution solution;
void CreateSolutionPackageRepositoryPath()
{
repositoryPath = new SolutionPackageRepositoryPath(testProject, options);
}
void CreateSolutionPackageRepositoryPath(Solution solution)
void CreateSolutionPackageRepositoryPath(ISolution solution)
{
repositoryPath = new SolutionPackageRepositoryPath(solution, options);
}

6
src/AddIns/Misc/PackageManagement/Test/Src/SolutionPackageRepositoryTests.cs

@ -19,7 +19,7 @@ namespace PackageManagement.Tests @@ -19,7 +19,7 @@ namespace PackageManagement.Tests
{
SolutionPackageRepository repository;
TestablePackageManagementOptions options;
Solution solution;
ISolution solution;
FakePackageRepositoryFactory fakeRepositoryFactory;
FakeSharedPackageRepository fakeSharedRepository;
@ -40,13 +40,13 @@ namespace PackageManagement.Tests @@ -40,13 +40,13 @@ namespace PackageManagement.Tests
options = new TestablePackageManagementOptions();
}
void CreateRepository(Solution solution, TestablePackageManagementOptions options)
void CreateRepository(ISolution solution, TestablePackageManagementOptions options)
{
CreateFakeRepositoryFactory();
repository = new SolutionPackageRepository(solution, fakeRepositoryFactory, options);
}
void CreateRepository(Solution solution)
void CreateRepository(ISolution solution)
{
CreateOptions();
CreateRepository(solution, options);

4
src/AddIns/VersionControl/SubversionAddIn/Src/Commands/ProjectBrowserCommands.cs

@ -119,9 +119,9 @@ namespace ICSharpCode.Svn.Commands @@ -119,9 +119,9 @@ namespace ICSharpCode.Svn.Commands
protected sealed class ProjectWatcher
{
List<ProjectEntry> list = new List<ProjectEntry>();
Solution solution;
ISolution solution;
internal ProjectWatcher(Solution solution)
internal ProjectWatcher(ISolution solution)
{
this.solution = solution;
if (AddInOptions.AutomaticallyReloadProject && solution != null)

9
src/Main/Base/Project/Designer/TypeResolutionService.cs

@ -74,7 +74,7 @@ namespace ICSharpCode.SharpDevelop.Designer @@ -74,7 +74,7 @@ namespace ICSharpCode.SharpDevelop.Designer
}
string formSourceFileName;
FileName formSourceFileName;
IProject callingProject;
/// <summary>
/// Dictionary of file name -> hash of loaded assemblies for the currently designed document.
@ -89,10 +89,7 @@ namespace ICSharpCode.SharpDevelop.Designer @@ -89,10 +89,7 @@ namespace ICSharpCode.SharpDevelop.Designer
public IProject CallingProject {
get {
if (formSourceFileName != null) {
if (ProjectService.OpenSolution != null) {
return ProjectService.OpenSolution.FindProjectContainingFile(formSourceFileName);
}
formSourceFileName = null;
return SD.ProjectService.FindProjectContainingFile(formSourceFileName);
}
return callingProject;
}
@ -102,7 +99,7 @@ namespace ICSharpCode.SharpDevelop.Designer @@ -102,7 +99,7 @@ namespace ICSharpCode.SharpDevelop.Designer
{
}
public TypeResolutionService(string formSourceFileName)
public TypeResolutionService(FileName formSourceFileName)
{
this.formSourceFileName = formSourceFileName;
}

15
src/Main/Base/Project/Dom/IModelCollection.cs

@ -3,6 +3,7 @@ @@ -3,6 +3,7 @@
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Collections.Specialized;
namespace ICSharpCode.SharpDevelop.Dom
@ -13,4 +14,18 @@ namespace ICSharpCode.SharpDevelop.Dom @@ -13,4 +14,18 @@ namespace ICSharpCode.SharpDevelop.Dom
public interface IModelCollection<out T> : IReadOnlyCollection<T>, INotifyCollectionChanged
{
}
/// <summary>
/// A collection that provides change notifications.
/// </summary>
public interface IMutableModelCollection<T> : IModelCollection<T>, ICollection<T>
{
}
/// <summary>
/// A model collection implementation that is based on a ObservableCollection.
/// </summary>
public class SimpleModelCollection<T> : ObservableCollection<T>, IMutableModelCollection<T>
{
}
}

15
src/Main/Base/Project/Dom/SimpleModelCollection.cs

@ -1,15 +0,0 @@ @@ -1,15 +0,0 @@
// Copyright (c) AlphaSierraPapa for the SharpDevelop Team (for details please see \doc\copyright.txt)
// This code is distributed under the GNU LGPL (for details please see \doc\license.txt)
using System;
using System.Collections.ObjectModel;
namespace ICSharpCode.SharpDevelop.Dom
{
/// <summary>
/// A model collection implementation that is based on a ObservableCollection.
/// </summary>
public class SimpleModelCollection<T> : ObservableCollection<T>, IModelCollection<T>
{
}
}

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

@ -108,7 +108,6 @@ @@ -108,7 +108,6 @@
<Compile Include="Dom\IEntityModel.cs" />
<Compile Include="Dom\IModelCollection.cs" />
<Compile Include="Dom\ITreeNodeFactory.cs" />
<Compile Include="Dom\SimpleModelCollection.cs" />
<Compile Include="Editor\AvalonEditTextEditorAdapter.cs" />
<Compile Include="Editor\Bookmarks\BookmarkBase.cs" />
<Compile Include="Editor\Bookmarks\BookmarkEventArgs.cs" />
@ -165,6 +164,14 @@ @@ -165,6 +164,14 @@
<Compile Include="Project\Build\IBuildService.cs" />
<Compile Include="Project\Build\MultipleProjectBuildable.cs" />
<Compile Include="Project\Build\ProjectBuildOptions.cs" />
<Compile Include="Project\ConfigurationAndPlatform.cs" />
<Compile Include="Project\IConfigurable.cs" />
<Compile Include="Project\IConfigurationMapping.cs" />
<Compile Include="Project\IConfigurationOrPlatformNameCollection.cs" />
<Compile Include="Project\IProjectService.cs" />
<Compile Include="Project\ISolution.cs" />
<Compile Include="Project\ISolutionFolder.cs" />
<Compile Include="Project\ISolutionItem.cs" />
<Compile Include="Refactoring\ICodeGenerator.cs" />
<Compile Include="Services\IClipboard.cs" />
<Compile Include="Services\IMessageLoop.cs" />
@ -232,6 +239,8 @@ @@ -232,6 +239,8 @@
<DependentUpon>OutputWindowOptionsPanel.xaml</DependentUpon>
<SubType>Code</SubType>
</Compile>
<Compile Include="Src\Project\Solution\ProjectSection.cs" />
<Compile Include="Src\Project\Solution\SolutionItem.cs" />
<Compile Include="Util\AtomicBoolean.cs" />
<Compile Include="Util\ComparerExtensions.cs" />
<Compile Include="Util\CustomThreadPoolTaskScheduler.cs" />
@ -505,7 +514,6 @@ @@ -505,7 +514,6 @@
<Compile Include="Src\Project\ProjectLoadException.cs" />
<Compile Include="Src\Project\ProjectPropertyChangedEventArgs.cs" />
<Compile Include="Src\Project\ProjectUpgradeException.cs" />
<Compile Include="Src\Project\Solution\Project_TypeGuids.cs" />
<Compile Include="Src\Project\TargetFramework.cs" />
<Compile Include="Refactoring\ContextAction.cs" />
<Compile Include="Refactoring\EditorRefactoringContext.cs" />
@ -653,7 +661,6 @@ @@ -653,7 +661,6 @@
<Compile Include="Src\Project\IProject.cs" />
<Compile Include="Src\Project\Items\ProjectItem.cs" />
<Compile Include="Src\Project\Items\ReferenceProjectItem.cs" />
<Compile Include="Src\Project\Solution\Solution.cs" />
<Compile Include="Src\Services\ProjectService\ProjectService.cs" />
<Compile Include="Src\Services\ProjectService\SolutionEventHandler.cs" />
<Compile Include="Src\Services\ProjectService\ProjectEventHandler.cs" />
@ -705,13 +712,7 @@ @@ -705,13 +712,7 @@
</Compile>
<Compile Include="Src\Gui\Components\ExtTreeView\ExtFolderNode.cs" />
<Compile Include="Src\Gui\Pads\CompilerMessageView\TextEventHandler.cs" />
<Compile Include="Src\Project\Solution\SolutionFolder.cs" />
<Compile Include="Src\Project\Solution\SolutionItem.cs" />
<Compile Include="Src\Project\Solution\ProjectSection.cs" />
<Compile Include="Src\Gui\Pads\ProjectBrowser\TreeNodes\SolutionFolderNode.cs" />
<Compile Include="Src\Project\Solution\ISolutionFolderContainer.cs" />
<Compile Include="Src\Project\Solution\ISolutionFolder.cs" />
<Compile Include="Src\Project\Solution\AbstractSolutionFolder.cs" />
<Compile Include="Src\Gui\Pads\ProjectBrowser\TreeNodes\SolutionItemNode.cs" />
<Compile Include="Src\Gui\Pads\ProjectBrowser\Commands\ClipboardHandlerNodeCommands.cs" />
<Compile Include="Src\Gui\Pads\ProjectBrowser\TreeNodes\Util\ProjectBrowserTreeNodeVisitor.cs" />
@ -755,7 +756,6 @@ @@ -755,7 +756,6 @@
<Compile Include="Src\Gui\BrowserDisplayBinding\BrowserCommands.cs" />
<Compile Include="Src\Gui\BrowserDisplayBinding\BrowserLocationConditionEvaluator.cs" />
<Compile Include="Src\Services\Debugger\DebuggerDoozer.cs" />
<Compile Include="Src\Project\Solution\SolutionPreferences.cs" />
<Compile Include="Src\Project\ConfigurationGuiHelper.cs" />
<Compile Include="Src\Gui\Dialogs\OptionPanels\ProjectOptions\AbstractXmlFormsProjectOptionPanel.cs">
<SubType>UserControl</SubType>
@ -788,7 +788,6 @@ @@ -788,7 +788,6 @@
<Compile Include="Src\Gui\Dialogs\ReferenceDialog\WebServiceDiscoveryClientProtocol.cs" />
<Compile Include="Src\Gui\Dialogs\ReferenceDialog\AsyncDiscoveryState.cs" />
<Compile Include="Src\Gui\Dialogs\ReferenceDialog\DiscoveryNetworkCredential.cs" />
<Compile Include="Src\Services\ProjectService\ProjectLoader.cs" />
<Compile Include="..\..\GlobalAssemblyInfo.cs">
<Link>Configuration\GlobalAssemblyInfo.cs</Link>
</Compile>
@ -832,6 +831,7 @@ @@ -832,6 +831,7 @@
</ItemGroup>
<ItemGroup>
<Folder Include="Designer" />
<Folder Include="Src\Project\Solution" />
<Folder Include="Workbench\DisplayBinding" />
<Page Include="Editor\Bookmarks\BookmarkPadContent.xaml" />
<Page Include="Src\Editor\CodeCompletion\CodeCompletionPanelXaml.xaml" />

2
src/Main/Base/Project/Project/Build/IBuildService.cs

@ -31,7 +31,7 @@ namespace ICSharpCode.SharpDevelop.Project @@ -31,7 +31,7 @@ namespace ICSharpCode.SharpDevelop.Project
Task<BuildResults> BuildAsync(IEnumerable<IProject> projects, BuildOptions options);
Task<BuildResults> BuildAsync(IProject project, BuildOptions options);
Task<BuildResults> BuildAsync(Solution solution, BuildOptions options);
Task<BuildResults> BuildAsync(ISolution solution, BuildOptions options);
/// <summary>
/// Raised when a build is started.

104
src/Main/Base/Project/Project/ConfigurationAndPlatform.cs

@ -0,0 +1,104 @@ @@ -0,0 +1,104 @@
// Copyright (c) AlphaSierraPapa for the SharpDevelop Team (for details please see \doc\copyright.txt)
// This code is distributed under the GNU LGPL (for details please see \doc\license.txt)
using System;
using System.Text.RegularExpressions;
namespace ICSharpCode.SharpDevelop.Project
{
/// <summary>
/// Represents a configuration/platform pair.
/// </summary>
public struct ConfigurationAndPlatform : IEquatable<ConfigurationAndPlatform>
{
readonly static Regex configurationRegEx = new Regex(@"'(?<property>[^']*)'\s*==\s*'(?<value>[^']*)'", RegexOptions.Compiled);
/// <summary>
/// Gets configuration and platform from an MSBuild condition in the format "'$(Configuration)|$(Platform)' == 'configuration|platform'".
/// </summary>
public static ConfigurationAndPlatform FromCondition(string condition)
{
Match match = configurationRegEx.Match(condition);
if (match.Success) {
string conditionProperty = match.Result("${property}");
string conditionValue = match.Result("${value}");
if (conditionProperty == "$(Configuration)|$(Platform)") {
// configuration is ok
return FromKey(conditionValue);
} else if (conditionProperty == "$(Configuration)") {
return new ConfigurationAndPlatform(conditionValue, null);
} else if (conditionProperty == "$(Platform)") {
return new ConfigurationAndPlatform(null, conditionValue);
} else {
return default(ConfigurationAndPlatform);
}
} else {
return default(ConfigurationAndPlatform);
}
}
/// <summary>
/// Gets configuration and platform from a key string in the format 'configuration|platform'.
/// </summary>
public static ConfigurationAndPlatform FromKey(string key)
{
int pos = key.IndexOf('|');
if (pos < 0)
return default(ConfigurationAndPlatform);
else
return new ConfigurationAndPlatform(key.Substring(0, pos), key.Substring(pos + 1));
}
readonly string configuration;
readonly string platform;
public ConfigurationAndPlatform(string configuration, string platform)
{
this.configuration = configuration;
this.platform = platform;
}
public string Platform {
get { return platform; }
}
public string Configuration {
get { return configuration; }
}
#region Equals and GetHashCode implementation
public override bool Equals(object obj)
{
if (obj is ConfigurationAndPlatform)
return Equals((ConfigurationAndPlatform)obj); // use Equals method below
else
return false;
}
public bool Equals(ConfigurationAndPlatform other)
{
return this.configuration == other.configuration && this.platform == other.platform;
}
public override int GetHashCode()
{
return (configuration != null ? configuration.GetHashCode() : 0) ^ (platform != null ? platform.GetHashCode() : 0);
}
public static bool operator ==(ConfigurationAndPlatform left, ConfigurationAndPlatform right)
{
return left.Equals(right);
}
public static bool operator !=(ConfigurationAndPlatform left, ConfigurationAndPlatform right)
{
return !left.Equals(right);
}
#endregion
public override string ToString()
{
return configuration + "|" + platform;
}
}
}

42
src/Main/Base/Project/Project/IConfigurable.cs

@ -0,0 +1,42 @@ @@ -0,0 +1,42 @@
/*
* Created by SharpDevelop.
* User: Daniel
* Date: 2/26/2013
* Time: 16:27
*
* To change this template use Tools | Options | Coding | Edit Standard Headers.
*/
using System;
namespace ICSharpCode.SharpDevelop.Project
{
/// <summary>
/// Description of IConfigurable.
/// </summary>
public interface IConfigurable
{
/// <summary>
/// Gets the list of available configuration names.
/// </summary>
IConfigurationOrPlatformNameCollection ConfigurationNames { get; }
/// <summary>
/// Gets the list of available platform names.
/// </summary>
IConfigurationOrPlatformNameCollection PlatformNames { get; }
/// <summary>
/// Gets/Sets the active configuration+platform of the solution.
/// </summary>
/// <remarks>
/// After changing this property on the solution, the change will be automatically applied
/// to the projects (using the solution &lt;-&gt; project configuration mapping).
/// </remarks>
ConfigurationAndPlatform ActiveConfiguration { get; set; }
/// <summary>
/// Is raised after the ActiveConfiguration property has changed.
/// </summary>
event EventHandler ActiveConfigurationChanged;
}
}

33
src/Main/Base/Project/Project/IConfigurationMapping.cs

@ -0,0 +1,33 @@ @@ -0,0 +1,33 @@
// Copyright (c) AlphaSierraPapa for the SharpDevelop Team (for details please see \doc\copyright.txt)
// This code is distributed under the GNU LGPL (for details please see \doc\license.txt)
using System;
namespace ICSharpCode.SharpDevelop.Project
{
/// <summary>
/// Represents a mapping between solution and project configurations.
/// </summary>
public interface IConfigurationMapping
{
/// <summary>
/// Gets the project configuration corresponding to the given solution configuration.
/// </summary>
ConfigurationAndPlatform GetProjectConfiguration(ConfigurationAndPlatform solutionConfiguration);
/// <summary>
/// Sets the project configuration corresponding to the given solution configuration.
/// </summary>
void SetProjectConfiguration(ConfigurationAndPlatform solutionConfiguration, ConfigurationAndPlatform projectConfiguration);
/// <summary>
/// Gets whether building the project is enabled in the given solution configuration.
/// </summary>
bool IsBuildEnabled(ConfigurationAndPlatform solutionConfiguration);
/// <summary>
/// Sets whether building the project is enabled in the given solution configuration.
/// </summary>
void SetBuildEnabled(ConfigurationAndPlatform solutionConfiguration, bool value);
}
}

54
src/Main/Base/Project/Project/IConfigurationOrPlatformNameCollection.cs

@ -0,0 +1,54 @@ @@ -0,0 +1,54 @@
// Copyright (c) AlphaSierraPapa for the SharpDevelop Team (for details please see \doc\copyright.txt)
// This code is distributed under the GNU LGPL (for details please see \doc\license.txt)
using System;
using System.Collections.Generic;
using System.Collections.Specialized;
using ICSharpCode.SharpDevelop.Dom;
namespace ICSharpCode.SharpDevelop.Project
{
/// <summary>
/// Represents a collection of configuration or platform names.
/// </summary>
public interface IConfigurationOrPlatformNameCollection : IReadOnlyCollection<string>, INotifyCollectionChanged
{
/// <summary>
/// Validates the input name.
///
/// If the name is valid, this method returns the normalized form of the input name.
/// If the name is invalid, this method returns null.
/// </summary>
/// <remarks>
/// Normalization will trim spaces around the name; and it will normalize between "AnyCPU" and "Any CPU".
/// </remarks>
string ValidateName(string name);
/*
* if (MSBuildInternals.Escape(newName) != newName
|| !FileUtility.IsValidDirectoryEntryName(newName)
|| newName.Contains("'"))
{
return false;
}
*/
/// <summary>
/// Creates a new configuration/platform.
/// Settings will be copied from the existing configuration/platform <paramref name="copyFrom"/>.
/// If <paramref name="copyFrom"/> is null, no settings will be copied.
/// </summary>
void Add(string newName, string copyFrom);
/// <summary>
/// Removes the configuration/platform with the specified name.
/// </summary>
void Remove(string name);
/// <summary>
/// Renames the configuration or platform from 'oldName' to 'newName'.
/// If the configuration or platform is active, the <see cref="IConfigurable.ActiveConfiguration"/> property will be changed.
/// </summary>
void Rename(string oldName, string newName);
}
}

80
src/Main/Base/Project/Project/IProjectService.cs

@ -0,0 +1,80 @@ @@ -0,0 +1,80 @@
// Copyright (c) AlphaSierraPapa for the SharpDevelop Team (for details please see \doc\copyright.txt)
// This code is distributed under the GNU LGPL (for details please see \doc\license.txt)
using System;
using ICSharpCode.Core;
using ICSharpCode.SharpDevelop.Dom;
namespace ICSharpCode.SharpDevelop.Project
{
/// <summary>
/// Deals with loading projects and solutions.
/// </summary>
[SDService("SD.ProjectService")]
public interface IProjectService
{
/// <summary>
/// Gets the solution that is currently opened within the IDE.
/// </summary>
ISolution OpenSolution { get; }
event EventHandler OpenSolutionChanged;
/// <summary>
/// Gets/Sets the project that is currently considered 'active' within the IDE.
/// </summary>
IProject CurrentProject { get; set; }
event EventHandler CurrentProjectChanged;
/// <summary>
/// Gets the list of projects that are currently opened within the IDE.
/// </summary>
IModelCollection<IProject> Projects { get; }
/// <summary>
/// Finds the project that contains the specified file.
/// Returns null if none of the open projects contains the file.
/// </summary>
/// <remarks>
/// If multiple projects contain the file, any one of them is returned.
/// </remarks>
IProject FindProjectContainingFile(FileName fileName);
/// <summary>
/// If the given filename is a solution file (.sln), it is loaded and opened in the IDE.
/// Otherwise, SharpDevelop looks for a .sln file corresponding to the project file, and opens that instead.
/// If no such .sln file is found, SharpDevelop will create one.
/// </summary>
/// <remarks>
/// If any errors occur, this method may display an error dialog.
/// </remarks>
void OpenSolutionOrProject(FileName fileName);
/// <summary>
/// Closes the currently open solution.
/// </summary>
void CloseSolution();
/// <summary>
/// Returns if the given file is considered a project or solution file.
/// This method looks at the list of registered file extensions in /SharpDevelop/Workbench/ProjectBinding.
/// </summary>
bool IsProjectOrSolutionFile(FileName fileName);
/// <summary>
/// Loads a solution file without opening it in the IDE.
/// </summary>
/// <exception cref="ProjectLoadException">
/// The .sln file is malformed or an unsupported version, and cannot be loaded.
/// This exception does not occur if only individual projects within the solution are invalid.
/// </exception>
ISolution LoadSolutionFile(FileName fileName);
/// <summary>
/// Creates a new, empty solution and loads it without opening it in the IDE.
/// The file is not saved to disk until <see cref="ISolution.Save"/> is called.
/// </summary>
ISolution CreateEmptySolutionFile(FileName fileName);
}
}

88
src/Main/Base/Project/Project/ISolution.cs

@ -0,0 +1,88 @@ @@ -0,0 +1,88 @@
// Copyright (c) AlphaSierraPapa for the SharpDevelop Team (for details please see \doc\copyright.txt)
// This code is distributed under the GNU LGPL (for details please see \doc\license.txt)
using System;
using ICSharpCode.Core;
using ICSharpCode.SharpDevelop.Dom;
namespace ICSharpCode.SharpDevelop.Project
{
public enum SolutionFormatVersion // TODO: change IProject.MinimumSolutionFormatVersion to this enum type
{
VS2005 = 9,
VS2008 = 10,
VS2010 = 11,
VS2012 = 12
}
/// <summary>
/// Represents a solution.
/// </summary>
public interface ISolution : ISolutionFolder, ICanBeDirty, IConfigurable, IDisposable
{
Microsoft.Build.Evaluation.ProjectCollection MSBuildProjectCollection { get; }
/// <summary>
/// Gets the full path of the .sln file.
/// </summary>
FileName FileName { get; }
event EventHandler FileNameChanged;
/// <summary>
/// Gets the full path of the directory containing the .sln file.
/// </summary>
string Directory { get; }
/// <summary>
/// Gets/Sets the startup project.
/// </summary>
IProject StartupProject { get; set; }
event EventHandler StartupProjectChanged;
/// <summary>
/// Gets all projects in the solution.
/// </summary>
IModelCollection<IProject> Projects { get; }
/// <summary>
/// Loads an existing project from disk and adds it to this solution.
/// </summary>
/// <param name="fileName">Path to the project file</param>
/// <param name="parentFolder">
/// Optional: The parent folder to which the new project should be added.
/// If this parameter is not specified, the project is added to the root folder of the solution.
/// </param>
void AddExistingProject(FileName fileName, ISolutionFolder parentFolder = null);
/// <summary>
/// Gets all file items in the solution.
/// </summary>
IModelCollection<ISolutionFileItem> FileItems { get; }
/// <summary>
/// Gets a container that can be used to store data about the solution.
/// This data is stored in SharpDevelop's config directory, not directly with the .sln file.
/// </summary>
Properties Preferences { get; }
/// <summary>
/// Saves the preferences for this solution; and also for any projects within this solution.
/// </summary>
void SavePreferences();
/// <summary>
/// Gets whether the solution is read-only.
/// </summary>
bool IsReadOnly { get; }
/// <summary>
/// Saves the solution.
/// This will also save all modified projects within this solution.
/// </summary>
void Save();
}
}

40
src/Main/Base/Project/Project/ISolutionFolder.cs

@ -0,0 +1,40 @@ @@ -0,0 +1,40 @@
// Copyright (c) AlphaSierraPapa for the SharpDevelop Team (for details please see \doc\copyright.txt)
// This code is distributed under the GNU LGPL (for details please see \doc\license.txt)
using System;
using ICSharpCode.SharpDevelop.Dom;
namespace ICSharpCode.SharpDevelop.Project
{
/// <summary>
/// Represents a solution folder.
/// </summary>
public interface ISolutionFolder : ISolutionItem
{
/// <summary>
/// Gets/Sets the name of the folder.
/// </summary>
/// <exception cref="ArgumentException">newName is not a valid solution name.</exception>
/// <remarks>
/// For the solution itself, setting this property will rename the .sln file.
/// </remarks>
string Name { get; set; }
/* if (solution.Name == newName)
return;
if (!FileService.CheckFileName(newName))
return;
string newFileName = Path.Combine(solution.Directory, newName + ".sln");
if (!FileService.RenameFile(solution.FileName, newFileName, false)) {
return;
}
solution.FileName = newFileName;
solution.Name = newName;
*/
/// <summary>
/// Gets the list of direct child items in this solution folder.
/// </summary>
IMutableModelCollection<ISolutionItem> Items { get; }
}
}

41
src/Main/Base/Project/Project/ISolutionItem.cs

@ -0,0 +1,41 @@ @@ -0,0 +1,41 @@
// Copyright (c) AlphaSierraPapa for the SharpDevelop Team (for details please see \doc\copyright.txt)
// This code is distributed under the GNU LGPL (for details please see \doc\license.txt)
using System;
using ICSharpCode.Core;
namespace ICSharpCode.SharpDevelop.Project
{
/// <summary>
/// Represents an item within a solution folder.
/// This may be a file, a project, or another solution folder.
/// </summary>
public interface ISolutionItem
{
/// <summary>
/// Gets the parent folder.
/// This property will return null for the solution (which acts as the top-level folder).
/// It will also return null for folders that were removed from their parent.
/// </summary>
/// <remarks>
/// The parent folder of an item can change, e.g. when a project is moved into a different folder.
/// The setter of this property should be used by the <see cref="ISolutionFolder"/> implementation only.
/// </remarks>
ISolutionFolder ParentFolder { get; set; }
/// <summary>
/// Gets the parent solution.
/// This property is thread-safe, and will never returns null.
/// </summary>
/// <remarks>
/// The parent solution of a solution item cannot change; a new instance of the item must be created
/// in order to move the item to another solution.
/// </remarks>
ISolution ParentSolution { get; }
}
public interface ISolutionFileItem : ISolutionItem
{
FileName FileName { get; }
}
}

5
src/Main/Base/Project/Services/SD.cs

@ -205,5 +205,10 @@ namespace ICSharpCode.SharpDevelop @@ -205,5 +205,10 @@ namespace ICSharpCode.SharpDevelop
public static IDisplayBindingService DisplayBindingService {
get { return GetRequiredService<IDisplayBindingService>(); }
}
/// <inheritdoc see="IProjectService"/>
public static IProjectService ProjectService {
get { return GetRequiredService<IProjectService>(); }
}
}
}

25
src/Main/Base/Project/Src/Commands/BuildCommands.cs

@ -3,6 +3,7 @@ @@ -3,6 +3,7 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading;
using System.Threading.Tasks;
using System.Windows;
@ -224,8 +225,8 @@ namespace ICSharpCode.SharpDevelop.Project.Commands @@ -224,8 +225,8 @@ namespace ICSharpCode.SharpDevelop.Project.Commands
{
if (ProjectService.OpenSolution == null)
return new MenuItem[0];
IList<string> configurationNames = ProjectService.OpenSolution.GetConfigurationNames();
string activeConfiguration = ProjectService.OpenSolution.Preferences.ActiveConfiguration;
var configurationNames = ProjectService.OpenSolution.ConfigurationNames.ToList();
string activeConfiguration = ProjectService.OpenSolution.ActiveConfiguration.Configuration;
MenuItem[] items = new MenuItem[configurationNames.Count];
for (int i = 0; i < items.Length; i++) {
items[i] = new MenuItem {
@ -237,12 +238,11 @@ namespace ICSharpCode.SharpDevelop.Project.Commands @@ -237,12 +238,11 @@ namespace ICSharpCode.SharpDevelop.Project.Commands
return items;
}
void SetConfigurationItemClick(object sender, EventArgs e)
static void SetConfigurationItemClick(object sender, EventArgs e)
{
MenuItem item = (MenuItem)sender;
ProjectService.OpenSolution.Preferences.ActiveConfiguration = (string)item.Header;
ProjectService.OpenSolution.ApplySolutionConfigurationAndPlatformToProjects();
ProjectBrowserPad.Instance.ProjectBrowserControl.RefreshView();
ISolution solution = ProjectService.OpenSolution;
solution.ActiveConfiguration = new ConfigurationAndPlatform((string)item.Header, solution.ActiveConfiguration.Platform);
}
}
@ -252,8 +252,8 @@ namespace ICSharpCode.SharpDevelop.Project.Commands @@ -252,8 +252,8 @@ namespace ICSharpCode.SharpDevelop.Project.Commands
{
if (ProjectService.OpenSolution == null)
return new MenuItem[0];
IList<string> platformNames = ProjectService.OpenSolution.GetPlatformNames();
string activePlatform = ProjectService.OpenSolution.Preferences.ActivePlatform;
IList<string> platformNames = ProjectService.OpenSolution.PlatformNames.ToList();
string activePlatform = ProjectService.OpenSolution.ActiveConfiguration.Platform;
MenuItem[] items = new MenuItem[platformNames.Count];
for (int i = 0; i < items.Length; i++) {
items[i] = new MenuItem {
@ -265,12 +265,11 @@ namespace ICSharpCode.SharpDevelop.Project.Commands @@ -265,12 +265,11 @@ namespace ICSharpCode.SharpDevelop.Project.Commands
return items;
}
void SetPlatformItemClick(object sender, EventArgs e)
static void SetPlatformItemClick(object sender, EventArgs e)
{
MenuItem item = (MenuItem)sender;
ProjectService.OpenSolution.Preferences.ActivePlatform = (string)item.Header;
ProjectService.OpenSolution.ApplySolutionConfigurationAndPlatformToProjects();
ProjectBrowserPad.Instance.ProjectBrowserControl.RefreshView();
ISolution solution = ProjectService.OpenSolution;
solution.ActiveConfiguration = new ConfigurationAndPlatform(solution.ActiveConfiguration.Configuration, (string)item.Header);
}
}
@ -281,8 +280,6 @@ namespace ICSharpCode.SharpDevelop.Project.Commands @@ -281,8 +280,6 @@ namespace ICSharpCode.SharpDevelop.Project.Commands
using (SolutionConfigurationEditor sce = new SolutionConfigurationEditor()) {
sce.ShowDialog(SD.WinForms.MainWin32Window);
ProjectService.SaveSolution();
ProjectService.OpenSolution.ApplySolutionConfigurationAndPlatformToProjects();
ProjectBrowserPad.Instance.ProjectBrowserControl.RefreshView();
}
}
}

2
src/Main/Base/Project/Src/Commands/FileCommands.cs

@ -22,7 +22,7 @@ namespace ICSharpCode.SharpDevelop.Commands @@ -22,7 +22,7 @@ namespace ICSharpCode.SharpDevelop.Commands
{
ProjectNode node = ProjectBrowserPad.Instance.CurrentProject;
if (node != null) {
if (node.Project.ReadOnly)
if (node.Project.IsReadOnly)
{
MessageService.ShowWarningFormatted("${res:Dialog.NewFile.ReadOnlyProjectWarning}", node.Project.FileName);
}

2
src/Main/Base/Project/Src/Gui/Components/LocalizedPropertyGrid/LocalizedObject.cs

@ -124,7 +124,7 @@ namespace ICSharpCode.SharpDevelop.Gui @@ -124,7 +124,7 @@ namespace ICSharpCode.SharpDevelop.Gui
return this;
}
public virtual void InformSetValue(PropertyDescriptor propertyDescriptor, object component, object value)
protected internal virtual void InformSetValue(PropertyDescriptor propertyDescriptor, object value)
{
}

4
src/Main/Base/Project/Src/Gui/Components/LocalizedPropertyGrid/LocalizedPropertyDescriptor.cs

@ -115,7 +115,7 @@ namespace ICSharpCode.SharpDevelop.Gui @@ -115,7 +115,7 @@ namespace ICSharpCode.SharpDevelop.Gui
{
this.basePropertyDescriptor.ResetValue(component);
if (component is LocalizedObject) {
((LocalizedObject)component).InformSetValue(this, component, null);
((LocalizedObject)component).InformSetValue(this, null);
}
}
@ -132,7 +132,7 @@ namespace ICSharpCode.SharpDevelop.Gui @@ -132,7 +132,7 @@ namespace ICSharpCode.SharpDevelop.Gui
this.basePropertyDescriptor.SetValue(component, value);
}
if (component is LocalizedObject) {
((LocalizedObject)component).InformSetValue(this, component, value);
((LocalizedObject)component).InformSetValue(this, value);
}
}
}

2
src/Main/Base/Project/Src/Gui/Dialogs/OptionPanels/ProjectOptions/ApplicationSettings.xaml.cs

@ -184,7 +184,7 @@ namespace ICSharpCode.SharpDevelop.Gui.OptionPanels @@ -184,7 +184,7 @@ namespace ICSharpCode.SharpDevelop.Gui.OptionPanels
void project_MinimumSolutionVersionChanged(object sender, EventArgs e)
{
// embedding manifests requires the project to target MSBuild 3.5 or higher
applicationManifestComboBox.IsEnabled = base.Project.MinimumSolutionVersion >= Solution.SolutionVersionVS2008;
applicationManifestComboBox.IsEnabled = base.Project.MinimumSolutionVersion >= SolutionFormatVersion.VS2008;
}

2
src/Main/Base/Project/Src/Gui/Dialogs/OptionPanels/ProjectOptions/BuildAdvanced.xaml.cs

@ -60,7 +60,7 @@ namespace ICSharpCode.SharpDevelop.Gui.OptionPanels @@ -60,7 +60,7 @@ namespace ICSharpCode.SharpDevelop.Gui.OptionPanels
this.TargetCPU = new List<KeyItemPair>();
supports32BitPreferred = false;
if (DotnetDetection.IsDotnet45Installed()) {
supports32BitPreferred = projectOptions.Project.MinimumSolutionVersion >= Solution.SolutionVersionVS2010;
supports32BitPreferred = projectOptions.Project.MinimumSolutionVersion >= SolutionFormatVersion.VS2010;
// Show 32 vs. 64 options even for library projects;
// it's relevant for web applications.
}

12
src/Main/Base/Project/Src/Gui/Dialogs/OptionPanels/ProjectOptions/ProjectOptionPanel.cs

@ -120,17 +120,17 @@ namespace ICSharpCode.SharpDevelop.Gui.OptionPanels @@ -120,17 +120,17 @@ namespace ICSharpCode.SharpDevelop.Gui.OptionPanels
ApplyTemplate();
project = (MSBuildBasedProject)owner;
if (configurationComboBox != null) {
List<string> configurations = project.ConfigurationNames.Union(new[] { project.ActiveConfiguration }).ToList();
List<string> configurations = project.ConfigurationNames.Union(new[] { project.ActiveConfiguration.Configuration }).ToList();
configurations.Sort();
configurationComboBox.ItemsSource = configurations;
configurationComboBox.SelectedItem = project.ActiveConfiguration;
configurationComboBox.SelectedItem = project.ActiveConfiguration.Configuration;
configurationComboBox.SelectionChanged += comboBox_SelectionChanged;
}
if (platformComboBox != null) {
List<string> platforms = project.PlatformNames.Union(new[] { project.ActivePlatform }).ToList();
List<string> platforms = project.PlatformNames.Union(new[] { project.ActiveConfiguration.Platform }).ToList();
platforms.Sort();
platformComboBox.ItemsSource = platforms;
platformComboBox.SelectedItem = project.ActivePlatform;
platformComboBox.SelectedItem = project.ActiveConfiguration.Platform;
platformComboBox.SelectionChanged += comboBox_SelectionChanged;
}
Initialize();
@ -170,12 +170,12 @@ namespace ICSharpCode.SharpDevelop.Gui.OptionPanels @@ -170,12 +170,12 @@ namespace ICSharpCode.SharpDevelop.Gui.OptionPanels
if (configurationComboBox != null)
activeConfiguration = (string)configurationComboBox.SelectedItem;
else
activeConfiguration = project.ActiveConfiguration;
activeConfiguration = project.ActiveConfiguration.Configuration;
if (platformComboBox != null)
activePlatform = (string)platformComboBox.SelectedItem;
else
activePlatform = project.ActivePlatform;
activePlatform = project.ActiveConfiguration.Platform;
isLoaded = true;
Load(project, activeConfiguration, activePlatform);

168
src/Main/Base/Project/Src/Gui/Dialogs/SolutionConfiguration/EditAvailableConfigurationsDialog.cs

@ -14,11 +14,11 @@ namespace ICSharpCode.SharpDevelop.Gui @@ -14,11 +14,11 @@ namespace ICSharpCode.SharpDevelop.Gui
{
public partial class EditAvailableConfigurationsDialog
{
Solution solution;
IProject project;
bool editPlatforms;
readonly IConfigurable configurable;
readonly bool editPlatforms;
readonly IConfigurationOrPlatformNameCollection editedCollection;
private EditAvailableConfigurationsDialog()
public EditAvailableConfigurationsDialog(IConfigurable configurable, bool editPlatforms)
{
//
// The InitializeComponent() call is required for Windows Forms designer support.
@ -28,49 +28,23 @@ namespace ICSharpCode.SharpDevelop.Gui @@ -28,49 +28,23 @@ namespace ICSharpCode.SharpDevelop.Gui
foreach (Control ctl in this.Controls) {
ctl.Text = StringParser.Parse(ctl.Text);
}
}
public EditAvailableConfigurationsDialog(Solution solution, bool editPlatforms)
: this()
{
this.solution = solution;
this.editPlatforms = editPlatforms;
InitList();
if (editPlatforms)
if (editPlatforms) {
this.Text = StringParser.Parse("${res:Dialog.EditAvailableConfigurationsDialog.EditSolutionPlatforms}");
else
this.editedCollection = configurable.ConfigurationNames;
} else {
this.Text = StringParser.Parse("${res:Dialog.EditAvailableConfigurationsDialog.EditSolutionConfigurations}");
}
public EditAvailableConfigurationsDialog(IProject project, bool editPlatforms)
: this()
{
this.project = project;
this.solution = project.ParentSolution;
this.editPlatforms = editPlatforms;
this.editedCollection = configurable.PlatformNames;
}
InitList();
if (editPlatforms)
this.Text = StringParser.Parse("${res:Dialog.EditAvailableConfigurationsDialog.EditProjectPlatforms}");
else
this.Text = StringParser.Parse("${res:Dialog.EditAvailableConfigurationsDialog.EditProjectConfigurations}");
}
void InitList()
{
if (project != null) {
if (editPlatforms) {
ShowEntries(project.PlatformNames, project.ActivePlatform);
} else {
ShowEntries(project.ConfigurationNames, project.ActiveConfiguration);
}
if (editPlatforms) {
ShowEntries(configurable.PlatformNames, configurable.ActiveConfiguration.Platform);
} else {
if (editPlatforms) {
ShowEntries(solution.GetPlatformNames(), solution.Preferences.ActivePlatform);
} else {
ShowEntries(solution.GetConfigurationNames(), solution.Preferences.ActiveConfiguration);
}
ShowEntries(configurable.ConfigurationNames, configurable.ActiveConfiguration.Configuration);
}
}
@ -95,33 +69,11 @@ namespace ICSharpCode.SharpDevelop.Gui @@ -95,33 +69,11 @@ namespace ICSharpCode.SharpDevelop.Gui
if (MessageService.AskQuestion(StringParser.Format(
"${res:Dialog.EditAvailableConfigurationsDialog.ConfirmRemoveConfigurationOrPlatform}", name)))
{
if (project != null) {
Remove(project, name, editPlatforms);
} else {
Remove(solution, name, editPlatforms);
}
editedCollection.Remove(name);
InitList();
}
}
static void Remove(IProject project, string name, bool isPlatform)
{
if (isPlatform) {
project.ParentSolution.RemoveProjectPlatform(project, name);
} else {
project.ParentSolution.RemoveProjectConfiguration(project, name);
}
}
static void Remove(Solution solution, string name, bool isPlatform)
{
if (isPlatform) {
solution.RemoveSolutionPlatform(name);
} else {
solution.RemoveSolutionConfiguration(name);
}
}
void RenameButtonClick(object sender, EventArgs e)
{
string oldName = listBox.SelectedItem.ToString();
@ -131,106 +83,50 @@ namespace ICSharpCode.SharpDevelop.Gui @@ -131,106 +83,50 @@ namespace ICSharpCode.SharpDevelop.Gui
return;
if (!EnsureCorrectName(ref newName))
return;
if (project != null) {
Rename(project, oldName, newName);
} else {
if (editPlatforms) {
solution.RenameSolutionPlatform(oldName, newName);
if (solution.Preferences.ActivePlatform == oldName) {
solution.Preferences.ActivePlatform = newName;
}
} else {
solution.RenameSolutionConfiguration(oldName, newName);
if (solution.Preferences.ActiveConfiguration == oldName) {
solution.Preferences.ActiveConfiguration = newName;
}
}
editedCollection.Rename(oldName, newName);
ISolution solution = configurable as ISolution;
if (solution != null) {
// Solution platform name => project platform name
foreach (IProject p in solution.Projects) {
Rename(p, oldName, newName);
if (editPlatforms) {
p.PlatformNames.Rename(oldName, newName);
} else {
p.ConfigurationNames.Rename(oldName, newName);
}
}
}
InitList();
}
void Rename(IProject project, string oldName, string newName)
{
if (editPlatforms) {
if (project.PlatformNames.Contains(newName))
return;
solution.RenameProjectPlatform(project, oldName, newName);
} else {
if (project.ConfigurationNames.Contains(newName))
return;
solution.RenameProjectConfiguration(project, oldName, newName);
}
}
bool EnsureCorrectName(ref string newName)
{
newName = newName.Trim();
if (editPlatforms && string.Equals(newName, "AnyCPU", StringComparison.OrdinalIgnoreCase))
newName = "Any CPU";
newName = editedCollection.ValidateName(newName);
if (newName == null) {
MessageService.ShowMessage("${res:Dialog.EditAvailableConfigurationsDialog.InvalidName}");
return false;
}
foreach (string item in listBox.Items) {
if (string.Equals(item, newName, StringComparison.OrdinalIgnoreCase)) {
MessageService.ShowMessage("${res:Dialog.EditAvailableConfigurationsDialog.DuplicateName}");
return false;
}
}
if (MSBuildInternals.Escape(newName) != newName
|| !FileUtility.IsValidDirectoryEntryName(newName)
|| newName.Contains("'"))
{
MessageService.ShowMessage("${res:Dialog.EditAvailableConfigurationsDialog.InvalidName}");
return false;
}
return true;
}
void AddButtonClick(object sender, EventArgs e)
{
IEnumerable<string> availableSourceItems;
if (project != null) {
if (editPlatforms) {
availableSourceItems = project.PlatformNames;
} else {
availableSourceItems = project.ConfigurationNames;
}
} else {
if (editPlatforms) {
availableSourceItems = solution.GetPlatformNames();
} else {
availableSourceItems = solution.GetConfigurationNames();
}
}
using (AddNewConfigurationDialog dlg = new AddNewConfigurationDialog
(project == null, editPlatforms,
availableSourceItems,
(configurable is ISolution, editPlatforms,
editedCollection,
delegate (string name) { return EnsureCorrectName(ref name); }
))
{
if (dlg.ShowDialog(this) == DialogResult.OK) {
string newName = dlg.NewName;
// fix up the new name
if (!EnsureCorrectName(ref newName))
return;
if (project != null) {
IProjectAllowChangeConfigurations pacc = project as IProjectAllowChangeConfigurations;
if (pacc != null) {
if (editPlatforms) {
pacc.AddProjectPlatform(MSBuildInternals.FixPlatformNameForProject(newName), dlg.CopyFrom);
} else {
pacc.AddProjectConfiguration(newName, dlg.CopyFrom);
}
}
} else {
if (editPlatforms) {
solution.AddSolutionPlatform(newName, dlg.CopyFrom, dlg.CreateInAllProjects);
} else {
solution.AddSolutionConfiguration(newName, dlg.CopyFrom, dlg.CreateInAllProjects);
}
editedCollection.Add(dlg.NewName, dlg.CopyFrom);
if (dlg.CreateInAllProjects) {
#warning
throw new NotImplementedException();
}
InitList();
}

96
src/Main/Base/Project/Src/Gui/Dialogs/SolutionConfiguration/SolutionConfigurationEditor.cs

@ -13,11 +13,12 @@ namespace ICSharpCode.SharpDevelop.Gui @@ -13,11 +13,12 @@ namespace ICSharpCode.SharpDevelop.Gui
{
public partial class SolutionConfigurationEditor
{
Solution solution;
ISolution solution;
bool inUpdate;
int configurationComboBoxEditIndex;
int platformComboBoxEditIndex;
ConfigurationAndPlatform solutionConfig;
public SolutionConfigurationEditor()
{
@ -52,10 +53,10 @@ namespace ICSharpCode.SharpDevelop.Gui @@ -52,10 +53,10 @@ namespace ICSharpCode.SharpDevelop.Gui
void UpdateAvailableSolutionConfigurationPlatforms()
{
SetItems(configurationComboBox.Items, solution.GetConfigurationNames());
SetItems(platformComboBox.Items, solution.GetPlatformNames());
SelectElement(configurationComboBox, solution.Preferences.ActiveConfiguration);
SelectElement(platformComboBox, solution.Preferences.ActivePlatform);
SetItems(configurationComboBox.Items, solution.ConfigurationNames);
SetItems(platformComboBox.Items, solution.PlatformNames);
SelectElement(configurationComboBox, solution.ActiveConfiguration.Configuration);
SelectElement(platformComboBox, solution.ActiveConfiguration.Platform);
string editItemText = EditTag.Instance.ToString();
configurationComboBoxEditIndex = configurationComboBox.Items.Add(editItemText);
@ -99,32 +100,21 @@ namespace ICSharpCode.SharpDevelop.Gui @@ -99,32 +100,21 @@ namespace ICSharpCode.SharpDevelop.Gui
{
inUpdate = true;
Dictionary<IProject, Solution.ProjectConfigurationPlatformMatching> matchingDict =
new Dictionary<IProject, Solution.ProjectConfigurationPlatformMatching>();
foreach (Solution.ProjectConfigurationPlatformMatching matching in
solution.GetActiveConfigurationsAndPlatformsForProjects(configurationComboBox.Text,
platformComboBox.Text))
{
matchingDict[matching.Project] = matching;
}
solutionConfig = new ConfigurationAndPlatform(configurationComboBox.Text, platformComboBox.Text);
foreach (DataGridViewRow row in grid.Rows) {
IProject p = (IProject)row.Tag;
Solution.ProjectConfigurationPlatformMatching matching;
if (!matchingDict.TryGetValue(p, out matching)) {
matching = new Solution.ProjectConfigurationPlatformMatching(p, p.ActiveConfiguration, p.ActivePlatform, null);
}
var projectConfig = p.ConfigurationMapping.GetProjectConfiguration(solutionConfig);
DataGridViewComboBoxCell c1 = (DataGridViewComboBoxCell)row.Cells[1];
c1.Tag = matching;
SetItems(c1.Items, p.ConfigurationNames);
SelectElement(c1, matching.Configuration);
SelectElement(c1, projectConfig.Configuration);
c1.Items.Add(EditTag.Instance);
DataGridViewComboBoxCell c2 = (DataGridViewComboBoxCell)row.Cells[2];
c2.Tag = matching;
SetItems(c2.Items, p.PlatformNames);
SelectElement(c2, matching.Platform);
SelectElement(c2, projectConfig.Platform);
c2.Items.Add(EditTag.Instance);
}
inUpdate = false;
@ -167,26 +157,13 @@ namespace ICSharpCode.SharpDevelop.Gui @@ -167,26 +157,13 @@ namespace ICSharpCode.SharpDevelop.Gui
{
if (!inUpdate && e.RowIndex >= 0) {
DataGridViewRow row = grid.Rows[e.RowIndex];
DataGridViewCell cell = row.Cells[e.ColumnIndex];
Solution.ProjectConfigurationPlatformMatching matching = cell.Tag as Solution.ProjectConfigurationPlatformMatching;
if (matching != null) {
if (e.ColumnIndex == configurationColumn.Index) {
matching.Configuration = cell.Value.ToString();
} else {
matching.Platform = cell.Value.ToString();
}
if (matching.Platform == "AnyCPU") {
matching.Platform = "Any CPU";
}
IProject project = (IProject)row.Tag;
if (matching.SolutionItem == null) {
matching.SolutionItem = solution.CreateMatchingItem(configurationComboBox.Text,
platformComboBox.Text,
matching.Project, "");
}
matching.SetProjectConfigurationPlatform(solution.GetProjectConfigurationsSection(),
matching.Configuration, matching.Platform);
}
var newConfig = new ConfigurationAndPlatform(
row.Cells[configurationColumn.Index].ToString(),
row.Cells[platformColumn.Index].ToString());
project.ConfigurationMapping.SetProjectConfiguration(solutionConfig, newConfig);
}
}
@ -216,32 +193,31 @@ namespace ICSharpCode.SharpDevelop.Gui @@ -216,32 +193,31 @@ namespace ICSharpCode.SharpDevelop.Gui
if (gridEditingControl.SelectedItem == EditTag.Instance) {
DataGridViewComboBoxCell cell = grid.CurrentCell as DataGridViewComboBoxCell;
if (cell == null) return;
Solution.ProjectConfigurationPlatformMatching matching = cell.Tag as Solution.ProjectConfigurationPlatformMatching;
if (matching != null) {
inUpdate = true;
using (Form dlg = new EditAvailableConfigurationsDialog(matching.Project,
cell.ColumnIndex != configurationColumn.Index))
{
dlg.ShowDialog(this);
}
IProject project = (IProject)cell.OwningRow.Tag;
grid.EndEdit();
inUpdate = true;
using (Form dlg = new EditAvailableConfigurationsDialog(project,
cell.ColumnIndex != configurationColumn.Index))
{
dlg.ShowDialog(this);
}
inUpdate = true;
grid.EndEdit();
// end edit to allow updating the grid
grid.EndEdit();
inUpdate = true;
// we need to change the current cell because otherwise UpdateGrid cannot change the
// list of combobox items in this cell
grid.CurrentCell = grid.Rows[cell.RowIndex].Cells[0];
// end edit to allow updating the grid
grid.EndEdit();
// remove cell.Value because otherwise the grid view crashes in UpdateGrid
cell.Value = null;
// we need to change the current cell because otherwise UpdateGrid cannot change the
// list of combobox items in this cell
grid.CurrentCell = grid.Rows[cell.RowIndex].Cells[0];
UpdateAvailableSolutionConfigurationPlatforms();
UpdateGrid();
}
// remove cell.Value because otherwise the grid view crashes in UpdateGrid
cell.Value = null;
UpdateAvailableSolutionConfigurationPlatforms();
UpdateGrid();
}
}
}

2
src/Main/Base/Project/Src/Gui/Dialogs/WordCountDialog.cs

@ -147,7 +147,7 @@ namespace ICSharpCode.SharpDevelop.Gui @@ -147,7 +147,7 @@ namespace ICSharpCode.SharpDevelop.Gui
UpdateList(0);
}
void CountSolution(Solution solution, ref Report all)
void CountSolution(ISolution solution, ref Report all)
{
foreach (IProject project in solution.Projects) {
CountProject(project, ref all);

11
src/Main/Base/Project/Src/Gui/Pads/FileScout.cs

@ -398,12 +398,11 @@ namespace ICSharpCode.SharpDevelop.Gui @@ -398,12 +398,11 @@ namespace ICSharpCode.SharpDevelop.Gui
void FileSelected(object sender, EventArgs e)
{
foreach (FileList.FileListItem item in filelister.SelectedItems) {
IProjectLoader loader = ProjectService.GetProjectLoader(item.FullName);
if (loader != null) {
loader.Load(item.FullName);
} else {
FileService.OpenFile(item.FullName);
}
var fileName = FileName.Create(item.FullName);
if (SD.ProjectService.IsProjectOrSolutionFile(fileName))
SD.ProjectService.OpenSolutionOrProject(fileName);
else
FileService.OpenFile(fileName);
}
}
}

4
src/Main/Base/Project/Src/Gui/Pads/ProjectBrowser/Commands/ProjectNodeCommands.cs

@ -12,12 +12,12 @@ namespace ICSharpCode.SharpDevelop.Project.Commands @@ -12,12 +12,12 @@ namespace ICSharpCode.SharpDevelop.Project.Commands
{
public override void Run()
{
Solution solution = ProjectService.OpenSolution;
ISolution solution = ProjectService.OpenSolution;
IProject project = ProjectService.CurrentProject;
if (solution == null || project == null)
return;
if (project.IsStartable) {
solution.Preferences.StartupProject = project;
solution.StartupProject = project;
} else {
MessageService.ShowError("${res:BackendBindings.ExecutionManager.CantExecuteDLLError}");
}

32
src/Main/Base/Project/Src/Gui/Pads/ProjectBrowser/Commands/SolutionNodeCommands.cs

@ -21,7 +21,7 @@ namespace ICSharpCode.SharpDevelop.Project.Commands @@ -21,7 +21,7 @@ namespace ICSharpCode.SharpDevelop.Project.Commands
if (node != null) {
using (NewProjectDialog npdlg = new NewProjectDialog(false)) {
npdlg.SolutionFolderNode = solutionFolderNode;
npdlg.InitialProjectLocationDirectory = GetInitialDirectorySuggestion(solutionFolderNode);
npdlg.InitialProjectLocationDirectory = GetInitialDirectorySuggestion(solutionFolderNode.Folder);
// show the dialog to request project type and name
if (npdlg.ShowDialog(SD.WinForms.MainWin32Window) == DialogResult.OK) {
@ -34,12 +34,12 @@ namespace ICSharpCode.SharpDevelop.Project.Commands @@ -34,12 +34,12 @@ namespace ICSharpCode.SharpDevelop.Project.Commands
}
}
internal static string GetInitialDirectorySuggestion(ISolutionFolderNode solutionFolderNode)
internal static string GetInitialDirectorySuggestion(ISolutionFolder solutionFolder)
{
// Detect the correct folder to place the new project in:
int projectCount = 0;
string initialDirectory = null;
foreach (ISolutionFolder folderEntry in solutionFolderNode.Container.Folders) {
foreach (ISolutionItem folderEntry in solutionFolder.Items) {
IProject project = folderEntry as IProject;
if (project != null) {
if (projectCount == 0)
@ -56,33 +56,13 @@ namespace ICSharpCode.SharpDevelop.Project.Commands @@ -56,33 +56,13 @@ namespace ICSharpCode.SharpDevelop.Project.Commands
return initialDirectory;
}
} else {
return solutionFolderNode.Solution.Directory;
return solutionFolder.ParentSolution.Directory;
}
}
}
public class AddExistingProjectToSolution : AbstractMenuCommand
{
public static void AddProject(ISolutionFolderNode solutionFolderNode, FileName fileName)
{
if (solutionFolderNode == null)
throw new ArgumentNullException("solutionFolderNode");
ProjectLoadInformation loadInfo = new ProjectLoadInformation(solutionFolderNode.Solution, fileName, Path.GetFileNameWithoutExtension(fileName));
AddProject(solutionFolderNode, ProjectBindingService.LoadProject(loadInfo));
}
public static void AddProject(ISolutionFolderNode solutionFolderNode, IProject newProject)
{
if (solutionFolderNode == null)
throw new ArgumentNullException("solutionFolderNode");
if (newProject != null) {
newProject.Location = FileUtility.GetRelativePath(solutionFolderNode.Solution.Directory, newProject.FileName);
ProjectService.AddProject(solutionFolderNode, newProject);
NodeBuilders.AddProjectNode((TreeNode)solutionFolderNode, newProject).EnsureVisible();
solutionFolderNode.Solution.ApplySolutionConfigurationAndPlatformToProjects();
}
}
public override void Run()
{
AbstractProjectBrowserTreeNode node = ProjectBrowserPad.Instance.ProjectBrowserControl.SelectedNode;
@ -93,10 +73,10 @@ namespace ICSharpCode.SharpDevelop.Project.Commands @@ -93,10 +73,10 @@ namespace ICSharpCode.SharpDevelop.Project.Commands
fdiag.Filter = ProjectService.GetAllProjectsFilter(this, false);
fdiag.Multiselect = true;
fdiag.CheckFileExists = true;
fdiag.InitialDirectory = AddNewProjectToSolution.GetInitialDirectorySuggestion(solutionFolderNode);
fdiag.InitialDirectory = AddNewProjectToSolution.GetInitialDirectorySuggestion(solutionFolderNode.Folder);
if (fdiag.ShowDialog(SD.WinForms.MainWin32Window) == DialogResult.OK) {
foreach (string fileName in fdiag.FileNames) {
AddProject(solutionFolderNode, FileName.Create(fileName));
solutionFolderNode.Solution.AddExistingProject(FileName.Create(fileName), solutionFolderNode.Folder);
}
ProjectService.SaveSolution();
}

21
src/Main/Base/Project/Src/Gui/Pads/ProjectBrowser/ProjectBrowserControl.cs

@ -100,12 +100,11 @@ namespace ICSharpCode.SharpDevelop.Project @@ -100,12 +100,11 @@ namespace ICSharpCode.SharpDevelop.Project
string[] files = (string[])e.Data.GetData(DataFormats.FileDrop);
foreach (string file in files) {
try {
IProjectLoader loader = ProjectService.GetProjectLoader(file);
if (loader != null) {
FileUtility.ObservedLoad(new NamedFileOperationDelegate(loader.Load), file);
} else {
FileService.OpenFile(file);
}
var fileName = FileName.Create(file);
if (SD.ProjectService.IsProjectOrSolutionFile(fileName))
SD.ProjectService.OpenSolutionOrProject(fileName);
else
FileService.OpenFile(fileName);
} catch (Exception ex) {
MessageService.ShowException(ex, "unable to open file " + file);
}
@ -281,12 +280,12 @@ namespace ICSharpCode.SharpDevelop.Project @@ -281,12 +280,12 @@ namespace ICSharpCode.SharpDevelop.Project
TreeNode FindDeepestOpenNodeForPath(string fileName)
{
//LoggingService.DebugFormatted("Finding Deepest for '{0}'", fileName);
Solution solution = ProjectService.OpenSolution;
ISolution solution = ProjectService.OpenSolution;
if (solution == null) {
return null;
}
IProject project = solution.FindProjectContainingFile(FileName.Create(fileName));
IProject project = SD.ProjectService.FindProjectContainingFile(FileName.Create(fileName));
if (project == null) {
//LoggingService.Debug("no IProject found");
return null;
@ -375,17 +374,17 @@ namespace ICSharpCode.SharpDevelop.Project @@ -375,17 +374,17 @@ namespace ICSharpCode.SharpDevelop.Project
}
#endregion
public void ViewSolution(Solution solution)
public void ViewSolution(ISolution solution)
{
AbstractProjectBrowserTreeNode solutionNode = new SolutionNode(solution);
treeView.Clear();
solutionNode.AddTo(treeView);
foreach (object treeObject in solution.Folders) {
foreach (var treeObject in solution.Items) {
if (treeObject is IProject) {
NodeBuilders.AddProjectNode(solutionNode, (IProject)treeObject);
} else {
SolutionFolderNode folderNode = new SolutionFolderNode(solution, (SolutionFolder)treeObject);
SolutionFolderNode folderNode = new SolutionFolderNode(solution, (ISolutionFolder)treeObject);
folderNode.InsertSorted(solutionNode);
}
}

10
src/Main/Base/Project/Src/Gui/Pads/ProjectBrowser/ProjectBrowserPad.cs

@ -94,7 +94,7 @@ namespace ICSharpCode.SharpDevelop.Project @@ -94,7 +94,7 @@ namespace ICSharpCode.SharpDevelop.Project
void ProjectServiceSolutionPreferencesSaving(object sender, SolutionEventArgs e)
{
projectBrowserPanel.StoreViewState(e.Solution.Preferences.Properties);
projectBrowserPanel.StoreViewState(e.Solution.Preferences);
}
void ProjectServiceSolutionLoaded(object sender, SolutionEventArgs e)
@ -102,7 +102,7 @@ namespace ICSharpCode.SharpDevelop.Project @@ -102,7 +102,7 @@ namespace ICSharpCode.SharpDevelop.Project
this.LoadSolution(e.Solution);
}
void LoadSolution(Solution solution)
void LoadSolution(ISolution solution)
{
if (!ProjectBrowserControl.TreeView.IsHandleCreated) {
LoggingService.Debug("ProjectBrowser: Attempt to load solution " + solution.ToString() + " before handle of ProjectBrowserControl.TreeView created");
@ -116,12 +116,12 @@ namespace ICSharpCode.SharpDevelop.Project @@ -116,12 +116,12 @@ namespace ICSharpCode.SharpDevelop.Project
LoggingService.Debug("ProjectBrowser: Loading solution " + solution.ToString() + " into project tree view");
this.solutionToLoadWhenHandleIsCreated = null;
projectBrowserPanel.ViewSolution(solution);
projectBrowserPanel.ReadViewState(solution.Preferences.Properties);
projectBrowserPanel.ReadViewState(solution.Preferences);
}
}
bool treeViewHandleCreatedAttached;
Solution solutionToLoadWhenHandleIsCreated;
ISolution solutionToLoadWhenHandleIsCreated;
void ProjectBrowserTreeViewHandleCreated(object sender, EventArgs e)
{
@ -130,7 +130,7 @@ namespace ICSharpCode.SharpDevelop.Project @@ -130,7 +130,7 @@ namespace ICSharpCode.SharpDevelop.Project
treeView.HandleCreated -= this.ProjectBrowserTreeViewHandleCreated;
if (this.solutionToLoadWhenHandleIsCreated != null) {
LoggingService.Debug("ProjectBrowser: Tree view handle created, will load " + this.solutionToLoadWhenHandleIsCreated.ToString() + ".");
treeView.BeginInvoke(new Action<Solution>(this.LoadSolution), this.solutionToLoadWhenHandleIsCreated);
treeView.BeginInvoke(new Action<ISolution>(this.LoadSolution), this.solutionToLoadWhenHandleIsCreated);
this.solutionToLoadWhenHandleIsCreated = null;
} else {
LoggingService.Debug("ProjectBrowser: Tree view handle created, no solution to load.");

2
src/Main/Base/Project/Src/Gui/Pads/ProjectBrowser/ProjectBrowserPanel.cs

@ -71,7 +71,7 @@ namespace ICSharpCode.SharpDevelop.Project @@ -71,7 +71,7 @@ namespace ICSharpCode.SharpDevelop.Project
}
}
public void ViewSolution(Solution solution)
public void ViewSolution(ISolution solution)
{
UpdateToolStrip(null);
projectBrowserControl.ViewSolution(solution);

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

@ -39,7 +39,7 @@ namespace ICSharpCode.SharpDevelop.Project @@ -39,7 +39,7 @@ namespace ICSharpCode.SharpDevelop.Project
/// Returns the solution in which this node belongs to. This assumes that
/// any node is child of a solution.
/// </summary>
public virtual Solution Solution {
public virtual ISolution Solution {
get {
AbstractProjectBrowserTreeNode parent = Parent as AbstractProjectBrowserTreeNode;
if (parent != null) {

2
src/Main/Base/Project/Src/Gui/Pads/ProjectBrowser/TreeNodes/DirectoryNode.cs

@ -645,7 +645,7 @@ namespace ICSharpCode.SharpDevelop.Project @@ -645,7 +645,7 @@ namespace ICSharpCode.SharpDevelop.Project
}
FileProjectItem newItem = AddExistingItemsToProject.CopyFile(fileName, this, true);
IProject sourceProject = Solution.FindProjectContainingFile(fileName);
IProject sourceProject = ISolution.FindProjectContainingFile(fileName);
if (sourceProject != null) {
string sourceDirectory = Path.GetDirectoryName(fileName);
bool dependendElementsCopied = false;

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

@ -187,7 +187,7 @@ namespace ICSharpCode.SharpDevelop.Project @@ -187,7 +187,7 @@ namespace ICSharpCode.SharpDevelop.Project
if (dataObject.GetDataPresent(typeof(FileNode))) {
// Dragging a file onto another creates a dependency.
// If we are in the same directory, allow moving only.
if (this.Project.ReadOnly)
if (this.Project.IsReadOnly)
return DragDropEffects.None;
FileNode other = (FileNode)dataObject.GetData(typeof(FileNode));
if (other == this || !(other.ProjectItem is FileProjectItem) || !(this.ProjectItem is FileProjectItem))

4
src/Main/Base/Project/Src/Gui/Pads/ProjectBrowser/TreeNodes/ProjectNode.cs

@ -50,7 +50,7 @@ namespace ICSharpCode.SharpDevelop.Project @@ -50,7 +50,7 @@ namespace ICSharpCode.SharpDevelop.Project
this.project = project;
Text = project.Name;
if (project.ReadOnly) {
if (project.IsReadOnly) {
Text += StringParser.Parse(" (${res:Global.ReadOnly})");
}
@ -166,7 +166,7 @@ namespace ICSharpCode.SharpDevelop.Project @@ -166,7 +166,7 @@ namespace ICSharpCode.SharpDevelop.Project
public override void Cut()
{
DoPerformCut = true;
SD.Clipboard.SetDataObject(new DataObject(typeof(ISolutionFolder).ToString(), project.IdGuid));
SD.Clipboard.SetDataObject(new DataObject(typeof(ISolutionItem).ToString(), project.IdGuid));
}
// Paste is inherited from DirectoryNode.

2
src/Main/Base/Project/Src/Gui/Pads/ProjectBrowser/TreeNodes/ReferenceNode.cs

@ -31,7 +31,7 @@ namespace ICSharpCode.SharpDevelop.Project @@ -31,7 +31,7 @@ namespace ICSharpCode.SharpDevelop.Project
#region Cut & Paste
public override bool EnableDelete {
get {
return !Project.ReadOnly;
return !Project.IsReadOnly;
}
}

47
src/Main/Base/Project/Src/Gui/Pads/ProjectBrowser/TreeNodes/SolutionFolderNode.cs

@ -12,7 +12,7 @@ namespace ICSharpCode.SharpDevelop.Project @@ -12,7 +12,7 @@ namespace ICSharpCode.SharpDevelop.Project
{
public interface ISolutionFolderNode
{
Solution Solution {
ISolution Solution {
get;
}
@ -20,19 +20,15 @@ namespace ICSharpCode.SharpDevelop.Project @@ -20,19 +20,15 @@ namespace ICSharpCode.SharpDevelop.Project
get;
}
ISolutionFolderContainer Container {
get;
}
void AddItem(string fileName);
}
public class SolutionFolderNode : CustomFolderNode, ISolutionFolderNode
{
Solution solution;
SolutionFolder folder;
ISolution solution;
ISolutionFolder folder;
public override Solution Solution {
public override ISolution Solution {
get {
Debug.Assert(solution != null);
return solution;
@ -40,19 +36,12 @@ namespace ICSharpCode.SharpDevelop.Project @@ -40,19 +36,12 @@ namespace ICSharpCode.SharpDevelop.Project
}
public ISolutionFolder Folder {
get {
Debug.Assert(folder != null);
return folder;
}
}
public ISolutionFolderContainer Container {
get {
return folder;
}
}
public SolutionFolderNode(Solution solution, SolutionFolder folder)
public SolutionFolderNode(ISolution solution, ISolutionFolder folder)
{
sortOrder = 0;
canLabelEdit = true;
@ -103,7 +92,7 @@ namespace ICSharpCode.SharpDevelop.Project @@ -103,7 +92,7 @@ namespace ICSharpCode.SharpDevelop.Project
// add solution items (=files) from project sections.
foreach (SolutionItem item in folder.SolutionItems.Items) {
new SolutionItemNode(Solution, item).InsertSorted(this);
new SolutionItemNode(ISolution, item).InsertSorted(this);
}
base.Initialize();
}
@ -140,7 +129,7 @@ namespace ICSharpCode.SharpDevelop.Project @@ -140,7 +129,7 @@ namespace ICSharpCode.SharpDevelop.Project
public override void Cut()
{
DoPerformCut = true;
SD.Clipboard.SetDataObject(new DataObject(typeof(ISolutionFolder).ToString(), folder.IdGuid));
SD.Clipboard.SetDataObject(new DataObject(typeof(ISolutionItem).ToString(), folder.IdGuid));
}
public static bool DoEnablePaste(ISolutionFolderNode container)
@ -153,14 +142,14 @@ namespace ICSharpCode.SharpDevelop.Project @@ -153,14 +142,14 @@ namespace ICSharpCode.SharpDevelop.Project
if (dataObject == null) {
return false;
}
if (dataObject.GetDataPresent(typeof(ISolutionFolder).ToString())) {
string guid = dataObject.GetData(typeof(ISolutionFolder).ToString()).ToString();
ISolutionFolder solutionFolder = container.Solution.GetSolutionFolder(guid);
if (dataObject.GetDataPresent(typeof(ISolutionItem).ToString())) {
string guid = dataObject.GetData(typeof(ISolutionItem).ToString()).ToString();
ISolutionItem solutionFolder = container.Solution.GetSolutionFolder(guid);
if (solutionFolder == null || solutionFolder == container)
return false;
if (solutionFolder is ISolutionFolderContainer) {
if (solutionFolder is ISolutionFolder) {
return solutionFolder.Parent != container
&& !((ISolutionFolderContainer)solutionFolder).IsAncestorOf(container.Folder);
&& !((ISolutionFolder)solutionFolder).IsAncestorOf(container.Folder);
} else {
return solutionFolder.Parent != container;
}
@ -178,9 +167,9 @@ namespace ICSharpCode.SharpDevelop.Project @@ -178,9 +167,9 @@ namespace ICSharpCode.SharpDevelop.Project
ExtTreeNode folderTreeNode = (ExtTreeNode)folderNode;
if (dataObject.GetDataPresent(typeof(ISolutionFolder).ToString())) {
string guid = dataObject.GetData(typeof(ISolutionFolder).ToString()).ToString();
ISolutionFolder solutionFolder = folderNode.Solution.GetSolutionFolder(guid);
if (dataObject.GetDataPresent(typeof(ISolutionItem).ToString())) {
string guid = dataObject.GetData(typeof(ISolutionItem).ToString()).ToString();
ISolutionItem solutionFolder = folderNode.Solution.GetSolutionFolder(guid);
if (solutionFolder != null) {
folderNode.Container.AddFolder(solutionFolder);
ExtTreeView treeView = (ExtTreeView)folderTreeNode.TreeView;
@ -223,7 +212,7 @@ namespace ICSharpCode.SharpDevelop.Project @@ -223,7 +212,7 @@ namespace ICSharpCode.SharpDevelop.Project
if (dataObject.GetDataPresent(typeof(SolutionFolderNode))) {
SolutionFolderNode folderNode = (SolutionFolderNode)dataObject.GetData(typeof(SolutionFolderNode));
if (folderNode.Folder.Parent != this.folder && !folderNode.Container.IsAncestorOf(Folder)) {
if (folderNode.SolutionItem.Parent != this.folder && !folderNode.Folder.IsAncestorOf(SolutionItem)) {
return DragDropEffects.Move;
}
}
@ -261,7 +250,7 @@ namespace ICSharpCode.SharpDevelop.Project @@ -261,7 +250,7 @@ namespace ICSharpCode.SharpDevelop.Project
folderNode.Remove();
folderNode.InsertSorted(this);
folderNode.EnsureVisible();
this.folder.AddFolder(folderNode.Folder);
this.folder.AddFolder(folderNode.SolutionItem);
if (parentNode != null) {
parentNode.Refresh();
}
@ -272,7 +261,7 @@ namespace ICSharpCode.SharpDevelop.Project @@ -272,7 +261,7 @@ namespace ICSharpCode.SharpDevelop.Project
ISolutionFolderNode folderNode = (ISolutionFolderNode)solutionItemNode.Parent;
folderNode.Container.SolutionItems.Items.Remove(solutionItemNode.SolutionItem);
Container.SolutionItems.Items.Add(solutionItemNode.SolutionItem);
Folder.SolutionItems.Items.Add(solutionItemNode.SolutionItem);
solutionItemNode.Remove();
solutionItemNode.InsertSorted(this);

10
src/Main/Base/Project/Src/Gui/Pads/ProjectBrowser/TreeNodes/SolutionItemNode.cs

@ -11,10 +11,10 @@ namespace ICSharpCode.SharpDevelop.Project @@ -11,10 +11,10 @@ namespace ICSharpCode.SharpDevelop.Project
{
public class SolutionItemNode : CustomFolderNode
{
Solution solution;
SolutionItem item;
ISolution solution;
ISolutionItem item;
public SolutionItem SolutionItem {
public ISolutionItem SolutionItem {
get {
return item;
}
@ -26,14 +26,14 @@ namespace ICSharpCode.SharpDevelop.Project @@ -26,14 +26,14 @@ namespace ICSharpCode.SharpDevelop.Project
}
}
public SolutionItemNode(Solution solution, SolutionItem item)
public SolutionItemNode(ISolutionItem item)
{
sortOrder = 2;
canLabelEdit = true;
ContextmenuAddinTreePath = "/SharpDevelop/Pads/ProjectBrowser/ContextMenu/SolutionItemNode";
this.solution = solution;
this.solution = item.ParentSolution;
this.item = item;
this.Text = Path.GetFileName(FileName);
SetIcon(IconService.GetImageForFile(FileName));

27
src/Main/Base/Project/Src/Gui/Pads/ProjectBrowser/TreeNodes/SolutionNode.cs

@ -11,25 +11,21 @@ namespace ICSharpCode.SharpDevelop.Project @@ -11,25 +11,21 @@ namespace ICSharpCode.SharpDevelop.Project
{
public class SolutionNode : AbstractProjectBrowserTreeNode, ISolutionFolderNode
{
Solution solution;
public ISolutionFolder Folder {
get {
return solution;
}
}
ISolution solution;
public override Solution Solution {
ISolutionFolder ISolutionFolderNode.Folder {
get {
return solution;
}
}
public ISolutionFolderContainer Container {
public override ISolution Solution {
get {
return solution;
}
}
public SolutionNode(Solution solution)
public SolutionNode(ISolution solution)
{
sortOrder = -1;
this.solution = solution;
@ -55,11 +51,6 @@ namespace ICSharpCode.SharpDevelop.Project @@ -55,11 +51,6 @@ namespace ICSharpCode.SharpDevelop.Project
return;
if (!FileService.CheckFileName(newName))
return;
string newFileName = Path.Combine(solution.Directory, newName + ".sln");
if (!FileService.RenameFile(solution.FileName, newFileName, false)) {
return;
}
solution.FileName = newFileName;
solution.Name = newName;
} finally {
UpdateText();
@ -69,7 +60,7 @@ namespace ICSharpCode.SharpDevelop.Project @@ -69,7 +60,7 @@ namespace ICSharpCode.SharpDevelop.Project
void UpdateText()
{
Text = ResourceService.GetString("ICSharpCode.SharpDevelop.Commands.ProjectBrowser.SolutionNodeText") + " " + solution.Name;
if (Solution.ReadOnly) {
if (solution.ReadOnly) {
Text += StringParser.Parse(" (${res:Global.ReadOnly})");
}
}
@ -80,7 +71,7 @@ namespace ICSharpCode.SharpDevelop.Project @@ -80,7 +71,7 @@ namespace ICSharpCode.SharpDevelop.Project
SolutionFolderNode node = null;
foreach (TreeNode n in Nodes) {
node = n as SolutionFolderNode;
if (node != null && node.Folder.Name == folderName) {
if (node != null && node.SolutionItem.Name == folderName) {
break;
}
node = null;
@ -102,7 +93,7 @@ namespace ICSharpCode.SharpDevelop.Project @@ -102,7 +93,7 @@ namespace ICSharpCode.SharpDevelop.Project
if (dataObject.GetDataPresent(typeof(SolutionFolderNode))) {
SolutionFolderNode folderNode = (SolutionFolderNode)dataObject.GetData(typeof(SolutionFolderNode));
if (folderNode.Folder.Parent != solution) {
if (folderNode.SolutionItem.Parent != solution) {
return DragDropEffects.All;
}
}
@ -129,7 +120,7 @@ namespace ICSharpCode.SharpDevelop.Project @@ -129,7 +120,7 @@ namespace ICSharpCode.SharpDevelop.Project
folderNode.Remove();
folderNode.InsertSorted(this);
this.solution.AddFolder(folderNode.Folder);
this.solution.AddFolder(folderNode.SolutionItem);
}
if (dataObject.GetDataPresent(typeof(ProjectNode))) {
ProjectNode projectNode = (ProjectNode)dataObject.GetData(typeof(ProjectNode));

6
src/Main/Base/Project/Src/Gui/Pads/ProjectBrowser/TreeNodes/Util/SolutionFolderRemoveVisitor.cs

@ -8,16 +8,16 @@ namespace ICSharpCode.SharpDevelop.Project @@ -8,16 +8,16 @@ namespace ICSharpCode.SharpDevelop.Project
{
public class SolutionFolderRemoveVisitor : ProjectBrowserTreeNodeVisitor
{
ISolutionFolder folder;
ISolutionItem folder;
public SolutionFolderRemoveVisitor(ISolutionFolder folder)
public SolutionFolderRemoveVisitor(ISolutionItem folder)
{
this.folder = folder;
}
public override object Visit(SolutionFolderNode solutionFolderNode, object data)
{
if (folder == solutionFolderNode.Folder) {
if (folder == solutionFolderNode.SolutionItem) {
ExtTreeNode parent = solutionFolderNode.Parent as ExtTreeNode;
solutionFolderNode.Remove();
if (parent != null) {

2
src/Main/Base/Project/Src/Internal/ConditionEvaluators/WriteableProjectEvaluator.cs

@ -18,7 +18,7 @@ namespace ICSharpCode.SharpDevelop @@ -18,7 +18,7 @@ namespace ICSharpCode.SharpDevelop
if (caller is ISolutionFolderNode)
return ProjectService.OpenSolution != null && !ProjectService.OpenSolution.ReadOnly;
IProject project = (caller as IProject) ?? ProjectService.CurrentProject;
return project != null && !project.ReadOnly;
return project != null && !project.IsReadOnly;
}
}
}

2
src/Main/Base/Project/Src/Internal/ConditionEvaluators/WriteableSolutionEvaluator.cs

@ -14,7 +14,7 @@ namespace ICSharpCode.SharpDevelop @@ -14,7 +14,7 @@ namespace ICSharpCode.SharpDevelop
{
public bool IsValid(object caller, Condition condition)
{
Solution solution = ProjectService.OpenSolution;
ISolution solution = ProjectService.OpenSolution;
return (solution != null && !solution.ReadOnly);
}
}

2
src/Main/Base/Project/Src/Internal/Templates/Project/ProjectCreateInformation.cs

@ -44,7 +44,7 @@ namespace ICSharpCode.SharpDevelop.Internal.Templates @@ -44,7 +44,7 @@ namespace ICSharpCode.SharpDevelop.Internal.Templates
public string SolutionPath { get; set; }
public string ProjectBasePath { get; set; }
public TargetFramework TargetFramework { get; set; }
public Solution Solution { get; set; }
public ISolution Solution { get; set; }
/// <summary>
/// Whether to initialize the type system for the newly created project.

4
src/Main/Base/Project/Src/Internal/Templates/Project/ProjectTemplate.cs

@ -301,6 +301,8 @@ namespace ICSharpCode.SharpDevelop.Internal.Templates @@ -301,6 +301,8 @@ namespace ICSharpCode.SharpDevelop.Internal.Templates
public string CreateProject(ProjectCreateInformation projectCreateInformation)
{
throw new NotImplementedException();
/*
LoggingService.Info("Creating project from template '" + this.Category + "/" + this.Subcategory + "/" + this.Name + "'");
if (solutionDescriptor != null) {
return solutionDescriptor.CreateSolution(projectCreateInformation, this.languagename);
@ -331,7 +333,7 @@ namespace ICSharpCode.SharpDevelop.Internal.Templates @@ -331,7 +333,7 @@ namespace ICSharpCode.SharpDevelop.Internal.Templates
}
} else {
return null;
}
}*/
}
public void RunOpenActions(ProjectCreateInformation projectCreateInformation)

4
src/Main/Base/Project/Src/Internal/Templates/Project/SolutionDescriptor.cs

@ -36,7 +36,7 @@ namespace ICSharpCode.SharpDevelop.Internal.Templates @@ -36,7 +36,7 @@ namespace ICSharpCode.SharpDevelop.Internal.Templates
}
}
internal bool AddContents(Solution solution, ProjectCreateInformation projectCreateInformation, string defaultLanguage, ISolutionFolderContainer parentFolder)
internal bool AddContents(ISolution solution, ProjectCreateInformation projectCreateInformation, string defaultLanguage, ISolutionFolder parentFolder)
{
// Create sub projects
foreach (SolutionFolderDescriptor folderDescriptor in solutionFoldersDescriptors) {
@ -110,7 +110,7 @@ namespace ICSharpCode.SharpDevelop.Internal.Templates @@ -110,7 +110,7 @@ namespace ICSharpCode.SharpDevelop.Internal.Templates
string solutionLocation = Path.Combine(projectCreateInformation.SolutionPath, newSolutionName + ".sln");
Solution newSolution = new Solution(new ProjectChangeWatcher(solutionLocation));
ISolution newSolution = new Solution(new ProjectChangeWatcher(solutionLocation));
projectCreateInformation.Solution = newSolution;
newSolution.Name = newSolutionName;

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

@ -27,7 +27,7 @@ namespace ICSharpCode.SharpDevelop.Project @@ -27,7 +27,7 @@ namespace ICSharpCode.SharpDevelop.Project
/// <summary>
/// Default implementation of the IProject interface.
/// </summary>
public abstract class AbstractProject : AbstractSolutionFolder, IProject
public abstract class AbstractProject : IProject
{
// Member documentation: see IProject members.
@ -132,7 +132,7 @@ namespace ICSharpCode.SharpDevelop.Project @@ -132,7 +132,7 @@ namespace ICSharpCode.SharpDevelop.Project
/// True if the file that contains the project is readonly.
/// </summary>
[ReadOnly(true)]
public virtual bool ReadOnly {
public virtual bool IsReadOnly {
get {
try {
FileAttributes attributes = File.GetAttributes(FileName);
@ -183,12 +183,11 @@ namespace ICSharpCode.SharpDevelop.Project @@ -183,12 +183,11 @@ namespace ICSharpCode.SharpDevelop.Project
#endregion
#region Configuration / Platform management
string activeConfiguration = "Debug";
string activePlatform = "AnyCPU";
ConfigurationAndPlatform activeConfiguration = new ConfigurationAndPlatform("Debug", "AnyCPU");
[ReadOnly(true)]
[LocalizedProperty("${res:Dialog.Options.CombineOptions.Configurations.ConfigurationColumnHeader}")]
public string ActiveConfiguration {
public ConfigurationAndPlatform ActiveConfiguration {
get { return activeConfiguration; }
set {
SD.MainThread.VerifyAccess();
@ -212,43 +211,23 @@ namespace ICSharpCode.SharpDevelop.Project @@ -212,43 +211,23 @@ namespace ICSharpCode.SharpDevelop.Project
}
}
[ReadOnly(true)]
[LocalizedProperty("${res:Dialog.ProjectOptions.Platform}")]
public string ActivePlatform {
get { return activePlatform; }
set {
SD.MainThread.VerifyAccess();
if (value == null)
throw new ArgumentNullException();
if (activePlatform != value) {
activePlatform = value;
OnActivePlatformChanged(EventArgs.Empty);
}
}
}
public event EventHandler ActivePlatformChanged;
protected virtual void OnActivePlatformChanged(EventArgs e)
{
if (ActivePlatformChanged != null) {
ActivePlatformChanged(this, e);
public virtual IConfigurationOrPlatformNameCollection ConfigurationNames {
get {
throw new NotImplementedException();
//return new string[] { "Debug", "Release" };
}
}
[Browsable(false)]
public virtual IReadOnlyCollection<string> ConfigurationNames {
public virtual IConfigurationOrPlatformNameCollection PlatformNames {
get {
return new string[] { "Debug", "Release" };
throw new NotImplementedException();
//return new string[] { "AnyCPU" };
}
}
[Browsable(false)]
public virtual IReadOnlyCollection<string> PlatformNames {
public virtual IConfigurationMapping ConfigurationMapping {
get {
return new string[] { "AnyCPU" };
throw new NotImplementedException();
}
}
#endregion
@ -478,8 +457,8 @@ namespace ICSharpCode.SharpDevelop.Project @@ -478,8 +457,8 @@ namespace ICSharpCode.SharpDevelop.Project
}
[Browsable(false)]
public virtual int MinimumSolutionVersion {
get { return Solution.SolutionVersionVS2005; }
public virtual SolutionFormatVersion MinimumSolutionVersion {
get { return SolutionFormatVersion.VS2005; }
}
/// <summary>
@ -687,5 +666,55 @@ namespace ICSharpCode.SharpDevelop.Project @@ -687,5 +666,55 @@ namespace ICSharpCode.SharpDevelop.Project
return EmptyTypeDefinitionModelCollection.Instance;
}
}
[Browsable(false)]
public virtual string TypeGuid {
get {
throw new NotImplementedException();
}
set {
throw new NotImplementedException();
}
}
[Browsable(false)]
public virtual string IdGuid {
get {
throw new NotImplementedException();
}
set {
throw new NotImplementedException();
}
}
public string Name {
get {
throw new NotImplementedException();
}
set {
throw new NotImplementedException();
}
}
public ISolutionFolder ParentFolder {
get {
throw new NotImplementedException();
}
set {
throw new NotImplementedException();
}
}
public ISolution ParentSolution {
get {
throw new NotImplementedException();
}
}
public object SyncRoot {
get {
throw new NotImplementedException();
}
}
}
}

10
src/Main/Base/Project/Src/Project/Behaviors/DotNetStartBehavior.cs

@ -136,12 +136,12 @@ namespace ICSharpCode.SharpDevelop.Project @@ -136,12 +136,12 @@ namespace ICSharpCode.SharpDevelop.Project
public override CompilerVersion CurrentCompilerVersion {
get {
switch (Project.MinimumSolutionVersion) {
case Solution.SolutionVersionVS2005:
case ISolution.SolutionVersionVS2005:
return CompilerVersion.MSBuild20;
case Solution.SolutionVersionVS2008:
case ISolution.SolutionVersionVS2008:
return CompilerVersion.MSBuild35;
case Solution.SolutionVersionVS2010:
case Solution.SolutionVersionVS2012:
case ISolution.SolutionVersionVS2010:
case ISolution.SolutionVersionVS2012:
return CompilerVersion.MSBuild40;
default:
throw new NotSupportedException();
@ -184,7 +184,7 @@ namespace ICSharpCode.SharpDevelop.Project @@ -184,7 +184,7 @@ namespace ICSharpCode.SharpDevelop.Project
public override void UpgradeProject(CompilerVersion newVersion, TargetFramework newFramework)
{
if (!Project.ReadOnly) {
if (!Project.IsReadOnly) {
lock (Project.SyncRoot) {
TargetFramework oldFramework = Project.CurrentTargetFramework;
if (newVersion != null && GetAvailableCompilerVersions().Contains(newVersion)) {

14
src/Main/Base/Project/Src/Project/CompilableProject.cs

@ -119,7 +119,7 @@ namespace ICSharpCode.SharpDevelop.Project @@ -119,7 +119,7 @@ namespace ICSharpCode.SharpDevelop.Project
if (string.IsNullOrEmpty(outputPath)) {
outputPath = "obj";
}
outputPath = Path.Combine(outputPath, this.ActiveConfiguration);
outputPath = Path.Combine(outputPath, this.ActiveConfiguration.Configuration);
}
return Path.Combine(Directory, outputPath);
}
@ -211,14 +211,6 @@ namespace ICSharpCode.SharpDevelop.Project @@ -211,14 +211,6 @@ namespace ICSharpCode.SharpDevelop.Project
}
}
protected override void OnActivePlatformChanged(EventArgs e)
{
base.OnActivePlatformChanged(e);
if (!isLoading) {
Reparse(true, true);
}
}
protected override void OnPropertyChanged(ProjectPropertyChangedEventArgs e)
{
base.OnPropertyChanged(e);
@ -290,7 +282,7 @@ namespace ICSharpCode.SharpDevelop.Project @@ -290,7 +282,7 @@ namespace ICSharpCode.SharpDevelop.Project
[Browsable(false)]
public virtual bool UpgradeDesired {
get {
return MinimumSolutionVersion < Solution.SolutionVersionVS2010;
return MinimumSolutionVersion < ISolution.SolutionVersionVS2010;
}
}
@ -314,7 +306,7 @@ namespace ICSharpCode.SharpDevelop.Project @@ -314,7 +306,7 @@ namespace ICSharpCode.SharpDevelop.Project
public virtual void UpgradeProject(CompilerVersion newVersion, TargetFramework newFramework)
{
if (!ReadOnly)
if (!IsReadOnly)
GetOrCreateBehavior().UpgradeProject(newVersion, newFramework);
}

4
src/Main/Base/Project/Src/Project/ConfigurationGuiHelper.cs

@ -48,8 +48,8 @@ namespace ICSharpCode.SharpDevelop.Project @@ -48,8 +48,8 @@ namespace ICSharpCode.SharpDevelop.Project
{
this.project = project;
this.controlDictionary = controlDictionary;
this.configuration = project.ActiveConfiguration;
this.platform = project.ActivePlatform;
this.configuration = project.ActiveConfiguration.Configuration;
this.platform = project.ActiveConfiguration.Platform;
}
public MSBuildBasedProject Project {

3
src/Main/Base/Project/Src/Project/Converter/LanguageConverter.cs

@ -198,7 +198,8 @@ namespace ICSharpCode.SharpDevelop.Project.Converter @@ -198,7 +198,8 @@ namespace ICSharpCode.SharpDevelop.Project.Converter
}
while (node != null) {
if (node is ISolutionFolderNode) {
AddExistingProjectToSolution.AddProject((ISolutionFolderNode)node, targetProject.FileName);
var solutionFolderNode = (ISolutionFolderNode)node;
solutionFolderNode.Solution.AddExistingProject(targetProject.FileName, solutionFolderNode.Folder);
ProjectService.SaveSolution();
break;
}

6
src/Main/Base/Project/Src/Project/Converter/UpgradeView.xaml.cs

@ -16,10 +16,10 @@ namespace ICSharpCode.SharpDevelop.Project.Converter @@ -16,10 +16,10 @@ namespace ICSharpCode.SharpDevelop.Project.Converter
/// </summary>
internal partial class UpgradeView : UserControl
{
readonly Solution solution;
readonly ISolution solution;
readonly List<Entry> entries;
public UpgradeView(Solution solution)
public UpgradeView(ISolution solution)
{
if (solution == null)
throw new ArgumentNullException("solution");
@ -38,7 +38,7 @@ namespace ICSharpCode.SharpDevelop.Project.Converter @@ -38,7 +38,7 @@ namespace ICSharpCode.SharpDevelop.Project.Converter
set { upgradeDescription.Visibility = value ? Visibility.Visible : Visibility.Collapsed; }
}
public Solution Solution {
public ISolution Solution {
get { return solution; }
}

8
src/Main/Base/Project/Src/Project/Converter/UpgradeViewContent.cs

@ -14,7 +14,7 @@ namespace ICSharpCode.SharpDevelop.Project.Converter @@ -14,7 +14,7 @@ namespace ICSharpCode.SharpDevelop.Project.Converter
/// </summary>
public class UpgradeViewContent : AbstractViewContent
{
public static void ShowIfRequired(Solution solution)
public static void ShowIfRequired(ISolution solution)
{
var projects = solution.Projects.OfType<IUpgradableProject>().ToList();
if (projects.Count > 0 && projects.All(u => u.UpgradeDesired)) {
@ -23,7 +23,7 @@ namespace ICSharpCode.SharpDevelop.Project.Converter @@ -23,7 +23,7 @@ namespace ICSharpCode.SharpDevelop.Project.Converter
}
}
public static UpgradeViewContent Show(Solution solution)
public static UpgradeViewContent Show(ISolution solution)
{
foreach (UpgradeViewContent vc in SD.Workbench.ViewContentCollection.OfType<UpgradeViewContent>()) {
if (vc.Solution == solution) {
@ -38,7 +38,7 @@ namespace ICSharpCode.SharpDevelop.Project.Converter @@ -38,7 +38,7 @@ namespace ICSharpCode.SharpDevelop.Project.Converter
UpgradeView upgradeView;
public UpgradeViewContent(Solution solution)
public UpgradeViewContent(ISolution solution)
{
if (solution == null)
throw new ArgumentNullException("solution");
@ -46,7 +46,7 @@ namespace ICSharpCode.SharpDevelop.Project.Converter @@ -46,7 +46,7 @@ namespace ICSharpCode.SharpDevelop.Project.Converter
upgradeView = new UpgradeView(solution);
}
public Solution Solution {
public ISolution Solution {
get { return upgradeView.Solution; }
}

2
src/Main/Base/Project/Src/Project/CustomTool.cs

@ -360,7 +360,7 @@ namespace ICSharpCode.SharpDevelop.Project @@ -360,7 +360,7 @@ namespace ICSharpCode.SharpDevelop.Project
static void OnFileSaved(object sender, FileNameEventArgs e)
{
Solution solution = ProjectService.OpenSolution;
ISolution solution = ProjectService.OpenSolution;
if (solution == null) return;
IProject project = solution.FindProjectContainingFile(e.FileName);
if (project == null) return;

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

@ -26,7 +26,7 @@ namespace ICSharpCode.SharpDevelop.Project @@ -26,7 +26,7 @@ namespace ICSharpCode.SharpDevelop.Project
/// When you implement IProject, you should also implement IProjectItemListProvider and IProjectAllowChangeConfigurations
/// </summary>
public interface IProject
: IBuildable, ISolutionFolder, IDisposable, IMementoCapable
: IBuildable, ISolutionItem, IDisposable, IMementoCapable, IConfigurable
{
/// <summary>
/// Gets the list of items in the project. This member is thread-safe.
@ -108,7 +108,7 @@ namespace ICSharpCode.SharpDevelop.Project @@ -108,7 +108,7 @@ namespace ICSharpCode.SharpDevelop.Project
/// </para>
/// <para>This member is thread-safe.</para>
/// </summary>
bool ReadOnly {
bool IsReadOnly {
get;
}
@ -156,42 +156,10 @@ namespace ICSharpCode.SharpDevelop.Project @@ -156,42 +156,10 @@ namespace ICSharpCode.SharpDevelop.Project
}
#endregion
#region Configuration / Platform management
/// <summary>
/// Gets/Sets the active configuration.
/// Gets the configuration mapping.
/// </summary>
string ActiveConfiguration {
get;
set;
}
/// <summary>
/// Gets/Sets the active platform.
/// </summary>
string ActivePlatform {
get;
set;
}
/// <summary>
/// Gets the list of available configuration names.
/// </summary>
IReadOnlyCollection<string> ConfigurationNames { get; }
/// <summary>
/// Gets the list of available platform names.
/// </summary>
IReadOnlyCollection<string> PlatformNames { get; }
/// <summary>
/// Is raised after the ActiveConfiguration property has changed.
/// </summary>
event EventHandler ActiveConfigurationChanged;
/// <summary>
/// Is raised after the ActivePlatform property has changed.
/// </summary>
event EventHandler ActivePlatformChanged;
#endregion
IConfigurationMapping ConfigurationMapping { get; }
/// <summary>
/// Saves the project using its current file name.
@ -238,7 +206,7 @@ namespace ICSharpCode.SharpDevelop.Project @@ -238,7 +206,7 @@ namespace ICSharpCode.SharpDevelop.Project
/// <summary>
/// Gets the minimum version the solution must have to support this project type.
/// </summary>
int MinimumSolutionVersion { get; }
SolutionFormatVersion MinimumSolutionVersion { get; }
/// <summary>
/// Resolves assembly references for this project.
@ -335,12 +303,6 @@ namespace ICSharpCode.SharpDevelop.Project @@ -335,12 +303,6 @@ namespace ICSharpCode.SharpDevelop.Project
/// Never returns null, but may return a permanently empty collection if this project does not support such models.
/// </summary>
ITypeDefinitionModelCollection TypeDefinitionModels { get; }
/// <summary>
/// Gets the parent solution.
/// This property is thread-safe.
/// </summary>
Solution ParentSolution { get; }
}
/// <summary>
@ -369,19 +331,4 @@ namespace ICSharpCode.SharpDevelop.Project @@ -369,19 +331,4 @@ namespace ICSharpCode.SharpDevelop.Project
/// </summary>
bool RemoveProjectItem(ProjectItem item);
}
/// <summary>
/// Interface for changing project or solution configuration.
/// IProject implementors should implement this interface, but only the SharpDevelop methods
/// Solution.RenameProjectPlatform etc. may call the interface members.
/// </summary>
public interface IProjectAllowChangeConfigurations
{
bool RenameProjectConfiguration(string oldName, string newName);
bool RenameProjectPlatform(string oldName, string newName);
bool AddProjectConfiguration(string newName, string copyFrom);
bool AddProjectPlatform(string newName, string copyFrom);
bool RemoveProjectConfiguration(string name);
bool RemoveProjectPlatform(string name);
}
}

4
src/Main/Base/Project/Src/Project/Items/ProjectItem.cs

@ -462,9 +462,9 @@ namespace ICSharpCode.SharpDevelop.Project @@ -462,9 +462,9 @@ namespace ICSharpCode.SharpDevelop.Project
}
}
public override void InformSetValue(PropertyDescriptor propertyDescriptor, object component, object value)
protected internal override void InformSetValue(PropertyDescriptor propertyDescriptor, object value)
{
base.InformSetValue(propertyDescriptor, component, value);
base.InformSetValue(propertyDescriptor, value);
if (project != null) {
project.Save();
}

41
src/Main/Base/Project/Src/Project/MSBuildBasedProject.cs

@ -32,7 +32,7 @@ namespace ICSharpCode.SharpDevelop.Project @@ -32,7 +32,7 @@ namespace ICSharpCode.SharpDevelop.Project
/// require locking on the SyncRoot. Methods that return underlying MSBuild objects require that
/// the caller locks on the SyncRoot.
/// </summary>
public class MSBuildBasedProject : AbstractProject, IProjectItemListProvider, IProjectAllowChangeConfigurations
public class MSBuildBasedProject : AbstractProject, IProjectItemListProvider
{
/// <summary>
/// The project collection that contains this project.
@ -98,7 +98,7 @@ namespace ICSharpCode.SharpDevelop.Project @@ -98,7 +98,7 @@ namespace ICSharpCode.SharpDevelop.Project
}
}
public override int MinimumSolutionVersion {
public override SolutionFormatVersion MinimumSolutionVersion {
get {
lock (SyncRoot) {
// This property is called by CSharpProject.StartBuild (and other derived StartBuild methods),
@ -107,11 +107,11 @@ namespace ICSharpCode.SharpDevelop.Project @@ -107,11 +107,11 @@ namespace ICSharpCode.SharpDevelop.Project
if (projectFile == null)
throw new ObjectDisposedException("MSBuildBasedProject");
if (string.IsNullOrEmpty(projectFile.ToolsVersion) || projectFile.ToolsVersion == "2.0") {
return Solution.SolutionVersionVS2005;
return SolutionFormatVersion.VS2005;
} else if (projectFile.ToolsVersion == "3.0" || projectFile.ToolsVersion == "3.5") {
return Solution.SolutionVersionVS2008;
return SolutionFormatVersion.VS2008;
} else {
return Solution.SolutionVersionVS2010;
return SolutionFormatVersion.VS2010;
}
}
}
@ -388,11 +388,11 @@ namespace ICSharpCode.SharpDevelop.Project @@ -388,11 +388,11 @@ namespace ICSharpCode.SharpDevelop.Project
throw new ObjectDisposedException("MSBuildBasedProject");
if (configuration == null)
configuration = this.ActiveConfiguration;
configuration = this.ActiveConfiguration.Configuration;
if (platform == null)
platform = this.ActivePlatform;
platform = this.ActiveConfiguration.Platform;
bool openCurrentConfiguration = configuration == this.ActiveConfiguration && platform == this.ActivePlatform;
bool openCurrentConfiguration = configuration == this.ActiveConfiguration.Configuration && platform == this.ActiveConfiguration.Platform;
if (currentlyOpenProject != null && openCurrentConfiguration) {
// use currently open project
@ -1126,9 +1126,9 @@ namespace ICSharpCode.SharpDevelop.Project @@ -1126,9 +1126,9 @@ namespace ICSharpCode.SharpDevelop.Project
public override ProjectBuildOptions CreateProjectBuildOptions(BuildOptions options, bool isRootBuildable)
{
ProjectBuildOptions projectOptions = base.CreateProjectBuildOptions(options, isRootBuildable);
Solution solution = this.ParentSolution;
string solutionConfiguration = options.SolutionConfiguration ?? solution.Preferences.ActiveConfiguration;
string solutionPlatform = options.SolutionPlatform ?? solution.Preferences.ActivePlatform;
ISolution solution = this.ParentSolution;
string solutionConfiguration = options.SolutionConfiguration ?? solution.ActiveConfiguration.Configuration;
string solutionPlatform = options.SolutionPlatform ?? solution.ActiveConfiguration.Platform;
var configMatchings = solution.GetActiveConfigurationsAndPlatformsForProjects(solutionConfiguration, solutionPlatform);
// Find the project configuration, and build an XML string containing all configurations from the solution
@ -1244,7 +1244,7 @@ namespace ICSharpCode.SharpDevelop.Project @@ -1244,7 +1244,7 @@ namespace ICSharpCode.SharpDevelop.Project
void LoadProjectInternal(ProjectLoadInformation loadInformation)
{
this.projectCollection = loadInformation.ParentSolution.MSBuildProjectCollection;
this.projectCollection = loadInformation.MSBuildProjectCollection;
this.FileName = loadInformation.FileName;
if (loadInformation.Configuration != null)
this.ActiveConfiguration = loadInformation.Configuration;
@ -1322,23 +1322,12 @@ namespace ICSharpCode.SharpDevelop.Project @@ -1322,23 +1322,12 @@ namespace ICSharpCode.SharpDevelop.Project
}
base.OnActiveConfigurationChanged(e);
}
protected override void OnActivePlatformChanged(EventArgs e)
{
if (!isLoading) {
lock (SyncRoot) {
UnloadCurrentlyOpenProject();
CreateItemsListFromMSBuild();
}
}
base.OnActivePlatformChanged(e);
}
#endregion
#region GetConfigurationNames / GetPlatformNames
IReadOnlyCollection<string> configurationNames, platformNames;
public override IReadOnlyCollection<string> ConfigurationNames {
/*public override IReadOnlyCollection<string> ConfigurationNames {
get {
lock (SyncRoot) {
if (configurationNames == null) {
@ -1359,7 +1348,7 @@ namespace ICSharpCode.SharpDevelop.Project @@ -1359,7 +1348,7 @@ namespace ICSharpCode.SharpDevelop.Project
}
}
}
*/
protected void InvalidateConfigurationPlatformNames()
{
lock (SyncRoot) {
@ -1421,6 +1410,7 @@ namespace ICSharpCode.SharpDevelop.Project @@ -1421,6 +1410,7 @@ namespace ICSharpCode.SharpDevelop.Project
#endregion
#region IProjectAllowChangeConfigurations interface implementation
/*
bool IProjectAllowChangeConfigurations.RenameProjectConfiguration(string oldName, string newName)
{
lock (SyncRoot) {
@ -1610,6 +1600,7 @@ namespace ICSharpCode.SharpDevelop.Project @@ -1610,6 +1600,7 @@ namespace ICSharpCode.SharpDevelop.Project
return true;
}
}
*/
#endregion
#region ProjectExtensions

10
src/Main/Base/Project/Src/Project/MSBuildEngine/MSBuildEngine.cs

@ -104,14 +104,14 @@ namespace ICSharpCode.SharpDevelop.Project @@ -104,14 +104,14 @@ namespace ICSharpCode.SharpDevelop.Project
MSBuildEngine engine = new MSBuildEngine(project, options, feedbackSink);
engine.additionalTargetFiles = additionalTargetFiles.ToList();
if (project.MinimumSolutionVersion >= Solution.SolutionVersionVS2010) {
if (project.MinimumSolutionVersion >= SolutionFormatVersion.VS2010) {
engine.additionalTargetFiles.Add(Path.Combine(Path.GetDirectoryName(typeof(MSBuildEngine).Assembly.Location), "SharpDevelop.TargetingPack.targets"));
}
return engine.RunBuildAsync(cancellationToken);
}
readonly string projectFileName;
readonly int projectMinimumSolutionVersion;
readonly SolutionFormatVersion projectMinimumSolutionVersion;
ProjectBuildOptions options;
IBuildFeedbackSink feedbackSink;
List<string> additionalTargetFiles;
@ -174,7 +174,7 @@ namespace ICSharpCode.SharpDevelop.Project @@ -174,7 +174,7 @@ namespace ICSharpCode.SharpDevelop.Project
/// <summary>
/// Gets the minimum solution version (VS version) required to open the project.
/// </summary>
public int ProjectMinimumSolutionVersion {
public SolutionFormatVersion ProjectMinimumSolutionVersion {
get { return projectMinimumSolutionVersion; }
}
@ -267,7 +267,7 @@ namespace ICSharpCode.SharpDevelop.Project @@ -267,7 +267,7 @@ namespace ICSharpCode.SharpDevelop.Project
}
tcs = new TaskCompletionSource<bool>();
if (projectMinimumSolutionVersion <= Solution.SolutionVersionVS2008) {
if (projectMinimumSolutionVersion <= ISolution.SolutionVersionVS2008) {
if (DotnetDetection.IsDotnet35SP1Installed()) {
BuildWorkerManager.MSBuild35.RunBuildJob(job, loggerChain, OnDone, cancellationToken);
} else {
@ -319,7 +319,7 @@ namespace ICSharpCode.SharpDevelop.Project @@ -319,7 +319,7 @@ namespace ICSharpCode.SharpDevelop.Project
// 'MsTestToolsTargets' is preferred because it's at the end of the MSBuild 3.5 and 4.0 target file,
// but on MSBuild 2.0 we need to fall back to 'CodeAnalysisTargets'.
string hijackedProperty = "MsTestToolsTargets";
if (projectMinimumSolutionVersion == Solution.SolutionVersionVS2005)
if (projectMinimumSolutionVersion == ISolution.SolutionVersionVS2005)
hijackedProperty = "CodeAnalysisTargets";
// because we'll replace the hijackedProperty, manually write the corresponding include

2
src/Main/Base/Project/Src/Project/MSBuildEngine/TargetingPackWarningWorkaround.cs

@ -22,7 +22,7 @@ namespace ICSharpCode.SharpDevelop.Project @@ -22,7 +22,7 @@ namespace ICSharpCode.SharpDevelop.Project
public IMSBuildChainedLoggerFilter CreateFilter(MSBuildEngine engine, IMSBuildChainedLoggerFilter nextFilter)
{
if (engine.ProjectMinimumSolutionVersion >= Solution.SolutionVersionVS2010) {
if (engine.ProjectMinimumSolutionVersion >= ISolution.SolutionVersionVS2010) {
return new TargetingPackWarningWorkaroundChainEntry(nextFilter);
} else {
return nextFilter;

32
src/Main/Base/Project/Src/Project/MSBuildInternals.cs

@ -127,36 +127,6 @@ namespace ICSharpCode.SharpDevelop.Project @@ -127,36 +127,6 @@ namespace ICSharpCode.SharpDevelop.Project
return location;
}
readonly static Regex configurationRegEx = new Regex(@"'(?<property>[^']*)'\s*==\s*'(?<value>[^']*)'", RegexOptions.Compiled);
internal static void GetConfigurationAndPlatformFromCondition(string condition,
out string configuration,
out string platform)
{
Match match = configurationRegEx.Match(condition);
if (match.Success) {
string conditionProperty = match.Result("${property}");
string conditionValue = match.Result("${value}");
if (conditionProperty == "$(Configuration)|$(Platform)") {
// configuration is ok
configuration = MSBuildBasedProject.GetConfigurationNameFromKey(conditionValue);
platform = MSBuildBasedProject.GetPlatformNameFromKey(conditionValue);
} else if (conditionProperty == "$(Configuration)") {
configuration = conditionValue;
platform = null;
} else if (conditionProperty == "$(Platform)") {
configuration = null;
platform = conditionValue;
} else {
configuration = null;
platform = null;
}
} else {
configuration = null;
platform = null;
}
}
/// <summary>
/// Resolves the location of the reference files.
/// </summary>
@ -204,7 +174,7 @@ namespace ICSharpCode.SharpDevelop.Project @@ -204,7 +174,7 @@ namespace ICSharpCode.SharpDevelop.Project
}
List<string> targets = new List<string>();
if (baseProject.MinimumSolutionVersion >= Solution.SolutionVersionVS2010) {
if (baseProject.MinimumSolutionVersion >= ISolution.SolutionVersionVS2010) {
targets.Add("ResolveReferences");
targets.Add("DesignTimeResolveAssemblyReferences");
} else {

2
src/Main/Base/Project/Src/Project/MissingProject.cs

@ -15,7 +15,7 @@ namespace ICSharpCode.SharpDevelop.Project @@ -15,7 +15,7 @@ namespace ICSharpCode.SharpDevelop.Project
TypeGuid = "{00000000-0000-0000-0000-000000000000}";
}
public override bool ReadOnly {
public override bool IsReadOnly {
get {
// don't get the readonly flag from the project file - the project file does not exist.
return true;

8
src/Main/Base/Project/Src/Project/ProjectLoadInformation.cs

@ -12,10 +12,9 @@ namespace ICSharpCode.SharpDevelop.Project @@ -12,10 +12,9 @@ namespace ICSharpCode.SharpDevelop.Project
/// </summary>
public class ProjectLoadInformation
{
public Solution ParentSolution { get; private set; }
public ISolution ParentSolution { get; private set; }
public FileName FileName { get; private set; }
public string Configuration { get; internal set; }
public string Platform { get; internal set; }
public ConfigurationAndPlatform Configuration { get; set; }
public string ProjectName { get; private set; }
public string TypeGuid { get; set; }
public IList<ProjectSection> ProjectSections {get; set;}
@ -25,6 +24,7 @@ namespace ICSharpCode.SharpDevelop.Project @@ -25,6 +24,7 @@ namespace ICSharpCode.SharpDevelop.Project
/// The default is <c>true</c>.
/// </summary>
public bool InitializeTypeSystem { get; set; }
#warning this property is unused?
internal string Guid { get; set; }
@ -45,7 +45,7 @@ namespace ICSharpCode.SharpDevelop.Project @@ -45,7 +45,7 @@ namespace ICSharpCode.SharpDevelop.Project
}
}
public ProjectLoadInformation(Solution parentSolution, FileName fileName, string projectName)
public ProjectLoadInformation(ISolution parentSolution, FileName fileName, string projectName)
{
if (parentSolution == null)
throw new ArgumentNullException("parentSolution");

2
src/Main/Base/Project/Src/Services/ProjectService/ProjectEventHandler.cs

@ -5,8 +5,6 @@ using System; @@ -5,8 +5,6 @@ using System;
namespace ICSharpCode.SharpDevelop.Project
{
public delegate void ProjectEventHandler(object sender, ProjectEventArgs e);
public class ProjectEventArgs : EventArgs
{
IProject project;

40
src/Main/Base/Project/Src/Services/ProjectService/ProjectLoader.cs

@ -1,40 +0,0 @@ @@ -1,40 +0,0 @@
// Copyright (c) AlphaSierraPapa for the SharpDevelop Team (for details please see \doc\copyright.txt)
// This code is distributed under the GNU LGPL (for details please see \doc\license.txt)
using System;
namespace ICSharpCode.SharpDevelop.Project
{
/// <summary>
/// Interface called to load (convert) project and solution files
/// </summary>
public interface IProjectLoader
{
/// <summary>
/// Load/Convert the project solution
/// </summary>
void Load(string fileName);
}
/// <summary>
/// Loader for MSBuild project files
/// </summary>
public class LoadProject : IProjectLoader
{
public void Load(string fileName)
{
ProjectService.LoadProject(fileName);
}
}
/// <summary>
/// Loader for sln files as well as Sharpdevelop cmbx and prjx files
/// </summary>
public class LoadSolution : IProjectLoader
{
public void Load(string fileName)
{
ProjectService.LoadSolution(fileName);
}
}
}

56
src/Main/Base/Project/Src/Services/ProjectService/ProjectService.cs

@ -18,10 +18,10 @@ namespace ICSharpCode.SharpDevelop.Project @@ -18,10 +18,10 @@ namespace ICSharpCode.SharpDevelop.Project
{
public static class ProjectService
{
volatile static Solution openSolution;
volatile static ISolution openSolution;
volatile static IProject currentProject;
public static Solution OpenSolution {
public static ISolution OpenSolution {
[System.Diagnostics.DebuggerStepThrough]
get {
return openSolution;
@ -54,7 +54,7 @@ namespace ICSharpCode.SharpDevelop.Project @@ -54,7 +54,7 @@ namespace ICSharpCode.SharpDevelop.Project
/// </summary>
public static IProject GetProject(FileName projectFilename)
{
Solution sln = openSolution;
ISolution sln = openSolution;
if (sln == null)
return null;
foreach (IProject project in sln.Projects) {
@ -99,6 +99,7 @@ namespace ICSharpCode.SharpDevelop.Project @@ -99,6 +99,7 @@ namespace ICSharpCode.SharpDevelop.Project
return false;
}
/*
public static IProjectLoader GetProjectLoader(string fileName)
{
AddInTreeNode addinTreeNode = AddInTree.GetTreeNode("/SharpDevelop/Workbench/Combine/FileFilter");
@ -110,7 +111,7 @@ namespace ICSharpCode.SharpDevelop.Project @@ -110,7 +111,7 @@ namespace ICSharpCode.SharpDevelop.Project
}
}
return null;
}
}*/
public static void LoadSolutionOrProject(string fileName)
{
@ -130,7 +131,7 @@ namespace ICSharpCode.SharpDevelop.Project @@ -130,7 +131,7 @@ namespace ICSharpCode.SharpDevelop.Project
string oldName = e.SourceFile;
string newName = e.TargetFile;
long x = 0;
foreach (ISolutionFolderContainer container in OpenSolution.SolutionFolderContainers) {
foreach (ISolutionFolder container in OpenSolution.SolutionFolderContainers) {
foreach (SolutionItem item in container.SolutionItems.Items) {
string oldFullName = Path.Combine(OpenSolution.Directory, item.Name);
++x;
@ -163,7 +164,7 @@ namespace ICSharpCode.SharpDevelop.Project @@ -163,7 +164,7 @@ namespace ICSharpCode.SharpDevelop.Project
}
string fileName = e.FileName;
foreach (ISolutionFolderContainer container in OpenSolution.SolutionFolderContainers) {
foreach (ISolutionFolder container in OpenSolution.SolutionFolderContainers) {
for (int i = 0; i < container.SolutionItems.Items.Count;) {
SolutionItem item = container.SolutionItems.Items[i];
if (FileUtility.IsBaseDirectory(fileName, Path.Combine(OpenSolution.Directory, item.Name))) {
@ -255,11 +256,13 @@ namespace ICSharpCode.SharpDevelop.Project @@ -255,11 +256,13 @@ namespace ICSharpCode.SharpDevelop.Project
}
}
[Obsolete("Use SD.ProjectService.OpenSolutionOrProject() instead")]
public static void LoadSolution(string fileName)
{
FileUtility.ObservedLoad(LoadSolutionInternal, fileName);
SD.ProjectService.OpenSolutionOrProject(FileName.Create(fileName));
//FileUtility.ObservedLoad(LoadSolutionInternal, fileName);
}
/*
static void LoadSolutionInternal(string fileName)
{
if (!Path.IsPathRooted(fileName))
@ -272,7 +275,7 @@ namespace ICSharpCode.SharpDevelop.Project @@ -272,7 +275,7 @@ namespace ICSharpCode.SharpDevelop.Project
OnSolutionLoading(fileName);
var solutionProperties = LoadSolutionPreferences(fileName);
try {
openSolution = Solution.Load(fileName, solutionProperties["ActiveConfiguration"], solutionProperties["ActivePlatform"]);
openSolution = ISolution.Load(fileName, solutionProperties["ActiveConfiguration"], solutionProperties["ActivePlatform"]);
CommandManager.InvalidateRequerySuggested();
SD.ParserService.InvalidateCurrentSolutionSnapshot();
if (openSolution == null)
@ -341,15 +344,18 @@ namespace ICSharpCode.SharpDevelop.Project @@ -341,15 +344,18 @@ namespace ICSharpCode.SharpDevelop.Project
}
}
}
*/
/// <summary>
/// Load a single project as solution.
/// </summary>
[Obsolete("Use SD.ProjectService.OpenSolutionOrProject() instead")]
public static void LoadProject(string fileName)
{
FileUtility.ObservedLoad(LoadProjectInternal, fileName);
SD.ProjectService.OpenSolutionOrProject(FileName.Create(fileName));
//FileUtility.ObservedLoad(LoadProjectInternal, fileName);
}
/*
static void LoadProjectInternal(string fileName)
{
if (!Path.IsPathRooted(fileName))
@ -376,7 +382,7 @@ namespace ICSharpCode.SharpDevelop.Project @@ -376,7 +382,7 @@ namespace ICSharpCode.SharpDevelop.Project
"${res:Global.IgnoreButtonText}");
if (res == 0) {
// Add project to solution
Commands.AddExistingProjectToSolution.AddProject((ISolutionFolderNode)ProjectBrowserPad.Instance.SolutionNode, FileName.Create(fileName));
Commands.AddExistingProjectToSolution.AddProject((ISolutionItemNode)ProjectBrowserPad.Instance.SolutionNode, FileName.Create(fileName));
SaveSolution();
return;
} else if (res == 1) {
@ -397,7 +403,7 @@ namespace ICSharpCode.SharpDevelop.Project @@ -397,7 +403,7 @@ namespace ICSharpCode.SharpDevelop.Project
return;
}
}
Solution solution = new Solution(new ProjectChangeWatcher(solutionFile));
ISolution solution = new Solution(new ProjectChangeWatcher(solutionFile));
solution.Name = Path.GetFileNameWithoutExtension(fileName);
IProjectBinding binding = ProjectBindingService.GetBindingPerProjectFile(fileName);
IProject project;
@ -419,16 +425,16 @@ namespace ICSharpCode.SharpDevelop.Project @@ -419,16 +425,16 @@ namespace ICSharpCode.SharpDevelop.Project
// only load when saved succesfully
LoadSolution(solutionFile);
}
}
}*/
public static void SaveSolution()
{
if (openSolution != null) {
openSolution.Save();
foreach (IProject project in openSolution.Projects) {
/* foreach (IProject project in openSolution.Projects) {
project.Save();
}
OnSolutionSaved(new SolutionEventArgs(openSolution));
OnSolutionSaved(new SolutionEventArgs(openSolution));*/
}
}
@ -488,7 +494,7 @@ namespace ICSharpCode.SharpDevelop.Project @@ -488,7 +494,7 @@ namespace ICSharpCode.SharpDevelop.Project
if (SolutionPreferencesSaving != null)
SolutionPreferencesSaving(null, new SolutionEventArgs(openSolution));
Properties memento = (openSolution.Preferences as IMementoCapable).CreateMemento();
Properties memento = openSolution.Preferences.Clone();
string fullFileName = GetPreferenceFileName(openSolution.FileName);
if (FileUtility.IsValidPath(fullFileName)) {
@ -622,7 +628,7 @@ namespace ICSharpCode.SharpDevelop.Project @@ -622,7 +628,7 @@ namespace ICSharpCode.SharpDevelop.Project
if (OpenSolution == null) {
return;
}
foreach (ISolutionFolder folder in OpenSolution.SolutionFolders) {
foreach (ISolutionItem folder in OpenSolution.SolutionFolders) {
if (folder.IdGuid == guid) {
folder.Parent.RemoveFolder(folder);
OnSolutionFolderRemoved(new SolutionFolderEventArgs(folder));
@ -632,7 +638,7 @@ namespace ICSharpCode.SharpDevelop.Project @@ -632,7 +638,7 @@ namespace ICSharpCode.SharpDevelop.Project
}
}
static void HandleRemovedSolutionFolder(ISolutionFolder folder)
static void HandleRemovedSolutionFolder(ISolutionItem folder)
{
IProject project = folder as IProject;
if (project != null) {
@ -640,9 +646,9 @@ namespace ICSharpCode.SharpDevelop.Project @@ -640,9 +646,9 @@ namespace ICSharpCode.SharpDevelop.Project
OnProjectRemoved(new ProjectEventArgs(project));
project.Dispose();
}
if (folder is ISolutionFolderContainer) {
if (folder is ISolutionFolder) {
// recurse into child folders that were also removed
((ISolutionFolderContainer)folder).Folders.ForEach(HandleRemovedSolutionFolder);
((ISolutionFolder)folder).Folders.ForEach(HandleRemovedSolutionFolder);
}
}
@ -693,15 +699,15 @@ namespace ICSharpCode.SharpDevelop.Project @@ -693,15 +699,15 @@ namespace ICSharpCode.SharpDevelop.Project
/// <summary>
/// Is raised when a new project is created.
/// </summary>
public static event ProjectEventHandler ProjectCreated;
public static event EventHandler<ProjectEventArgs> ProjectCreated;
/// <summary>
/// Is raised when a new or existing project is added to the solution.
/// </summary>
public static event ProjectEventHandler ProjectAdded;
public static event EventHandler<ProjectEventArgs> ProjectAdded;
/// <summary>
/// Is raised when a project is removed from the solution.
/// </summary>
public static event ProjectEventHandler ProjectRemoved;
public static event EventHandler<ProjectEventArgs> ProjectRemoved;
/// <summary>
/// Is raised when a solution folder is removed from the solution.
@ -746,7 +752,7 @@ namespace ICSharpCode.SharpDevelop.Project @@ -746,7 +752,7 @@ namespace ICSharpCode.SharpDevelop.Project
/// </summary>
public static event EventHandler<SolutionEventArgs> SolutionPreferencesSaving;
public static event ProjectEventHandler CurrentProjectChanged;
public static event EventHandler<ProjectEventArgs> CurrentProjectChanged;
public static event EventHandler<ProjectItemEventArgs> ProjectItemAdded;
public static event EventHandler<ProjectItemEventArgs> ProjectItemRemoved;

6
src/Main/Base/Project/Src/Services/ProjectService/SolutionConfigurationEventHandler.cs

@ -11,20 +11,20 @@ namespace ICSharpCode.SharpDevelop @@ -11,20 +11,20 @@ namespace ICSharpCode.SharpDevelop
public class SolutionConfigurationEventArgs : EventArgs
{
string configuration;
Solution solution;
ISolution solution;
public string Configuration {
get {
return configuration;
}
}
public Solution Solution {
public ISolution Solution {
get {
return solution;
}
}
public SolutionConfigurationEventArgs(Solution solution, string configuration)
public SolutionConfigurationEventArgs(ISolution solution, string configuration)
{
this.solution = solution;
this.configuration = configuration;

12
src/Main/Base/Project/Src/Services/ProjectService/SolutionEventHandler.cs

@ -8,15 +8,15 @@ namespace ICSharpCode.SharpDevelop.Project @@ -8,15 +8,15 @@ namespace ICSharpCode.SharpDevelop.Project
{
public class SolutionEventArgs : EventArgs
{
Solution solution;
ISolution solution;
public Solution Solution {
public ISolution Solution {
get {
return solution;
}
}
public SolutionEventArgs(Solution solution)
public SolutionEventArgs(ISolution solution)
{
this.solution = solution;
}
@ -24,15 +24,15 @@ namespace ICSharpCode.SharpDevelop.Project @@ -24,15 +24,15 @@ namespace ICSharpCode.SharpDevelop.Project
public class SolutionCancelEventArgs : CancelEventArgs
{
Solution solution;
ISolution solution;
public Solution Solution {
public ISolution Solution {
get {
return solution;
}
}
public SolutionCancelEventArgs(Solution solution)
public SolutionCancelEventArgs(ISolution solution)
{
this.solution = solution;
}

6
src/Main/Base/Project/Src/Services/ProjectService/SolutionFolderEventHandler.cs

@ -9,15 +9,15 @@ namespace ICSharpCode.SharpDevelop.Project @@ -9,15 +9,15 @@ namespace ICSharpCode.SharpDevelop.Project
public class SolutionFolderEventArgs : EventArgs
{
ISolutionFolder solutionFolder;
ISolutionItem solutionFolder;
public ISolutionFolder SolutionFolder {
public ISolutionItem SolutionFolder {
get {
return solutionFolder;
}
}
public SolutionFolderEventArgs(ISolutionFolder solutionFolder)
public SolutionFolderEventArgs(ISolutionItem solutionFolder)
{
this.solutionFolder = solutionFolder;
}

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

@ -25,7 +25,7 @@ namespace ICSharpCode.SharpDevelop.Refactoring @@ -25,7 +25,7 @@ namespace ICSharpCode.SharpDevelop.Refactoring
#region FindReferences
static IEnumerable<IProject> GetProjectsThatCouldReferenceEntity(IEntity entity)
{
Solution solution = ProjectService.OpenSolution;
ISolution solution = ProjectService.OpenSolution;
if (solution == null)
yield break;
foreach (IProject project in solution.Projects) {

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

Loading…
Cancel
Save