Browse Source

Merge branch 'origin/master' into newNR

newNRvisualizers
Daniel Grunwald 13 years ago
parent
commit
0d945a7d52
  1. 4
      data/templates/project/AddInWritingHelp.txt
  2. 2
      src/AddIns/Analysis/CodeQuality/Gui/Controls/VisibleMatrix.cs
  3. 3
      src/AddIns/Analysis/Profiler/Frontend/AddIn/Src/ProfilerTestRunner.cs
  4. 2
      src/AddIns/Analysis/Profiler/Frontend/Controls/QueryView.xaml.cs
  5. 2
      src/AddIns/BackendBindings/AspNet.Mvc/Project/AspNet.Mvc.csproj
  6. 8
      src/AddIns/BackendBindings/AspNet.Mvc/Project/Src/AddMvcControllerToProjectViewModel.cs
  7. 8
      src/AddIns/BackendBindings/AspNet.Mvc/Project/Src/AddMvcViewToProjectViewModel.cs
  8. 3
      src/AddIns/BackendBindings/AspNet.Mvc/Project/Src/IMvcControllerFileGenerator.cs
  9. 13
      src/AddIns/BackendBindings/AspNet.Mvc/Project/Src/IMvcFileGenerationErrorReporter.cs
  10. 3
      src/AddIns/BackendBindings/AspNet.Mvc/Project/Src/IMvcViewFileGenerator.cs
  11. 8
      src/AddIns/BackendBindings/AspNet.Mvc/Project/Src/MvcControllerFileGenerator.cs
  12. 23
      src/AddIns/BackendBindings/AspNet.Mvc/Project/Src/MvcFileGenerationErrorReporter.cs
  13. 17
      src/AddIns/BackendBindings/AspNet.Mvc/Project/Src/MvcFileGenerator.cs
  14. 8
      src/AddIns/BackendBindings/AspNet.Mvc/Project/Src/MvcViewFileGenerator.cs
  15. 19
      src/AddIns/BackendBindings/AspNet.Mvc/Test/Helpers/FakeMvcControllerFileGenerator.cs
  16. 7
      src/AddIns/BackendBindings/AspNet.Mvc/Test/Helpers/FakeMvcTextTemplateHost.cs
  17. 19
      src/AddIns/BackendBindings/AspNet.Mvc/Test/Helpers/FakeMvcViewFileGenerator.cs
  18. 18
      src/AddIns/BackendBindings/AspNet.Mvc/Test/Src/AddMvcControllerToProjectViewModelTests.cs
  19. 17
      src/AddIns/BackendBindings/AspNet.Mvc/Test/Src/AddMvcViewToProjectViewModelTests.cs
  20. 70
      src/AddIns/BackendBindings/AspNet.Mvc/Test/Src/MvcControllerFileGeneratorTests.cs
  21. 70
      src/AddIns/BackendBindings/AspNet.Mvc/Test/Src/MvcViewFileGeneratorTests.cs
  22. 5
      src/AddIns/BackendBindings/CSharpBinding/Project/Src/CodeManipulation.cs
  23. 3
      src/AddIns/BackendBindings/CppBinding/CppBinding/Project/ResourceScript.cs
  24. 8
      src/AddIns/BackendBindings/Scripting/Project/Src/ConsoleTextEditorKeyEventArgs.cs
  25. 8
      src/AddIns/BackendBindings/Scripting/Project/Src/ScriptingConsole.cs
  26. 2
      src/AddIns/BackendBindings/Scripting/Project/Src/ScriptingConsoleTextEditorKeyEventArgs.cs
  27. 18
      src/AddIns/BackendBindings/Scripting/Test/Console/ScriptingConsoleReadOnlyRegionsTests.cs
  28. 10
      src/AddIns/BackendBindings/Scripting/Test/Utils/FakeConsoleTextEditor.cs
  29. 4
      src/AddIns/BackendBindings/Scripting/Test/Utils/FakeConsoleTextEditorKeyEventArgs.cs
  30. 2
      src/AddIns/BackendBindings/WixBinding/Project/Src/WixDialog.cs
  31. 18
      src/AddIns/BackendBindings/XamlBinding/XamlBinding/CompletionDataHelper.cs
  32. 2
      src/AddIns/Debugger/Debugger.AddIn/Visualizers/PresentationBindings/GridViewColumnHider.cs
  33. 2
      src/AddIns/DisplayBindings/Data/ICSharpCode.Data.Core/DatabaseObjects/Table.cs
  34. 2
      src/AddIns/DisplayBindings/Data/ICSharpCode.Data.EDMDesigner.Core.UI/UserControls/CSDLType/TypeBaseDesigner.xaml.cs
  35. 2
      src/AddIns/DisplayBindings/Data/ICSharpCode.Data.EDMDesigner.Core.UI/UserControls/DesignerCanvasPreview.cs
  36. 2
      src/AddIns/DisplayBindings/Data/ICSharpCode.Data.EDMDesigner.Core/EDMObjects/CSDL/Type/EntityType.cs
  37. 4
      src/AddIns/DisplayBindings/Data/ICSharpCode.Data.EDMDesigner.Core/IO/CSDLIO.cs
  38. 2
      src/AddIns/DisplayBindings/Data/ICSharpCode.Data.EDMDesigner.Core/IO/SSDLIO.cs
  39. 5
      src/AddIns/DisplayBindings/WpfDesign/WpfDesign.AddIn/Src/WpfViewContent.cs
  40. 2
      src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/PropertyGrid/PropertyGridView.xaml.cs
  41. 56
      src/AddIns/Misc/PackageManagement/Project/Src/Design/FakeSettings.cs
  42. 7
      src/AddIns/Misc/PackageManagement/Project/Src/PackageManagementOptions.cs
  43. 27
      src/AddIns/Misc/PackageManagement/Project/Src/PackageManagementOptionsView.xaml
  44. 7
      src/AddIns/Misc/PackageManagement/Project/Src/PackageManagementOptionsView.xaml.cs
  45. 12
      src/AddIns/Misc/PackageManagement/Project/Src/PackageManagementOptionsViewModel.cs
  46. 5
      src/AddIns/Misc/PackageManagement/Project/Src/PackageSourceViewModel.cs
  47. 2
      src/AddIns/Misc/PackageManagement/Project/Src/PackagesViewModel.cs
  48. 10
      src/AddIns/Misc/PackageManagement/Project/Src/RegisteredPackageSource.cs
  49. 34
      src/AddIns/Misc/PackageManagement/Project/Src/RegisteredPackageSourceSettings.cs
  50. 9
      src/AddIns/Misc/PackageManagement/Project/Src/RegisteredPackageSources.cs
  51. 4
      src/AddIns/Misc/PackageManagement/Project/Src/RegisteredPackageSourcesUserControl.xaml
  52. 6
      src/AddIns/Misc/PackageManagement/Project/Src/Scripting/PackageManagementConsoleViewModel.cs
  53. 26
      src/AddIns/Misc/PackageManagement/Test/Src/AvailablePackagesViewModelTests.cs
  54. 159
      src/AddIns/Misc/PackageManagement/Test/Src/PackageManagementOptionsTests.cs
  55. 62
      src/AddIns/Misc/PackageManagement/Test/Src/PackageManagementOptionsViewModelTests.cs
  56. 54
      src/AddIns/Misc/PackageManagement/Test/Src/PackageSourceViewModelTests.cs
  57. 30
      src/AddIns/Misc/PackageManagement/Test/Src/Scripting/PackageManagementConsoleViewModelTests.cs
  58. 2
      src/AddIns/Misc/UsageDataCollector/UsageDataCollector.AddIn/AnalyticsMonitor.cs
  59. 16
      src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Utils/ExtensionMethods.cs
  60. 1
      src/Main/Base/Project/Src/Internal/ConditionEvaluators/ActiveWindowStateEvaluator.cs
  61. 1
      src/Main/Base/Project/Src/Project/MSBuildInternals.cs
  62. 12
      src/Main/Base/Project/Src/Project/MSBuildItemDefinitionGroup.cs
  63. 32
      src/Main/Core/Project/Src/Services/FileUtility/FileUtility.cs

4
data/templates/project/AddInWritingHelp.txt

@ -2,7 +2,7 @@ You have created a new SharpDevelop AddIn project. @@ -2,7 +2,7 @@ You have created a new SharpDevelop AddIn project.
We would like to point out that there are three locations where you can get information on how
to write SharpDevelop AddIns:
- http://wiki.sharpdevelop.net/ (section Developer Zone)
- https://github.com/icsharpcode/SharpDevelop/wiki (section Developer Zone)
- The folder "doc/technotes" in the SharpDevelop source code download
- You can ask questions about AddIn development in the SharpDevelop forum:
http://community.sharpdevelop.net/forums/
@ -17,7 +17,7 @@ The next steps: @@ -17,7 +17,7 @@ The next steps:
See SharpDevelop/doc/technotes/AddInManager.rtf for more information.
- Once you have published your AddIn on the Internet, please add it to the SharpDevelop wiki to let other users know!
http://wiki.sharpdevelop.net/3rdPartyAddins.ashx
https://github.com/icsharpcode/SharpDevelop/wiki/Third-Party-AddIns
This file serves as a reminder for you on how to find information on SharpDevelop AddIn development, you can

2
src/AddIns/Analysis/CodeQuality/Gui/Controls/VisibleMatrix.cs

@ -32,7 +32,7 @@ namespace ICSharpCode.CodeQuality.Gui @@ -32,7 +32,7 @@ namespace ICSharpCode.CodeQuality.Gui
var items = type == HeaderType.Columns ? headerColumns : headerRows;
foreach (var item in items) {
var foundItem = visibleItems.Where(n => n.Equals(item.Value)).SingleOrDefault();
var foundItem = visibleItems.SingleOrDefault(n => n.Equals(item.Value));
item.Visible = foundItem != null;
}

3
src/AddIns/Analysis/Profiler/Frontend/AddIn/Src/ProfilerTestRunner.cs

@ -73,8 +73,7 @@ namespace ICSharpCode.Profiler.AddIn @@ -73,8 +73,7 @@ namespace ICSharpCode.Profiler.AddIn
}
if (selectedTests.Member == null) {
return content.Classes
.Where(c => c.FullyQualifiedName == selectedTests.Class.DotNetName).First().Methods
return content.Classes.First(c => c.FullyQualifiedName == selectedTests.Class.DotNetName).Methods
.Where(m => m.Attributes.Any(a2 => a2.AttributeType.FullyQualifiedName == "NUnit.Framework.TestAttribute"))
.Select(m2 => m2.FullyQualifiedName);
}

2
src/AddIns/Analysis/Profiler/Frontend/Controls/QueryView.xaml.cs

