Browse Source

Fixed performance bugs in issue search:

- Avoid excessive file name normalization by changing IProject.FileName from string to class FileName.
- Dispose CSharpSemanticHighlighter to fix memory leak and avoid excessive number of ParseInformationUpdated listeners.
newNRvisualizers
Daniel Grunwald 13 years ago
parent
commit
c1787fbd2d
  1. 2
      src/AddIns/Analysis/UnitTesting/Test/NUnit/NUnitConsoleCommandLineTests.cs
  2. 2
      src/AddIns/Analysis/UnitTesting/Test/NUnit/NUnitConsoleExeSelectedTestFixture.cs
  3. 6
      src/AddIns/Analysis/UnitTesting/Test/Service/TestFrameworkDescriptorTests.cs
  4. 3
      src/AddIns/Analysis/UnitTesting/Test/Utils/MockCSharpProject.cs
  5. 2
      src/AddIns/BackendBindings/CSharpBinding/Project/Src/CSharpSemanticHighlighter.cs
  6. 3
      src/AddIns/BackendBindings/CSharpBinding/Project/Src/Parser/CSharpSymbolSearch.cs
  7. 4
      src/AddIns/BackendBindings/CSharpBinding/Project/Src/Parser/Parser.cs
  8. 8
      src/AddIns/BackendBindings/CSharpBinding/Project/Src/Refactoring/SearchForIssuesCommand.cs
  9. 3
      src/AddIns/BackendBindings/XamlBinding/XamlBinding/XamlSymbolSearch.cs
  10. 10
      src/AddIns/DisplayBindings/AvalonEdit.AddIn/Src/CodeEditor.cs
  11. 8
      src/AddIns/DisplayBindings/AvalonEdit.AddIn/Src/CustomizableHighlightingColorizer.cs
  12. 3
      src/AddIns/Misc/SearchAndReplace/Project/Engine/SearchManager.cs
  13. 12
      src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Highlighting/DocumentHighlighter.cs
  14. 2
      src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Highlighting/HighlightingColorizer.cs
  15. 9
      src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Highlighting/IHighlighter.cs
  16. 2
      src/Main/Base/Project/Parser/ProjectContentContainer.cs
  17. 6
      src/Main/Base/Project/Src/Gui/Pads/ProjectBrowser/Commands/SolutionNodeCommands.cs
  18. 2
      src/Main/Base/Project/Src/Gui/Pads/ProjectBrowser/TreeNodes/ProjectNode.cs
  19. 3
      src/Main/Base/Project/Src/Internal/Templates/Project/ProjectCreateInformation.cs
  20. 2
      src/Main/Base/Project/Src/Internal/Templates/Project/ProjectDescriptor.cs
  21. 6
      src/Main/Base/Project/Src/Project/AbstractProject.cs
  22. 2
      src/Main/Base/Project/Src/Project/Converter/LanguageConverter.cs
  23. 2
      src/Main/Base/Project/Src/Project/IProject.cs
  24. 5
      src/Main/Base/Project/Src/Project/Items/ProjectReferenceProjectItem.cs
  25. 2
      src/Main/Base/Project/Src/Project/MSBuildFileProject.cs
  26. 3
      src/Main/Base/Project/Src/Project/MissingProject.cs
  27. 5
      src/Main/Base/Project/Src/Project/ProjectLoadInformation.cs
  28. 2
      src/Main/Base/Project/Src/Project/Solution/Solution.cs
  29. 4
      src/Main/Base/Project/Src/Project/UnknownProject.cs
  30. 2
      src/Main/Base/Project/Src/Services/ProjectBinding/ProjectBindingService.cs
  31. 8
      src/Main/Base/Project/Src/Services/ProjectService/ProjectService.cs
  32. 6
      src/Main/Base/Project/Src/Services/RefactoringService/FindReferencesAndRenameHelper.cs
  33. 6
      src/Main/Base/Test/ServiceReferences/DirectoryNodeFactoryTests.cs
  34. 7
      src/Main/Base/Test/ServiceReferences/ProjectWithServiceReferencesTests.cs
  35. 3
      src/Main/Base/Test/ServiceReferences/ServiceReferencesFolderNodeTests.cs
  36. 9
      src/Main/Base/Test/ServiceReferences/ServiceReferencesProjectItemTests.cs
  37. 2
      src/Main/Base/Test/Utils/ProjectHelper.cs
  38. 3
      src/Main/Base/Test/WebReferences/DirectoryNodeFactoryTests.cs
  39. 2
      src/Main/Base/Test/WebReferences/WebReferenceTestHelper.cs
  40. 3
      src/Main/Base/Test/WebReferences/WebReferenceTests.cs
  41. 5
      src/Main/Base/Test/WebReferences/WebReferencesProjectItemTests.cs
  42. 3
      src/Main/SharpDevelop/Parser/ParserService.cs

2
src/AddIns/Analysis/UnitTesting/Test/NUnit/NUnitConsoleCommandLineTests.cs

