Browse Source

Removed empty expression / fixed potential bug where unary operator

expression may be null.
pull/45/merge
Mike Krüger 12 years ago
parent
commit
f5d8ea6631
  1. 15
      ICSharpCode.NRefactory.CSharp/Ast/DepthFirstAstVisitor.cs
  2. 79
      ICSharpCode.NRefactory.CSharp/Ast/Expressions/EmptyExpression.cs
  3. 16
      ICSharpCode.NRefactory.CSharp/Ast/Expressions/ErrorExpression.cs
  4. 3
      ICSharpCode.NRefactory.CSharp/Ast/Expressions/UnaryOperatorExpression.cs
  5. 3
      ICSharpCode.NRefactory.CSharp/Ast/IAstVisitor.cs
  6. 7
      ICSharpCode.NRefactory.CSharp/Ast/ObservableAstVisitor.cs
  7. 1
      ICSharpCode.NRefactory.CSharp/ICSharpCode.NRefactory.CSharp.csproj
  8. 6
      ICSharpCode.NRefactory.CSharp/OutputVisitor/CSharpOutputVisitor.cs
  9. 5
      ICSharpCode.NRefactory.CSharp/OutputVisitor/CodeDomConvertVisitor.cs
  10. 8
      ICSharpCode.NRefactory.CSharp/Parser/CSharpParser.cs
  11. 2
      ICSharpCode.NRefactory.CSharp/Refactoring/TypeSystemAstBuilder.cs
  12. 4
      ICSharpCode.NRefactory.CSharp/Refactoring/VariableReferenceGraph.cs
  13. 5
      ICSharpCode.NRefactory.CSharp/Resolver/ResolveVisitor.cs

15
ICSharpCode.NRefactory.CSharp/Ast/DepthFirstAstVisitor.cs

@ -614,11 +614,6 @@ namespace ICSharpCode.NRefactory.CSharp @@ -614,11 +614,6 @@ 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 @@ -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 @@ -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);

79
ICSharpCode.NRefactory.CSharp/Ast/Expressions/EmptyExpression.cs

@ -1,79 +0,0 @@ @@ -1,79 +0,0 @@
//
// EmptyExpression.cs
//
// Author:
// Mike Krüger <mkrueger@novell.com>
//
// 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
{
/// <summary>
/// Type&lt;[EMPTY]&gt;
/// </summary>
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<T> (IAstVisitor<T> visitor)
{
return visitor.VisitEmptyExpression (this);
}
public override S AcceptVisitor<T, S> (IAstVisitor<T, S> 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;
}
}
}

16
ICSharpCode.NRefactory.CSharp/Ast/Expressions/ErrorExpression.cs

@ -43,6 +43,11 @@ namespace ICSharpCode.NRefactory.CSharp @@ -43,6 +43,11 @@ namespace ICSharpCode.NRefactory.CSharp
}
}
public string Error {
get;
private set;
}
public ErrorExpression ()
{
}
@ -52,6 +57,17 @@ namespace ICSharpCode.NRefactory.CSharp @@ -52,6 +57,17 @@ 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

3
ICSharpCode.NRefactory.CSharp/Ast/Expressions/UnaryOperatorExpression.cs

@ -63,8 +63,9 @@ namespace ICSharpCode.NRefactory.CSharp @@ -63,8 +63,9 @@ namespace ICSharpCode.NRefactory.CSharp
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); }
}

3
ICSharpCode.NRefactory.CSharp/Ast/IAstVisitor.cs

@ -59,7 +59,6 @@ namespace ICSharpCode.NRefactory.CSharp @@ -59,7 +59,6 @@ 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);
@ -190,7 +189,6 @@ namespace ICSharpCode.NRefactory.CSharp @@ -190,7 +189,6 @@ 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);
@ -321,7 +319,6 @@ namespace ICSharpCode.NRefactory.CSharp @@ -321,7 +319,6 @@ 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);

7
ICSharpCode.NRefactory.CSharp/Ast/ObservableAstVisitor.cs

