Browse Source

Fix null reference when building a project.

Pre-build custom tool runner was not handling that IProject.ProjectSpecificItems can be null for a project that has no preferences xml file already created (e.g. project created by Visual Studio and then opened in SharpDevelop).
pull/28/head
Matt Ward 14 years ago
parent
commit
0c5fa97065
  1. 6
      src/Main/Base/Project/Src/Project/ProjectCustomToolOptions.cs
  2. 19
      src/Main/Base/Test/Project/BeforeBuildCustomToolProjectItemsTests.cs
  3. 6
      src/Main/Base/Test/Utils/ProjectHelper.cs

6
src/Main/Base/Project/Src/Project/ProjectCustomToolOptions.cs

@ -19,7 +19,11 @@ namespace ICSharpCode.SharpDevelop.Project @@ -19,7 +19,11 @@ namespace ICSharpCode.SharpDevelop.Project
void GetCustomToolProperties(IProject project)
{
properties = project.ProjectSpecificProperties.Get("customTool", new Properties());
if (project.ProjectSpecificProperties != null) {
properties = project.ProjectSpecificProperties.Get("customTool", new Properties());
} else {
properties = new Properties();
}
}
public bool RunCustomToolOnBuild {

19
src/Main/Base/Test/Project/BeforeBuildCustomToolProjectItemsTests.cs

@ -23,10 +23,16 @@ namespace ICSharpCode.SharpDevelop.Tests.Project @@ -23,10 +23,16 @@ namespace ICSharpCode.SharpDevelop.Tests.Project
IProject CreateProject(string fileName = @"d:\MyProject\MyProject.csproj")
{
projectHelper = new ProjectHelper(fileName);
CreateProjectWithNoProjectSpecifiedProperties(fileName);
projectHelper.AddProjectSpecificProperties();
return projectHelper.Project;
}
void CreateProjectWithNoProjectSpecifiedProperties(string fileName)
{
projectHelper = new ProjectHelper(fileName);
}
void CreateSolution(params IProject[] projects)
{
IProjectChangeWatcher watcher = MockRepository.GenerateStub<IProjectChangeWatcher>();
@ -263,5 +269,16 @@ namespace ICSharpCode.SharpDevelop.Tests.Project @@ -263,5 +269,16 @@ namespace ICSharpCode.SharpDevelop.Tests.Project
};
CollectionAssert.AreEqual(expectedProjectItems, projectItems);
}
[Test]
public void GetProjectItems_ProjectSpecificPropertiesIsNull_NoProjectItemsReturnedAndNoNullReferenceExceptionThrown()
{
CreateProjectWithNoProjectSpecifiedProperties(@"d:\MyProject\FirstProject.csproj");
CreateBeforeBuildCustomToolProjectItems();
List<FileProjectItem> projectItems = GetProjectItems();
Assert.AreEqual(0, projectItems.Count);
}
}
}

6
src/Main/Base/Test/Utils/ProjectHelper.cs

@ -25,10 +25,14 @@ namespace ICSharpCode.SharpDevelop.Tests.Utils @@ -25,10 +25,14 @@ namespace ICSharpCode.SharpDevelop.Tests.Utils
.Return(null)
.WhenCalled(mi => mi.ReturnValue = new ReadOnlyCollection<ProjectItem>(ProjectItems));
Project.Stub(p => p.ProjectSpecificProperties).Return(ProjectSpecificProperties);
Project.Stub(p => p.SyncRoot).Return(new Object());
}
public void AddProjectSpecificProperties()
{
Project.Stub(p => p.ProjectSpecificProperties).Return(ProjectSpecificProperties);
}
public void AddProjectItem(ProjectItem projectItem)
{
ProjectItems.Add(projectItem);

Loading…
Cancel
Save