@ -23,7 +23,7 @@ namespace UnitTesting.Tests.NUnit
public void SetUp() public void SetUp()
{ {
project = new MockCSharpProject(); project = new MockCSharpProject();
project.FileName = @"C:\Projects\MyTests\MyTests.csproj"; project.FileName = FileName.Create(@"C:\Projects\MyTests\MyTests.csproj");
project.AssemblyName = "MyTests"; project.AssemblyName = "MyTests";
project.OutputType = OutputType.Library; project.OutputType = OutputType.Library;
project.SetProperty("OutputPath", null); project.SetProperty("OutputPath", null);

2
src/AddIns/Analysis/UnitTesting/Test/NUnit/NUnitConsoleExeSelectedTestFixture.cs

@ -125,7 +125,7 @@ namespace UnitTesting.Tests.NUnit
[Test] [Test]
public void NotMSBuildBasedProject() public void NotMSBuildBasedProject()
{ {
MissingProject project = new MissingProject(@"C:\Projects\Test.proj", "Test"); MissingProject project = new MissingProject(FileName.Create(@"C:\Projects\Test.proj"), "Test");
ITestProject testProject = new NUnitTestProject(project); ITestProject testProject = new NUnitTestProject(project);
NUnitConsoleApplication app = new NUnitConsoleApplication(new[] { testProject }); NUnitConsoleApplication app = new NUnitConsoleApplication(new[] { testProject });

6
src/AddIns/Analysis/UnitTesting/Test/Service/TestFrameworkDescriptorTests.cs

@ -35,7 +35,7 @@ namespace UnitTesting.Tests.Service
MockCSharpProject CreateCSharpProjectNotSupportedByTestFramework() MockCSharpProject CreateCSharpProjectNotSupportedByTestFramework()
{ {
var project = new MockCSharpProject(); var project = new MockCSharpProject();
project.FileName = @"d:\projects\MyProject\MyProject.csproj"; project.FileName = FileName.Create(@"d:\projects\MyProject\MyProject.csproj");
fakeTestFramework = MockRepository.GenerateStrictMock<ITestFramework>(); fakeTestFramework = MockRepository.GenerateStrictMock<ITestFramework>();
fakeTestFramework.Stub(f => f.IsTestProject(project)).Return(false); fakeTestFramework.Stub(f => f.IsTestProject(project)).Return(false);
return project; return project;
@ -52,7 +52,7 @@ namespace UnitTesting.Tests.Service
MockCSharpProject CreateVisualBasicProjectSupportedByTestFramework() MockCSharpProject CreateVisualBasicProjectSupportedByTestFramework()
{ {
MockCSharpProject project = CreateCSharpProjectSupportedByTestFramework(); MockCSharpProject project = CreateCSharpProjectSupportedByTestFramework();
project.FileName = @"d:\projects\MyProject\MyProject.vbproj"; project.FileName = FileName.Create(@"d:\projects\MyProject\MyProject.vbproj");
return project; return project;
} }
@ -167,7 +167,7 @@ namespace UnitTesting.Tests.Service
{ {
CreateTestFrameworkDescriptorToSupportProjectFileExtensions(".csproj"); CreateTestFrameworkDescriptorToSupportProjectFileExtensions(".csproj");
MockCSharpProject project = CreateCSharpProjectSupportedByTestFramework(); MockCSharpProject project = CreateCSharpProjectSupportedByTestFramework();
project.FileName = @"d:\projects\MyProject\MyProject.CSPROJ"; project.FileName = FileName.Create(@"d:\projects\MyProject\MyProject.CSPROJ");
bool supported = descriptor.IsSupportedProject(project); bool supported = descriptor.IsSupportedProject(project);

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

@ -2,6 +2,7 @@
// This code is distributed under the GNU LGPL (for details please see \doc\license.txt) // This code is distributed under the GNU LGPL (for details please see \doc\license.txt)
using System; using System;
using ICSharpCode.Core;
using ICSharpCode.NRefactory.TypeSystem; using ICSharpCode.NRefactory.TypeSystem;
using ICSharpCode.NRefactory.TypeSystem.Implementation; using ICSharpCode.NRefactory.TypeSystem.Implementation;
using ICSharpCode.NRefactory.CSharp; using ICSharpCode.NRefactory.CSharp;
@ -26,7 +27,7 @@ namespace UnitTesting.Tests.Utils
ProjectName = name, ProjectName = name,
Platform = "x86", Platform = "x86",
TargetFramework = TargetFramework.Net40Client, TargetFramework = TargetFramework.Net40Client,
OutputProjectFileName = "c:\\projects\\" + name + "\\" + name + ".csproj" OutputProjectFileName = FileName.Create("c:\\projects\\" + name + "\\" + name + ".csproj")
}) })
{ {
OutputType = OutputType.Library; OutputType = OutputType.Library;

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

@ -26,7 +26,7 @@ namespace CSharpBinding
/// <summary> /// <summary>
/// Semantic highlighting for C#. /// Semantic highlighting for C#.
/// </summary> /// </summary>
public class CSharpSemanticHighlighter : DepthFirstAstVisitor, IHighlighter, IDisposable public class CSharpSemanticHighlighter : DepthFirstAstVisitor, IHighlighter
{ {
readonly IDocument document; readonly IDocument document;
readonly HighlightingColor defaultTextColor; readonly HighlightingColor defaultTextColor;

3
src/AddIns/BackendBindings/CSharpBinding/Project/Src/Parser/CSharpSymbolSearch.cs

@ -117,6 +117,9 @@ namespace CSharpBinding
var defaultTextColor = highlighter != null ? highlighter.DefaultTextColor : null; var defaultTextColor = highlighter != null ? highlighter.DefaultTextColor : null;
results.Add(new Reference(region, result, offset, length, builder, defaultTextColor)); results.Add(new Reference(region, result, offset, length, builder, defaultTextColor));
}, cancellationToken); }, cancellationToken);
if (highlighter != null) {
highlighter.Dispose();
}
if (results.Count > 0) if (results.Count > 0)
callback(new SearchedFile(fileName, results)); callback(new SearchedFile(fileName, results));
} }

4
src/AddIns/BackendBindings/CSharpBinding/Project/Src/Parser/Parser.cs

@ -153,6 +153,10 @@ namespace CSharpBinding.Parser
var defaultTextColor = highlighter != null ? highlighter.DefaultTextColor : null; var defaultTextColor = highlighter != null ? highlighter.DefaultTextColor : null;
callback(new Reference(region, result, offset, length, builder, defaultTextColor)); callback(new Reference(region, result, offset, length, builder, defaultTextColor));
}, cancellationToken); }, cancellationToken);
if (highlighter != null) {
highlighter.Dispose();
}
} }
static readonly Lazy<IAssemblyReference[]> defaultReferences = new Lazy<IAssemblyReference[]>( static readonly Lazy<IAssemblyReference[]> defaultReferences = new Lazy<IAssemblyReference[]>(

8
src/AddIns/BackendBindings/CSharpBinding/Project/Src/Refactoring/SearchForIssuesCommand.cs

@ -168,6 +168,9 @@ namespace CSharpBinding.Refactoring
results.Add(SearchResultMatch.Create(document, issue.Start, issue.End, highlighter)); results.Add(SearchResultMatch.Create(document, issue.Start, issue.End, highlighter));
} }
} }
if (highlighter != null) {
highlighter.Dispose();
}
if (results.Count > 0) if (results.Count > 0)
return new SearchedFile(fileName, results); return new SearchedFile(fileName, results);
else else
@ -243,8 +246,9 @@ namespace CSharpBinding.Refactoring
} }
} }
if (allIssues.Count > 0) { if (allIssues.Count > 0) {
var highlighter = SD.EditorControlService.CreateHighlighter(document); using (var highlighter = SD.EditorControlService.CreateHighlighter(document)) {
return allIssues.Select(issue => SearchResultMatch.Create(document, issue.Start, issue.End, highlighter)); return allIssues.Select(issue => SearchResultMatch.Create(document, issue.Start, issue.End, highlighter)).ToList();
}
} else { } else {
return Enumerable.Empty<SearchResultMatch>(); return Enumerable.Empty<SearchResultMatch>();
} }

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

@ -104,6 +104,9 @@ namespace ICSharpCode.XamlBinding
} }
offset = textSource.IndexOf(entity.Name, offset + length, textSource.TextLength - offset - length, StringComparison.OrdinalIgnoreCase); offset = textSource.IndexOf(entity.Name, offset + length, textSource.TextLength - offset - length, StringComparison.OrdinalIgnoreCase);
} while (offset > 0); } while (offset > 0);
if (highlighter != null) {
highlighter.Dispose();
}
callback(new SearchedFile(fileName, results)); callback(new SearchedFile(fileName, results));
} }
} }

10
src/AddIns/DisplayBindings/AvalonEdit.AddIn/Src/CodeEditor.cs