@ -842,13 +842,6 @@ namespace ICSharpCode.NRefactory.CSharp @@ -842,13 +842,6 @@ namespace ICSharpCode.NRefactory.CSharp
Visit(EnterNamedExpression, LeaveNamedExpression, namedExpression);
}
public event Action<EmptyExpression> EnterEmptyExpression, LeaveEmptyExpression;
void IAstVisitor.VisitEmptyExpression(EmptyExpression emptyExpression)
{
Visit(EnterEmptyExpression, LeaveEmptyExpression, emptyExpression);
}
void IAstVisitor.VisitPatternPlaceholder(AstNode placeholder, PatternMatching.Pattern pattern)
{
}

1
ICSharpCode.NRefactory.CSharp/ICSharpCode.NRefactory.CSharp.csproj

@ -119,7 +119,6 @@ @@ -119,7 +119,6 @@
<Compile Include="Ast\Expressions\ConditionalExpression.cs" />
<Compile Include="Ast\Expressions\DefaultValueExpression.cs" />
<Compile Include="Ast\Expressions\DirectionExpression.cs" />
<Compile Include="Ast\Expressions\EmptyExpression.cs" />
<Compile Include="Ast\Expressions\Expression.cs" />
<Compile Include="Ast\Expressions\IdentifierExpression.cs" />
<Compile Include="Ast\Expressions\IndexerExpression.cs" />

6
ICSharpCode.NRefactory.CSharp/OutputVisitor/CSharpOutputVisitor.cs

@ -989,12 +989,6 @@ namespace ICSharpCode.NRefactory.CSharp @@ -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)
{

5
ICSharpCode.NRefactory.CSharp/OutputVisitor/CodeDomConvertVisitor.cs

@ -591,11 +591,6 @@ namespace ICSharpCode.NRefactory.CSharp @@ -591,11 +591,6 @@ namespace ICSharpCode.NRefactory.CSharp
return MakeSnippetExpression(uncheckedExpression);
}
CodeObject IAstVisitor<CodeObject>.VisitEmptyExpression(EmptyExpression emptyExpression)
{
return null;
}
CodeObject IAstVisitor<CodeObject>.VisitQueryExpression(QueryExpression queryExpression)
{
return MakeSnippetExpression(queryExpression);

8
ICSharpCode.NRefactory.CSharp/Parser/CSharpParser.cs

@ -1466,11 +1466,6 @@ namespace ICSharpCode.NRefactory.CSharp @@ -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 @@ -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)

2
ICSharpCode.NRefactory.CSharp/Refactoring/TypeSystemAstBuilder.cs

@ -436,7 +436,7 @@ namespace ICSharpCode.NRefactory.CSharp.Refactoring @@ -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();
}
}

4
ICSharpCode.NRefactory.CSharp/Refactoring/VariableReferenceGraph.cs

@ -362,10 +362,6 @@ namespace ICSharpCode.NRefactory.CSharp.Refactoring @@ -362,10 +362,6 @@ namespace ICSharpCode.NRefactory.CSharp.Refactoring
{
}
public override void VisitEmptyExpression (EmptyExpression emptyExpression)
{
}
#endregion
public override void VisitAssignmentExpression (AssignmentExpression assignmentExpression)

5
ICSharpCode.NRefactory.CSharp/Resolver/ResolveVisitor.cs

@ -1434,11 +1434,6 @@ namespace ICSharpCode.NRefactory.CSharp.Resolver @@ -1434,11 +1434,6 @@ namespace ICSharpCode.NRefactory.CSharp.Resolver
}
}
ResolveResult IAstVisitor<ResolveResult>.VisitEmptyExpression(EmptyExpression emptyExpression)
{
return errorResult;
}
ResolveResult IAstVisitor<ResolveResult>.VisitIndexerExpression(IndexerExpression indexerExpression)
{
if (resolverEnabled || NeedsResolvingDueToNamedArguments(indexerExpression)) {

Loading…
Cancel
Save