Browse Source

Use FileName class for ITextEditor.FileName and OpenedFile.FileName.

git-svn-id: svn://svn.sharpdevelop.net/sharpdevelop/trunk@5028 1ccf3a8d-04fe-1044-b7c0-cef0b8235c61
shortcuts
Daniel Grunwald 16 years ago
parent
commit
017c07888a
  1. 4
      src/AddIns/BackendBindings/CSharpBinding/Tests/MockTextEditor.cs
  2. 2
      src/AddIns/BackendBindings/Python/PythonBinding/Test/Converter/ConvertCSharpToPythonMenuCommandTestFixture.cs
  3. 2
      src/AddIns/BackendBindings/Python/PythonBinding/Test/Converter/ConvertVBNetToPythonMenuCommandTestFixture.cs
  4. 2
      src/AddIns/BackendBindings/Python/PythonBinding/Test/DebugPythonCommandTestFixture.cs
  5. 2
      src/AddIns/BackendBindings/Python/PythonBinding/Test/Designer/InsertNewEventHandlerTestFixture.cs
  6. 4
      src/AddIns/BackendBindings/Python/PythonBinding/Test/FormsDesignerDisplayBindingTestFixture.cs
  7. 2
      src/AddIns/BackendBindings/Python/PythonBinding/Test/RunPythonCommandTestFixture.cs
  8. 2
      src/AddIns/BackendBindings/Python/PythonBinding/Test/Utils/MockOpenedFile.cs
  9. 6
      src/AddIns/BackendBindings/Python/PythonBinding/Test/Utils/MockViewContent.cs
  10. 5
      src/AddIns/BackendBindings/WixBinding/Test/Utils/MockViewContent.cs
  11. 4
      src/AddIns/BackendBindings/XamlBinding/XamlBinding.Tests/MockTextEditor.cs
  12. 6
      src/AddIns/DisplayBindings/AvalonEdit.AddIn/Src/CodeEditorAdapter.cs
  13. 2
      src/AddIns/Misc/Profiler/Frontend/AddIn/Src/Views/WpfViewer.cs
  14. 2
      src/AddIns/Misc/ResourceToolkit/Project/Src/Refactoring/ResourceRefactoringService.cs
  15. 15
      src/AddIns/Misc/SearchAndReplace/Project/Gui/SearchRootNode.cs
  16. 2
      src/Main/Base/Project/Src/Editor/AvalonEdit/AvalonEditTextEditorAdapter.cs
  17. 3
      src/Main/Base/Project/Src/Editor/ITextEditor.cs
  18. 11
      src/Main/Base/Project/Src/Editor/Search/ProvidedDocumentInformation.cs
  19. 3
      src/Main/Base/Project/Src/Editor/Search/SearchResultMatch.cs
  20. 6
      src/Main/Base/Project/Src/Gui/AbstractViewContent.cs
  21. 4
      src/Main/Base/Project/Src/Gui/IViewContent.cs
  22. 2
      src/Main/Base/Project/Src/Gui/Pads/ProjectBrowser/TreeNodes/DirectoryNode.cs
  23. 2
      src/Main/Base/Project/Src/Gui/Pads/TaskList/TaskListPad.cs
  24. 4
      src/Main/Base/Project/Src/Gui/Workbench/WpfWorkbench.cs
  25. 31
      src/Main/Base/Project/Src/Services/File/FileService.cs
  26. 16
      src/Main/Base/Project/Src/Services/File/OpenedFile.cs
  27. 17
      src/Main/Base/Project/Src/Services/ParserService/ParseInformationEventArgs.cs
  28. 33
      src/Main/Base/Project/Src/Services/ParserService/ParserService.cs
  29. 8
      src/Main/Base/Project/Src/TextEditor/Gui/TextEditorAdapter.cs
  30. 2
      src/Main/Base/Test/Utils/MockOpenedFile.cs
  31. 4
      src/Main/Core/Project/Src/Services/FileUtility/FileName.cs

4
src/AddIns/BackendBindings/CSharpBinding/Tests/MockTextEditor.cs