@ -138,7 +138,7 @@ namespace ICSharpCode.Profiler.Controls @@ -138,7 +138,7 @@ namespace ICSharpCode.Profiler.Controls
CallTreeNodeViewModel GetViewModelFromPath(IEnumerable<NodePath> paths, SearchInfo info)
{
CallTreeNodeViewModel result = null;
var parent = list.Roots.Where(i => i.Node.Equals(info.ResultRoot)).FirstOrDefault();
var parent = list.Roots.FirstOrDefault(i => i.Node.Equals(info.ResultRoot));
foreach (var path in paths) {
var items = parent.Children;

2
src/AddIns/BackendBindings/AspNet.Mvc/Project/AspNet.Mvc.csproj

@ -173,6 +173,7 @@ @@ -173,6 +173,7 @@
<Compile Include="Src\IISAdministrator.cs" />
<Compile Include="Src\IISExpressAdministrator.cs" />
<Compile Include="Src\IISExpressProcessStartInfo.cs" />
<Compile Include="Src\IMvcFileGenerationErrorReporter.cs" />
<Compile Include="Src\IMvcModelClassLocator.cs" />
<Compile Include="Src\IMvcClass.cs" />
<Compile Include="Src\IMvcControllerFileGenerator.cs" />
@ -193,6 +194,7 @@ @@ -193,6 +194,7 @@
<Compile Include="Src\IsMvcViewFolderSelectedConditionEvaluator.cs" />
<Compile Include="Configuration\AssemblyInfo.cs" />
<Compile Include="Src\MvcControllerTextTemplate.cs" />
<Compile Include="Src\MvcFileGenerationErrorReporter.cs" />
<Compile Include="Src\MvcProjectMasterPageFile.cs" />
<Compile Include="Src\MvcModelClassLocator.cs" />
<Compile Include="Src\MvcAddViewTextTemplateFolder.cs" />

8
src/AddIns/BackendBindings/AspNet.Mvc/Project/Src/AddMvcControllerToProjectViewModel.cs

@ -106,15 +106,17 @@ namespace ICSharpCode.AspNet.Mvc @@ -106,15 +106,17 @@ namespace ICSharpCode.AspNet.Mvc
public void AddMvcController()
{
GenerateMvcControllerFile();
AddMvcControllerFileToProject();
if (GenerateMvcControllerFile()) {
AddMvcControllerFileToProject();
}
IsClosed = true;
}
void GenerateMvcControllerFile()
bool GenerateMvcControllerFile()
{
ConfigureMvcControllerGenerator();
controllerGenerator.GenerateFile(controllerFileName);
return !controllerGenerator.HasErrors;
}
void ConfigureMvcControllerGenerator()

8
src/AddIns/BackendBindings/AspNet.Mvc/Project/Src/AddMvcViewToProjectViewModel.cs

@ -223,16 +223,18 @@ namespace ICSharpCode.AspNet.Mvc @@ -223,16 +223,18 @@ namespace ICSharpCode.AspNet.Mvc
public void AddMvcView()
{
GenerateMvcViewFile();
AddMvcViewFileToProject();
if (GenerateMvcViewFile()) {
AddMvcViewFileToProject();
}
IsClosed = true;
}
void GenerateMvcViewFile()
bool GenerateMvcViewFile()
{
ConfigureMvcViewGenerator();
viewFileName.TemplateLanguage = GetTemplateLanguage();
viewGenerator.GenerateFile(viewFileName);
return !viewGenerator.HasErrors;
}
void ConfigureMvcViewGenerator()

3
src/AddIns/BackendBindings/AspNet.Mvc/Project/Src/IMvcControllerFileGenerator.cs

@ -2,6 +2,7 @@ @@ -2,6 +2,7 @@
// This code is distributed under the GNU LGPL (for details please see \doc\license.txt)
using System;
using System.CodeDom.Compiler;
using ICSharpCode.SharpDevelop.Project;
namespace ICSharpCode.AspNet.Mvc
@ -10,6 +11,8 @@ namespace ICSharpCode.AspNet.Mvc @@ -10,6 +11,8 @@ namespace ICSharpCode.AspNet.Mvc
{
IMvcProject Project { get; set; }
MvcControllerTextTemplate Template { get; set; }
CompilerErrorCollection Errors { get; }
bool HasErrors { get; }
void GenerateFile(MvcControllerFileName fileName);
}

13
src/AddIns/BackendBindings/AspNet.Mvc/Project/Src/IMvcFileGenerationErrorReporter.cs

@ -0,0 +1,13 @@ @@ -0,0 +1,13 @@
// 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.CodeDom.Compiler;
namespace ICSharpCode.AspNet.Mvc
{
public interface IMvcFileGenerationErrorReporter
{
void ShowErrors(CompilerErrorCollection errors);
}
}

3
src/AddIns/BackendBindings/AspNet.Mvc/Project/Src/IMvcViewFileGenerator.cs

@ -2,6 +2,7 @@ @@ -2,6 +2,7 @@
// This code is distributed under the GNU LGPL (for details please see \doc\license.txt)
using System;
using System.CodeDom.Compiler;
using ICSharpCode.SharpDevelop.Project;
namespace ICSharpCode.AspNet.Mvc
@ -15,6 +16,8 @@ namespace ICSharpCode.AspNet.Mvc @@ -15,6 +16,8 @@ namespace ICSharpCode.AspNet.Mvc
string MasterPageFile { get; set; }
string PrimaryContentPlaceHolderId { get; set; }
MvcViewTextTemplate Template { get; set; }
CompilerErrorCollection Errors { get; }
bool HasErrors { get; }
void GenerateFile(MvcViewFileName fileName);
}

8
src/AddIns/BackendBindings/AspNet.Mvc/Project/Src/MvcControllerFileGenerator.cs

@ -11,14 +11,16 @@ namespace ICSharpCode.AspNet.Mvc @@ -11,14 +11,16 @@ namespace ICSharpCode.AspNet.Mvc
public MvcControllerFileGenerator()
: this(
new MvcTextTemplateHostFactory(),
new MvcTextTemplateHostAppDomainFactory())
new MvcTextTemplateHostAppDomainFactory(),
new MvcFileGenerationErrorReporter())
{
}
public MvcControllerFileGenerator(
IMvcTextTemplateHostFactory hostFactory,
IMvcTextTemplateHostAppDomainFactory appDomainFactory)
: base(hostFactory, appDomainFactory)
IMvcTextTemplateHostAppDomainFactory appDomainFactory,
IMvcFileGenerationErrorReporter errorReporter)
: base(hostFactory, appDomainFactory, errorReporter)
{
this.Template = new MvcControllerTextTemplate();
}

23
src/AddIns/BackendBindings/AspNet.Mvc/Project/Src/MvcFileGenerationErrorReporter.cs

@ -0,0 +1,23 @@ @@ -0,0 +1,23 @@
// 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.CodeDom.Compiler;
using ICSharpCode.SharpDevelop;
using ICSharpCode.SharpDevelop.Gui;
using ICSharpCode.TextTemplating;
namespace ICSharpCode.AspNet.Mvc
{
public class MvcFileGenerationErrorReporter : IMvcFileGenerationErrorReporter
{
public void ShowErrors(CompilerErrorCollection errors)
{
TaskService.ClearExceptCommentTasks();
foreach (CompilerError error in errors) {
TaskService.Add(new CompilerErrorTask(error));
}
WorkbenchSingleton.Workbench.GetPad(typeof(ErrorListPad)).BringPadToFront();
}
}
}

17
src/AddIns/BackendBindings/AspNet.Mvc/Project/Src/MvcFileGenerator.cs

@ -12,17 +12,25 @@ namespace ICSharpCode.AspNet.Mvc @@ -12,17 +12,25 @@ namespace ICSharpCode.AspNet.Mvc
{
IMvcTextTemplateHostFactory hostFactory;
IMvcTextTemplateHostAppDomainFactory appDomainFactory;
IMvcFileGenerationErrorReporter errorReporter;
public MvcFileGenerator(
IMvcTextTemplateHostFactory hostFactory,
IMvcTextTemplateHostAppDomainFactory appDomainFactory)
IMvcTextTemplateHostAppDomainFactory appDomainFactory,
IMvcFileGenerationErrorReporter errorReporter)
{
this.hostFactory = hostFactory;
this.appDomainFactory = appDomainFactory;
this.errorReporter = errorReporter;
}
public MvcTextTemplateLanguage TemplateLanguage { get; set; }
public IMvcProject Project { get; set; }
public CompilerErrorCollection Errors { get; private set; }
public bool HasErrors {
get { return Errors.Count > 0; }
}
public void GenerateFile(MvcFileName fileName)
{
@ -50,10 +58,9 @@ namespace ICSharpCode.AspNet.Mvc @@ -50,10 +58,9 @@ namespace ICSharpCode.AspNet.Mvc
string outputViewFileName = fileName.GetPath();
host.ProcessTemplate(templateFileName, outputViewFileName);
if (host.Errors.Count > 0) {
CompilerError error = host.Errors[0];
Console.WriteLine("ProcessTemplate error: " + error.ErrorText);
Console.WriteLine("ProcessTemplate error: Line: " + error.Line);
Errors = host.Errors;
if (HasErrors) {
errorReporter.ShowErrors(Errors);
}
}

8
src/AddIns/BackendBindings/AspNet.Mvc/Project/Src/MvcViewFileGenerator.cs

@ -14,15 +14,17 @@ namespace ICSharpCode.AspNet.Mvc @@ -14,15 +14,17 @@ namespace ICSharpCode.AspNet.Mvc
: this(
new MvcTextTemplateHostFactory(),
new MvcTextTemplateRepository(),
new MvcTextTemplateHostAppDomainFactory())
new MvcTextTemplateHostAppDomainFactory(),
new MvcFileGenerationErrorReporter())
{
}
public MvcViewFileGenerator(
IMvcTextTemplateHostFactory hostFactory,
MvcTextTemplateRepository textTemplateRepository,
IMvcTextTemplateHostAppDomainFactory appDomainFactory)
: base(hostFactory, appDomainFactory)
IMvcTextTemplateHostAppDomainFactory appDomainFactory,
IMvcFileGenerationErrorReporter errorReporter)
: base(hostFactory, appDomainFactory, errorReporter)
{
this.textTemplateRepository = textTemplateRepository;

19
src/AddIns/BackendBindings/AspNet.Mvc/Test/Helpers/FakeMvcControllerFileGenerator.cs

@ -2,6 +2,7 @@ @@ -2,6 +2,7 @@
// This code is distributed under the GNU LGPL (for details please see \doc\license.txt)
using System;
using System.CodeDom.Compiler;
using ICSharpCode.AspNet.Mvc;
using ICSharpCode.SharpDevelop.Project;
@ -9,6 +10,11 @@ namespace AspNet.Mvc.Tests.Helpers @@ -9,6 +10,11 @@ namespace AspNet.Mvc.Tests.Helpers
{
public class FakeMvcControllerFileGenerator : IMvcControllerFileGenerator
{
public FakeMvcControllerFileGenerator()
{
this.Errors = new CompilerErrorCollection();
}
public IMvcProject Project { get; set; }
public MvcControllerTextTemplate Template { get; set; }
@ -20,5 +26,18 @@ namespace AspNet.Mvc.Tests.Helpers @@ -20,5 +26,18 @@ namespace AspNet.Mvc.Tests.Helpers
FileNamePassedToGenerateController = fileName;
IsGenerateFileCalled = true;
}
public CompilerErrorCollection Errors { get; set; }
public CompilerError AddCompilerError()
{
var error = new CompilerError();
Errors.Add(error);
return error;
}
public bool HasErrors {
get { return Errors.Count > 0; }
}
}
}

7
src/AddIns/BackendBindings/AspNet.Mvc/Test/Helpers/FakeMvcTextTemplateHost.cs

@ -45,5 +45,12 @@ namespace AspNet.Mvc.Tests.Helpers @@ -45,5 +45,12 @@ namespace AspNet.Mvc.Tests.Helpers
public string PrimaryContentPlaceHolderID { get; set; }
public CompilerErrorCollection Errors { get; set; }
public CompilerError AddCompilerError()
{
var error = new CompilerError();
Errors.Add(error);
return error;
}
}
}

19
src/AddIns/BackendBindings/AspNet.Mvc/Test/Helpers/FakeMvcViewFileGenerator.cs

@ -2,6 +2,7 @@ @@ -2,6 +2,7 @@
// This code is distributed under the GNU LGPL (for details please see \doc\license.txt)
using System;
using System.CodeDom.Compiler;
using ICSharpCode.AspNet.Mvc;
using ICSharpCode.SharpDevelop.Project;
@ -9,6 +10,11 @@ namespace AspNet.Mvc.Tests.Helpers @@ -9,6 +10,11 @@ namespace AspNet.Mvc.Tests.Helpers
{
public class FakeMvcViewFileGenerator : IMvcViewFileGenerator
{
public FakeMvcViewFileGenerator()
{
this.Errors = new CompilerErrorCollection();
}
public IMvcProject Project { get; set; }
public string ModelClassName { get; set; }
public string ModelClassAssemblyLocation { get; set; }
@ -25,5 +31,18 @@ namespace AspNet.Mvc.Tests.Helpers @@ -25,5 +31,18 @@ namespace AspNet.Mvc.Tests.Helpers
FileNamePassedToGenerateFile = fileName;
IsGenerateFileCalled = true;
}
public CompilerErrorCollection Errors { get; set; }
public CompilerError AddCompilerError()
{
var error = new CompilerError();
Errors.Add(error);
return error;
}
public bool HasErrors {
get { return Errors.Count > 0; }
}
}
}

18
src/AddIns/BackendBindings/AspNet.Mvc/Test/Src/AddMvcControllerToProjectViewModelTests.cs

@ -81,6 +81,11 @@ namespace AspNet.Mvc.Tests @@ -81,6 +81,11 @@ namespace AspNet.Mvc.Tests
viewModel.SelectedControllerTemplate = GetControllerTemplateFromViewModel("EmptyReadWrite");
}
void AddCompilerErrorToControllerGenerator()
{
fakeControllerGenerator.AddCompilerError();
}
[Test]
public void AddMvcControllerCommand_ExecutedWhenControllerNameSpecified_MvcControllerIsGenerated()
{
@ -279,5 +284,18 @@ namespace AspNet.Mvc.Tests @@ -279,5 +284,18 @@ namespace AspNet.Mvc.Tests
Assert.AreEqual(expectedFileName, fileName);
}
[Test]
public void AddMvcController_TemplateGenerationHasError_FileIsNotAddedToProject()
{
CreateViewModelWithCSharpProject();
viewModel.ControllerName = "Home";
AddCompilerErrorToControllerGenerator();
viewModel.AddMvcController();
string fileAddedToProject = fakeSelectedMvcControllerFolder.FileNamePassedToAddFile;
Assert.IsNull(fileAddedToProject);
}
}
}