@ -134,6 +134,8 @@ namespace ICSharpCode.AvalonEdit.AddIn
void UpdateSyntaxHighlighting(FileName fileName) void UpdateSyntaxHighlighting(FileName fileName)
{ {
var oldHighlighter = primaryTextEditor.GetService<IHighlighter>();
var highlighting = HighlightingManager.Instance.GetDefinitionByExtension(Path.GetExtension(fileName)); var highlighting = HighlightingManager.Instance.GetDefinitionByExtension(Path.GetExtension(fileName));
var highlighter = SD.EditorControlService.CreateHighlighter(document); var highlighter = SD.EditorControlService.CreateHighlighter(document);
@ -148,6 +150,11 @@ namespace ICSharpCode.AvalonEdit.AddIn
secondaryTextEditor.TextArea.TextView.LineTransformers.Insert(0, new HighlightingColorizer(highlighter)); secondaryTextEditor.TextArea.TextView.LineTransformers.Insert(0, new HighlightingColorizer(highlighter));
secondaryTextEditor.UpdateCustomizedHighlighting(); secondaryTextEditor.UpdateCustomizedHighlighting();
} }
// Dispose the old highlighter; necessary to avoid memory leaks as
// semantic highlighters might attach to global parser events.
if (oldHighlighter != null) {
oldHighlighter.Dispose();
}
} }
public void Redraw(ISegment segment, DispatcherPriority priority) public void Redraw(ISegment segment, DispatcherPriority priority)
@ -263,6 +270,9 @@ namespace ICSharpCode.AvalonEdit.AddIn
foreach (var d in textEditor.TextArea.LeftMargins.OfType<IDisposable>()) foreach (var d in textEditor.TextArea.LeftMargins.OfType<IDisposable>())
d.Dispose(); d.Dispose();
textEditor.TextArea.GetRequiredService<EnhancedScrollBar>().Dispose(); textEditor.TextArea.GetRequiredService<EnhancedScrollBar>().Dispose();
var highlighter = textEditor.TextArea.GetService<IHighlighter>();
if (highlighter != null)
highlighter.Dispose();
textEditor.Dispose(); textEditor.Dispose();
} }

8
src/AddIns/DisplayBindings/AvalonEdit.AddIn/Src/CustomizableHighlightingColorizer.cs

@ -126,6 +126,7 @@ namespace ICSharpCode.AvalonEdit.AddIn
readonly IHighlightingDefinition highlightingDefinition; readonly IHighlightingDefinition highlightingDefinition;
readonly IEnumerable<CustomizedHighlightingColor> customizations; readonly IEnumerable<CustomizedHighlightingColor> customizations;
[ObsoleteAttribute("Use a normal HighlightingColorizer with a CustomizingHighlighter instead")]
public CustomizableHighlightingColorizer(IHighlightingDefinition highlightingDefinition, IEnumerable<CustomizedHighlightingColor> customizations) public CustomizableHighlightingColorizer(IHighlightingDefinition highlightingDefinition, IEnumerable<CustomizedHighlightingColor> customizations)
: base(highlightingDefinition) : base(highlightingDefinition)
{ {
@ -152,7 +153,7 @@ namespace ICSharpCode.AvalonEdit.AddIn
return new CustomizingHighlighter(textView, customizations, highlightingDefinition, base.CreateHighlighter(textView, document)); return new CustomizingHighlighter(textView, customizations, highlightingDefinition, base.CreateHighlighter(textView, document));
} }
internal sealed class CustomizingHighlighter : IHighlighter internal sealed class CustomizingHighlighter : IHighlighter, IDisposable
{ {
readonly TextView textView; readonly TextView textView;
readonly IEnumerable<CustomizedHighlightingColor> customizations; readonly IEnumerable<CustomizedHighlightingColor> customizations;
@ -296,6 +297,11 @@ namespace ICSharpCode.AvalonEdit.AddIn
{ {
baseHighlighter.EndHighlighting(); baseHighlighter.EndHighlighting();
} }
public void Dispose()
{
baseHighlighter.Dispose();
}
} }
internal static HighlightingColor CustomizeColor(HighlightingColor color, IEnumerable<CustomizedHighlightingColor> customizations) internal static HighlightingColor CustomizeColor(HighlightingColor color, IEnumerable<CustomizedHighlightingColor> customizations)

3
src/AddIns/Misc/SearchAndReplace/Project/Engine/SearchManager.cs

@ -218,6 +218,9 @@ namespace SearchAndReplace
var defaultTextColor = highlighter != null ? highlighter.DefaultTextColor : null; var defaultTextColor = highlighter != null ? highlighter.DefaultTextColor : null;
results.Add(new AvalonEditSearchResultMatch(fileName, start, end, result.Offset, result.Length, builder, defaultTextColor, result)); results.Add(new AvalonEditSearchResultMatch(fileName, start, end, result.Offset, result.Length, builder, defaultTextColor, result));
} }
if (highlighter != null) {
highlighter.Dispose();
}
if (results.Count > 0) if (results.Count > 0)
return new SearchedFile(fileName, results); return new SearchedFile(fileName, results);
else else

12
src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Highlighting/DocumentHighlighter.cs

@ -29,6 +29,7 @@ namespace ICSharpCode.AvalonEdit.Highlighting
readonly CompressingTreeList<bool> isValid = new CompressingTreeList<bool>((a, b) => a == b); readonly CompressingTreeList<bool> isValid = new CompressingTreeList<bool>((a, b) => a == b);
readonly IDocument document; readonly IDocument document;
readonly IHighlightingDefinition definition; readonly IHighlightingDefinition definition;
readonly WeakLineTracker weakLineTracker;
bool isHighlighting; bool isHighlighting;
/// <summary> /// <summary>
@ -49,7 +50,7 @@ namespace ICSharpCode.AvalonEdit.Highlighting
throw new ArgumentNullException("definition"); throw new ArgumentNullException("definition");
this.document = document; this.document = document;
this.definition = definition; this.definition = definition;
WeakLineTracker.Register(document, this); weakLineTracker = WeakLineTracker.Register(document, this);
InvalidateHighlighting(); InvalidateHighlighting();
} }
@ -67,6 +68,15 @@ namespace ICSharpCode.AvalonEdit.Highlighting
InvalidateHighlighting(); InvalidateHighlighting();
} }
/// <summary>
/// Disposes the document highlighter.
/// </summary>
public void Dispose()
{
if (weakLineTracker != null)
weakLineTracker.Deregister();
}
void ILineTracker.BeforeRemoveLine(DocumentLine line) void ILineTracker.BeforeRemoveLine(DocumentLine line)
{ {
CheckIsHighlighting(); CheckIsHighlighting();

2
src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Highlighting/HighlightingColorizer.cs

@ -24,7 +24,7 @@ namespace ICSharpCode.AvalonEdit.Highlighting
/// <summary> /// <summary>
/// Creates a new HighlightingColorizer instance. /// Creates a new HighlightingColorizer instance.
/// </summary> /// </summary>
/// <param name="ruleSet">The root highlighting rule set.</param> /// <param name="definition">The highlighting definition.</param>
public HighlightingColorizer(IHighlightingDefinition definition) public HighlightingColorizer(IHighlightingDefinition definition)
{ {
if (definition == null) if (definition == null)

9
src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Highlighting/IHighlighter.cs

@ -11,7 +11,7 @@ namespace ICSharpCode.AvalonEdit.Highlighting
/// Represents a highlighted document. /// Represents a highlighted document.
/// </summary> /// </summary>
/// <remarks>This interface is used by the <see cref="HighlightingColorizer"/> to register the highlighter as a TextView service.</remarks> /// <remarks>This interface is used by the <see cref="HighlightingColorizer"/> to register the highlighter as a TextView service.</remarks>
public interface IHighlighter public interface IHighlighter : IDisposable
{ {
/// <summary> /// <summary>
/// Gets the underlying text document. /// Gets the underlying text document.
@ -183,6 +183,13 @@ namespace ICSharpCode.AvalonEdit.Highlighting
} }
return null; return null;
} }
public void Dispose()
{
foreach (var h in nestedHighlighters) {
h.Dispose();
}
}
} }
/// <summary> /// <summary>

