From 444fe4ebf727dbc4e49b9d1279257392f4303886 Mon Sep 17 00:00:00 2001 From: Daniel Grunwald Date: Thu, 29 Mar 2012 22:34:11 +0200 Subject: [PATCH] Make IParsedFile.LastWriteTime nullable. Replace IAXmlVisitor interface with AXmlVisitor abstract base class. --- .../Refactoring/CodeIssue.cs | 13 +++-- .../Refactoring/DocumentScript.cs | 1 + .../TypeSystem/CSharpParsedFile.cs | 4 +- ICSharpCode.NRefactory.Xml/AXmlAttribute.cs | 2 +- ICSharpCode.NRefactory.Xml/AXmlDocument.cs | 7 ++- ICSharpCode.NRefactory.Xml/AXmlElement.cs | 2 +- ICSharpCode.NRefactory.Xml/AXmlObject.cs | 2 +- ICSharpCode.NRefactory.Xml/AXmlTag.cs | 2 +- ICSharpCode.NRefactory.Xml/AXmlText.cs | 2 +- .../{IAXmlVisitor.cs => AXmlVisitor.cs} | 47 +++++++++++++------ .../ICSharpCode.NRefactory.Xml.csproj | 2 +- .../TypeSystem/IParsedFile.cs | 2 +- 12 files changed, 57 insertions(+), 29 deletions(-) rename ICSharpCode.NRefactory.Xml/{IAXmlVisitor.cs => AXmlVisitor.cs} (55%) diff --git a/ICSharpCode.NRefactory.CSharp/Refactoring/CodeIssue.cs b/ICSharpCode.NRefactory.CSharp/Refactoring/CodeIssue.cs index 435ed304f6..3676e3df65 100644 --- a/ICSharpCode.NRefactory.CSharp/Refactoring/CodeIssue.cs +++ b/ICSharpCode.NRefactory.CSharp/Refactoring/CodeIssue.cs @@ -1,6 +1,6 @@ -// +// // InspectionIssue.cs -// +// // Author: // Mike Krüger // @@ -46,17 +46,20 @@ namespace ICSharpCode.NRefactory.CSharp.Refactoring private set; } - public IEnumerable Actions { + public IList Actions { get; private set; } - public CodeIssue(string description, TextLocation start, TextLocation end, IEnumerable action = null) + public CodeIssue(string description, TextLocation start, TextLocation end, IEnumerable actions = null) { Desription = description; Start = start; End = end; - Actions = action ?? Enumerable.Empty (); + if (actions != null) + Actions = actions.ToArray(); + else + Actions = EmptyList.Instance; } public CodeIssue(string description, TextLocation start, TextLocation end, CodeAction action) : this (description, start, end, action != null ? new [] { action } : null) diff --git a/ICSharpCode.NRefactory.CSharp/Refactoring/DocumentScript.cs b/ICSharpCode.NRefactory.CSharp/Refactoring/DocumentScript.cs index 510bd8e229..99fcc6ebe9 100644 --- a/ICSharpCode.NRefactory.CSharp/Refactoring/DocumentScript.cs +++ b/ICSharpCode.NRefactory.CSharp/Refactoring/DocumentScript.cs @@ -46,6 +46,7 @@ namespace ICSharpCode.NRefactory.CSharp.Refactoring this.originalDocument = document.CreateDocumentSnapshot(); this.currentDocument = document; this.options = options; + this.eolMarker = options.EolMarker; Debug.Assert(currentDocument.Version.CompareAge(originalDocument.Version) == 0); this.undoGroup = document.OpenUndoGroup(); } diff --git a/ICSharpCode.NRefactory.CSharp/TypeSystem/CSharpParsedFile.cs b/ICSharpCode.NRefactory.CSharp/TypeSystem/CSharpParsedFile.cs index b2b73947c7..889fde118a 100644 --- a/ICSharpCode.NRefactory.CSharp/TypeSystem/CSharpParsedFile.cs +++ b/ICSharpCode.NRefactory.CSharp/TypeSystem/CSharpParsedFile.cs @@ -73,9 +73,9 @@ namespace ICSharpCode.NRefactory.CSharp.TypeSystem get { return fileName; } } - DateTime lastWriteTime = DateTime.UtcNow; + DateTime? lastWriteTime; - public DateTime LastWriteTime { + public DateTime? LastWriteTime { get { return lastWriteTime; } set { FreezableHelper.ThrowIfFrozen(this); diff --git a/ICSharpCode.NRefactory.Xml/AXmlAttribute.cs b/ICSharpCode.NRefactory.Xml/AXmlAttribute.cs index f792434be0..999f019569 100644 --- a/ICSharpCode.NRefactory.Xml/AXmlAttribute.cs +++ b/ICSharpCode.NRefactory.Xml/AXmlAttribute.cs @@ -104,7 +104,7 @@ namespace ICSharpCode.NRefactory.Xml } /// - public override void AcceptVisitor(IAXmlVisitor visitor) + public override void AcceptVisitor(AXmlVisitor visitor) { visitor.VisitAttribute(this); } diff --git a/ICSharpCode.NRefactory.Xml/AXmlDocument.cs b/ICSharpCode.NRefactory.Xml/AXmlDocument.cs index 64ec7b0498..b525c9ae4d 100644 --- a/ICSharpCode.NRefactory.Xml/AXmlDocument.cs +++ b/ICSharpCode.NRefactory.Xml/AXmlDocument.cs @@ -45,7 +45,7 @@ namespace ICSharpCode.NRefactory.Xml } /// - public override void AcceptVisitor(IAXmlVisitor visitor) + public override void AcceptVisitor(AXmlVisitor visitor) { visitor.VisitDocument(this); } @@ -55,5 +55,10 @@ namespace ICSharpCode.NRefactory.Xml { return string.Format(CultureInfo.InvariantCulture, "[{0} Chld:{1}]", base.ToString(), this.Children.Count); } + + /// + /// Represents an empty document. + /// + public readonly static AXmlDocument Empty = new AXmlDocument(null, 0, new InternalDocument()); } } diff --git a/ICSharpCode.NRefactory.Xml/AXmlElement.cs b/ICSharpCode.NRefactory.Xml/AXmlElement.cs index 4495422585..a71c95b54a 100644 --- a/ICSharpCode.NRefactory.Xml/AXmlElement.cs +++ b/ICSharpCode.NRefactory.Xml/AXmlElement.cs @@ -164,7 +164,7 @@ namespace ICSharpCode.NRefactory.Xml } /// - public override void AcceptVisitor(IAXmlVisitor visitor) + public override void AcceptVisitor(AXmlVisitor visitor) { visitor.VisitElement(this); } diff --git a/ICSharpCode.NRefactory.Xml/AXmlObject.cs b/ICSharpCode.NRefactory.Xml/AXmlObject.cs index ac1258a39d..5ad0dde396 100644 --- a/ICSharpCode.NRefactory.Xml/AXmlObject.cs +++ b/ICSharpCode.NRefactory.Xml/AXmlObject.cs @@ -179,7 +179,7 @@ namespace ICSharpCode.NRefactory.Xml #endregion /// Call appropriate visit method on the given visitor - public abstract void AcceptVisitor(IAXmlVisitor visitor); + public abstract void AcceptVisitor(AXmlVisitor visitor); /// /// Gets the start offset of the segment. diff --git a/ICSharpCode.NRefactory.Xml/AXmlTag.cs b/ICSharpCode.NRefactory.Xml/AXmlTag.cs index c8e211a504..16a528f636 100644 --- a/ICSharpCode.NRefactory.Xml/AXmlTag.cs +++ b/ICSharpCode.NRefactory.Xml/AXmlTag.cs @@ -84,7 +84,7 @@ namespace ICSharpCode.NRefactory.Xml public bool IsUnknownBang { get { return internalObject.IsUnknownBang; } } /// - public override void AcceptVisitor(IAXmlVisitor visitor) + public override void AcceptVisitor(AXmlVisitor visitor) { visitor.VisitTag(this); } diff --git a/ICSharpCode.NRefactory.Xml/AXmlText.cs b/ICSharpCode.NRefactory.Xml/AXmlText.cs index f07895a5b6..d291dbe1a6 100644 --- a/ICSharpCode.NRefactory.Xml/AXmlText.cs +++ b/ICSharpCode.NRefactory.Xml/AXmlText.cs @@ -49,7 +49,7 @@ namespace ICSharpCode.NRefactory.Xml } /// - public override void AcceptVisitor(IAXmlVisitor visitor) + public override void AcceptVisitor(AXmlVisitor visitor) { visitor.VisitText(this); } diff --git a/ICSharpCode.NRefactory.Xml/IAXmlVisitor.cs b/ICSharpCode.NRefactory.Xml/AXmlVisitor.cs similarity index 55% rename from ICSharpCode.NRefactory.Xml/IAXmlVisitor.cs rename to ICSharpCode.NRefactory.Xml/AXmlVisitor.cs index bd0eeaf74d..9180ff58ce 100644 --- a/ICSharpCode.NRefactory.Xml/IAXmlVisitor.cs +++ b/ICSharpCode.NRefactory.Xml/AXmlVisitor.cs @@ -1,4 +1,4 @@ -// Copyright (c) AlphaSierraPapa for the SharpDevelop Team +// Copyright (c) AlphaSierraPapa for the SharpDevelop Team // // Permission is hereby granted, free of charge, to any person obtaining a copy of this // software and associated documentation files (the "Software"), to deal in the Software @@ -17,27 +17,46 @@ // DEALINGS IN THE SOFTWARE. using System; +using System.Text; namespace ICSharpCode.NRefactory.Xml { /// - /// Visitor for the XML tree + /// Derive from this class to create visitor for the XML tree /// - public interface IAXmlVisitor + public abstract class AXmlVisitor { - /// Visit document - void VisitDocument(AXmlDocument document); + /// Visit AXmlDocument + public virtual void VisitDocument(AXmlDocument document) + { + foreach (AXmlObject child in document.Children) + child.AcceptVisitor(this); + } - /// Visit tag - void VisitTag(AXmlTag tag); + /// Visit AXmlElement + public virtual void VisitElement(AXmlElement element) + { + foreach (AXmlObject child in element.Children) + child.AcceptVisitor(this); + } - /// Visit attribute - void VisitAttribute(AXmlAttribute attribute); + /// Visit AXmlTag + public virtual void VisitTag(AXmlTag tag) + { + foreach (AXmlObject child in tag.Children) + child.AcceptVisitor(this); + } - /// Visit text - void VisitText(AXmlText text); + /// Visit AXmlAttribute + public virtual void VisitAttribute(AXmlAttribute attribute) + { + + } - /// Visit element - void VisitElement(AXmlElement element); + /// Visit AXmlText + public virtual void VisitText(AXmlText text) + { + + } } -} +} \ No newline at end of file diff --git a/ICSharpCode.NRefactory.Xml/ICSharpCode.NRefactory.Xml.csproj b/ICSharpCode.NRefactory.Xml/ICSharpCode.NRefactory.Xml.csproj index d59380abda..e98d2e0a8d 100644 --- a/ICSharpCode.NRefactory.Xml/ICSharpCode.NRefactory.Xml.csproj +++ b/ICSharpCode.NRefactory.Xml/ICSharpCode.NRefactory.Xml.csproj @@ -68,8 +68,8 @@ + - diff --git a/ICSharpCode.NRefactory/TypeSystem/IParsedFile.cs b/ICSharpCode.NRefactory/TypeSystem/IParsedFile.cs index 07863c799f..0a9a04f83e 100644 --- a/ICSharpCode.NRefactory/TypeSystem/IParsedFile.cs +++ b/ICSharpCode.NRefactory/TypeSystem/IParsedFile.cs @@ -34,7 +34,7 @@ namespace ICSharpCode.NRefactory.TypeSystem /// /// Gets the time when the file was last written. /// - DateTime LastWriteTime { get; } + DateTime? LastWriteTime { get; set; } /// /// Gets all top-level type definitions.