17
src/AddIns/BackendBindings/AspNet.Mvc/Test/Src/AddMvcViewToProjectViewModelTests.cs

@ -106,6 +106,11 @@ namespace AspNet.Mvc.Tests @@ -106,6 +106,11 @@ namespace AspNet.Mvc.Tests
return fakeProject.AddModelClassToProject(fullyQualifiedClassName);
}
void AddCompilerErrorToViewGenerator()
{
fakeViewGenerator.AddCompilerError();
}
[Test]
public void AddMvcViewCommand_ExecutedWhenViewNameSpecified_MvcViewIsGenerated()
{
@ -1421,5 +1426,17 @@ namespace AspNet.Mvc.Tests @@ -1421,5 +1426,17 @@ namespace AspNet.Mvc.Tests
Assert.AreEqual(String.Empty, assemblyLocation);
}
[Test]
public void AddMvcView_TemplateGenerationHasError_FileIsNotAddedToProject()
{
CreateViewModel();
AddCompilerErrorToViewGenerator();
viewModel.AddMvcView();
string fileAddedToProject = fakeSelectedMvcViewFolder.FileNamePassedToAddFile;
Assert.IsNull(fileAddedToProject);
}
}
}

70
src/AddIns/BackendBindings/AspNet.Mvc/Test/Src/MvcControllerFileGeneratorTests.cs

@ -2,10 +2,12 @@ @@ -2,10 +2,12 @@
// This code is distributed under the GNU LGPL (for details please see \doc\license.txt)
using System;
using System.CodeDom.Compiler;
using AspNet.Mvc.Tests.Helpers;
using ICSharpCode.AspNet.Mvc;
using ICSharpCode.SharpDevelop.Project;
using NUnit.Framework;
using Rhino.Mocks;
namespace AspNet.Mvc.Tests
{
@ -17,13 +19,15 @@ namespace AspNet.Mvc.Tests @@ -17,13 +19,15 @@ namespace AspNet.Mvc.Tests
FakeMvcTextTemplateHostFactory fakeHostFactory;
FakeMvcTextTemplateHost fakeHost;
FakeMvcTextTemplateAppDomainFactory fakeAppDomainFactory;
IMvcFileGenerationErrorReporter fakeErrorReporter;
void CreateGenerator()
{
fakeHostFactory = new FakeMvcTextTemplateHostFactory();
fakeHost = fakeHostFactory.FakeMvcTextTemplateHost;
fakeAppDomainFactory = new FakeMvcTextTemplateAppDomainFactory();
generator = new MvcControllerFileGenerator(fakeHostFactory, fakeAppDomainFactory);
fakeErrorReporter = MockRepository.GenerateStub<IMvcFileGenerationErrorReporter>();
generator = new MvcControllerFileGenerator(fakeHostFactory, fakeAppDomainFactory, fakeErrorReporter);
projectUsedByGenerator = new FakeMvcProject();
generator.Project = projectUsedByGenerator;
ProjectPassedToGeneratorIsCSharpProject();
@ -66,6 +70,11 @@ namespace AspNet.Mvc.Tests @@ -66,6 +70,11 @@ namespace AspNet.Mvc.Tests
};
}
CompilerError AddCompilerErrorToTemplateHost()
{
return fakeHost.AddCompilerError();
}
[Test]
public void GenerateFile_CSharpControllerTemplate_MvcTextTemplateHostIsCreated()
{
@ -202,5 +211,64 @@ namespace AspNet.Mvc.Tests @@ -202,5 +211,64 @@ namespace AspNet.Mvc.Tests
Assert.AreEqual(expectedAppDomain, appDomain);
}
[Test]
public void GenerateFile_TemplateProcessedWithCompilerError_ErrorsSavedByGenerator()
{
CreateGenerator();
ProjectPassedToGeneratorIsCSharpProject();
CompilerError error = AddCompilerErrorToTemplateHost();
GenerateFile();
Assert.AreEqual(1, generator.Errors.Count);
Assert.AreEqual(error, generator.Errors[0]);
}
[Test]
public void HasErrors_NoErrors_ReturnsFalse()
{
CreateGenerator();
GenerateFile();
bool result = generator.HasErrors;
Assert.IsFalse(result);
}
[Test]
public void HasErrors_OneError_ReturnsTrue()
{
CreateGenerator();
AddCompilerErrorToTemplateHost();
GenerateFile();
bool result = generator.HasErrors;
Assert.IsTrue(result);
}
[Test]
public void GenerateFile_TemplateProcessedWithCompilerError_ErrorsReported()
{
CreateGenerator();
ProjectPassedToGeneratorIsCSharpProject();
CompilerError error = AddCompilerErrorToTemplateHost();
GenerateFile();
fakeErrorReporter.AssertWasCalled(reporter => reporter.ShowErrors(generator.Errors));
}
[Test]
public void GenerateFile_TemplateProcessedNoErrors_NoErrorsReported()
{
CreateGenerator();
ProjectPassedToGeneratorIsCSharpProject();
GenerateFile();
fakeErrorReporter.AssertWasNotCalled(reporter => reporter.ShowErrors(Arg<CompilerErrorCollection>.Is.Anything));
}
}
}

70
src/AddIns/BackendBindings/AspNet.Mvc/Test/Src/MvcViewFileGeneratorTests.cs

@ -2,10 +2,12 @@ @@ -2,10 +2,12 @@
// This code is distributed under the GNU LGPL (for details please see \doc\license.txt)
using System;
using System.CodeDom.Compiler;
using AspNet.Mvc.Tests.Helpers;
using ICSharpCode.AspNet.Mvc;
using ICSharpCode.SharpDevelop.Project;
using NUnit.Framework;
using Rhino.Mocks;
namespace AspNet.Mvc.Tests
{
@ -18,6 +20,7 @@ namespace AspNet.Mvc.Tests @@ -18,6 +20,7 @@ namespace AspNet.Mvc.Tests
FakeMvcTextTemplateHostFactory fakeHostFactory;
FakeMvcTextTemplateHost fakeHost;
FakeMvcTextTemplateAppDomainFactory fakeAppDomainFactory;
IMvcFileGenerationErrorReporter fakeErrorReporter;
void CreateTemplateRepository(string templateRootDirectory)
{
@ -35,7 +38,8 @@ namespace AspNet.Mvc.Tests @@ -35,7 +38,8 @@ namespace AspNet.Mvc.Tests
fakeHostFactory = new FakeMvcTextTemplateHostFactory();
fakeHost = fakeHostFactory.FakeMvcTextTemplateHost;
fakeAppDomainFactory = new FakeMvcTextTemplateAppDomainFactory();
generator = new MvcViewFileGenerator(fakeHostFactory, templateRepository, fakeAppDomainFactory);
fakeErrorReporter = MockRepository.GenerateStub<IMvcFileGenerationErrorReporter>();
generator = new MvcViewFileGenerator(fakeHostFactory, templateRepository, fakeAppDomainFactory, fakeErrorReporter);
projectUsedByGenerator = new FakeMvcProject();
generator.Project = projectUsedByGenerator;
ProjectPassedToGeneratorIsCSharpProject();
@ -78,6 +82,11 @@ namespace AspNet.Mvc.Tests @@ -78,6 +82,11 @@ namespace AspNet.Mvc.Tests
};
}
CompilerError AddCompilerErrorToTemplateHost()
{
return fakeHost.AddCompilerError();
}
[Test]
public void GenerateFile_CSharpEmptyViewTemplate_MvcTextTemplateHostIsCreated()
{
@ -315,5 +324,64 @@ namespace AspNet.Mvc.Tests @@ -315,5 +324,64 @@ namespace AspNet.Mvc.Tests
Assert.AreEqual(String.Empty, assemblyLocation);
}
[Test]
public void GenerateFile_TemplateProcessedWithCompilerError_ErrorsSavedByGenerator()
{
CreateGenerator();
ProjectPassedToGeneratorIsCSharpProject();
CompilerError error = AddCompilerErrorToTemplateHost();
GenerateFile();
Assert.AreEqual(1, generator.Errors.Count);
Assert.AreEqual(error, generator.Errors[0]);
}
[Test]
public void HasErrors_NoErrors_ReturnsFalse()
{
CreateGenerator();
GenerateFile();
bool result = generator.HasErrors;
Assert.IsFalse(result);
}
[Test]
public void HasErrors_OneError_ReturnsTrue()
{
CreateGenerator();
AddCompilerErrorToTemplateHost();
GenerateFile();
bool result = generator.HasErrors;
Assert.IsTrue(result);
}
[Test]
public void GenerateFile_TemplateProcessedWithCompilerError_ErrorsReported()
{
CreateGenerator();
ProjectPassedToGeneratorIsCSharpProject();
CompilerError error = AddCompilerErrorToTemplateHost();
GenerateFile();
fakeErrorReporter.AssertWasCalled(reporter => reporter.ShowErrors(generator.Errors));
}
[Test]
public void GenerateFile_TemplateProcessedNoErrors_NoErrorsReported()
{
CreateGenerator();
ProjectPassedToGeneratorIsCSharpProject();
GenerateFile();
fakeErrorReporter.AssertWasNotCalled(reporter => reporter.ShowErrors(Arg<CompilerErrorCollection>.Is.Anything));
}
}
}

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