2
src/Main/Base/Project/Parser/ProjectContentContainer.cs

@ -55,7 +55,7 @@ namespace ICSharpCode.SharpDevelop.Parser
this.project = project; this.project = project;
this.projectContent = initialProjectContent.SetAssemblyName(project.AssemblyName).SetLocation(project.OutputAssemblyFullPath); this.projectContent = initialProjectContent.SetAssemblyName(project.AssemblyName).SetLocation(project.OutputAssemblyFullPath);
this.cacheFileName = GetCacheFileName(FileName.Create(project.FileName)); this.cacheFileName = GetCacheFileName(project.FileName);
ProjectService.ProjectItemAdded += OnProjectItemAdded; ProjectService.ProjectItemAdded += OnProjectItemAdded;
ProjectService.ProjectItemRemoved += OnProjectItemRemoved; ProjectService.ProjectItemRemoved += OnProjectItemRemoved;

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

@ -28,7 +28,7 @@ namespace ICSharpCode.SharpDevelop.Project.Commands
MessageService.ShowError("No project has been created, there is nothing to add."); MessageService.ShowError("No project has been created, there is nothing to add.");
return; return;
} }
AddExitingProjectToSolution.AddProject(solutionFolderNode, npdlg.NewProjectLocation); AddExitingProjectToSolution.AddProject(solutionFolderNode, FileName.Create(npdlg.NewProjectLocation));
ProjectService.SaveSolution(); ProjectService.SaveSolution();
} }
} }
@ -64,7 +64,7 @@ namespace ICSharpCode.SharpDevelop.Project.Commands
public class AddExitingProjectToSolution : AbstractMenuCommand public class AddExitingProjectToSolution : AbstractMenuCommand
{ {
public static void AddProject(ISolutionFolderNode solutionFolderNode, string fileName) public static void AddProject(ISolutionFolderNode solutionFolderNode, FileName fileName)
{ {
if (solutionFolderNode == null) if (solutionFolderNode == null)
throw new ArgumentNullException("solutionFolderNode"); throw new ArgumentNullException("solutionFolderNode");
@ -97,7 +97,7 @@ namespace ICSharpCode.SharpDevelop.Project.Commands
fdiag.InitialDirectory = AddNewProjectToSolution.GetInitialDirectorySuggestion(solutionFolderNode); fdiag.InitialDirectory = AddNewProjectToSolution.GetInitialDirectorySuggestion(solutionFolderNode);
if (fdiag.ShowDialog(ICSharpCode.SharpDevelop.Gui.WorkbenchSingleton.MainWin32Window) == DialogResult.OK) { if (fdiag.ShowDialog(ICSharpCode.SharpDevelop.Gui.WorkbenchSingleton.MainWin32Window) == DialogResult.OK) {
foreach (string fileName in fdiag.FileNames) { foreach (string fileName in fdiag.FileNames) {
AddProject(solutionFolderNode, fileName); AddProject(solutionFolderNode, FileName.Create(fileName));
} }
ProjectService.SaveSolution(); ProjectService.SaveSolution();
} }

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

@ -220,7 +220,7 @@ namespace ICSharpCode.SharpDevelop.Project
} }
} }
} }
project.FileName = newFileName; project.FileName = FileName.Create(newFileName);
project.Name = newName; project.Name = newName;
ProjectService.SaveSolution(); ProjectService.SaveSolution();
} }

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

@ -6,6 +6,7 @@ using System.Collections.Generic;
using System.Collections.ObjectModel; using System.Collections.ObjectModel;
using System.IO; using System.IO;
using ICSharpCode.Core;
using ICSharpCode.SharpDevelop.Project; using ICSharpCode.SharpDevelop.Project;
namespace ICSharpCode.SharpDevelop.Internal.Templates namespace ICSharpCode.SharpDevelop.Internal.Templates
@ -35,7 +36,7 @@ namespace ICSharpCode.SharpDevelop.Internal.Templates
get { return createdProjects.AsReadOnly(); } get { return createdProjects.AsReadOnly(); }
} }
public string OutputProjectFileName { get; set; } public FileName OutputProjectFileName { get; set; }
public string Platform { get; set; } public string Platform { get; set; }
public string ProjectName { get; set; } public string ProjectName { get; set; }
public string SolutionName { get; set; } public string SolutionName { get; set; }

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

@ -323,7 +323,7 @@ namespace ICSharpCode.SharpDevelop.Internal.Templates
} }
} }
projectCreateInformation.OutputProjectFileName = projectLocation; projectCreateInformation.OutputProjectFileName = FileName.Create(projectLocation);
projectCreateInformation.RootNamespace = standardNamespace.ToString(); projectCreateInformation.RootNamespace = standardNamespace.ToString();
projectCreateInformation.ProjectName = newProjectName; projectCreateInformation.ProjectName = newProjectName;
if (!string.IsNullOrEmpty(defaultPlatform)) if (!string.IsNullOrEmpty(defaultPlatform))

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

