diff --git a/ICSharpCode.NRefactory.CSharp/Ast/DepthFirstAstVisitor.cs b/ICSharpCode.NRefactory.CSharp/Ast/DepthFirstAstVisitor.cs index 81982caf52..bb1c7c0964 100644 --- a/ICSharpCode.NRefactory.CSharp/Ast/DepthFirstAstVisitor.cs +++ b/ICSharpCode.NRefactory.CSharp/Ast/DepthFirstAstVisitor.cs @@ -613,12 +613,7 @@ namespace ICSharpCode.NRefactory.CSharp { VisitChildren (namedExpression); } - - public virtual void VisitEmptyExpression (EmptyExpression emptyExpression) - { - VisitChildren (emptyExpression); - } - + public virtual void VisitPatternPlaceholder(AstNode placeholder, PatternMatching.Pattern pattern) { VisitChildren (placeholder); @@ -1212,11 +1207,6 @@ namespace ICSharpCode.NRefactory.CSharp return VisitChildren (namedExpression); } - public virtual T VisitEmptyExpression (EmptyExpression emptyExpression) - { - return VisitChildren (emptyExpression); - } - public virtual T VisitPatternPlaceholder(AstNode placeholder, PatternMatching.Pattern pattern) { return VisitChildren (placeholder); @@ -1810,11 +1800,6 @@ namespace ICSharpCode.NRefactory.CSharp return VisitChildren (namedExpression, data); } - public virtual S VisitEmptyExpression (EmptyExpression emptyExpression, T data) - { - return VisitChildren (emptyExpression, data); - } - public virtual S VisitPatternPlaceholder(AstNode placeholder, PatternMatching.Pattern pattern, T data) { return VisitChildren (placeholder, data); diff --git a/ICSharpCode.NRefactory.CSharp/Ast/Expressions/EmptyExpression.cs b/ICSharpCode.NRefactory.CSharp/Ast/Expressions/EmptyExpression.cs deleted file mode 100644 index 7dc5da777e..0000000000 --- a/ICSharpCode.NRefactory.CSharp/Ast/Expressions/EmptyExpression.cs +++ /dev/null @@ -1,79 +0,0 @@ -// -// EmptyExpression.cs -// -// Author: -// Mike Krüger -// -// Copyright (c) 2011 Novell, Inc (http://www.novell.com) -// -// 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; - -namespace ICSharpCode.NRefactory.CSharp -{ - /// - /// Type<[EMPTY]> - /// - public class EmptyExpression : Expression - { - TextLocation location; - - public override TextLocation StartLocation { - get { - return location; - } - } - - public override TextLocation EndLocation { - get { - return location; - } - } - - public EmptyExpression () - { - } - - public EmptyExpression (TextLocation location) - { - this.location = location; - } - - public override void AcceptVisitor (IAstVisitor visitor) - { - visitor.VisitEmptyExpression (this); - } - - public override T AcceptVisitor (IAstVisitor visitor) - { - return visitor.VisitEmptyExpression (this); - } - - public override S AcceptVisitor (IAstVisitor visitor, T data) - { - return visitor.VisitEmptyExpression (this, data); - } - - protected internal override bool DoMatch (AstNode other, PatternMatching.Match match) - { - var o = other as EmptyExpression; - return o != null; - } - } -} diff --git a/ICSharpCode.NRefactory.CSharp/Ast/Expressions/ErrorExpression.cs b/ICSharpCode.NRefactory.CSharp/Ast/Expressions/ErrorExpression.cs index bd6506c81a..88753b8fac 100644 --- a/ICSharpCode.NRefactory.CSharp/Ast/Expressions/ErrorExpression.cs +++ b/ICSharpCode.NRefactory.CSharp/Ast/Expressions/ErrorExpression.cs @@ -43,6 +43,11 @@ namespace ICSharpCode.NRefactory.CSharp } } + public string Error { + get; + private set; + } + public ErrorExpression () { } @@ -51,7 +56,18 @@ namespace ICSharpCode.NRefactory.CSharp { this.location = location; } - + + public ErrorExpression (string error) + { + this.Error = error; + } + + public ErrorExpression (string error, TextLocation location) + { + this.location = location; + this.Error = error; + } + public override void AcceptVisitor (IAstVisitor visitor) { // nothing diff --git a/ICSharpCode.NRefactory.CSharp/Ast/Expressions/UnaryOperatorExpression.cs b/ICSharpCode.NRefactory.CSharp/Ast/Expressions/UnaryOperatorExpression.cs index 70d178728d..878d6132f6 100644 --- a/ICSharpCode.NRefactory.CSharp/Ast/Expressions/UnaryOperatorExpression.cs +++ b/ICSharpCode.NRefactory.CSharp/Ast/Expressions/UnaryOperatorExpression.cs @@ -62,9 +62,10 @@ namespace ICSharpCode.NRefactory.CSharp public CSharpTokenNode OperatorToken { get { return GetChildByRole (GetOperatorRole (Operator)); } } - + + static Expression NoUnaryExpressionError = new ErrorExpression ("No unary expression"); public Expression Expression { - get { return GetChildByRole (Roles.Expression); } + get { return GetChildByRole (Roles.Expression) ?? NoUnaryExpressionError; } set { SetChildByRole (Roles.Expression, value); } } diff --git a/ICSharpCode.NRefactory.CSharp/Ast/IAstVisitor.cs b/ICSharpCode.NRefactory.CSharp/Ast/IAstVisitor.cs index 8df9ccdab4..55912a2f2a 100644 --- a/ICSharpCode.NRefactory.CSharp/Ast/IAstVisitor.cs +++ b/ICSharpCode.NRefactory.CSharp/Ast/IAstVisitor.cs @@ -59,8 +59,7 @@ namespace ICSharpCode.NRefactory.CSharp void VisitTypeReferenceExpression(TypeReferenceExpression typeReferenceExpression); void VisitUnaryOperatorExpression(UnaryOperatorExpression unaryOperatorExpression); void VisitUncheckedExpression(UncheckedExpression uncheckedExpression); - void VisitEmptyExpression (EmptyExpression emptyExpression); - + void VisitQueryExpression(QueryExpression queryExpression); void VisitQueryContinuationClause(QueryContinuationClause queryContinuationClause); void VisitQueryFromClause(QueryFromClause queryFromClause); @@ -190,8 +189,7 @@ namespace ICSharpCode.NRefactory.CSharp S VisitTypeReferenceExpression(TypeReferenceExpression typeReferenceExpression); S VisitUnaryOperatorExpression(UnaryOperatorExpression unaryOperatorExpression); S VisitUncheckedExpression(UncheckedExpression uncheckedExpression); - S VisitEmptyExpression (EmptyExpression emptyExpression); - + S VisitQueryExpression(QueryExpression queryExpression); S VisitQueryContinuationClause(QueryContinuationClause queryContinuationClause); S VisitQueryFromClause(QueryFromClause queryFromClause); @@ -321,8 +319,7 @@ namespace ICSharpCode.NRefactory.CSharp S VisitTypeReferenceExpression(TypeReferenceExpression typeReferenceExpression, T data); S VisitUnaryOperatorExpression(UnaryOperatorExpression unaryOperatorExpression, T data); S VisitUncheckedExpression(UncheckedExpression uncheckedExpression, T data); - S VisitEmptyExpression (EmptyExpression emptyExpression, T data); - + S VisitQueryExpression(QueryExpression queryExpression, T data); S VisitQueryContinuationClause(QueryContinuationClause queryContinuationClause, T data); S VisitQueryFromClause(QueryFromClause queryFromClause, T data); diff --git a/ICSharpCode.NRefactory.CSharp/Ast/ObservableAstVisitor.cs b/ICSharpCode.NRefactory.CSharp/Ast/ObservableAstVisitor.cs index 3291bccf7b..d5fffdcfb7 100644 --- a/ICSharpCode.NRefactory.CSharp/Ast/ObservableAstVisitor.cs +++ b/ICSharpCode.NRefactory.CSharp/Ast/ObservableAstVisitor.cs @@ -842,13 +842,6 @@ namespace ICSharpCode.NRefactory.CSharp Visit(EnterNamedExpression, LeaveNamedExpression, namedExpression); } - public event Action EnterEmptyExpression, LeaveEmptyExpression; - - void IAstVisitor.VisitEmptyExpression(EmptyExpression emptyExpression) - { - Visit(EnterEmptyExpression, LeaveEmptyExpression, emptyExpression); - } - void IAstVisitor.VisitPatternPlaceholder(AstNode placeholder, PatternMatching.Pattern pattern) { } diff --git a/ICSharpCode.NRefactory.CSharp/ICSharpCode.NRefactory.CSharp.csproj b/ICSharpCode.NRefactory.CSharp/ICSharpCode.NRefactory.CSharp.csproj index fe3c73a03c..1cd11064d9 100644 --- a/ICSharpCode.NRefactory.CSharp/ICSharpCode.NRefactory.CSharp.csproj +++ b/ICSharpCode.NRefactory.CSharp/ICSharpCode.NRefactory.CSharp.csproj @@ -119,7 +119,6 @@ - diff --git a/ICSharpCode.NRefactory.CSharp/OutputVisitor/CSharpOutputVisitor.cs b/ICSharpCode.NRefactory.CSharp/OutputVisitor/CSharpOutputVisitor.cs index 46390a06be..a669d624dd 100644 --- a/ICSharpCode.NRefactory.CSharp/OutputVisitor/CSharpOutputVisitor.cs +++ b/ICSharpCode.NRefactory.CSharp/OutputVisitor/CSharpOutputVisitor.cs @@ -989,12 +989,6 @@ namespace ICSharpCode.NRefactory.CSharp EndNode(pointerReferenceExpression); } - public void VisitEmptyExpression(EmptyExpression emptyExpression) - { - StartNode(emptyExpression); - EndNode(emptyExpression); - } - #region VisitPrimitiveExpression public void VisitPrimitiveExpression(PrimitiveExpression primitiveExpression) { diff --git a/ICSharpCode.NRefactory.CSharp/OutputVisitor/CodeDomConvertVisitor.cs b/ICSharpCode.NRefactory.CSharp/OutputVisitor/CodeDomConvertVisitor.cs index 830e2672d2..c4b72e8967 100644 --- a/ICSharpCode.NRefactory.CSharp/OutputVisitor/CodeDomConvertVisitor.cs +++ b/ICSharpCode.NRefactory.CSharp/OutputVisitor/CodeDomConvertVisitor.cs @@ -591,11 +591,6 @@ namespace ICSharpCode.NRefactory.CSharp return MakeSnippetExpression(uncheckedExpression); } - CodeObject IAstVisitor.VisitEmptyExpression(EmptyExpression emptyExpression) - { - return null; - } - CodeObject IAstVisitor.VisitQueryExpression(QueryExpression queryExpression) { return MakeSnippetExpression(queryExpression); diff --git a/ICSharpCode.NRefactory.CSharp/Parser/CSharpParser.cs b/ICSharpCode.NRefactory.CSharp/Parser/CSharpParser.cs index 0d4a0fd055..b9ff324f8f 100644 --- a/ICSharpCode.NRefactory.CSharp/Parser/CSharpParser.cs +++ b/ICSharpCode.NRefactory.CSharp/Parser/CSharpParser.cs @@ -1466,11 +1466,6 @@ namespace ICSharpCode.NRefactory.CSharp return result; } - public override object Visit (Mono.CSharp.EmptyExpression emptyExpression) - { - return new ICSharpCode.NRefactory.CSharp.EmptyExpression (Convert (emptyExpression.Location)); - } - public override object Visit (Mono.CSharp.ErrorExpression emptyExpression) { return new ICSharpCode.NRefactory.CSharp.ErrorExpression (Convert (emptyExpression.Location)); @@ -1478,7 +1473,8 @@ namespace ICSharpCode.NRefactory.CSharp public override object Visit (EmptyExpressionStatement emptyExpressionStatement) { - return new EmptyExpression (Convert (emptyExpressionStatement.Location)); + // Should never happen. + throw new NotSupportedException(); } public override object Visit (If ifStatement) diff --git a/ICSharpCode.NRefactory.CSharp/Refactoring/TypeSystemAstBuilder.cs b/ICSharpCode.NRefactory.CSharp/Refactoring/TypeSystemAstBuilder.cs index 6be4c54016..323394457e 100644 --- a/ICSharpCode.NRefactory.CSharp/Refactoring/TypeSystemAstBuilder.cs +++ b/ICSharpCode.NRefactory.CSharp/Refactoring/TypeSystemAstBuilder.cs @@ -436,7 +436,7 @@ namespace ICSharpCode.NRefactory.CSharp.Refactoring } else if (rr.IsCompileTimeConstant) { return ConvertConstantValue(rr.Type, rr.ConstantValue); } else { - return new EmptyExpression(); + return new ErrorExpression(); } } diff --git a/ICSharpCode.NRefactory.CSharp/Refactoring/VariableReferenceGraph.cs b/ICSharpCode.NRefactory.CSharp/Refactoring/VariableReferenceGraph.cs index 97eb8532b1..236ebbd8c0 100644 --- a/ICSharpCode.NRefactory.CSharp/Refactoring/VariableReferenceGraph.cs +++ b/ICSharpCode.NRefactory.CSharp/Refactoring/VariableReferenceGraph.cs @@ -362,10 +362,6 @@ namespace ICSharpCode.NRefactory.CSharp.Refactoring { } - public override void VisitEmptyExpression (EmptyExpression emptyExpression) - { - } - #endregion public override void VisitAssignmentExpression (AssignmentExpression assignmentExpression) diff --git a/ICSharpCode.NRefactory.CSharp/Resolver/ResolveVisitor.cs b/ICSharpCode.NRefactory.CSharp/Resolver/ResolveVisitor.cs index 9c5612d41f..faa17e9be1 100644 --- a/ICSharpCode.NRefactory.CSharp/Resolver/ResolveVisitor.cs +++ b/ICSharpCode.NRefactory.CSharp/Resolver/ResolveVisitor.cs @@ -1434,11 +1434,6 @@ namespace ICSharpCode.NRefactory.CSharp.Resolver } } - ResolveResult IAstVisitor.VisitEmptyExpression(EmptyExpression emptyExpression) - { - return errorResult; - } - ResolveResult IAstVisitor.VisitIndexerExpression(IndexerExpression indexerExpression) { if (resolverEnabled || NeedsResolvingDueToNamedArguments(indexerExpression)) {