@ -218,8 +218,7 @@ namespace CSharpBinding @@ -218,8 +218,7 @@ namespace CSharpBinding
var selectionStart = editor.Document.OffsetToPosition(editor.SelectionStart);
var selectionEnd = editor.Document.OffsetToPosition(editor.SelectionStart + editor.SelectionLength);
Ast.INode currentNode = parsedCU.Children.Select(
n => EditorContext.FindInnermostNodeContainingSelection(n, selectionStart, selectionEnd)).Where(n => n != null).FirstOrDefault();
Ast.INode currentNode = parsedCU.Children.Select(n => EditorContext.FindInnermostNodeContainingSelection(n, selectionStart, selectionEnd)).FirstOrDefault(n => n != null);
if (currentNode == null) return null;
if (!IsNodeTypeInteresting(currentNode, interestingNodeTypes)) {
// ignore uninteresting nodes in the AST
@ -305,7 +304,7 @@ namespace CSharpBinding @@ -305,7 +304,7 @@ namespace CSharpBinding
/// </summary>
Selection ExtendSelectionToEndOfLineComments(IDocument document, Location selectionStart, Location selectionEnd, IEnumerable<Comment> commentsBlankLines)
{
var lineComment = commentsBlankLines.Where(c => c.StartPosition.Line == selectionEnd.Line && c.StartPosition >= selectionEnd).FirstOrDefault();
var lineComment = commentsBlankLines.FirstOrDefault(c => c.StartPosition.Line == selectionEnd.Line && c.StartPosition >= selectionEnd);
if (lineComment == null) {
return null;
}

3
src/AddIns/BackendBindings/CppBinding/CppBinding/Project/ResourceScript.cs

@ -48,8 +48,7 @@ namespace ICSharpCode.CppBinding.Project @@ -48,8 +48,7 @@ namespace ICSharpCode.CppBinding.Project
}
public void SetIcon(string resourceId, string newPath) {
ResourceIcon iconEntry = (ResourceIcon)Icons.Where(
icon => icon.ResourceID == resourceId).SingleOrDefault();
ResourceIcon iconEntry = (ResourceIcon)Icons.SingleOrDefault(icon => icon.ResourceID == resourceId);
if (iconEntry != null)
iconEntry.Data = newPath;
else

8
src/AddIns/BackendBindings/Scripting/Project/Src/ConsoleTextEditorKeyEventArgs.cs

@ -11,16 +11,22 @@ namespace ICSharpCode.Scripting @@ -11,16 +11,22 @@ namespace ICSharpCode.Scripting
public abstract class ConsoleTextEditorKeyEventArgs : EventArgs
{
Key key;
ModifierKeys modifiers;
public ConsoleTextEditorKeyEventArgs(Key key)
public ConsoleTextEditorKeyEventArgs(Key key, ModifierKeys modifiers)
{
this.key = key;
this.modifiers = modifiers;
}
public Key Key {
get { return key; }
}
public ModifierKeys Modifiers {
get { return modifiers; }
}
public abstract bool Handled {
get; set;
}

8
src/AddIns/BackendBindings/Scripting/Project/Src/ScriptingConsole.cs

@ -136,11 +136,10 @@ namespace ICSharpCode.Scripting @@ -136,11 +136,10 @@ namespace ICSharpCode.Scripting
/// </summary>
void ProcessPreviewKeyDown(object source, ConsoleTextEditorKeyEventArgs e)
{
Key keyPressed = e.Key;
e.Handled = HandleKeyDown(keyPressed);
e.Handled = HandleKeyDown(e.Key, e.Modifiers);
}
bool HandleKeyDown(Key keyPressed)
bool HandleKeyDown(Key keyPressed, ModifierKeys keyModifiers)
{
if (textEditor.IsCompletionWindowDisplayed) {
return false;
@ -153,6 +152,9 @@ namespace ICSharpCode.Scripting @@ -153,6 +152,9 @@ namespace ICSharpCode.Scripting
case Key.Up:
case Key.Down:
return false;
case Key.C:
case Key.A:
return keyModifiers != ModifierKeys.Control;
default:
return true;
}

2
src/AddIns/BackendBindings/Scripting/Project/Src/ScriptingConsoleTextEditorKeyEventArgs.cs

@ -11,7 +11,7 @@ namespace ICSharpCode.Scripting @@ -11,7 +11,7 @@ namespace ICSharpCode.Scripting
KeyEventArgs e;
public ScriptingConsoleTextEditorKeyEventArgs(KeyEventArgs e)
: base(e.Key)
: base(e.Key, e.KeyboardDevice.Modifiers)
{
this.e = e;
}

18
src/AddIns/BackendBindings/Scripting/Test/Console/ScriptingConsoleReadOnlyRegionsTests.cs

@ -155,5 +155,23 @@ namespace ICSharpCode.Scripting.Tests.Console @@ -155,5 +155,23 @@ namespace ICSharpCode.Scripting.Tests.Console
Assert.AreEqual(String.Empty, TestableScriptingConsole.GetCurrentLine());
}
[Test]
public void PreviewKeyDown_ControlCInReadOnlyRegion_HandledSetToFalseSoCopyInReadOnlyRegionAllowed()
{
FakeConsoleTextEditor.RaisePreviewKeyDownEventForDialogKey(Key.Left);
bool result = FakeConsoleTextEditor.RaisePreviewKeyDownEvent(Key.C, ModifierKeys.Control);
Assert.IsFalse(result);
}
[Test]
public void PreviewKeyDown_ControlAInReadOnlyRegion_HandledSetToFalseSoSelectAllInReadOnlyRegionAllowed()
{
FakeConsoleTextEditor.RaisePreviewKeyDownEventForDialogKey(Key.Left);
bool result = FakeConsoleTextEditor.RaisePreviewKeyDownEvent(Key.A, ModifierKeys.Control);
Assert.IsFalse(result);
}
}
}

10
src/AddIns/BackendBindings/Scripting/Test/Utils/FakeConsoleTextEditor.cs

@ -28,14 +28,14 @@ namespace ICSharpCode.Scripting.Tests.Utils @@ -28,14 +28,14 @@ namespace ICSharpCode.Scripting.Tests.Utils
public StringBuilder PreviousLines = new StringBuilder();
public StringBuilder LineBuilder = new StringBuilder();
public event ConsoleTextEditorKeyEventHandler PreviewKeyDown;
public FakeConsoleTextEditor()
{
TotalLines = 1;
}
public void Dispose()
{
IsDisposed = true;
@ -68,9 +68,9 @@ namespace ICSharpCode.Scripting.Tests.Utils @@ -68,9 +68,9 @@ namespace ICSharpCode.Scripting.Tests.Utils
}
}
public bool RaisePreviewKeyDownEvent(Key key)
public bool RaisePreviewKeyDownEvent(Key key, ModifierKeys modifiers = ModifierKeys.None)
{
FakeConsoleTextEditorKeyEventArgs e = new FakeConsoleTextEditorKeyEventArgs(key);
FakeConsoleTextEditorKeyEventArgs e = new FakeConsoleTextEditorKeyEventArgs(key, modifiers);
OnPreviewKeyDown(e);
if (!e.Handled) {
KeyConverter converter = new KeyConverter();
@ -174,7 +174,7 @@ namespace ICSharpCode.Scripting.Tests.Utils @@ -174,7 +174,7 @@ namespace ICSharpCode.Scripting.Tests.Utils
IsCompletionWindowDisplayed = true;
this.CompletionProviderPassedToShowCompletionWindow = completionDataProvider;
}
public void MakeCurrentContentReadOnly()
{
IsMakeCurrentContentReadOnlyCalled = true;

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

@ -11,8 +11,8 @@ namespace ICSharpCode.Scripting.Tests.Utils @@ -11,8 +11,8 @@ namespace ICSharpCode.Scripting.Tests.Utils
{
bool handled;
public FakeConsoleTextEditorKeyEventArgs(Key key)
: base(key)
public FakeConsoleTextEditorKeyEventArgs(Key key, ModifierKeys modifiers = ModifierKeys.None)
: base(key, modifiers)
{
}

2
src/AddIns/BackendBindings/WixBinding/Project/Src/WixDialog.cs

@ -157,7 +157,7 @@ namespace ICSharpCode.WixBinding @@ -157,7 +157,7 @@ namespace ICSharpCode.WixBinding
public Form CreateDialog(IComponentCreator componentCreator)
{
if (componentCreator == null) {
throw new ArgumentException("Cannot be null.", "componentCreator");
throw new ArgumentNullException("componentCreator");
}
Form dialog = CreateForm(componentCreator);

18
src/AddIns/BackendBindings/XamlBinding/XamlBinding/CompletionDataHelper.cs

@ -1021,7 +1021,7 @@ namespace ICSharpCode.XamlBinding @@ -1021,7 +1021,7 @@ namespace ICSharpCode.XamlBinding
static IEnumerable<ICompletionItem> CreateEventCompletion(XamlCompletionContext context, IClass c)
{
IMethod invoker = c.Methods.Where(method => method.Name == "Invoke").FirstOrDefault();
IMethod invoker = c.Methods.FirstOrDefault(method => method.Name == "Invoke");
if (invoker != null && context.ActiveElement != null) {
var item = context.ActiveElement;
var evt = ResolveAttribute(context.Attribute.ToQualifiedName(), context) as IEvent;
@ -1324,14 +1324,7 @@ namespace ICSharpCode.XamlBinding @@ -1324,14 +1324,7 @@ namespace ICSharpCode.XamlBinding
string eventName = field.Name.Remove(field.Name.Length - "Event".Length);
IMethod method = c.Methods
.Where(m =>
m.IsPublic &&
m.IsStatic &&
m.Parameters.Count == 2 &&
(m.Name == "Add" + eventName + "Handler" ||
m.Name == "Remove" + eventName + "Handler"))
.FirstOrDefault();
IMethod method = c.Methods.FirstOrDefault(m => m.IsPublic && m.IsStatic && m.Parameters.Count == 2 && (m.Name == "Add" + eventName + "Handler" || m.Name == "Remove" + eventName + "Handler"));
if (method == null)
return null;
@ -1346,12 +1339,7 @@ namespace ICSharpCode.XamlBinding @@ -1346,12 +1339,7 @@ namespace ICSharpCode.XamlBinding
string propertyName = field.Name.Remove(field.Name.Length - "Property".Length);
IMethod method = c.Methods
.Where(m =>
m.IsPublic &&
m.IsStatic &&
m.Name == "Get" + propertyName)
.FirstOrDefault();
IMethod method = c.Methods.FirstOrDefault(m => m.IsPublic && m.IsStatic && m.Name == "Get" + propertyName);
if (method == null)
return null;

2
src/AddIns/Debugger/Debugger.AddIn/Visualizers/PresentationBindings/GridViewColumnHider.cs

@ -91,7 +91,7 @@ namespace Debugger.AddIn.Visualizers @@ -91,7 +91,7 @@ namespace Debugger.AddIn.Visualizers
private GridViewColumnWithVisibility findColumn(string header)
{
return allColumns.Where(columnVis => columnVis.Header == header).First();
return allColumns.First(columnVis => columnVis.Header == header);
}
void hideColumn(string header)

2
src/AddIns/DisplayBindings/Data/ICSharpCode.Data.Core/DatabaseObjects/Table.cs

@ -79,7 +79,7 @@ namespace ICSharpCode.Data.Core.DatabaseObjects @@ -79,7 +79,7 @@ namespace ICSharpCode.Data.Core.DatabaseObjects
{
get
{
if (Items.Where(column => column.IsPrimaryKey).Count() > 1)
if (Items.Count(column => column.IsPrimaryKey) > 1)
return true;
else
return false;

2
src/AddIns/DisplayBindings/Data/ICSharpCode.Data.EDMDesigner.Core.UI/UserControls/CSDLType/TypeBaseDesigner.xaml.cs

@ -85,7 +85,7 @@ namespace ICSharpCode.Data.EDMDesigner.Core.UI.UserControls.CSDLType @@ -85,7 +85,7 @@ namespace ICSharpCode.Data.EDMDesigner.Core.UI.UserControls.CSDLType
{
foreach (var relatedProperty in Designer.DesignerView.SelectMany(dv => dv.UIType.Properties).OfType<UIRelatedProperty>().Where(uirp => uirp.RelatedType == UIType && !RelationsContenerByRelatedProperty.ContainsKey(uirp)))
{
var otherType = Designer.Children.OfType<TypeBaseDesigner>().Where(td => td.UIType.Properties.Contains(relatedProperty)).FirstOrDefault();
var otherType = Designer.Children.OfType<TypeBaseDesigner>().FirstOrDefault(td => td.UIType.Properties.Contains(relatedProperty));
if (otherType != null)
otherType.DrawRelation(relatedProperty);
}

2
src/AddIns/DisplayBindings/Data/ICSharpCode.Data.EDMDesigner.Core.UI/UserControls/DesignerCanvasPreview.cs

@ -93,7 +93,7 @@ namespace ICSharpCode.Data.EDMDesigner.Core.UI.UserControls @@ -93,7 +93,7 @@ namespace ICSharpCode.Data.EDMDesigner.Core.UI.UserControls
get
{
if (_typebaseDesignerListView == null)
_typebaseDesignerListView = VisualTreeHelperUtil.GetControlsDecendant<ListView>(Content.Children.OfType<TypeBaseDesigner>().Where(tbd => tbd.UIType.BusinessInstance == UIType.BusinessInstance).First()).First();
_typebaseDesignerListView = VisualTreeHelperUtil.GetControlsDecendant<ListView>(Content.Children.OfType<TypeBaseDesigner>().First(tbd => tbd.UIType.BusinessInstance == UIType.BusinessInstance)).First();
return _typebaseDesignerListView;
}
}

2
src/AddIns/DisplayBindings/Data/ICSharpCode.Data.EDMDesigner.Core/EDMObjects/CSDL/Type/EntityType.cs

@ -301,7 +301,7 @@ namespace ICSharpCode.Data.EDMDesigner.Core.EDMObjects.CSDL.Type @@ -301,7 +301,7 @@ namespace ICSharpCode.Data.EDMDesigner.Core.EDMObjects.CSDL.Type
private void _navigationProperties_ItemRemoved(NavigationProperty navigationProperty)
{
_navigationProperties.ItemRemoved -= _navigationProperties_ItemRemoved;
var navigationProperty2 = navigationProperty.Association.PropertiesEnd.Where(pe => pe != navigationProperty).First();
var navigationProperty2 = navigationProperty.Association.PropertiesEnd.First(pe => pe != navigationProperty);
if (!navigationProperty2.IsDeleted)
navigationProperty2.EntityType.NavigationProperties.Remove(navigationProperty2);
_navigationProperties.ItemRemoved += _navigationProperties_ItemRemoved;

4
src/AddIns/DisplayBindings/Data/ICSharpCode.Data.EDMDesigner.Core/IO/CSDLIO.cs

@ -120,7 +120,7 @@ namespace ICSharpCode.Data.EDMDesigner.Core.IO @@ -120,7 +120,7 @@ namespace ICSharpCode.Data.EDMDesigner.Core.IO
{
var entityType = new EntityType { Name = typeName, BaseType = baseType };
SetBoolValueFromAttribute(entityTypeElement, "Abstract", isAbstract => entityType.Abstract = isAbstract);
var entitySetElement = entityContainerElement.Elements(XName.Get("EntitySet", csdlNamespace.NamespaceName)).Where(ese => GetName(ese.Attribute("EntityType").Value) == entityType.Name).FirstOrDefault();
var entitySetElement = entityContainerElement.Elements(XName.Get("EntitySet", csdlNamespace.NamespaceName)).FirstOrDefault(ese => GetName(ese.Attribute("EntityType").Value) == entityType.Name);
if (entitySetElement != null)
{
entityType.EntitySetName = entitySetElement.Attribute("Name").Value;
@ -149,7 +149,7 @@ namespace ICSharpCode.Data.EDMDesigner.Core.IO @@ -149,7 +149,7 @@ namespace ICSharpCode.Data.EDMDesigner.Core.IO
}
else
{
property = new ScalarProperty() { Name = name, IsKey = keyElement != null && keyElement.Elements(XName.Get("PropertyRef", csdlNamespace.NamespaceName)).Where(pr => pr.Attribute("Name").Value == name).Any(), Type = propertyType.Value };
property = new ScalarProperty() { Name = name, IsKey = keyElement != null && keyElement.Elements(XName.Get("PropertyRef", csdlNamespace.NamespaceName)).Any(pr => pr.Attribute("Name").Value == name), Type = propertyType.Value };
var scalarProp = (ScalarProperty)property;
SetBoolValueFromAttribute(propertyElement, "Nullable", nullable => scalarProp.Nullable = nullable);
SetVisibilityValueFromAttribute(propertyElement, "SetterAccess", setterAccess => scalarProp.SetVisibility = setterAccess);

2
src/AddIns/DisplayBindings/Data/ICSharpCode.Data.EDMDesigner.Core/IO/SSDLIO.cs

@ -213,7 +213,7 @@ namespace ICSharpCode.Data.EDMDesigner.Core.IO @@ -213,7 +213,7 @@ namespace ICSharpCode.Data.EDMDesigner.Core.IO
foreach (var propertyElement in entityTypeElement.Elements(XName.Get("Property", ssdlNamespace.NamespaceName)))
{
var name = propertyElement.Attribute("Name").Value;
var property = new Property(entityType) { Name = name, Type = propertyElement.Attribute("Type").Value, IsKey = entityTypeElement.Element(XName.Get("Key", ssdlNamespace.NamespaceName)).Elements(XName.Get("PropertyRef", ssdlNamespace.NamespaceName)).Where(pr => pr.Attribute("Name").Value == name).Any() };
var property = new Property(entityType) { Name = name, Type = propertyElement.Attribute("Type").Value, IsKey = entityTypeElement.Element(XName.Get("Key", ssdlNamespace.NamespaceName)).Elements(XName.Get("PropertyRef", ssdlNamespace.NamespaceName)).Any(pr => pr.Attribute("Name").Value == name) };
SetBoolValueFromAttribute(propertyElement, "Nullable", nullable => property.Nullable = nullable);
SetIntValueFromAttribute(propertyElement, "MaxLength", maxLength => property.MaxLength = maxLength);
SetBoolValueFromAttribute(propertyElement, "FixedLength", fixedLength => property.FixedLength = fixedLength);

5
src/AddIns/DisplayBindings/WpfDesign/WpfDesign.AddIn/Src/WpfViewContent.cs

@ -179,7 +179,7 @@ namespace ICSharpCode.WpfDesign.AddIn @@ -179,7 +179,7 @@ namespace ICSharpCode.WpfDesign.AddIn
if (!propertyGridView.PropertyGrid.IsNameCorrect) return;
// get the XAML file
OpenedFile fileName = this.Files.Where(f => f.FileName.ToString().EndsWith(".xaml")).FirstOrDefault();
OpenedFile fileName = this.Files.FirstOrDefault(f => f.FileName.ToString().EndsWith(".xaml"));
if (fileName == null) return;
// parse the XAML file
@ -188,8 +188,7 @@ namespace ICSharpCode.WpfDesign.AddIn @@ -188,8 +188,7 @@ namespace ICSharpCode.WpfDesign.AddIn
if (info.CompilationUnit.Classes.Count != 1) return;
// rename the member
IMember member = info.CompilationUnit.Classes[0].AllMembers
.Where(m => m.Name == propertyGridView.PropertyGrid.OldName).FirstOrDefault();
IMember member = info.CompilationUnit.Classes [0].AllMembers.FirstOrDefault(m => m.Name == propertyGridView.PropertyGrid.OldName);
if (member != null) {
FindReferencesAndRenameHelper.RenameMember(member, propertyGridView.PropertyGrid.Name);
}

2
src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/PropertyGrid/PropertyGridView.xaml.cs

@ -63,7 +63,7 @@ namespace ICSharpCode.WpfDesign.Designer.PropertyGrid @@ -63,7 +63,7 @@ namespace ICSharpCode.WpfDesign.Designer.PropertyGrid
protected override void OnMouseRightButtonUp(MouseButtonEventArgs e)
{
var ancestors = (e.OriginalSource as DependencyObject).GetVisualAncestors();
Border row = ancestors.OfType<Border>().Where(b => b.Name == "uxPropertyNodeRow").FirstOrDefault();
Border row = ancestors.OfType<Border>().FirstOrDefault(b => b.Name == "uxPropertyNodeRow");
if (row == null) return;
PropertyNode node = row.DataContext as PropertyNode;

56
src/AddIns/Misc/PackageManagement/Project/Src/Design/FakeSettings.cs

@ -12,6 +12,9 @@ namespace ICSharpCode.PackageManagement.Design @@ -12,6 +12,9 @@ namespace ICSharpCode.PackageManagement.Design
public List<KeyValuePair<string, string>> PackageSources
= new List<KeyValuePair<string, string>>();
public List<KeyValuePair<string, string>> DisabledPackageSources
= new List<KeyValuePair<string, string>>();
public List<KeyValuePair<string, string>> ActivePackageSourceSettings =
new List<KeyValuePair<string, string>>();
@ -22,11 +25,21 @@ namespace ICSharpCode.PackageManagement.Design @@ -22,11 +25,21 @@ namespace ICSharpCode.PackageManagement.Design
{
Sections.Add(RegisteredPackageSourceSettings.PackageSourcesSectionName, PackageSources);
Sections.Add(RegisteredPackageSourceSettings.ActivePackageSourceSectionName, ActivePackageSourceSettings);
Sections.Add(RegisteredPackageSourceSettings.DisabledPackageSourceSectionName, DisabledPackageSources);
}
public string GetValue(string section, string key)
{
throw new NotImplementedException();
if (!Sections.ContainsKey(section))
return null;
IList<KeyValuePair<string, string>> values = Sections[section];
foreach (KeyValuePair<string, string> keyPair in values) {
if (keyPair.Key == key) {
return keyPair.Value;
}
}
return null;
}
public IList<KeyValuePair<string, string>> GetValues(string section)
@ -87,6 +100,12 @@ namespace ICSharpCode.PackageManagement.Design @@ -87,6 +100,12 @@ namespace ICSharpCode.PackageManagement.Design
}
}
public bool IsDisabledPackageSourcesSectionDeleted {
get {
return SectionsDeleted.Contains(RegisteredPackageSourceSettings.DisabledPackageSourceSectionName);
}
}
public bool IsActivePackageSourceSectionDeleted {
get {
return SectionsDeleted.Contains(RegisteredPackageSourceSettings.ActivePackageSourceSectionName);
@ -128,5 +147,40 @@ namespace ICSharpCode.PackageManagement.Design @@ -128,5 +147,40 @@ namespace ICSharpCode.PackageManagement.Design
{
throw new NotImplementedException();
}
public void AddDisabledPackageSource(PackageSource packageSource)
{
var valuePair = new KeyValuePair<string, string>(packageSource.Name, packageSource.Source);
DisabledPackageSources.Add(valuePair);
}
public IList<KeyValuePair<string, string>> GetValuesPassedToSetValuesForDisabledPackageSourcesSection()
{
return SavedSectionValueLists[RegisteredPackageSourceSettings.DisabledPackageSourceSectionName];
}
public bool AnyValuesPassedToSetValuesForDisabledPackageSourcesSection {
get {
return SavedSectionValueLists.ContainsKey(RegisteredPackageSourceSettings.DisabledPackageSourceSectionName);
}
}
public void SetPackageRestoreSetting(bool enabled)
{
var items = new List<KeyValuePair<string, string>>();
items.Add(new KeyValuePair<string, string>("enabled", enabled.ToString()));
Sections.Add("packageRestore", items);
}
public KeyValuePair<string, string> GetValuePassedToSetValueForPackageRestoreSection()
{
return SavedSectionValues["packageRestore"];
}
public bool IsPackageRestoreSectionDeleted {
get {
return SectionsDeleted.Contains("packageRestore");
}
}
}
}

7
src/AddIns/Misc/PackageManagement/Project/Src/PackageManagementOptions.cs

@ -18,11 +18,13 @@ namespace ICSharpCode.PackageManagement @@ -18,11 +18,13 @@ namespace ICSharpCode.PackageManagement
RegisteredPackageSourceSettings registeredPackageSourceSettings;
Properties properties;
List<RecentPackageInfo> recentPackages;
PackageRestoreConsent packageRestoreConsent;
public PackageManagementOptions(Properties properties, ISettings settings)
{
this.properties = properties;
registeredPackageSourceSettings = new RegisteredPackageSourceSettings(settings);
packageRestoreConsent = new PackageRestoreConsent(settings);
}
public PackageManagementOptions(Properties properties)
@ -35,6 +37,11 @@ namespace ICSharpCode.PackageManagement @@ -35,6 +37,11 @@ namespace ICSharpCode.PackageManagement
{
}
public bool IsPackageRestoreEnabled {
get { return packageRestoreConsent.IsGrantedInSettings; }
set { packageRestoreConsent.IsGrantedInSettings = value; }
}
public RegisteredPackageSources PackageSources {
get { return registeredPackageSourceSettings.PackageSources; }
}

27
src/AddIns/Misc/PackageManagement/Project/Src/PackageManagementOptionsView.xaml

@ -5,19 +5,20 @@ @@ -5,19 +5,20 @@
xmlns:pm="clr-namespace:ICSharpCode.PackageManagement"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<gui:OptionPanel.Resources>
<pm:PackageManagementViewModels x:Key="ViewModels"/>
<BooleanToVisibilityConverter x:Key="BoolToVisibility"/>
</gui:OptionPanel.Resources>
<gui:OptionPanel.DataContext>
<Binding Source="{StaticResource ViewModels}" Path="PackageManagementOptionsViewModel"/>
</gui:OptionPanel.DataContext>
<Grid>
<Grid.Resources>
<pm:PackageManagementViewModels x:Key="ViewModels"/>
<BooleanToVisibilityConverter x:Key="BoolToVisibility"/>
</Grid.Resources>
<Grid.DataContext>
<Binding Source="{StaticResource ViewModels}" Path="PackageManagementOptionsViewModel"/>
</Grid.DataContext>
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
</Grid.RowDefinitions>
<GroupBox
@ -55,5 +56,13 @@ @@ -55,5 +56,13 @@
Text="No cached packages"/>
</StackPanel>
</GroupBox>
<GroupBox
Grid.Row="2"
Header="R_estore Packages">
<CheckBox
Margin="4, 4"
IsChecked="{Binding Path=IsPackageRestoreEnabled}"
Content="Enable package restore"/>
</GroupBox>
</Grid>
</gui:OptionPanel>

7
src/AddIns/Misc/PackageManagement/Project/Src/PackageManagementOptionsView.xaml.cs

@ -12,5 +12,12 @@ namespace ICSharpCode.PackageManagement @@ -12,5 +12,12 @@ namespace ICSharpCode.PackageManagement
{
InitializeComponent();
}
public override bool SaveOptions()
{
var viewModel = DataContext as PackageManagementOptionsViewModel;
viewModel.SaveOptions();
return true;
}
}
}

12
src/AddIns/Misc/PackageManagement/Project/Src/PackageManagementOptionsViewModel.cs

@ -9,32 +9,37 @@ namespace ICSharpCode.PackageManagement @@ -9,32 +9,37 @@ namespace ICSharpCode.PackageManagement
{
public class PackageManagementOptionsViewModel : ViewModelBase<PackageManagementOptionsViewModel>
{
PackageManagementOptions options;
IRecentPackageRepository recentPackageRepository;
IMachinePackageCache machinePackageCache;
IProcess process;
public PackageManagementOptionsViewModel(IRecentPackageRepository recentPackageRepository)
: this(recentPackageRepository, new MachinePackageCache(), new Process())
: this(PackageManagementServices.Options, recentPackageRepository, new MachinePackageCache(), new Process())
{
}
public PackageManagementOptionsViewModel(
PackageManagementOptions options,
IRecentPackageRepository recentPackageRepository,
IMachinePackageCache machinePackageCache,
IProcess process)
{
this.options = options;
this.recentPackageRepository = recentPackageRepository;
this.machinePackageCache = machinePackageCache;
this.process = process;
this.HasNoRecentPackages = !RecentPackageRepositoryHasPackages();
this.HasNoCachedPackages = !MachinePackageCacheHasPackages();
this.IsPackageRestoreEnabled = options.IsPackageRestoreEnabled;
CreateCommands();
}
public bool HasNoRecentPackages { get; private set; }
public bool HasNoCachedPackages { get; private set; }
public bool IsPackageRestoreEnabled { get; set; }
bool MachinePackageCacheHasPackages()
{
@ -78,5 +83,10 @@ namespace ICSharpCode.PackageManagement @@ -78,5 +83,10 @@ namespace ICSharpCode.PackageManagement
{
process.Start(machinePackageCache.Source);
}
public void SaveOptions()
{
options.IsPackageRestoreEnabled = IsPackageRestoreEnabled;
}
}
}

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

@ -29,5 +29,10 @@ namespace ICSharpCode.PackageManagement @@ -29,5 +29,10 @@ namespace ICSharpCode.PackageManagement
get { return packageSource.Source; }
set { packageSource.Source = value; }
}
public bool IsEnabled {
get { return packageSource.IsEnabled; }
set { packageSource.IsEnabled = value; }
}
}
}

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

@ -342,7 +342,7 @@ namespace ICSharpCode.PackageManagement @@ -342,7 +342,7 @@ namespace ICSharpCode.PackageManagement
public IEnumerable<PackageSource> PackageSources {
get {
foreach (PackageSource packageSource in registeredPackageRepositories.PackageSources) {
foreach (PackageSource packageSource in registeredPackageRepositories.PackageSources.GetEnabledPackageSources()) {
yield return packageSource;
}
if (registeredPackageRepositories.PackageSources.HasMultiplePackageSources) {

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

@ -10,26 +10,22 @@ namespace ICSharpCode.PackageManagement @@ -10,26 +10,22 @@ namespace ICSharpCode.PackageManagement
{
public string Source { get; set; }
public string Name { get; set; }
public bool IsEnabled { get; set; }
public RegisteredPackageSource()
{
}
public RegisteredPackageSource(string name, string source)
{
this.Name = name;
this.Source = source;
}
public RegisteredPackageSource(PackageSource packageSource)
{
Source = packageSource.Source;
Name = packageSource.Name;
IsEnabled = packageSource.IsEnabled;
}
public PackageSource ToPackageSource()
{
return new PackageSource(Source, Name);
return new PackageSource(Source, Name, IsEnabled);
}
}
}

34
src/AddIns/Misc/PackageManagement/Project/Src/RegisteredPackageSourceSettings.cs

@ -14,6 +14,7 @@ namespace ICSharpCode.PackageManagement @@ -14,6 +14,7 @@ namespace ICSharpCode.PackageManagement
{
public static readonly string PackageSourcesSectionName = "packageSources";
public static readonly string ActivePackageSourceSectionName = "activePackageSource";
public static readonly string DisabledPackageSourceSectionName = "disabledPackageSources";
public static readonly PackageSource AggregatePackageSource =
new PackageSource("(Aggregate source)", "All");
@ -64,7 +65,16 @@ namespace ICSharpCode.PackageManagement @@ -64,7 +65,16 @@ namespace ICSharpCode.PackageManagement
IEnumerable<PackageSource> GetPackageSourcesFromSettings()
{
IList<KeyValuePair<string, string>> savedPackageSources = settings.GetValues(PackageSourcesSectionName);
return PackageSourceConverter.ConvertFromKeyValuePairs(savedPackageSources);
foreach (PackageSource packageSource in PackageSourceConverter.ConvertFromKeyValuePairs(savedPackageSources)) {
packageSource.IsEnabled = IsPackageSourceEnabled(packageSource);
yield return packageSource;
}
}
bool IsPackageSourceEnabled(PackageSource packageSource)
{
string disabled = settings.GetValue(DisabledPackageSourceSectionName, packageSource.Name);
return String.IsNullOrEmpty(disabled);
}
void PackageSourcesChanged(object sender, NotifyCollectionChangedEventArgs e)
@ -74,8 +84,10 @@ namespace ICSharpCode.PackageManagement @@ -74,8 +84,10 @@ namespace ICSharpCode.PackageManagement
void UpdatePackageSourceSettingsWithChanges()
{
var newPackageSourceSettings = GetSettingsFromPackageSources();
IList<KeyValuePair<string, string>> newPackageSourceSettings = GetSettingsFromPackageSources();
SavePackageSourceSettings(newPackageSourceSettings);
IList<KeyValuePair<string, string>> disabledPackageSourceSettings = GetSettingsForDisabledPackageSources();
SaveDisabledPackageSourceSettings(disabledPackageSourceSettings);
}
IList<KeyValuePair<string, string>> GetSettingsFromPackageSources()
@ -94,6 +106,22 @@ namespace ICSharpCode.PackageManagement @@ -94,6 +106,22 @@ namespace ICSharpCode.PackageManagement
settings.SetValues(PackageSourcesSectionName, newPackageSourceSettings);
}
IList<KeyValuePair<string, string>> GetSettingsForDisabledPackageSources()
{
return packageSources
.Where(source => !source.IsEnabled)
.Select(source => new KeyValuePair<string, string>(source.Name, "true"))
.ToList();
}
void SaveDisabledPackageSourceSettings(IList<KeyValuePair<string, string>> disabledPackageSourceSettings)
{
settings.DeleteSection(DisabledPackageSourceSectionName);
if (disabledPackageSourceSettings.Any()) {
settings.SetValues(DisabledPackageSourceSectionName, disabledPackageSourceSettings);
}
}
public PackageSource ActivePackageSource {
get {
if (activePackageSource != null) {
@ -125,7 +153,7 @@ namespace ICSharpCode.PackageManagement @@ -125,7 +153,7 @@ namespace ICSharpCode.PackageManagement
{
RemoveActivePackageSourceSetting();
var activePackageSourceSetting = PackageSourceConverter.ConvertToKeyValuePair(activePackageSource);
KeyValuePair<string, string> activePackageSourceSetting = PackageSourceConverter.ConvertToKeyValuePair(activePackageSource);
SaveActivePackageSourceSetting(activePackageSourceSetting);
}

9
src/AddIns/Misc/PackageManagement/Project/Src/RegisteredPackageSources.cs

@ -4,14 +4,14 @@ @@ -4,14 +4,14 @@
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using NuGet;
namespace ICSharpCode.PackageManagement
{
public class RegisteredPackageSources : ObservableCollection<PackageSource>
{
public static readonly string DefaultPackageSourceUrl = "https://go.microsoft.com/fwlink/?LinkID=206669";
public static readonly string DefaultPackageSourceUrl = "https://nuget.org/api/v2/";
public static readonly string DefaultPackageSourceName = "NuGet Official Package Source";
public static readonly PackageSource DefaultPackageSource =
@ -51,5 +51,10 @@ namespace ICSharpCode.PackageManagement @@ -51,5 +51,10 @@ namespace ICSharpCode.PackageManagement
public bool HasMultiplePackageSources {
get { return Count > 1; }
}
public IEnumerable<PackageSource> GetEnabledPackageSources()
{
return this.Where(packageSource => packageSource.IsEnabled);
}
}
}

4
src/AddIns/Misc/PackageManagement/Project/Src/RegisteredPackageSourcesUserControl.xaml

@ -41,7 +41,9 @@ @@ -41,7 +41,9 @@
<StackPanel
x:Name="PackageSourceStackPanel"
Margin="4">
<TextBlock Text="{Binding Path=Name}"/>
<CheckBox
Content="{Binding Path=Name}"
IsChecked="{Binding Path=IsEnabled}"/>
<TextBlock>
<Hyperlink>
<TextBlock Text="{Binding Path=SourceUrl}"/>

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

@ -82,14 +82,14 @@ namespace ICSharpCode.PackageManagement.Scripting @@ -82,14 +82,14 @@ namespace ICSharpCode.PackageManagement.Scripting
void UpdatePackageSourceViewModels()
{
packageSources.Clear();
AddRegisteredPackageSourceViewModels();
AddEnabledPackageSourceViewModels();
AddAggregatePackageSourceViewModelIfMoreThanOnePackageSourceViewModelAdded();
SelectActivePackageSource();
}
void AddRegisteredPackageSourceViewModels()
void AddEnabledPackageSourceViewModels()
{
foreach (PackageSource packageSource in registeredPackageSources) {
foreach (PackageSource packageSource in registeredPackageSources.GetEnabledPackageSources()) {
AddPackageSourceViewModel(packageSource);
}
}

26
src/AddIns/Misc/PackageManagement/Test/Src/AvailablePackagesViewModelTests.cs

@ -76,6 +76,17 @@ namespace PackageManagement.Tests @@ -76,6 +76,17 @@ namespace PackageManagement.Tests
registeredPackageRepositories.AddPackageSources(sources);
}
PackageSource AddTwoPackageSourcesToRegisteredSourcesWithFirstOneDisabled()
{
var expectedPackageSources = new PackageSource[] {
new PackageSource("http://first.com", "First") { IsEnabled = false },
new PackageSource("http://second.com", "Second") { IsEnabled = true }
};
AddPackageSourcesToRegisteredSources(expectedPackageSources);
registeredPackageRepositories.HasMultiplePackageSources = true;
return expectedPackageSources[0];
}
void CreateNewActiveRepositoryWithDifferentPackages()
{
var package = new FakePackage("NewRepositoryPackageId");
@ -429,5 +440,20 @@ namespace PackageManagement.Tests @@ -429,5 +440,20 @@ namespace PackageManagement.Tests
};
PackageCollectionAssert.AreEqual(expectedPackages, allPackages);
}
[Test]
public void PackageSources_TwoPackageSourcesButFirstIsDisabled_DoesNotReturnDisabledPackageSource()
{
CreateRegisteredPackageRepositories();
AddTwoPackageSourcesToRegisteredSourcesWithFirstOneDisabled();
CreateViewModel(registeredPackageRepositories);
IEnumerable<PackageSource> packageSources = viewModel.PackageSources;
bool containsDisabledPackageSource = packageSources.Contains(registeredPackageRepositories.PackageSources[0]);
bool containsEnabledPackageSource = packageSources.Contains(registeredPackageRepositories.PackageSources[1]);
Assert.IsFalse(containsDisabledPackageSource);
Assert.IsTrue(containsEnabledPackageSource);
}
}
}

159
src/AddIns/Misc/PackageManagement/Test/Src/PackageManagementOptionsTests.cs

@ -72,6 +72,11 @@ namespace PackageManagement.Tests @@ -72,6 +72,11 @@ namespace PackageManagement.Tests
return recentPackage;
}
void EnablePackageRestoreInSettings()
{
fakeSettings.SetPackageRestoreSetting(true);
}
[Test]
public void PackageSources_OnePackageSourceInSettings_ContainsSinglePackageSourceFromSettings()
{
@ -80,7 +85,7 @@ namespace PackageManagement.Tests @@ -80,7 +85,7 @@ namespace PackageManagement.Tests
fakeSettings.AddFakePackageSource(packageSource);
CreateOptions(fakeSettings);
var actualSources = options.PackageSources;
RegisteredPackageSources actualSources = options.PackageSources;
List<PackageSource> expectedSources = new List<PackageSource>();
expectedSources.Add(packageSource);
@ -97,7 +102,7 @@ namespace PackageManagement.Tests @@ -97,7 +102,7 @@ namespace PackageManagement.Tests
List<PackageSource> expectedSources = new List<PackageSource>();
expectedSources.Add(RegisteredPackageSources.DefaultPackageSource);
var actualPackageSources = options.PackageSources;
RegisteredPackageSources actualPackageSources = options.PackageSources;
CollectionAssert.AreEqual(expectedSources, actualPackageSources);
}
@ -108,16 +113,16 @@ namespace PackageManagement.Tests @@ -108,16 +113,16 @@ namespace PackageManagement.Tests
CreateSettings();
CreateOptions(fakeSettings);
var packageSources = options.PackageSources;
RegisteredPackageSources packageSources = options.PackageSources;
var defaultSource = RegisteredPackageSources.DefaultPackageSource;
PackageSource defaultSource = RegisteredPackageSources.DefaultPackageSource;
var expectedSavedPackageSourceSettings = new List<KeyValuePair<string, string>>();
string name = defaultSource.Name;
string sourceUrl = defaultSource.Source;
expectedSavedPackageSourceSettings.Add(new KeyValuePair<string, string>(name, sourceUrl));
var actualSavedPackageSourceSettings = fakeSettings.GetValuesPassedToSetValuesForPackageSourcesSection();
IList<KeyValuePair<string, string>> actualSavedPackageSourceSettings = fakeSettings.GetValuesPassedToSetValuesForPackageSourcesSection();
Assert.AreEqual(expectedSavedPackageSourceSettings, actualSavedPackageSourceSettings);
}
@ -127,7 +132,7 @@ namespace PackageManagement.Tests @@ -127,7 +132,7 @@ namespace PackageManagement.Tests
{
CreateSettings();
CreateOptions(fakeSettings);
var registeredPackageSources = options.PackageSources;
RegisteredPackageSources registeredPackageSources = options.PackageSources;
var packageSource = new PackageSource("http://codeplex.com", "Test");
registeredPackageSources.Clear();
@ -136,7 +141,7 @@ namespace PackageManagement.Tests @@ -136,7 +141,7 @@ namespace PackageManagement.Tests
var expectedSavedPackageSourceSettings = new List<KeyValuePair<string, string>>();
expectedSavedPackageSourceSettings.Add(new KeyValuePair<string, string>("Test", "http://codeplex.com"));
var actualSavedPackageSourceSettings = fakeSettings.GetValuesPassedToSetValuesForPackageSourcesSection();
IList<KeyValuePair<string, string>> actualSavedPackageSourceSettings = fakeSettings.GetValuesPassedToSetValuesForPackageSourcesSection();
Assert.AreEqual(expectedSavedPackageSourceSettings, actualSavedPackageSourceSettings);
}
@ -146,7 +151,7 @@ namespace PackageManagement.Tests @@ -146,7 +151,7 @@ namespace PackageManagement.Tests
{
CreateSettings();
CreateOptions(fakeSettings);
var registeredPackageSources = options.PackageSources;
RegisteredPackageSources registeredPackageSources = options.PackageSources;
var packageSource = new PackageSource("http://codeplex.com", "Test");
registeredPackageSources.Clear();
@ -185,7 +190,7 @@ namespace PackageManagement.Tests @@ -185,7 +190,7 @@ namespace PackageManagement.Tests
options.ActivePackageSource = packageSource;
var expectedKeyValuePair = new KeyValuePair<string, string>("Test", "http://sharpdevelop.com");
var actualKeyValuePair = fakeSettings.GetValuePassedToSetValueForActivePackageSourceSection();
KeyValuePair<string, string> actualKeyValuePair = fakeSettings.GetValuePassedToSetValueForActivePackageSourceSection();
Assert.AreEqual(expectedKeyValuePair, actualKeyValuePair);
}
@ -227,7 +232,7 @@ namespace PackageManagement.Tests @@ -227,7 +232,7 @@ namespace PackageManagement.Tests
var differentSource = new PackageSource("http://different-url", "Test2");
options.ActivePackageSource = differentSource;
var activeSource = options.ActivePackageSource;
PackageSource activeSource = options.ActivePackageSource;
Assert.IsNull(activeSource);
}
@ -280,7 +285,7 @@ namespace PackageManagement.Tests @@ -280,7 +285,7 @@ namespace PackageManagement.Tests
options.RecentPackages.Add(recentPackage);
CreateOptions(properties);
var recentPackages = options.RecentPackages;
IList<RecentPackageInfo> recentPackages = options.RecentPackages;
var expectedRecentPackages = new RecentPackageInfo[] {
new RecentPackageInfo(package)
@ -293,7 +298,7 @@ namespace PackageManagement.Tests @@ -293,7 +298,7 @@ namespace PackageManagement.Tests
public void RecentPackages_SaveRecentPackages_DoesNotThrowInvalidOperationException()
{
CreateOptions();
var recentPackage = AddRecentPackageToOptions("id", "1.0");
RecentPackageInfo recentPackage = AddRecentPackageToOptions("id", "1.0");
Assert.DoesNotThrow(() => SaveOptions());
}
@ -302,13 +307,139 @@ namespace PackageManagement.Tests @@ -302,13 +307,139 @@ namespace PackageManagement.Tests
public void ActivePackageSource_AggregatePackageSourceIsActivePackageSourceInSettings_ReturnsAggregatePackageSource()
{
CreateSettings();
var expectedPackageSource = RegisteredPackageSourceSettings.AggregatePackageSource;
PackageSource expectedPackageSource = RegisteredPackageSourceSettings.AggregatePackageSource;
fakeSettings.SetFakeActivePackageSource(expectedPackageSource);
CreateOptions(fakeSettings);
var activePackageSource = options.ActivePackageSource;
PackageSource activePackageSource = options.ActivePackageSource;
Assert.AreEqual(expectedPackageSource, activePackageSource);
}
[Test]
public void PackageSources_OneEnabledPackageSourceInSettings_ContainsSingleEnabledPackageSourceFromSettings()
{
CreateSettings();
var packageSource = new PackageSource("http://codeplex.com", "Test") { IsEnabled = true };
fakeSettings.AddFakePackageSource(packageSource);
CreateOptions(fakeSettings);
RegisteredPackageSources actualSources = options.PackageSources;
Assert.IsTrue(actualSources[0].IsEnabled);
}
[Test]
public void PackageSources_OneDisabledPackageSourceInSettings_ContainsSingleDisabledPackageSourceFromSettings()
{
CreateSettings();
var packageSource = new PackageSource("http://codeplex.com", "Test") { IsEnabled = false };
fakeSettings.AddFakePackageSource(packageSource);
fakeSettings.AddDisabledPackageSource(packageSource);
CreateOptions(fakeSettings);
RegisteredPackageSources actualSources = options.PackageSources;
Assert.IsFalse(actualSources[0].IsEnabled);
}
[Test]
public void PackageSources_OnePackageSourceAdded_DisabledPackageSourcesSectionDeletedFromSettings()
{
CreateSettings();
CreateOptions(fakeSettings);
RegisteredPackageSources registeredPackageSources = options.PackageSources;
var packageSource = new PackageSource("http://codeplex.com", "Test");
registeredPackageSources.Clear();
registeredPackageSources.Add(packageSource);
bool sectionDeleted = fakeSettings.IsDisabledPackageSourcesSectionDeleted;
Assert.IsTrue(sectionDeleted);
}
[Test]
public void PackageSources_OneDisabledPackageSourceAdded_DisabledPackageSourcesSectionSaved()
{
CreateSettings();
CreateOptions(fakeSettings);
RegisteredPackageSources registeredPackageSources = options.PackageSources;
var packageSource = new PackageSource("http://codeplex.com", "Test") { IsEnabled = false };
registeredPackageSources.Clear();
registeredPackageSources.Add(packageSource);
var expectedSavedPackageSourceSettings = new List<KeyValuePair<string, string>>();
expectedSavedPackageSourceSettings.Add(new KeyValuePair<string, string>(packageSource.Name, "true"));
IList<KeyValuePair<string, string>> actualSavedPackageSourceSettings =
fakeSettings.GetValuesPassedToSetValuesForDisabledPackageSourcesSection();
Assert.AreEqual(expectedSavedPackageSourceSettings, actualSavedPackageSourceSettings);
}
[Test]
public void PackageSources_OneEnabledPackageSourceAdded_DisabledPackageSourcesSectionNotChanged()
{
CreateSettings();
CreateOptions(fakeSettings);
RegisteredPackageSources registeredPackageSources = options.PackageSources;
var packageSource = new PackageSource("http://codeplex.com", "Test") { IsEnabled = true };
registeredPackageSources.Clear();
registeredPackageSources.Add(packageSource);
bool result = fakeSettings.AnyValuesPassedToSetValuesForDisabledPackageSourcesSection;
Assert.IsFalse(result);
}
[Test]
public void IsPackageRestoreEnabled_EnabledInSettings_ReturnsTrue()
{
CreateSettings();
EnablePackageRestoreInSettings();
CreateOptions(fakeSettings);
bool enabled = options.IsPackageRestoreEnabled;
Assert.IsTrue(enabled);
}
[Test]
public void IsPackageRestoreEnabled_PackageRestoreNotInSettings_ReturnsFalse()
{
CreateOptions();
bool enabled = options.IsPackageRestoreEnabled;
Assert.IsFalse(enabled);
}
[Test]
public void IsPackageRestoreEnabled_NotInSettingsOriginallyButSetToTrue_PackageRestoreEnabledInSettings()
{
CreateOptions();
options.IsPackageRestoreEnabled = true;
KeyValuePair<string, string> keyPair = fakeSettings.GetValuePassedToSetValueForPackageRestoreSection();
Assert.AreEqual("enabled", keyPair.Key);
Assert.AreEqual("True", keyPair.Value);
}
[Test]
public void IsPackageRestoreEnabled_OriginallyEnabledInSettingsButSetToTrue_PackageRestoreSectionDeletedFromSettings()
{
CreateSettings();
EnablePackageRestoreInSettings();
CreateOptions(fakeSettings);
options.IsPackageRestoreEnabled = false;
bool deleted = fakeSettings.IsPackageRestoreSectionDeleted;
Assert.IsTrue(deleted);
}
}
}

62
src/AddIns/Misc/PackageManagement/Test/Src/PackageManagementOptionsViewModelTests.cs

@ -3,6 +3,7 @@ @@ -3,6 +3,7 @@
using System;
using System.Collections.Generic;
using ICSharpCode.Core;
using ICSharpCode.PackageManagement;
using ICSharpCode.PackageManagement.Design;
using NUnit.Framework;
@ -18,6 +19,8 @@ namespace PackageManagement.Tests @@ -18,6 +19,8 @@ namespace PackageManagement.Tests
FakeMachinePackageCache fakeMachineCache;
FakeProcess fakeProcess;
List<string> propertiesChanged;
PackageManagementOptions options;
FakeSettings fakeSettings;
void CreateRecentRepository()
{
@ -29,18 +32,37 @@ namespace PackageManagement.Tests @@ -29,18 +32,37 @@ namespace PackageManagement.Tests
fakeMachineCache = new FakeMachinePackageCache();
}
void CreateOptions()
{
var properties = new Properties();
fakeSettings = new FakeSettings();
options = new PackageManagementOptions(properties, fakeSettings);
}
void EnablePackageRestoreInOptions()
{
fakeSettings.SetPackageRestoreSetting(true);
}
void CreateViewModelUsingCreatedMachineCache()
{
CreateRecentRepository();
CreateOptions();
fakeProcess = new FakeProcess();
viewModel = new PackageManagementOptionsViewModel(fakeRecentRepository, fakeMachineCache, fakeProcess);
CreateViewModel(options);
}
void CreateViewModelUsingCreatedRecentRepository()
{
CreateMachineCache();
CreateOptions();
fakeProcess = new FakeProcess();
viewModel = new PackageManagementOptionsViewModel(fakeRecentRepository, fakeMachineCache, fakeProcess);
CreateViewModel(options);
}
void CreateViewModel(PackageManagementOptions options)
{
viewModel = new PackageManagementOptionsViewModel(options, fakeRecentRepository, fakeMachineCache, fakeProcess);
}
void AddPackageToRecentRepository()
@ -277,5 +299,41 @@ namespace PackageManagement.Tests @@ -277,5 +299,41 @@ namespace PackageManagement.Tests
Assert.AreEqual(expectedFileName, fileName);
}
[Test]
public void IsPackageRestoreEnabled_TrueInOptions_ReturnsTrue()
{
CreateOptions();
EnablePackageRestoreInOptions();
CreateViewModel(options);
bool result = viewModel.IsPackageRestoreEnabled;
Assert.IsTrue(result);
}
[Test]
public void IsPackageRestoreEnabled_FalseInOptions_ReturnsFalse()
{
CreateOptions();
CreateViewModel(options);
bool result = viewModel.IsPackageRestoreEnabled;
Assert.IsFalse(result);
}
[Test]
public void SaveOptions_PackageRestoreChangedFromFalseToTrue_PackageRestoreUpdatedInSettings()
{
CreateOptions();
CreateViewModel(options);
viewModel.IsPackageRestoreEnabled = true;
viewModel.SaveOptions();
KeyValuePair<string, string> keyPair = fakeSettings.GetValuePassedToSetValueForPackageRestoreSection();
Assert.AreEqual("True", keyPair.Value);
}
}
}

54
src/AddIns/Misc/PackageManagement/Test/Src/PackageSourceViewModelTests.cs

@ -39,6 +39,18 @@ namespace PackageManagement.Tests @@ -39,6 +39,18 @@ namespace PackageManagement.Tests
viewModel = new PackageSourceViewModel(packageSource);
}
void CreateEnabledPackageSource()
{
CreatePackageSource();
packageSource.IsEnabled = true;
}
void CreateDisabledPackageSource()
{
CreatePackageSource();
packageSource.IsEnabled = false;
}
[Test]
public void Name_InstanceCreatedWithRegisteredPackageSource_MatchesRegisteredPackageSourceName()
{
@ -76,5 +88,47 @@ namespace PackageManagement.Tests @@ -76,5 +88,47 @@ namespace PackageManagement.Tests
Assert.AreEqual("changed", viewModel.SourceUrl);
}
[Test]
public void IsEnabled_PackageSourceIsEnabled_ReturnsTrue()
{
CreateEnabledPackageSource();
CreateViewModel(packageSource);
Assert.IsTrue(viewModel.IsEnabled);
}
[Test]
public void IsEnabled_PackageSourceIsNotEnabled_ReturnsFalse()
{
CreateDisabledPackageSource();
CreateViewModel(packageSource);
Assert.IsFalse(viewModel.IsEnabled);
}
[Test]
public void IsEnabled_ChangedFromTrueToFalse_UpdatesPackageSource()
{
CreateEnabledPackageSource();
CreateViewModel(packageSource);
viewModel.IsEnabled = false;
PackageSource updatedPackageSource = viewModel.GetPackageSource();
Assert.IsFalse(updatedPackageSource.IsEnabled);
}
[Test]
public void IsEnabled_ChangedFromFalseToTrue_UpdatesPackageSource()
{
CreateDisabledPackageSource();
CreateViewModel(packageSource);
viewModel.IsEnabled = true;
PackageSource updatedPackageSource = viewModel.GetPackageSource();
Assert.IsTrue(updatedPackageSource.IsEnabled);
}
}
}

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

