提交 9c42f02e 编写于 作者: G Gen Lu

Address code review comments

上级 eeb689ef
......@@ -494,6 +494,7 @@ IExpression IMemberReferenceExpression.Instance
protected override OperationKind ExpressionKind => OperationKind.MethodBindingExpression;
// SyntaxNode for MethodBindingExpression is the argument of DelegateCreationExpression
SyntaxNode IOperation.Syntax => this.Argument.Syntax;
public override void Accept(OperationVisitor visitor)
......
......@@ -32,6 +32,7 @@ ImmutableArray<IStatement> IBlockStatement.Statements
{
get
{
// This is to filter out operations of kind None.
return (ImmutableArray<IStatement>) s_blockStatementsMappings.GetValue(this,
blockStatement => { return blockStatement.Statements.AsImmutable<IStatement>().WhereAsArray(statement => statement.Kind != OperationKind.None); }
);
......
......@@ -1149,12 +1149,10 @@ public class LambdaTestAnalyzer : DiagnosticAnalyzer
DiagnosticSeverity.Warning,
isEnabledByDefault: true);
public sealed override ImmutableArray<DiagnosticDescriptor> SupportedDiagnostics
{
get { return ImmutableArray.Create(LambdaExpressionDescriptor,
TooManyStatementsInLambdaExpressionDescriptor,
NoneOperationInLambdaExpressionDescriptor); }
}
public sealed override ImmutableArray<DiagnosticDescriptor> SupportedDiagnostics =>
ImmutableArray.Create(LambdaExpressionDescriptor,
TooManyStatementsInLambdaExpressionDescriptor,
NoneOperationInLambdaExpressionDescriptor);
public sealed override void Initialize(AnalysisContext context)
{
......
......@@ -12,13 +12,13 @@ public abstract class OperationWalker : OperationVisitor
{
private int _recursionDepth;
private void VisitList<T>(ImmutableArray<T> list) where T : IOperation
private void VisitArray<T>(ImmutableArray<T> list) where T : IOperation
{
if (!list.IsDefault)
{
for (int i = 0; i < list.Length; i++)
foreach (var operation in list)
{
Visit(list[i]);
Visit(operation);
}
}
}
......@@ -28,20 +28,27 @@ public override void Visit(IOperation operation)
if (operation != null)
{
_recursionDepth++;
StackGuard.EnsureSufficientExecutionStack(_recursionDepth);
operation.Accept(this);
_recursionDepth--;
try
{
StackGuard.EnsureSufficientExecutionStack(_recursionDepth);
operation.Accept(this);
}
finally
{
_recursionDepth--;
}
}
}
public override void VisitBlockStatement(IBlockStatement operation)
{
VisitList(operation.Statements);
VisitArray(operation.Statements);
}
public override void VisitVariableDeclarationStatement(IVariableDeclarationStatement operation)
{
VisitList(operation.Variables);
VisitArray(operation.Variables);
}
public override void VisitVariable(IVariable operation)
......@@ -52,13 +59,13 @@ public override void VisitVariable(IVariable operation)
public override void VisitSwitchStatement(ISwitchStatement operation)
{
Visit(operation.Value);
VisitList(operation.Cases);
VisitArray(operation.Cases);
}
public override void VisitCase(ICase operation)
{
VisitList(operation.Clauses);
VisitList(operation.Body);
VisitArray(operation.Clauses);
VisitArray(operation.Body);
}
public override void VisitSingleValueCaseClause(ISingleValueCaseClause operation)
......@@ -100,10 +107,10 @@ public override void VisitWhileUntilLoopStatement(IWhileUntilLoopStatement opera
public override void VisitForLoopStatement(IForLoopStatement operation)
{
VisitList(operation.Before);
VisitArray(operation.Before);
Visit(operation.Condition);
Visit(operation.Body);
VisitList(operation.AtLoopBottom);
VisitArray(operation.AtLoopBottom);
}
public override void VisitForEachLoopStatement(IForEachLoopStatement operation)
......@@ -148,7 +155,7 @@ public override void VisitLockStatement(ILockStatement operation)
public override void VisitTryStatement(ITryStatement operation)
{
Visit(operation.Body);
VisitList(operation.Catches);
VisitArray(operation.Catches);
Visit(operation.FinallyHandler);
}
......@@ -194,7 +201,7 @@ public override void VisitEndStatement(IStatement operation)
public override void VisitInvocationExpression(IInvocationExpression operation)
{
Visit(operation.Instance);
VisitList(operation.ArgumentsInSourceOrder);
VisitArray(operation.ArgumentsInSourceOrder);
}
public override void VisitArgument(IArgument operation)
......@@ -210,7 +217,7 @@ public override void VisitOmittedArgumentExpression(IExpression operation)
public override void VisitArrayElementReferenceExpression(IArrayElementReferenceExpression operation)
{
Visit(operation.ArrayReference);
VisitList(operation.Indices);
VisitArray(operation.Indices);
}
public override void VisitPointerIndirectionReferenceExpression(IPointerIndirectionReferenceExpression operation)
......@@ -318,8 +325,8 @@ public override void VisitAddressOfExpression(IAddressOfExpression operation)
public override void VisitObjectCreationExpression(IObjectCreationExpression operation)
{
VisitList(operation.ConstructorArguments);
VisitList(operation.MemberInitializers);
VisitArray(operation.ConstructorArguments);
VisitArray(operation.MemberInitializers);
}
public override void VisitFieldInitializer(IFieldInitializer operation)
......@@ -339,13 +346,13 @@ public override void VisitParameterInitializer(IParameterInitializer operation)
public override void VisitArrayCreationExpression(IArrayCreationExpression operation)
{
VisitList(operation.DimensionSizes);
VisitArray(operation.DimensionSizes);
Visit(operation.Initializer);
}
public override void VisitArrayInitializer(IArrayInitializer operation)
{
VisitList(operation.ElementValues);
VisitArray(operation.ElementValues);
}
public override void VisitAssignmentExpression(IAssignmentExpression operation)
......
......@@ -851,6 +851,7 @@ Namespace Microsoft.CodeAnalysis.VisualBasic
Private ReadOnly Property IStatements As ImmutableArray(Of IStatement) Implements IBlockStatement.Statements
Get
' This is to filter out operations of kind None.
Dim statements = s_blockStatementsMappings.GetValue(Me, Function(boundBlock)
Return boundBlock.Statements.As(Of IStatement).WhereAsArray(Function(statement)
Return statement.Kind <> OperationKind.None
......
......@@ -1160,7 +1160,7 @@ End Class
comp.VerifyAnalyzerDiagnostics({New MemberReferenceAnalyzer}, Nothing, Nothing, False,
Diagnostic(MemberReferenceAnalyzer.HandlerAddedDescriptor.Id, "AddHandler Mumble, New MumbleEventHandler(AddressOf Mumbler)").WithLocation(7, 9),
Diagnostic(MemberReferenceAnalyzer.MethodBindingDescriptor.Id, "AddressOf Mumbler").WithLocation(7, 51),
Diagnostic("HandlerAdded", "AddHandler Mumble, New MumbleEventHandler(Sub(s As Object, a As System.EventArgs)
Diagnostic(MemberReferenceAnalyzer.HandlerAddedDescriptor.Id, "AddHandler Mumble, New MumbleEventHandler(Sub(s As Object, a As System.EventArgs)
End Sub)").WithLocation(8, 9),
Diagnostic(MemberReferenceAnalyzer.FieldReferenceDescriptor.Id, "Mumble").WithLocation(10, 20),
Diagnostic(MemberReferenceAnalyzer.MethodBindingDescriptor.Id, "AddressOf Mumbler").WithLocation(12, 39),
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册