@ -86,7 +86,7 @@ namespace ICSharpCode.SharpDevelop.Project
#endregion #endregion
#region Filename / Directory #region Filename / Directory
volatile string fileName; volatile FileName fileName;
string cachedDirectoryName; string cachedDirectoryName;
protected IProjectChangeWatcher watcher; protected IProjectChangeWatcher watcher;
@ -97,9 +97,9 @@ namespace ICSharpCode.SharpDevelop.Project
/// Only the getter is thread-safe. /// Only the getter is thread-safe.
/// </summary> /// </summary>
[ReadOnly(true)] [ReadOnly(true)]
public string FileName { public FileName FileName {
get { get {
return fileName ?? ""; return fileName;
} }
set { set {
if (value == null) if (value == null)

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

@ -39,7 +39,7 @@ namespace ICSharpCode.SharpDevelop.Project.Converter
if (descriptor == null || descriptor.Binding == null) if (descriptor == null || descriptor.Binding == null)
throw new InvalidOperationException("Cannot get Language Binding for " + TargetLanguageName); throw new InvalidOperationException("Cannot get Language Binding for " + TargetLanguageName);
info.OutputProjectFileName = FileUtility.NormalizePath(Path.Combine(targetProjectDirectory, info.ProjectName + descriptor.ProjectFileExtension)); info.OutputProjectFileName = FileName.Create(Path.Combine(targetProjectDirectory, info.ProjectName + descriptor.ProjectFileExtension));
return descriptor.Binding.CreateProject(info); return descriptor.Binding.CreateProject(info);
} }

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

@ -69,7 +69,7 @@ namespace ICSharpCode.SharpDevelop.Project
/// ///
/// Only the getter is thread-safe. /// Only the getter is thread-safe.
/// </summary> /// </summary>
string FileName { FileName FileName {
get; get;
set; set;
} }

5
src/Main/Base/Project/Src/Project/Items/ProjectReferenceProjectItem.cs

@ -16,8 +16,9 @@ namespace ICSharpCode.SharpDevelop.Project
[Browsable(false)] [Browsable(false)]
public IProject ReferencedProject { public IProject ReferencedProject {
get { get {
// must be thread-safe because it's used by LoadSolutionProjectsThread // must be thread-safe because it's used by LoadSolutionProjectsThread,
return ProjectService.GetProject(this.FileName); // and by IAssemblyReference.Resolve()
return ProjectService.GetProject(Core.FileName.Create(this.FileName));
} }
} }

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

@ -13,7 +13,7 @@ namespace ICSharpCode.SharpDevelop.Project
/// </summary> /// </summary>
public class MSBuildFileProject : AbstractProject public class MSBuildFileProject : AbstractProject
{ {
public MSBuildFileProject(string fileName, string title) public MSBuildFileProject(FileName fileName, string title)
{ {
Name = title; Name = title;
FileName = fileName; FileName = fileName;

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

@ -2,12 +2,13 @@
// This code is distributed under the GNU LGPL (for details please see \doc\license.txt) // This code is distributed under the GNU LGPL (for details please see \doc\license.txt)
using System; using System;
using ICSharpCode.Core;
namespace ICSharpCode.SharpDevelop.Project namespace ICSharpCode.SharpDevelop.Project
{ {
public class MissingProject : AbstractProject public class MissingProject : AbstractProject
{ {
public MissingProject(string fileName, string title) public MissingProject(FileName fileName, string title)
{ {
Name = title; Name = title;
FileName = fileName; FileName = fileName;

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

@ -3,6 +3,7 @@
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using ICSharpCode.Core;
namespace ICSharpCode.SharpDevelop.Project namespace ICSharpCode.SharpDevelop.Project
{ {
@ -12,7 +13,7 @@ namespace ICSharpCode.SharpDevelop.Project
public class ProjectLoadInformation public class ProjectLoadInformation
{ {
public Solution ParentSolution { get; private set; } public Solution ParentSolution { get; private set; }
public string FileName { get; private set; } public FileName FileName { get; private set; }
public string Configuration { get; internal set; } public string Configuration { get; internal set; }
public string Platform { get; internal set; } public string Platform { get; internal set; }
public string ProjectName { get; private set; } public string ProjectName { get; private set; }
@ -44,7 +45,7 @@ namespace ICSharpCode.SharpDevelop.Project
} }
} }
public ProjectLoadInformation(Solution parentSolution, string fileName, string projectName) public ProjectLoadInformation(Solution parentSolution, FileName fileName, string projectName)
{ {
if (parentSolution == null) if (parentSolution == null)
throw new ArgumentNullException("parentSolution"); throw new ArgumentNullException("parentSolution");

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

@ -544,7 +544,7 @@ namespace ICSharpCode.SharpDevelop.Project
SolutionFolder newFolder = SolutionFolder.ReadFolder(sr, title, location, guid); SolutionFolder newFolder = SolutionFolder.ReadFolder(sr, title, location, guid);
newSolution.AddFolder(newFolder); newSolution.AddFolder(newFolder);
} else { } else {
ProjectLoadInformation loadInfo = new ProjectLoadInformation(newSolution, location, title); ProjectLoadInformation loadInfo = new ProjectLoadInformation(newSolution, Core.FileName.Create(location), title);
loadInfo.TypeGuid = projectGuid; loadInfo.TypeGuid = projectGuid;
loadInfo.Guid = guid; loadInfo.Guid = guid;
projectsToLoad.Add(loadInfo); projectsToLoad.Add(loadInfo);

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

@ -27,7 +27,7 @@ namespace ICSharpCode.SharpDevelop.Project
MessageService.ShowError("Error loading " + this.FileName + ":\n" + warningText); MessageService.ShowError("Error loading " + this.FileName + ":\n" + warningText);
} }
public UnknownProject(string fileName, string title, string warningText, bool displayWarningToUser) public UnknownProject(FileName fileName, string title, string warningText, bool displayWarningToUser)
: this(fileName, title) : this(fileName, title)
{ {
this.warningText = warningText; this.warningText = warningText;
@ -36,7 +36,7 @@ namespace ICSharpCode.SharpDevelop.Project
} }
} }
public UnknownProject(string fileName, string title) public UnknownProject(FileName fileName, string title)
{ {
Name = title; Name = title;
FileName = fileName; FileName = fileName;

2
src/Main/Base/Project/Src/Services/ProjectBinding/ProjectBindingService.cs

@ -89,7 +89,7 @@ namespace ICSharpCode.SharpDevelop
if (loadInformation == null) if (loadInformation == null)
throw new ArgumentNullException("loadInformation"); throw new ArgumentNullException("loadInformation");
string location = FileUtility.NormalizePath(loadInformation.FileName); var location = loadInformation.FileName;
string title = loadInformation.ProjectName; string title = loadInformation.ProjectName;
IProgressMonitor progressMonitor = loadInformation.ProgressMonitor; IProgressMonitor progressMonitor = loadInformation.ProgressMonitor;

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

@ -52,13 +52,13 @@ namespace ICSharpCode.SharpDevelop.Project
/// <summary> /// <summary>
/// Gets an open project by the name of the project file. /// Gets an open project by the name of the project file.
/// </summary> /// </summary>
public static IProject GetProject(string projectFilename) public static IProject GetProject(FileName projectFilename)
{ {
Solution sln = openSolution; Solution sln = openSolution;
if (sln == null) if (sln == null)
return null; return null;
foreach (IProject project in sln.Projects) { foreach (IProject project in sln.Projects) {
if (FileUtility.IsEqualFileName(project.FileName, projectFilename)) { if (project.FileName == projectFilename) {
return project; return project;
} }
} }
@ -376,7 +376,7 @@ namespace ICSharpCode.SharpDevelop.Project
"${res:Global.IgnoreButtonText}"); "${res:Global.IgnoreButtonText}");
if (res == 0) { if (res == 0) {
// Add project to solution // Add project to solution
Commands.AddExitingProjectToSolution.AddProject((ISolutionFolderNode)ProjectBrowserPad.Instance.SolutionNode, fileName); Commands.AddExitingProjectToSolution.AddProject((ISolutionFolderNode)ProjectBrowserPad.Instance.SolutionNode, FileName.Create(fileName));
SaveSolution(); SaveSolution();
return; return;
} else if (res == 1) { } else if (res == 1) {
@ -402,7 +402,7 @@ namespace ICSharpCode.SharpDevelop.Project
IProjectBinding binding = ProjectBindingService.GetBindingPerProjectFile(fileName); IProjectBinding binding = ProjectBindingService.GetBindingPerProjectFile(fileName);
IProject project; IProject project;
if (binding != null) { if (binding != null) {
project = ProjectBindingService.LoadProject(new ProjectLoadInformation(solution, fileName, solution.Name)); project = ProjectBindingService.LoadProject(new ProjectLoadInformation(solution, FileName.Create(fileName), solution.Name));
if (project is UnknownProject) { if (project is UnknownProject) {
if (((UnknownProject)project).WarningDisplayedToUser == false) { if (((UnknownProject)project).WarningDisplayedToUser == false) {
((UnknownProject)project).ShowWarningMessageBox(); ((UnknownProject)project).ShowWarningMessageBox();

6
src/Main/Base/Project/Src/Services/RefactoringService/FindReferencesAndRenameHelper.cs

@ -347,6 +347,9 @@ namespace ICSharpCode.SharpDevelop.Refactoring
IHighlighter highlighter = null; IHighlighter highlighter = null;
foreach (Reference r in list) { foreach (Reference r in list) {
if (document == null || fileName != r.FileName) { if (document == null || fileName != r.FileName) {
if (highlighter != null) {
highlighter.Dispose();
}
fileName = r.FileName; fileName = r.FileName;
buffer = SD.FileService.GetFileContent(r.FileName); buffer = SD.FileService.GetFileContent(r.FileName);
document = new ReadOnlyDocument(buffer, r.FileName); document = new ReadOnlyDocument(buffer, r.FileName);
@ -361,6 +364,9 @@ namespace ICSharpCode.SharpDevelop.Refactoring
SearchResultMatch res = new SearchResultMatch(fileName, start, end, startOffset, endOffset - startOffset, builder, defaultTextColor); SearchResultMatch res = new SearchResultMatch(fileName, start, end, startOffset, endOffset - startOffset, builder, defaultTextColor);
results.Add(res); results.Add(res);
} }
if (highlighter != null) {
highlighter.Dispose();
}
SearchResultsPad.Instance.ShowSearchResults(title, results); SearchResultsPad.Instance.ShowSearchResults(title, results);
SearchResultsPad.Instance.BringToFront(); SearchResultsPad.Instance.BringToFront();
} }

6
src/Main/Base/Test/ServiceReferences/DirectoryNodeFactoryTests.cs

@ -88,7 +88,7 @@ namespace ICSharpCode.SharpDevelop.Tests.ServiceReferences
public void CreateDirectoryNode_ProjectHasServiceReferencesItemAndDirectoryMatchesServiceReferencesPath_CreatesServiceReferencesFolderNode() public void CreateDirectoryNode_ProjectHasServiceReferencesItemAndDirectoryMatchesServiceReferencesPath_CreatesServiceReferencesFolderNode()
{ {
CreateProject(); CreateProject();
project.FileName = @"d:\projects\MyProject\MyProject.csproj"; project.FileName = FileName.Create(@"d:\projects\MyProject\MyProject.csproj");
ServiceReferencesProjectItem projectItem = AddWCFMetadataProjectItemToProject(); ServiceReferencesProjectItem projectItem = AddWCFMetadataProjectItemToProject();
projectItem.Include = @"Service References\"; projectItem.Include = @"Service References\";
@ -103,7 +103,7 @@ namespace ICSharpCode.SharpDevelop.Tests.ServiceReferences
public void CreateDirectoryNode_FileProjectItemThatEndsWithForwardSlash_DirectoryNodeCreatedWithForwardSlashRemoved() public void CreateDirectoryNode_FileProjectItemThatEndsWithForwardSlash_DirectoryNodeCreatedWithForwardSlashRemoved()
{ {
CreateProject(); CreateProject();
project.FileName = @"d:\projects\MyProject\MyProject.csproj"; project.FileName = FileName.Create(@"d:\projects\MyProject\MyProject.csproj");
FileProjectItem projectItem = CreateFileProjectItem(@"MyFolder/"); FileProjectItem projectItem = CreateFileProjectItem(@"MyFolder/");
DirectoryNode node = DirectoryNodeFactory.CreateDirectoryNode(projectItem, FileNodeStatus.None); DirectoryNode node = DirectoryNodeFactory.CreateDirectoryNode(projectItem, FileNodeStatus.None);
@ -115,7 +115,7 @@ namespace ICSharpCode.SharpDevelop.Tests.ServiceReferences
public void CreateDirectoryNode_FileProjectItemThatEndsWithBackSlash_DirectoryNodeCreatedWithBackSlashRemoved() public void CreateDirectoryNode_FileProjectItemThatEndsWithBackSlash_DirectoryNodeCreatedWithBackSlashRemoved()
{ {
CreateProject(); CreateProject();
project.FileName = @"d:\projects\MyProject\MyProject.csproj"; project.FileName = FileName.Create(@"d:\projects\MyProject\MyProject.csproj");
FileProjectItem projectItem = CreateFileProjectItem(@"MyFolder\"); FileProjectItem projectItem = CreateFileProjectItem(@"MyFolder\");
DirectoryNode node = DirectoryNodeFactory.CreateDirectoryNode(projectItem, FileNodeStatus.None); DirectoryNode node = DirectoryNodeFactory.CreateDirectoryNode(projectItem, FileNodeStatus.None);

7
src/Main/Base/Test/ServiceReferences/ProjectWithServiceReferencesTests.cs

@ -6,6 +6,7 @@ using System.CodeDom.Compiler;
using System.Collections.Generic; using System.Collections.Generic;
using System.IO; using System.IO;
using System.Linq; using System.Linq;
using ICSharpCode.Core;
using ICSharpCode.SharpDevelop.Gui.Dialogs.ReferenceDialog.ServiceReference; using ICSharpCode.SharpDevelop.Gui.Dialogs.ReferenceDialog.ServiceReference;
using ICSharpCode.SharpDevelop.Project; using ICSharpCode.SharpDevelop.Project;
using ICSharpCode.SharpDevelop.Tests.WebReferences; using ICSharpCode.SharpDevelop.Tests.WebReferences;
@ -335,7 +336,7 @@ namespace ICSharpCode.SharpDevelop.Tests.ServiceReferences
public void AddAppConfigFile_ProjectHasNoAppConfig_ProjectItemAddedToProjectForAppConfig() public void AddAppConfigFile_ProjectHasNoAppConfig_ProjectItemAddedToProjectForAppConfig()
{ {
CreateProjectWithMSBuildProject(); CreateProjectWithMSBuildProject();
msbuildProject.FileName = @"d:\projects\MyProject\myproject.csproj"; msbuildProject.FileName = FileName.Create(@"d:\projects\MyProject\myproject.csproj");
project.AddAppConfigFile(); project.AddAppConfigFile();
@ -391,7 +392,7 @@ namespace ICSharpCode.SharpDevelop.Tests.ServiceReferences
public void GetAppConfigFileName_ProjectHasNoAppConfig_DefaultAppConfigFileNameReturned() public void GetAppConfigFileName_ProjectHasNoAppConfig_DefaultAppConfigFileNameReturned()
{ {
CreateProjectWithMSBuildProject(); CreateProjectWithMSBuildProject();
msbuildProject.FileName = @"d:\projects\MyProject\myproject.csproj"; msbuildProject.FileName = FileName.Create(@"d:\projects\MyProject\myproject.csproj");
string fileName = project.GetAppConfigFileName(); string fileName = project.GetAppConfigFileName();
@ -402,7 +403,7 @@ namespace ICSharpCode.SharpDevelop.Tests.ServiceReferences
public void GetAppConfigFileName_ProjectHasAppConfigInSubFolder_AppConfigFileNameReturned() public void GetAppConfigFileName_ProjectHasAppConfigInSubFolder_AppConfigFileNameReturned()
{ {
CreateProjectWithMSBuildProject(); CreateProjectWithMSBuildProject();
msbuildProject.FileName = @"d:\projects\MyProject\myproject.csproj"; msbuildProject.FileName = FileName.Create(@"d:\projects\MyProject\myproject.csproj");
AddFileToMSBuildProject(@"SubFolder\app.config"); AddFileToMSBuildProject(@"SubFolder\app.config");
string fileName = project.GetAppConfigFileName(); string fileName = project.GetAppConfigFileName();

3
src/Main/Base/Test/ServiceReferences/ServiceReferencesFolderNodeTests.cs

@ -3,6 +3,7 @@
using System; using System;
using Gui.Pads.ProjectBrowser.TreeNodes; using Gui.Pads.ProjectBrowser.TreeNodes;
using ICSharpCode.Core;
using ICSharpCode.SharpDevelop.Project; using ICSharpCode.SharpDevelop.Project;
using ICSharpCode.SharpDevelop.Tests.WebReferences; using ICSharpCode.SharpDevelop.Tests.WebReferences;
using NUnit.Framework; using NUnit.Framework;
@ -41,7 +42,7 @@ namespace ICSharpCode.SharpDevelop.Tests.ServiceReferences
public void Directory_ProjectItemHasServiceReferenceDirectory_ReturnsFullPathToServiceReferencesDirectory() public void Directory_ProjectItemHasServiceReferenceDirectory_ReturnsFullPathToServiceReferencesDirectory()
{ {
CreateServiceReferenceProjectItem(); CreateServiceReferenceProjectItem();
project.FileName = @"d:\projects\MyProject\MyProject.csproj"; project.FileName = FileName.Create(@"d:\projects\MyProject\MyProject.csproj");
projectItem.Include = @"Service References\"; projectItem.Include = @"Service References\";
CreateFolderNode(); CreateFolderNode();

9
src/Main/Base/Test/ServiceReferences/ServiceReferencesProjectItemTests.cs

@ -2,6 +2,7 @@
// This code is distributed under the GNU LGPL (for details please see \doc\license.txt) // This code is distributed under the GNU LGPL (for details please see \doc\license.txt)
using System; using System;
using ICSharpCode.Core;
using ICSharpCode.SharpDevelop.Project; using ICSharpCode.SharpDevelop.Project;
using ICSharpCode.SharpDevelop.Tests.WebReferences; using ICSharpCode.SharpDevelop.Tests.WebReferences;
using NUnit.Framework; using NUnit.Framework;
@ -36,7 +37,7 @@ namespace ICSharpCode.SharpDevelop.Tests.ServiceReferences
public void Directory_ProjectItemIncludePathEndsWithForwardSlash_ReturnsFullPathOfServiceReferencesFolder() public void Directory_ProjectItemIncludePathEndsWithForwardSlash_ReturnsFullPathOfServiceReferencesFolder()
{ {
CreateProjectItem(); CreateProjectItem();
project.FileName = @"C:\Projects\MyProject\MyProject.csproj"; project.FileName = FileName.Create(@"C:\Projects\MyProject\MyProject.csproj");
projectItem.Include = @"Service References\"; projectItem.Include = @"Service References\";
string directory = projectItem.Directory; string directory = projectItem.Directory;
@ -48,7 +49,7 @@ namespace ICSharpCode.SharpDevelop.Tests.ServiceReferences
public void IsServiceReferencesFolder_FolderMatchesServiceReferencesFolder_ReturnsTrue() public void IsServiceReferencesFolder_FolderMatchesServiceReferencesFolder_ReturnsTrue()
{ {
CreateProjectItem(); CreateProjectItem();
project.FileName = @"C:\Projects\MyProject\MyProject.csproj"; project.FileName = FileName.Create(@"C:\Projects\MyProject\MyProject.csproj");
projectItem.Include = @"Service References\"; projectItem.Include = @"Service References\";
string folder = @"C:\Projects\MyProject\Service References"; string folder = @"C:\Projects\MyProject\Service References";
@ -61,7 +62,7 @@ namespace ICSharpCode.SharpDevelop.Tests.ServiceReferences
public void IsServiceReferencesFolder_FolderDoesNotMatcheServiceReferencesFolder_ReturnsFalse() public void IsServiceReferencesFolder_FolderDoesNotMatcheServiceReferencesFolder_ReturnsFalse()
{ {
CreateProjectItem(); CreateProjectItem();
project.FileName = @"C:\Projects\MyProject\MyProject.csproj"; project.FileName = FileName.Create(@"C:\Projects\MyProject\MyProject.csproj");
projectItem.Include = @"Service References\"; projectItem.Include = @"Service References\";
string folder = @"d:\projects\MyProject\Test"; string folder = @"d:\projects\MyProject\Test";
@ -74,7 +75,7 @@ namespace ICSharpCode.SharpDevelop.Tests.ServiceReferences
public void IsServiceReferencesFolder_FolderMatchesServiceReferencesFolderButWithDifferentCase_ReturnsTrue() public void IsServiceReferencesFolder_FolderMatchesServiceReferencesFolderButWithDifferentCase_ReturnsTrue()
{ {
CreateProjectItem(); CreateProjectItem();
project.FileName = @"C:\Projects\MyProject\MyProject.csproj"; project.FileName = FileName.Create(@"C:\Projects\MyProject\MyProject.csproj");
projectItem.Include = @"Service References\"; projectItem.Include = @"Service References\";
string folder = @"c:\projects\myproject\service references"; string folder = @"c:\projects\myproject\service references";

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

@ -17,7 +17,7 @@ namespace ICSharpCode.SharpDevelop.Tests.Utils
public ProjectHelper(string fileName) public ProjectHelper(string fileName)
{ {
Project.Stub(p => p.FileName).Return(fileName); Project.Stub(p => p.FileName).Return(FileName.Create(fileName));
Project Project
.Stub(p => p.Items) .Stub(p => p.Items)

3
src/Main/Base/Test/WebReferences/DirectoryNodeFactoryTests.cs

@ -1,6 +1,7 @@
// Copyright (c) AlphaSierraPapa for the SharpDevelop Team (for details please see \doc\copyright.txt) // 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) // This code is distributed under the GNU LGPL (for details please see \doc\license.txt)
using ICSharpCode.Core;
using NUnit.Framework; using NUnit.Framework;
using System; using System;
using System.IO; using System.IO;
@ -24,7 +25,7 @@ namespace ICSharpCode.SharpDevelop.Tests.WebReferences
public void SetUpFixture() public void SetUpFixture()
{ {
MSBuildBasedProject project = WebReferenceTestHelper.CreateTestProject("C#"); MSBuildBasedProject project = WebReferenceTestHelper.CreateTestProject("C#");
project.FileName = Path.Combine(projectDirectory, "foo.csproj"); project.FileName = FileName.Create(Path.Combine(projectDirectory, "foo.csproj"));
project.AppDesignerFolder = "Properties"; project.AppDesignerFolder = "Properties";
WebReferencesProjectItem webReferencesItem = new WebReferencesProjectItem(project); WebReferencesProjectItem webReferencesItem = new WebReferencesProjectItem(project);

2
src/Main/Base/Test/WebReferences/WebReferenceTestHelper.cs

@ -30,7 +30,7 @@ namespace ICSharpCode.SharpDevelop.Tests.WebReferences
: base(new ProjectCreateInformation { : base(new ProjectCreateInformation {
Solution = new Solution(new MockProjectChangeWatcher()), Solution = new Solution(new MockProjectChangeWatcher()),
ProjectName = "TestProject", ProjectName = "TestProject",
OutputProjectFileName = "c:\\temp\\TestProject.csproj" OutputProjectFileName = FileName.Create("c:\\temp\\TestProject.csproj")
}) })
{ {
this.languageName = languageName; this.languageName = languageName;

3
src/Main/Base/Test/WebReferences/WebReferenceTests.cs

@ -1,6 +1,7 @@
// Copyright (c) AlphaSierraPapa for the SharpDevelop Team (for details please see \doc\copyright.txt) // 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) // This code is distributed under the GNU LGPL (for details please see \doc\license.txt)
using ICSharpCode.Core;
using ICSharpCode.SharpDevelop; using ICSharpCode.SharpDevelop;
using ICSharpCode.SharpDevelop.Project; using ICSharpCode.SharpDevelop.Project;
using NUnit.Framework; using NUnit.Framework;
@ -39,7 +40,7 @@ namespace ICSharpCode.SharpDevelop.Tests.WebReferences
public void SetUpFixture() public void SetUpFixture()
{ {
project = WebReferenceTestHelper.CreateTestProject("C#"); project = WebReferenceTestHelper.CreateTestProject("C#");
project.FileName = "C:\\projects\\test\\foo.csproj"; project.FileName = FileName.Create("C:\\projects\\test\\foo.csproj");
protocol = new DiscoveryClientProtocol(); protocol = new DiscoveryClientProtocol();
DiscoveryDocumentReference discoveryRef = new DiscoveryDocumentReference(); DiscoveryDocumentReference discoveryRef = new DiscoveryDocumentReference();

5
src/Main/Base/Test/WebReferences/WebReferencesProjectItemTests.cs

@ -1,6 +1,7 @@
// Copyright (c) AlphaSierraPapa for the SharpDevelop Team (for details please see \doc\copyright.txt) // 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) // This code is distributed under the GNU LGPL (for details please see \doc\license.txt)
using ICSharpCode.Core;
using ICSharpCode.SharpDevelop.Gui; using ICSharpCode.SharpDevelop.Gui;
using ICSharpCode.SharpDevelop.Project; using ICSharpCode.SharpDevelop.Project;
using NUnit.Framework; using NUnit.Framework;
@ -30,7 +31,7 @@ namespace ICSharpCode.SharpDevelop.Tests.WebReferences
public void IsWebReferencesFolder_FolderMatchesWebReferencesProjectItemFolder_ReturnsTrue() public void IsWebReferencesFolder_FolderMatchesWebReferencesProjectItemFolder_ReturnsTrue()
{ {
CreateProject(); CreateProject();
project.FileName = @"C:\projects\test\foo.csproj"; project.FileName = FileName.Create(@"C:\projects\test\foo.csproj");
AddWebReferencesToProject(@"Web References\"); AddWebReferencesToProject(@"Web References\");
bool result = WebReferencesProjectItem.IsWebReferencesFolder(project, @"C:\projects\test\Web References"); bool result = WebReferencesProjectItem.IsWebReferencesFolder(project, @"C:\projects\test\Web References");
@ -42,7 +43,7 @@ namespace ICSharpCode.SharpDevelop.Tests.WebReferences
public void IsWebReferencesFolder_FolderDoesNotMatchWebReferencesProjectItemFolder_ReturnsFalse() public void IsWebReferencesFolder_FolderDoesNotMatchWebReferencesProjectItemFolder_ReturnsFalse()
{ {
CreateProject(); CreateProject();
project.FileName = @"C:\projects\test\foo.csproj"; project.FileName = FileName.Create(@"C:\projects\test\foo.csproj");
AddWebReferencesToProject(@"Web References\"); AddWebReferencesToProject(@"Web References\");
bool result = WebReferencesProjectItem.IsWebReferencesFolder(project, @"C:\projects\test\foo"); bool result = WebReferencesProjectItem.IsWebReferencesFolder(project, @"C:\projects\test\foo");

3
src/Main/SharpDevelop/Parser/ParserService.cs

@ -45,8 +45,7 @@ namespace ICSharpCode.SharpDevelop.Parser
string addition; string addition;
if (e.OldUnresolvedFile == null) { if (e.OldUnresolvedFile == null) {
addition = " (new)"; addition = " (new)";
} else } else if (e.NewUnresolvedFile == null) {
if (e.NewUnresolvedFile == null) {
addition = " (removed)"; addition = " (removed)";
} else { } else {
addition = " (updated)"; addition = " (updated)";

Loading…
Cancel
Save