@ -3,6 +3,7 @@ @@ -3,6 +3,7 @@
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using ICSharpCode.PackageManagement;
using ICSharpCode.PackageManagement.Design;
@ -82,6 +83,18 @@ namespace PackageManagement.Tests.Scripting @@ -82,6 +83,18 @@ namespace PackageManagement.Tests.Scripting
return activePackageSource;
}
PackageSource CreateViewModelWithTwoRegisteredPackageSourcesAndFirstOneIsDisabledPackageSource()
{
CreateConsoleHost();
var packageSources = new List<PackageSource>();
var disabledPackageSource = new PackageSource("Disabled source") { IsEnabled = false };
var enabledPackageSource = new PackageSource("Enabled source") { IsEnabled = true };
packageSources.Add(disabledPackageSource);
packageSources.Add(enabledPackageSource);
CreateViewModel(packageSources, consoleHost);
return enabledPackageSource;
}
Solution CreateViewModelWithOneProjectOpen()
{
CreateConsoleHost();
@ -122,7 +135,7 @@ namespace PackageManagement.Tests.Scripting @@ -122,7 +135,7 @@ namespace PackageManagement.Tests.Scripting
PackageSourceViewModel SelectSecondPackageSource()
{
var selectedPackageSource = viewModel.PackageSources[1];
PackageSourceViewModel selectedPackageSource = viewModel.PackageSources[1];
viewModel.ActivePackageSource = selectedPackageSource;
return selectedPackageSource;
}
@ -168,7 +181,7 @@ namespace PackageManagement.Tests.Scripting @@ -168,7 +181,7 @@ namespace PackageManagement.Tests.Scripting
solution.RemoveFolder(project);
return project;
}
[Test]
public void PackageSources_OneRegisteredPackageSourceWhenConsoleCreated_OnePackageSourceDisplayed()
{
@ -537,5 +550,18 @@ namespace PackageManagement.Tests.Scripting @@ -537,5 +550,18 @@ namespace PackageManagement.Tests.Scripting
CreateViewModel();
Assert.DoesNotThrow(() => viewModel.ActivePackageSource = null);
}
[Test]
public void PackageSources_TwoRegisteredPackageSourcesButOnlyOneEnabledWhenConsoleCreated_OnlyEnabledPackageSourceDisplayed()
{
PackageSource enabledPackageSource =
CreateViewModelWithTwoRegisteredPackageSourcesAndFirstOneIsDisabledPackageSource();
ObservableCollection<PackageSourceViewModel> actualPackageSources = viewModel.PackageSources;
var expectedPackageSources = new List<PackageSource>();
expectedPackageSources.Add(enabledPackageSource);
PackageSourceCollectionAssert.AreEqual(expectedPackageSources, actualPackageSources);
}
}
}