@ -39,8 +39,8 @@ namespace CSharpBinding.Tests @@ -39,8 +39,8 @@ namespace CSharpBinding.Tests
this.TextEditor.SyntaxHighlighting = HighlightingManager.Instance.GetDefinition("C#");
}
public override string FileName {
get { return "mockFileName.cs"; }
public override FileName FileName {
get { return new FileName("mockFileName.cs"); }
}
public void CreateParseInformation()

2
src/AddIns/BackendBindings/Python/PythonBinding/Test/Converter/ConvertCSharpToPythonMenuCommandTestFixture.cs

@ -28,7 +28,7 @@ namespace PythonBinding.Tests.Converter @@ -28,7 +28,7 @@ namespace PythonBinding.Tests.Converter
{
mockViewContent = new MockEditableViewContent();
mockViewContent.Text = "class Foo { }";
mockViewContent.PrimaryFileName = "test.cs";
mockViewContent.PrimaryFileName = new ICSharpCode.Core.FileName("test.cs");
MockWorkbench workbench = new MockWorkbench();
MockWorkbenchWindow window = new MockWorkbenchWindow();

2
src/AddIns/BackendBindings/Python/PythonBinding/Test/Converter/ConvertVBNetToPythonMenuCommandTestFixture.cs

@ -29,7 +29,7 @@ namespace PythonBinding.Tests.Converter @@ -29,7 +29,7 @@ namespace PythonBinding.Tests.Converter
mockViewContent = new MockEditableViewContent();
mockViewContent.Text = "class Foo\r\n" +
"end class";
mockViewContent.PrimaryFileName = "test.vb";
mockViewContent.PrimaryFileName = new ICSharpCode.Core.FileName("test.vb");
MockWorkbench workbench = new MockWorkbench();
MockWorkbenchWindow window = new MockWorkbenchWindow();

2
src/AddIns/BackendBindings/Python/PythonBinding/Test/DebugPythonCommandTestFixture.cs

@ -26,7 +26,7 @@ namespace PythonBinding.Tests @@ -26,7 +26,7 @@ namespace PythonBinding.Tests
{
// Create dummy view content with the Python script.
MockViewContent viewContent = new MockViewContent();
viewContent.PrimaryFileName = @"C:\Projects\test.py";
viewContent.PrimaryFileName = new FileName(@"C:\Projects\test.py");
MockWorkbenchWindow workbenchWindow = new MockWorkbenchWindow();
workbenchWindow.ActiveViewContent = viewContent;
MockWorkbench workbench = new MockWorkbench();

2
src/AddIns/BackendBindings/Python/PythonBinding/Test/Designer/InsertNewEventHandlerTestFixture.cs

@ -88,7 +88,7 @@ namespace PythonBinding.Tests.Designer @@ -88,7 +88,7 @@ namespace PythonBinding.Tests.Designer
[Test]
public void FileNameSameAsDocumentFileName()
{
Assert.AreEqual(viewContent.DesignerCodeFile.FileName, file);
Assert.AreEqual(viewContent.DesignerCodeFile.FileName.ToString(), file);
}
}
}

4
src/AddIns/BackendBindings/Python/PythonBinding/Test/FormsDesignerDisplayBindingTestFixture.cs

@ -32,7 +32,7 @@ namespace PythonBinding.Tests @@ -32,7 +32,7 @@ namespace PythonBinding.Tests
displayBinding = new DerivedPythonFormsDesignerDisplayBinding();
viewContent = new MockTextEditorViewContent();
parseInfo = new ParseInformation(new DefaultCompilationUnit(new DefaultProjectContent()));
viewContent.PrimaryFileName = "test.py";
viewContent.PrimaryFileName = new ICSharpCode.Core.FileName("test.py");
viewContent.TextEditor.Document.Text = "text content";
displayBinding.ParseServiceParseInfoToReturn = parseInfo;
displayBinding.IsParseInfoDesignable = true;
@ -99,7 +99,7 @@ namespace PythonBinding.Tests @@ -99,7 +99,7 @@ namespace PythonBinding.Tests
[Test]
public void NonPythonFileNameCannotBeAttachedTo()
{
viewContent.PrimaryFileName = "test.cs";
viewContent.PrimaryFileName = new ICSharpCode.Core.FileName("test.cs");
Assert.IsFalse(displayBinding.CanAttachTo(viewContent));
}

2
src/AddIns/BackendBindings/Python/PythonBinding/Test/RunPythonCommandTestFixture.cs

@ -30,7 +30,7 @@ namespace PythonBinding.Tests @@ -30,7 +30,7 @@ namespace PythonBinding.Tests
{
// Create dummy view content with the Python script.
MockViewContent viewContent = new MockViewContent();
viewContent.PrimaryFileName = @"C:\Projects\test.py";
viewContent.PrimaryFileName = new FileName(@"C:\Projects\test.py");
MockWorkbenchWindow workbenchWindow = new MockWorkbenchWindow();
workbenchWindow.ActiveViewContent = viewContent;
MockWorkbench workbench = new MockWorkbench();

2
src/AddIns/BackendBindings/Python/PythonBinding/Test/Utils/MockOpenedFile.cs

@ -23,7 +23,7 @@ namespace PythonBinding.Tests.Utils @@ -23,7 +23,7 @@ namespace PythonBinding.Tests.Utils
public MockOpenedFile(string fileName)
{
this.FileName = fileName;
this.FileName = new ICSharpCode.Core.FileName(fileName);
}
public override IList<IViewContent> RegisteredViewContents {

6
src/AddIns/BackendBindings/Python/PythonBinding/Test/Utils/MockViewContent.cs

@ -8,6 +8,8 @@ @@ -8,6 +8,8 @@
using System;
using System.Collections.Generic;
using System.Windows.Forms;
using ICSharpCode.Core;
using ICSharpCode.SharpDevelop;
using ICSharpCode.SharpDevelop.Gui;
@ -18,7 +20,7 @@ namespace PythonBinding.Tests.Utils @@ -18,7 +20,7 @@ namespace PythonBinding.Tests.Utils
/// </summary>
public class MockViewContent : IViewContent
{
string fileName = String.Empty;
FileName fileName;
List<IViewContent> secondaryViewContents = new List<IViewContent>();
public MockViewContent()
@ -149,7 +151,7 @@ namespace PythonBinding.Tests.Utils @@ -149,7 +151,7 @@ namespace PythonBinding.Tests.Utils
}
}
public string PrimaryFileName {
public FileName PrimaryFileName {
get { return fileName; }
set { fileName = value; }
}

5
src/AddIns/BackendBindings/WixBinding/Test/Utils/MockViewContent.cs

@ -9,6 +9,7 @@ using System; @@ -9,6 +9,7 @@ using System;
using System.Collections.Generic;
using System.Windows.Forms;
using ICSharpCode.Core;
using ICSharpCode.SharpDevelop;
using ICSharpCode.SharpDevelop.Gui;
@ -41,7 +42,7 @@ namespace WixBinding.Tests.Utils @@ -41,7 +42,7 @@ namespace WixBinding.Tests.Utils
{
public MockOpenedFile(string fileName, bool isUntitled)
{
base.FileName = fileName;
base.FileName = FileName.Create(fileName);
base.IsUntitled = isUntitled;
}
@ -79,7 +80,7 @@ namespace WixBinding.Tests.Utils @@ -79,7 +80,7 @@ namespace WixBinding.Tests.Utils
get { return primaryFile; }
}
public string PrimaryFileName {
public FileName PrimaryFileName {
get { return primaryFile.FileName; }
}

4
src/AddIns/BackendBindings/XamlBinding/XamlBinding.Tests/MockTextEditor.cs

@ -58,8 +58,8 @@ namespace ICSharpCode.XamlBinding.Tests @@ -58,8 +58,8 @@ namespace ICSharpCode.XamlBinding.Tests
new XamlLanguageBinding().Attach(this);
}
public override string FileName {
get { return "mockFileName.xaml"; }
public override FileName FileName {
get { return new FileName("mockFileName.xaml"); }
}
public void CreateParseInformation()

6
src/AddIns/DisplayBindings/AvalonEdit.AddIn/Src/CodeEditorAdapter.cs

@ -5,10 +5,12 @@ @@ -5,10 +5,12 @@
// <version>$Revision$</version>
// </file>
using ICSharpCode.AvalonEdit.Indentation;
using System;
using System.Collections.Generic;
using System.Linq;
using ICSharpCode.AvalonEdit.Indentation;
using ICSharpCode.Core;
using ICSharpCode.SharpDevelop;
using ICSharpCode.SharpDevelop.Editor;
using ICSharpCode.SharpDevelop.Editor.AvalonEdit;
@ -30,7 +32,7 @@ namespace ICSharpCode.AvalonEdit.AddIn @@ -30,7 +32,7 @@ namespace ICSharpCode.AvalonEdit.AddIn
this.codeEditor = codeEditor;
}
public override string FileName {
public override FileName FileName {
get { return codeEditor.FileName; }
}

2
src/AddIns/Misc/Profiler/Frontend/AddIn/Src/Views/WpfViewer.cs

@ -41,7 +41,7 @@ namespace ICSharpCode.Profiler.AddIn.Views @@ -41,7 +41,7 @@ namespace ICSharpCode.Profiler.AddIn.Views
}
}
public override string PrimaryFileName {
public override FileName PrimaryFileName {
get { return file.FileName; }
}

2
src/AddIns/Misc/ResourceToolkit/Project/Src/Refactoring/ResourceRefactoringService.cs

@ -418,7 +418,7 @@ namespace Hornung.ResourceToolkit.Refactoring @@ -418,7 +418,7 @@ namespace Hornung.ResourceToolkit.Refactoring
static void AddFilesFromViewContent(IList<string> files, IViewContent vc)
{
files.AddRange(vc.Files
.Select(f => f.FileName)
.Select(f => f.FileName.ToString())
.Where(name => name != null && IsPossibleFile(name))
);
}

15
src/AddIns/Misc/SearchAndReplace/Project/Gui/SearchRootNode.cs

@ -22,19 +22,6 @@ namespace SearchAndReplace @@ -22,19 +22,6 @@ namespace SearchAndReplace
{
sealed class SearchRootNode : SearchNode
{
sealed class FileNameComparer : IEqualityComparer<string>
{
public bool Equals(string x, string y)
{
return FileUtility.IsEqualFileName(x, y);
}
public int GetHashCode(string obj)
{
return StringComparer.OrdinalIgnoreCase.GetHashCode(FileUtility.NormalizePath(obj));
}
}
IList<SearchResultNode> results;
int fileCount;
@ -45,7 +32,7 @@ namespace SearchAndReplace @@ -45,7 +32,7 @@ namespace SearchAndReplace
this.Title = title;
this.results = results.Select(r => new SearchResultNode(r)).ToArray();
fileCount = results.GroupBy(r => r.FileName, new FileNameComparer()).Count();
fileCount = results.GroupBy(r => r.FileName).Count();
this.Children = this.results;
this.IsExpanded = true;
}

2
src/Main/Base/Project/Src/Editor/AvalonEdit/AvalonEditTextEditorAdapter.cs

@ -151,7 +151,7 @@ namespace ICSharpCode.SharpDevelop.Editor.AvalonEdit @@ -151,7 +151,7 @@ namespace ICSharpCode.SharpDevelop.Editor.AvalonEdit
}
}
public virtual string FileName {
public virtual ICSharpCode.Core.FileName FileName {
get { return null; }
}

3
src/Main/Base/Project/Src/Editor/ITextEditor.cs

@ -9,6 +9,7 @@ using System; @@ -9,6 +9,7 @@ using System;
using System.Collections.Generic;
using System.Windows.Input;
using ICSharpCode.Core;
using ICSharpCode.NRefactory;
using ICSharpCode.SharpDevelop.Editor.CodeCompletion;
@ -94,7 +95,7 @@ namespace ICSharpCode.SharpDevelop.Editor @@ -94,7 +95,7 @@ namespace ICSharpCode.SharpDevelop.Editor
/// </summary>
void JumpTo(int line, int column);
string FileName { get; }
FileName FileName { get; }
ICompletionListWindow ShowCompletionWindow(ICompletionItemList data);

11
src/Main/Base/Project/Src/Editor/Search/ProvidedDocumentInformation.cs

@ -7,6 +7,7 @@ @@ -7,6 +7,7 @@
using System;
using ICSharpCode.AvalonEdit.Document;
using ICSharpCode.Core;
using ICSharpCode.SharpDevelop.Editor.AvalonEdit;
namespace ICSharpCode.SharpDevelop.Editor.Search
@ -16,10 +17,10 @@ namespace ICSharpCode.SharpDevelop.Editor.Search @@ -16,10 +17,10 @@ namespace ICSharpCode.SharpDevelop.Editor.Search
ITextEditor textEditor;
IDocument document;
ITextBuffer textBuffer;
string fileName;
FileName fileName;
int currentOffset;
public string FileName {
public FileName FileName {
get {
return fileName;
}
@ -95,14 +96,14 @@ namespace ICSharpCode.SharpDevelop.Editor.Search @@ -95,14 +96,14 @@ namespace ICSharpCode.SharpDevelop.Editor.Search
public ProvidedDocumentInformation(IDocument document, string fileName, int currentOffset)
{
this.document = document;
this.fileName = fileName;
this.fileName = FileName.Create(fileName);
this.endOffset = this.currentOffset = currentOffset;
}
public ProvidedDocumentInformation(IDocument document, string fileName, ITextEditor textEditor)
{
this.document = document;
this.fileName = fileName;
this.fileName = FileName.Create(fileName);
this.textEditor = textEditor;
this.endOffset = this.CurrentOffset;
}
@ -110,7 +111,7 @@ namespace ICSharpCode.SharpDevelop.Editor.Search @@ -110,7 +111,7 @@ namespace ICSharpCode.SharpDevelop.Editor.Search
public ProvidedDocumentInformation(ITextBuffer textBuffer, string fileName, int currentOffset)
{
this.textBuffer = textBuffer;
this.fileName = fileName;
this.fileName = FileName.Create(fileName);
this.endOffset = this.currentOffset = currentOffset;
}
}

3
src/Main/Base/Project/Src/Editor/Search/SearchResultMatch.cs

@ -6,6 +6,7 @@ @@ -6,6 +6,7 @@
// </file>
using System;
using ICSharpCode.Core;
using ICSharpCode.NRefactory;
namespace ICSharpCode.SharpDevelop.Editor.Search
@ -20,7 +21,7 @@ namespace ICSharpCode.SharpDevelop.Editor.Search @@ -20,7 +21,7 @@ namespace ICSharpCode.SharpDevelop.Editor.Search
set { providedDocumentInformation = value; }
}
public string FileName {
public FileName FileName {
get {
return providedDocumentInformation.FileName;
}

6
src/Main/Base/Project/Src/Gui/AbstractViewContent.cs

@ -5,13 +5,15 @@ @@ -5,13 +5,15 @@
// <version>$Revision$</version>
// </file>
using ICSharpCode.Core.Presentation;
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.IO;
using System.Windows.Forms;
using ICSharpCode.Core;
using ICSharpCode.Core.Presentation;
namespace ICSharpCode.SharpDevelop.Gui
{
/// <summary>
@ -245,7 +247,7 @@ namespace ICSharpCode.SharpDevelop.Gui @@ -245,7 +247,7 @@ namespace ICSharpCode.SharpDevelop.Gui
/// <summary>
/// Gets the name of the primary file being edited. Might return null if no file is edited.
/// </summary>
public virtual string PrimaryFileName {
public virtual FileName PrimaryFileName {
get {
OpenedFile file = PrimaryFile;
if (file != null)

4
src/Main/Base/Project/Src/Gui/IViewContent.cs

@ -10,6 +10,8 @@ using System.Collections.Generic; @@ -10,6 +10,8 @@ using System.Collections.Generic;
using System.IO;
using System.Windows.Forms;
using ICSharpCode.Core;
namespace ICSharpCode.SharpDevelop.Gui
{
public delegate void SaveEventHandler(object sender, SaveEventArgs e);
@ -112,7 +114,7 @@ namespace ICSharpCode.SharpDevelop.Gui @@ -112,7 +114,7 @@ namespace ICSharpCode.SharpDevelop.Gui
/// <summary>
/// Gets the name of the primary file being edited. Might return null if no file is edited.
/// </summary>
string PrimaryFileName { get; }
FileName PrimaryFileName { get; }
/// <summary>
/// Builds an <see cref="INavigationPoint"/> for the current position.

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

@ -690,7 +690,7 @@ namespace ICSharpCode.SharpDevelop.Project @@ -690,7 +690,7 @@ namespace ICSharpCode.SharpDevelop.Project
if (file.FileName != null &&
FileUtility.IsEqualFileName(file.FileName, fileName))
{
file.FileName = copiedFileName;
file.FileName = new FileName(copiedFileName);
}
}
FileService.RemoveFile(fileName, false);

2
src/Main/Base/Project/Src/Gui/Pads/TaskList/TaskListPad.cs

@ -202,7 +202,7 @@ namespace ICSharpCode.SharpDevelop.Gui @@ -202,7 +202,7 @@ namespace ICSharpCode.SharpDevelop.Gui
case 1:
return ProjectService.CurrentProject != null && ProjectService.CurrentProject.FindFile(item.FileName) != null;
case 2:
return WorkbenchSingleton.Workbench.ActiveViewContent != null && WorkbenchSingleton.Workbench.ActiveViewContent.PrimaryFileName == item.FileName;
return WorkbenchSingleton.Workbench.ActiveViewContent != null && WorkbenchSingleton.Workbench.ActiveViewContent.PrimaryFileName == FileName.Create(item.FileName);
case 3:
return current != null && itemClass != null && current.Namespace == itemClass.Namespace;
case 4:

4
src/Main/Base/Project/Src/Gui/Workbench/WpfWorkbench.cs

@ -165,7 +165,7 @@ namespace ICSharpCode.SharpDevelop.Gui @@ -165,7 +165,7 @@ namespace ICSharpCode.SharpDevelop.Gui
if (e.IsDirectory) {
foreach (OpenedFile file in FileService.OpenedFiles) {
if (file.FileName != null && FileUtility.IsBaseDirectory(e.SourceFile, file.FileName)) {
file.FileName = FileUtility.RenameBaseDirectory(file.FileName, e.SourceFile, e.TargetFile);
file.FileName = new FileName(FileUtility.RenameBaseDirectory(file.FileName, e.SourceFile, e.TargetFile));
}
}
} else {
@ -173,7 +173,7 @@ namespace ICSharpCode.SharpDevelop.Gui @@ -173,7 +173,7 @@ namespace ICSharpCode.SharpDevelop.Gui
if (file.FileName != null &&
FileUtility.IsEqualFileName(file.FileName, e.SourceFile))
{
file.FileName = e.TargetFile;
file.FileName = new FileName(e.TargetFile);
return;
}
}

31
src/Main/Base/Project/Src/Services/File/FileService.cs

@ -60,7 +60,7 @@ namespace ICSharpCode.SharpDevelop @@ -60,7 +60,7 @@ namespace ICSharpCode.SharpDevelop
}
#region OpenedFile
static Dictionary<string, OpenedFile> openedFileDict = new Dictionary<string, OpenedFile>(StringComparer.OrdinalIgnoreCase);
static Dictionary<FileName, OpenedFile> openedFileDict = new Dictionary<FileName, OpenedFile>();
/// <summary>
/// Gets a collection containing all currently opened files.
@ -77,30 +77,47 @@ namespace ICSharpCode.SharpDevelop @@ -77,30 +77,47 @@ namespace ICSharpCode.SharpDevelop
/// Gets an opened file, or returns null if the file is not opened.
/// </summary>
public static OpenedFile GetOpenedFile(string fileName)
{
return GetOpenedFile(FileName.Create(fileName));
}
/// <summary>
/// Gets an opened file, or returns null if the file is not opened.
/// </summary>
public static OpenedFile GetOpenedFile(FileName fileName)
{
if (fileName == null)
throw new ArgumentNullException("fileName");
WorkbenchSingleton.AssertMainThread();
fileName = FileUtility.NormalizePath(fileName);
OpenedFile file;
openedFileDict.TryGetValue(fileName, out file);
return file;
}
/// <summary>
/// <summary>
/// Gets or creates an opened file.
/// Warning: the opened file will be a file without any views attached.
/// Make sure to attach a view to it, or call CloseIfAllViewsClosed on the OpenedFile to
/// unload the OpenedFile instance if no views were attached to it.
/// </summary>
public static OpenedFile GetOrCreateOpenedFile(string fileName)
{
return GetOrCreateOpenedFile(FileName.Create(fileName));
}
/// <summary>
/// Gets or creates an opened file.
/// Warning: the opened file will be a file without any views attached.
/// Make sure to attach a view to it, or call CloseIfAllViewsClosed on the OpenedFile to
/// unload the OpenedFile instance if no views were attached to it.
/// </summary>
public static OpenedFile GetOrCreateOpenedFile(FileName fileName)
{
if (fileName == null)
throw new ArgumentNullException("fileName");
fileName = FileUtility.NormalizePath(fileName);
OpenedFile file;
if (!openedFileDict.TryGetValue(fileName, out file)) {
openedFileDict[fileName] = file = new FileServiceOpenedFile(fileName);
@ -117,13 +134,13 @@ namespace ICSharpCode.SharpDevelop @@ -117,13 +134,13 @@ namespace ICSharpCode.SharpDevelop
throw new ArgumentNullException("defaultName");
OpenedFile file = new FileServiceOpenedFile(content);
file.FileName = file.GetHashCode() + "/" + defaultName;
file.FileName = new FileName(file.GetHashCode() + "/" + defaultName);
openedFileDict[file.FileName] = file;
return file;
}
/// <summary>Called by OpenedFile.set_FileName to update the dictionary.</summary>
internal static void OpenedFileFileNameChange(OpenedFile file, string oldName, string newName)
internal static void OpenedFileFileNameChange(OpenedFile file, FileName oldName, FileName newName)
{
if (oldName == null) return; // File just created with NewFile where name is being initialized.
@ -186,7 +203,7 @@ namespace ICSharpCode.SharpDevelop @@ -186,7 +203,7 @@ namespace ICSharpCode.SharpDevelop
public void Invoke(string fileName)
{
OpenedFile file = FileService.GetOrCreateOpenedFile(fileName);
OpenedFile file = FileService.GetOrCreateOpenedFile(FileName.Create(fileName));
IViewContent newContent = binding.CreateContentForFile(file);
if (newContent != null) {
DisplayBindingService.AttachSubWindows(newContent, false);

16
src/Main/Base/Project/Src/Services/File/OpenedFile.cs

@ -70,25 +70,21 @@ namespace ICSharpCode.SharpDevelop @@ -70,25 +70,21 @@ namespace ICSharpCode.SharpDevelop
protected set { isUntitled = value; }
}
string fileName;
FileName fileName;
/// <summary>
/// Gets the name of the file.
/// </summary>
public string FileName {
public FileName FileName {
get { return fileName; }
set {
if (fileName == value) return;
value = FileUtility.NormalizePath(value);
if (fileName != value) {
ChangeFileName(value);
}
}
}
protected virtual void ChangeFileName(string newValue)
protected virtual void ChangeFileName(FileName newValue)
{
WorkbenchSingleton.AssertMainThread();
@ -111,7 +107,7 @@ namespace ICSharpCode.SharpDevelop @@ -111,7 +107,7 @@ namespace ICSharpCode.SharpDevelop
/// </summary>
public void SaveToDisk(string newFileName)
{
this.FileName = newFileName;
this.FileName = new FileName(newFileName);
this.IsUntitled = false;
SaveToDisk();
}
@ -349,13 +345,13 @@ namespace ICSharpCode.SharpDevelop @@ -349,13 +345,13 @@ namespace ICSharpCode.SharpDevelop
List<IViewContent> registeredViews = new List<IViewContent>();
FileChangeWatcher fileChangeWatcher;
protected override void ChangeFileName(string newValue)
protected override void ChangeFileName(FileName newValue)
{
FileService.OpenedFileFileNameChange(this, this.FileName, newValue);
base.ChangeFileName(newValue);
}
internal FileServiceOpenedFile(string fileName)
internal FileServiceOpenedFile(FileName fileName)
{
this.FileName = fileName;
IsUntitled = false;

17
src/Main/Base/Project/Src/Services/ParserService/ParseInformationEventArgs.cs

@ -6,18 +6,19 @@ @@ -6,18 +6,19 @@
// </file>
using System;
using ICSharpCode.Core;
using ICSharpCode.SharpDevelop.Dom;
namespace ICSharpCode.SharpDevelop
{
public class ParseInformationEventArgs : EventArgs
{
string fileName;
FileName fileName;
IProjectContent projectContent;
ICompilationUnit oldCompilationUnit;
ICompilationUnit newCompilationUnit;
public string FileName {
public FileName FileName {
get { return fileName; }
}
@ -39,8 +40,12 @@ namespace ICSharpCode.SharpDevelop @@ -39,8 +40,12 @@ namespace ICSharpCode.SharpDevelop
get { return newCompilationUnit; }
}
public ParseInformationEventArgs(string fileName, IProjectContent projectContent, ICompilationUnit oldCompilationUnit, ICompilationUnit newCompilationUnit)
public ParseInformationEventArgs(FileName fileName, IProjectContent projectContent, ICompilationUnit oldCompilationUnit, ICompilationUnit newCompilationUnit)
{
if (fileName == null)
throw new ArgumentNullException("fileName");
if (projectContent == null)
throw new ArgumentNullException("projectContent");
this.fileName = fileName;
this.projectContent = projectContent;
this.oldCompilationUnit = oldCompilationUnit;
@ -50,18 +55,18 @@ namespace ICSharpCode.SharpDevelop @@ -50,18 +55,18 @@ namespace ICSharpCode.SharpDevelop
public class ParserUpdateStepEventArgs : EventArgs
{
string fileName;
FileName fileName;
ITextBuffer content;
ParseInformation parseInformation;
public ParserUpdateStepEventArgs(string fileName, ITextBuffer content, ParseInformation parseInformation)
public ParserUpdateStepEventArgs(FileName fileName, ITextBuffer content, ParseInformation parseInformation)
{
this.fileName = fileName;
this.content = content;
this.parseInformation = parseInformation;
}
public string FileName {
public FileName FileName {
get {
return fileName;
}

33
src/Main/Base/Project/Src/Services/ParserService/ParserService.cs

@ -31,7 +31,7 @@ namespace ICSharpCode.SharpDevelop @@ -31,7 +31,7 @@ namespace ICSharpCode.SharpDevelop
static readonly object syncLock = new object();
static IList<ParserDescriptor> parserDescriptors;
static Dictionary<IProject, IProjectContent> projectContents = new Dictionary<IProject, IProjectContent>();
static Dictionary<string, FileEntry> fileEntryDict = new Dictionary<string, FileEntry>(StringComparer.OrdinalIgnoreCase);
static Dictionary<FileName, FileEntry> fileEntryDict = new Dictionary<FileName, FileEntry>();
static DefaultProjectContent defaultProjectContent;
#region Manage Project Contents
@ -161,7 +161,7 @@ namespace ICSharpCode.SharpDevelop @@ -161,7 +161,7 @@ namespace ICSharpCode.SharpDevelop
IViewContent viewContent = WorkbenchSingleton.Workbench.ActiveViewContent;
if (viewContent == null)
return;
string fileName = viewContent.PrimaryFileName;
FileName fileName = viewContent.PrimaryFileName;
if (fileName == null)
return;
if (GetParser(fileName) == null)
@ -308,14 +308,14 @@ namespace ICSharpCode.SharpDevelop @@ -308,14 +308,14 @@ namespace ICSharpCode.SharpDevelop
sealed class FileEntry
{
readonly string fileName;
readonly FileName fileName;
internal readonly IParser parser;
volatile ParseInformation parseInfo;
ITextBufferVersion bufferVersion;
ICompilationUnit[] oldUnits = emptyCompilationUnitArray;
bool disposed;
public FileEntry(string fileName)
public FileEntry(FileName fileName)
{
this.fileName = fileName;
this.parser = CreateParser(fileName);
@ -483,16 +483,17 @@ namespace ICSharpCode.SharpDevelop @@ -483,16 +483,17 @@ namespace ICSharpCode.SharpDevelop
static FileEntry GetFileEntry(string fileName, bool createOnDemand)
{
if (string.IsNullOrEmpty(fileName))
throw new ArgumentException("fileName");
fileName = FileUtility.NormalizePath(fileName);
if (fileName == null)
throw new ArgumentNullException("fileName");
FileName f = new FileName(fileName);
FileEntry entry;
lock (syncLock) {
if (!fileEntryDict.TryGetValue(fileName, out entry)) {
if (!fileEntryDict.TryGetValue(f, out entry)) {
if (!createOnDemand)
return null;
entry = new FileEntry(fileName);
fileEntryDict.Add(fileName, entry);
entry = new FileEntry(f);
fileEntryDict.Add(f, entry);
}
}
return entry;
@ -504,16 +505,16 @@ namespace ICSharpCode.SharpDevelop @@ -504,16 +505,16 @@ namespace ICSharpCode.SharpDevelop
/// </summary>
public static void ClearParseInformation(string fileName)
{
if (string.IsNullOrEmpty(fileName))
throw new ArgumentException("fileName");
if (fileName == null)
throw new ArgumentNullException("fileName");
LoggingService.Info("ClearParseInformation: " + fileName);
FileName f = new FileName(fileName);
LoggingService.Info("ClearParseInformation: " + f);
fileName = FileUtility.NormalizePath(fileName);
FileEntry entry;
lock (syncLock) {
if (fileEntryDict.TryGetValue(fileName, out entry)) {
fileEntryDict.Remove(fileName);
if (fileEntryDict.TryGetValue(f, out entry)) {
fileEntryDict.Remove(f);
}
}
if (entry != null)

8
src/Main/Base/Project/Src/TextEditor/Gui/TextEditorAdapter.cs

@ -5,13 +5,15 @@ @@ -5,13 +5,15 @@
// <version>$Revision$</version>
// </file>
using ICSharpCode.SharpDevelop.Editor.CodeCompletion;
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using ICSharpCode.Core;
using ICSharpCode.SharpDevelop.DefaultEditor.Gui.Editor;
using ICSharpCode.SharpDevelop.Editor;
using ICSharpCode.SharpDevelop.Editor.CodeCompletion;
using ICSharpCode.SharpDevelop.Refactoring;
using ICSharpCode.TextEditor;
using ICSharpCode.TextEditor.Actions;
@ -141,8 +143,8 @@ namespace ICSharpCode.SharpDevelop @@ -141,8 +143,8 @@ namespace ICSharpCode.SharpDevelop
public ITextEditorCaret Caret { get; private set; }
public ITextEditorOptions Options { get; private set; }
public string FileName {
get { return editor.FileName; }
public FileName FileName {
get { return FileName.Create(editor.FileName); }
}
public void ShowInsightWindow(ICSharpCode.TextEditor.Gui.InsightWindow.IInsightDataProvider provider)

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

@ -19,7 +19,7 @@ namespace ICSharpCode.SharpDevelop.Tests.Utils @@ -19,7 +19,7 @@ namespace ICSharpCode.SharpDevelop.Tests.Utils
{
public MockOpenedFile(string fileName)
{
base.FileName = fileName;
base.FileName = new ICSharpCode.Core.FileName(fileName);
base.IsUntitled = true;
SetData(new byte[0]);
}

4
src/Main/Core/Project/Src/Services/FileUtility/FileName.cs

@ -24,6 +24,10 @@ namespace ICSharpCode.Core @@ -24,6 +24,10 @@ namespace ICSharpCode.Core
this.normalizedFileName = FileUtility.NormalizePath(fileName);
}
/// <summary>
/// Creates a FileName instance from the string.
/// It is valid to pass null to this method (in that case, a null reference will be returned).
/// </summary>
public static FileName Create(string fileName)
{
if (fileName != null)

Loading…
Cancel
Save