mirror of https://github.com/icsharpcode/ILSpy.git
13 changed files with 9 additions and 567 deletions
@ -1,231 +0,0 @@ |
|||||||
// Copyright (c) 2010-2013 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
|
|
||||||
// without restriction, including without limitation the rights to use, copy, modify, merge,
|
|
||||||
// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons
|
|
||||||
// to whom the Software is furnished to do so, subject to the following conditions:
|
|
||||||
//
|
|
||||||
// The above copyright notice and this permission notice shall be included in all copies or
|
|
||||||
// substantial portions of the Software.
|
|
||||||
//
|
|
||||||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
|
|
||||||
// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
|
|
||||||
// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE
|
|
||||||
// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
|
|
||||||
// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
|
||||||
// DEALINGS IN THE SOFTWARE.
|
|
||||||
|
|
||||||
using System; |
|
||||||
using System.Globalization; |
|
||||||
using ICSharpCode.Decompiler.CSharp.Syntax; |
|
||||||
|
|
||||||
namespace ICSharpCode.Decompiler.TypeSystem |
|
||||||
{ |
|
||||||
[Serializable] |
|
||||||
public struct DomRegion : IEquatable<DomRegion> |
|
||||||
{ |
|
||||||
readonly string fileName; |
|
||||||
readonly int beginLine; |
|
||||||
readonly int endLine; |
|
||||||
readonly int beginColumn; |
|
||||||
readonly int endColumn; |
|
||||||
|
|
||||||
public readonly static DomRegion Empty = new DomRegion(); |
|
||||||
|
|
||||||
public bool IsEmpty { |
|
||||||
get { |
|
||||||
return BeginLine <= 0; |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
public string FileName { |
|
||||||
get { return fileName; } |
|
||||||
} |
|
||||||
|
|
||||||
public int BeginLine { |
|
||||||
get { |
|
||||||
return beginLine; |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
/// <value>
|
|
||||||
/// if the end line is == -1 the end column is -1 too
|
|
||||||
/// this stands for an unknwon end
|
|
||||||
/// </value>
|
|
||||||
public int EndLine { |
|
||||||
get { |
|
||||||
return endLine; |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
public int BeginColumn { |
|
||||||
get { |
|
||||||
return beginColumn; |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
/// <value>
|
|
||||||
/// if the end column is == -1 the end line is -1 too
|
|
||||||
/// this stands for an unknown end
|
|
||||||
/// </value>
|
|
||||||
public int EndColumn { |
|
||||||
get { |
|
||||||
return endColumn; |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
public TextLocation Begin { |
|
||||||
get { |
|
||||||
return new TextLocation (beginLine, beginColumn); |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
public TextLocation End { |
|
||||||
get { |
|
||||||
return new TextLocation (endLine, endColumn); |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
public DomRegion (int beginLine, int beginColumn, int endLine, int endColumn) : this (null, beginLine, beginColumn, endLine, endColumn) |
|
||||||
{ |
|
||||||
} |
|
||||||
|
|
||||||
public DomRegion(string fileName, int beginLine, int beginColumn, int endLine, int endColumn) |
|
||||||
{ |
|
||||||
this.fileName = fileName; |
|
||||||
this.beginLine = beginLine; |
|
||||||
this.beginColumn = beginColumn; |
|
||||||
this.endLine = endLine; |
|
||||||
this.endColumn = endColumn; |
|
||||||
} |
|
||||||
|
|
||||||
public DomRegion (int beginLine, int beginColumn) : this (null, beginLine, beginColumn) |
|
||||||
{ |
|
||||||
} |
|
||||||
|
|
||||||
public DomRegion (string fileName, int beginLine, int beginColumn) |
|
||||||
{ |
|
||||||
this.fileName = fileName; |
|
||||||
this.beginLine = beginLine; |
|
||||||
this.beginColumn = beginColumn; |
|
||||||
this.endLine = -1; |
|
||||||
this.endColumn = -1; |
|
||||||
} |
|
||||||
|
|
||||||
public DomRegion (TextLocation begin, TextLocation end) : this (null, begin, end) |
|
||||||
{ |
|
||||||
} |
|
||||||
|
|
||||||
public DomRegion (string fileName, TextLocation begin, TextLocation end) |
|
||||||
{ |
|
||||||
this.fileName = fileName; |
|
||||||
this.beginLine = begin.Line; |
|
||||||
this.beginColumn = begin.Column; |
|
||||||
this.endLine = end.Line; |
|
||||||
this.endColumn = end.Column; |
|
||||||
} |
|
||||||
|
|
||||||
public DomRegion (TextLocation begin) : this (null, begin) |
|
||||||
{ |
|
||||||
} |
|
||||||
|
|
||||||
public DomRegion (string fileName, TextLocation begin) |
|
||||||
{ |
|
||||||
this.fileName = fileName; |
|
||||||
this.beginLine = begin.Line; |
|
||||||
this.beginColumn = begin.Column; |
|
||||||
this.endLine = -1; |
|
||||||
this.endColumn = -1; |
|
||||||
} |
|
||||||
|
|
||||||
/// <remarks>
|
|
||||||
/// Returns true, if the given coordinates (line, column) are in the region.
|
|
||||||
/// This method assumes that for an unknown end the end line is == -1
|
|
||||||
/// </remarks>
|
|
||||||
public bool IsInside(int line, int column) |
|
||||||
{ |
|
||||||
if (IsEmpty) |
|
||||||
return false; |
|
||||||
return line >= BeginLine && |
|
||||||
(line <= EndLine || EndLine == -1) && |
|
||||||
(line != BeginLine || column >= BeginColumn) && |
|
||||||
(line != EndLine || column <= EndColumn); |
|
||||||
} |
|
||||||
|
|
||||||
public bool IsInside(TextLocation location) |
|
||||||
{ |
|
||||||
return IsInside(location.Line, location.Column); |
|
||||||
} |
|
||||||
|
|
||||||
/// <remarks>
|
|
||||||
/// Returns true, if the given coordinates (line, column) are in the region.
|
|
||||||
/// This method assumes that for an unknown end the end line is == -1
|
|
||||||
/// </remarks>
|
|
||||||
public bool Contains(int line, int column) |
|
||||||
{ |
|
||||||
if (IsEmpty) |
|
||||||
return false; |
|
||||||
return line >= BeginLine && |
|
||||||
(line <= EndLine || EndLine == -1) && |
|
||||||
(line != BeginLine || column >= BeginColumn) && |
|
||||||
(line != EndLine || column < EndColumn); |
|
||||||
} |
|
||||||
|
|
||||||
public bool Contains(TextLocation location) |
|
||||||
{ |
|
||||||
return Contains(location.Line, location.Column); |
|
||||||
} |
|
||||||
|
|
||||||
public bool IntersectsWith (DomRegion region) |
|
||||||
{ |
|
||||||
return region.Begin <= End && region.End >= Begin; |
|
||||||
} |
|
||||||
|
|
||||||
public bool OverlapsWith (DomRegion region) |
|
||||||
{ |
|
||||||
var maxBegin = Begin > region.Begin ? Begin : region.Begin; |
|
||||||
var minEnd = End < region.End ? End : region.End; |
|
||||||
return maxBegin < minEnd; |
|
||||||
} |
|
||||||
|
|
||||||
public override string ToString() |
|
||||||
{ |
|
||||||
return string.Format( |
|
||||||
CultureInfo.InvariantCulture, |
|
||||||
"[DomRegion FileName={0}, Begin=({1}, {2}), End=({3}, {4})]", |
|
||||||
fileName, beginLine, beginColumn, endLine, endColumn); |
|
||||||
} |
|
||||||
|
|
||||||
public override bool Equals(object obj) |
|
||||||
{ |
|
||||||
return obj is DomRegion && Equals((DomRegion)obj); |
|
||||||
} |
|
||||||
|
|
||||||
public override int GetHashCode() |
|
||||||
{ |
|
||||||
unchecked { |
|
||||||
int hashCode = fileName != null ? fileName.GetHashCode() : 0; |
|
||||||
hashCode ^= beginColumn + 1100009 * beginLine + 1200007 * endLine + 1300021 * endColumn; |
|
||||||
return hashCode; |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
public bool Equals(DomRegion other) |
|
||||||
{ |
|
||||||
return beginLine == other.beginLine && beginColumn == other.beginColumn |
|
||||||
&& endLine == other.endLine && endColumn == other.endColumn |
|
||||||
&& fileName == other.fileName; |
|
||||||
} |
|
||||||
|
|
||||||
public static bool operator ==(DomRegion left, DomRegion right) |
|
||||||
{ |
|
||||||
return left.Equals(right); |
|
||||||
} |
|
||||||
|
|
||||||
public static bool operator !=(DomRegion left, DomRegion right) |
|
||||||
{ |
|
||||||
return !left.Equals(right); |
|
||||||
} |
|
||||||
} |
|
||||||
} |
|
@ -1,140 +0,0 @@ |
|||||||
//
|
|
||||||
// Error.cs
|
|
||||||
//
|
|
||||||
// Author:
|
|
||||||
// Mike Krüger <mike@icsharpcode.net>
|
|
||||||
//
|
|
||||||
// Copyright (c) 2011 Mike Krüger <mike@icsharpcode.net>
|
|
||||||
//
|
|
||||||
// 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 without restriction, including without limitation the rights
|
|
||||||
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
||||||
// copies of the Software, and to permit persons to whom the Software is
|
|
||||||
// furnished to do so, subject to the following conditions:
|
|
||||||
//
|
|
||||||
// The above copyright notice and this permission notice shall be included in
|
|
||||||
// all copies or substantial portions of the Software.
|
|
||||||
//
|
|
||||||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
||||||
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
||||||
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
||||||
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
||||||
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
||||||
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
|
||||||
// THE SOFTWARE.
|
|
||||||
|
|
||||||
using System; |
|
||||||
using ICSharpCode.Decompiler.CSharp.Syntax; |
|
||||||
|
|
||||||
namespace ICSharpCode.Decompiler.TypeSystem |
|
||||||
{ |
|
||||||
/// <summary>
|
|
||||||
/// Enum that describes the type of an error.
|
|
||||||
/// </summary>
|
|
||||||
public enum ErrorType |
|
||||||
{ |
|
||||||
Unknown, |
|
||||||
Error, |
|
||||||
Warning |
|
||||||
} |
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Descibes an error during parsing.
|
|
||||||
/// </summary>
|
|
||||||
[Serializable] |
|
||||||
public class Error |
|
||||||
{ |
|
||||||
readonly ErrorType errorType; |
|
||||||
readonly string message; |
|
||||||
readonly DomRegion region; |
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// The type of the error.
|
|
||||||
/// </summary>
|
|
||||||
public ErrorType ErrorType { get { return errorType; } } |
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// The error description.
|
|
||||||
/// </summary>
|
|
||||||
public string Message { get { return message; } } |
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// The region of the error.
|
|
||||||
/// </summary>
|
|
||||||
public DomRegion Region { get { return region; } } |
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Initializes a new instance of the <see cref="Error"/> class.
|
|
||||||
/// </summary>
|
|
||||||
/// <param name='errorType'>
|
|
||||||
/// The error type.
|
|
||||||
/// </param>
|
|
||||||
/// <param name='message'>
|
|
||||||
/// The description of the error.
|
|
||||||
/// </param>
|
|
||||||
/// <param name='region'>
|
|
||||||
/// The region of the error.
|
|
||||||
/// </param>
|
|
||||||
public Error (ErrorType errorType, string message, DomRegion region) |
|
||||||
{ |
|
||||||
this.errorType = errorType; |
|
||||||
this.message = message; |
|
||||||
this.region = region; |
|
||||||
} |
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Initializes a new instance of the <see cref="Error"/> class.
|
|
||||||
/// </summary>
|
|
||||||
/// <param name='errorType'>
|
|
||||||
/// The error type.
|
|
||||||
/// </param>
|
|
||||||
/// <param name='message'>
|
|
||||||
/// The description of the error.
|
|
||||||
/// </param>
|
|
||||||
/// <param name='location'>
|
|
||||||
/// The location of the error.
|
|
||||||
/// </param>
|
|
||||||
public Error (ErrorType errorType, string message, TextLocation location) |
|
||||||
{ |
|
||||||
this.errorType = errorType; |
|
||||||
this.message = message; |
|
||||||
this.region = new DomRegion (location, location); |
|
||||||
} |
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Initializes a new instance of the <see cref="Error"/> class.
|
|
||||||
/// </summary>
|
|
||||||
/// <param name='errorType'>
|
|
||||||
/// The error type.
|
|
||||||
/// </param>
|
|
||||||
/// <param name='message'>
|
|
||||||
/// The description of the error.
|
|
||||||
/// </param>
|
|
||||||
/// <param name='line'>
|
|
||||||
/// The line of the error.
|
|
||||||
/// </param>
|
|
||||||
/// <param name='col'>
|
|
||||||
/// The column of the error.
|
|
||||||
/// </param>
|
|
||||||
public Error (ErrorType errorType, string message, int line, int col) : this (errorType, message, new TextLocation (line, col)) |
|
||||||
{ |
|
||||||
} |
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Initializes a new instance of the <see cref="Error"/> class.
|
|
||||||
/// </summary>
|
|
||||||
/// <param name='errorType'>
|
|
||||||
/// The error type.
|
|
||||||
/// </param>
|
|
||||||
/// <param name='message'>
|
|
||||||
/// The description of the error.
|
|
||||||
/// </param>
|
|
||||||
public Error (ErrorType errorType, string message) |
|
||||||
{ |
|
||||||
this.errorType = errorType; |
|
||||||
this.message = message; |
|
||||||
this.region = DomRegion.Empty; |
|
||||||
} |
|
||||||
} |
|
||||||
} |
|
@ -1,78 +0,0 @@ |
|||||||
// Copyright (c) 2010-2013 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
|
|
||||||
// without restriction, including without limitation the rights to use, copy, modify, merge,
|
|
||||||
// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons
|
|
||||||
// to whom the Software is furnished to do so, subject to the following conditions:
|
|
||||||
//
|
|
||||||
// The above copyright notice and this permission notice shall be included in all copies or
|
|
||||||
// substantial portions of the Software.
|
|
||||||
//
|
|
||||||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
|
|
||||||
// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
|
|
||||||
// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE
|
|
||||||
// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
|
|
||||||
// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
|
||||||
// DEALINGS IN THE SOFTWARE.
|
|
||||||
|
|
||||||
using System; |
|
||||||
using System.Collections.Generic; |
|
||||||
using ICSharpCode.Decompiler.CSharp.Syntax; |
|
||||||
|
|
||||||
namespace ICSharpCode.Decompiler.TypeSystem |
|
||||||
{ |
|
||||||
/// <summary>
|
|
||||||
/// Represents a single file that was parsed.
|
|
||||||
/// </summary>
|
|
||||||
public interface IUnresolvedFile |
|
||||||
{ |
|
||||||
/// <summary>
|
|
||||||
/// Returns the full path of the file.
|
|
||||||
/// </summary>
|
|
||||||
string FileName { get; } |
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Gets the time when the file was last written.
|
|
||||||
/// </summary>
|
|
||||||
DateTime? LastWriteTime { get; set; } |
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Gets all top-level type definitions.
|
|
||||||
/// </summary>
|
|
||||||
IList<IUnresolvedTypeDefinition> TopLevelTypeDefinitions { get; } |
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Gets all assembly attributes that are defined in this file.
|
|
||||||
/// </summary>
|
|
||||||
IList<IUnresolvedAttribute> AssemblyAttributes { get; } |
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Gets all module attributes that are defined in this file.
|
|
||||||
/// </summary>
|
|
||||||
IList<IUnresolvedAttribute> ModuleAttributes { get; } |
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Gets the top-level type defined at the specified location.
|
|
||||||
/// Returns null if no type is defined at that location.
|
|
||||||
/// </summary>
|
|
||||||
IUnresolvedTypeDefinition GetTopLevelTypeDefinition(TextLocation location); |
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Gets the type (potentially a nested type) defined at the specified location.
|
|
||||||
/// Returns null if no type is defined at that location.
|
|
||||||
/// </summary>
|
|
||||||
IUnresolvedTypeDefinition GetInnermostTypeDefinition(TextLocation location); |
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Gets the member defined at the specified location.
|
|
||||||
/// Returns null if no member is defined at that location.
|
|
||||||
/// </summary>
|
|
||||||
IUnresolvedMember GetMember(TextLocation location); |
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Gets the parser errors.
|
|
||||||
/// </summary>
|
|
||||||
IList<Error> Errors { get; } |
|
||||||
} |
|
||||||
} |
|
Loading…
Reference in new issue