2
src/AddIns/Misc/UsageDataCollector/UsageDataCollector.AddIn/AnalyticsMonitor.cs

@ -152,7 +152,7 @@ namespace ICSharpCode.UsageDataCollector @@ -152,7 +152,7 @@ namespace ICSharpCode.UsageDataCollector
new UsageDataEnvironmentProperty { Name = "appVersion", Value = RevisionClass.Major + "." + RevisionClass.Minor + "." + RevisionClass.Build + "." + RevisionClass.Revision },
new UsageDataEnvironmentProperty { Name = "language", Value = ResourceService.Language },
new UsageDataEnvironmentProperty { Name = "culture", Value = CultureInfo.CurrentCulture.Name },
new UsageDataEnvironmentProperty { Name = "userAddInCount", Value = SD.AddInTree.AddIns.Where(a => !a.IsPreinstalled).Count().ToString() },
new UsageDataEnvironmentProperty { Name = "userAddInCount", Value = SD.AddInTree.AddIns.Count(a => !a.IsPreinstalled).ToString() },
new UsageDataEnvironmentProperty { Name = "branch", Value = BranchName },
new UsageDataEnvironmentProperty { Name = "commit", Value = CommitHash },
new UsageDataEnvironmentProperty { Name = "renderingTier", Value = (RenderCapability.Tier >> 16).ToString() }

16
src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Utils/ExtensionMethods.cs

@ -14,10 +14,18 @@ namespace ICSharpCode.AvalonEdit.Utils @@ -14,10 +14,18 @@ namespace ICSharpCode.AvalonEdit.Utils
static class ExtensionMethods
{
#region Epsilon / IsClose / CoerceValue
public const double Epsilon = 1e-8;
/// <summary>
/// Epsilon used for <c>IsClose()</c> implementations.
/// We can use up quite a few digits in front of the decimal point (due to visual positions being relative to document origin),
/// and there's no need to be too accurate (we're dealing with pixels here),
/// so we will use the value 0.01.
/// Previosly we used 1e-8 but that was causing issues:
/// http://community.sharpdevelop.net/forums/t/16048.aspx
/// </summary>
public const double Epsilon = 0.01;
/// <summary>
/// Returns true if the doubles are close (difference smaller than 10^-8).
/// Returns true if the doubles are close (difference smaller than 0.01).
/// </summary>
public static bool IsClose(this double d1, double d2)
{
@ -27,7 +35,7 @@ namespace ICSharpCode.AvalonEdit.Utils @@ -27,7 +35,7 @@ namespace ICSharpCode.AvalonEdit.Utils
}
/// <summary>
/// Returns true if the doubles are close (difference smaller than 10^-8).
/// Returns true if the doubles are close (difference smaller than 0.01).
/// </summary>
public static bool IsClose(this Size d1, Size d2)
{
@ -35,7 +43,7 @@ namespace ICSharpCode.AvalonEdit.Utils @@ -35,7 +43,7 @@ namespace ICSharpCode.AvalonEdit.Utils
}
/// <summary>
/// Returns true if the doubles are close (difference smaller than 10^-8).
/// Returns true if the doubles are close (difference smaller than 0.01).
/// </summary>
public static bool IsClose(this Vector d1, Vector d2)
{

1
src/Main/Base/Project/Src/Internal/ConditionEvaluators/ActiveWindowStateEvaluator.cs

@ -9,6 +9,7 @@ using ICSharpCode.SharpDevelop.Workbench; @@ -9,6 +9,7 @@ using ICSharpCode.SharpDevelop.Workbench;
namespace ICSharpCode.SharpDevelop
{
[Flags]
public enum WindowState {
None = 0,
Untitled = 1,

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

@ -230,6 +230,7 @@ namespace ICSharpCode.SharpDevelop.Project @@ -230,6 +230,7 @@ namespace ICSharpCode.SharpDevelop.Project
var query =
from msbuildItem in resolvedAssemblyProjectItems
where msbuildItem.GetMetadataValue("ReferenceSourceTarget") != "ProjectReference"
let originalInclude = msbuildItem.GetMetadataValue("OriginalItemSpec")
join item in referenceProjectItems.Where(p => p.ItemType != ItemType.ProjectReference) on originalInclude equals item.Include into referenceItems
select new {

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

@ -29,7 +29,7 @@ namespace ICSharpCode.SharpDevelop.Project @@ -29,7 +29,7 @@ namespace ICSharpCode.SharpDevelop.Project
public MSBuildItemDefinitionGroup(MSBuildBasedProject project, string condition)
{
ProjectRootElement root = project.MSBuildProjectFile;
group = root.ItemDefinitionGroups.Where(item => item.Condition == condition).SingleOrDefault();
group = root.ItemDefinitionGroups.SingleOrDefault(item => item.Condition == condition);
if (group == null)
{
group = root.CreateItemDefinitionGroupElement();
@ -61,11 +61,10 @@ namespace ICSharpCode.SharpDevelop.Project @@ -61,11 +61,10 @@ namespace ICSharpCode.SharpDevelop.Project
public string GetElementMetadata(string element, string name)
{
ProjectItemDefinitionElement elem;
elem = (ProjectItemDefinitionElement)group.Children.Where(
item => item is ProjectItemDefinitionElement && ((ProjectItemDefinitionElement)item).ItemType == element).SingleOrDefault();
elem = (ProjectItemDefinitionElement)group.Children.SingleOrDefault(item => item is ProjectItemDefinitionElement && ((ProjectItemDefinitionElement)item).ItemType == element);
if (elem == null) return null;
ProjectMetadataElement metadataElement;
metadataElement = elem.Metadata.Where(item => item.Name == name).SingleOrDefault();
metadataElement = elem.Metadata.SingleOrDefault(item => item.Name == name);
if (metadataElement == null) return null;
return metadataElement.Value;
}
@ -79,12 +78,11 @@ namespace ICSharpCode.SharpDevelop.Project @@ -79,12 +78,11 @@ namespace ICSharpCode.SharpDevelop.Project
public void SetElementMetadata(string element, string name, string value)
{
ProjectItemDefinitionElement elem;
elem = (ProjectItemDefinitionElement)group.Children.Where(
item => item is ProjectItemDefinitionElement && ((ProjectItemDefinitionElement)item).ItemType == element).SingleOrDefault();
elem = (ProjectItemDefinitionElement)group.Children.SingleOrDefault(item => item is ProjectItemDefinitionElement && ((ProjectItemDefinitionElement)item).ItemType == element);
if (elem == null)
elem = AddElement(element);
ProjectMetadataElement metadataElement;
metadataElement = elem.Metadata.Where(item => item.Name == name).SingleOrDefault();
metadataElement = elem.Metadata.SingleOrDefault(item => item.Name == name);
if (metadataElement != null)
metadataElement.Value = value;
else

32
src/Main/Core/Project/Src/Services/FileUtility/FileUtility.cs

@ -60,6 +60,22 @@ namespace ICSharpCode.Core @@ -60,6 +60,22 @@ namespace ICSharpCode.Core
return null;
}
static string GetPathFromRegistryX86(string key, string valueName)
{
using (RegistryKey baseKey = RegistryKey.OpenBaseKey(RegistryHive.LocalMachine, RegistryView.Registry32)) {
using (RegistryKey installRootKey = baseKey.OpenSubKey(key)) {
if (installRootKey != null) {
object o = installRootKey.GetValue(valueName);
if (o != null) {
string r = o.ToString();
if (!string.IsNullOrEmpty(r))
return r;
}
}
}
}
return null;
}
#region InstallRoot Properties
static string netFrameworkInstallRoot = null;
@ -153,6 +169,18 @@ namespace ICSharpCode.Core @@ -153,6 +169,18 @@ namespace ICSharpCode.Core
}
}
static string windowsSdk80InstallRoot = null;
/// <summary>
/// Location of the .NET 4.5 SDK (Windows SDK 8.0) install root.
/// </summary>
public static string WindowsSdk80NetFxTools {
get {
if (windowsSdk80InstallRoot == null) {
windowsSdk80InstallRoot = GetPathFromRegistryX86(@"SOFTWARE\Microsoft\Microsoft SDKs\Windows\v8.0A\WinSDK-NetFx40Tools", "InstallationFolder") ?? string.Empty;
}
return windowsSdk80InstallRoot;
}
}
#endregion
public static bool IsUrl(string path)
@ -201,6 +229,10 @@ namespace ICSharpCode.Core @@ -201,6 +229,10 @@ namespace ICSharpCode.Core
/// <returns>The path of the executable, or null if the exe is not found.</returns>
public static string GetSdkPath(string exeName) {
string execPath;
if (!string.IsNullOrEmpty(WindowsSdk80NetFxTools)) {
execPath = Path.Combine(WindowsSdk80NetFxTools, exeName);
if (File.Exists(execPath)) { return execPath; }
}
if (!string.IsNullOrEmpty(WindowsSdk71InstallRoot)) {
execPath = Path.Combine(WindowsSdk71InstallRoot, "bin\\" + exeName);
if (File.Exists(execPath)) { return execPath; }

Loading…
Cancel
Save