提交 c4a5bbe0 编写于 作者: M Manish Vasani

Add unit tests for IArrayElementReferenceExpression and make the API public again

Fixes #22006
上级 dc4b052f
......@@ -350,13 +350,13 @@ static void Main()
Initializer: IObjectOrCollectionInitializerExpression (OperationKind.ObjectOrCollectionInitializerExpression, Type: System.Int32[]) (Syntax: '{ [0] = 1, [1] = 2 }')
Initializers(2):
ISimpleAssignmentExpression (OperationKind.SimpleAssignmentExpression, Type: System.Int32) (Syntax: '[0] = 1')
Left: IArrayElementReferenceExpression (OperationKind.None) (Syntax: '[0]')
Left: IArrayElementReferenceExpression (OperationKind.ArrayElementReferenceExpression, Type: System.Int32) (Syntax: '[0]')
Array reference: IInstanceReferenceExpression (OperationKind.InstanceReferenceExpression, Type: System.Int32[]) (Syntax: 'a')
Indices(1):
ILiteralExpression (OperationKind.LiteralExpression, Type: System.Int32, Constant: 0) (Syntax: '0')
Right: ILiteralExpression (OperationKind.LiteralExpression, Type: System.Int32, Constant: 1) (Syntax: '1')
ISimpleAssignmentExpression (OperationKind.SimpleAssignmentExpression, Type: System.Int32) (Syntax: '[1] = 2')
Left: IArrayElementReferenceExpression (OperationKind.None) (Syntax: '[1]')
Left: IArrayElementReferenceExpression (OperationKind.ArrayElementReferenceExpression, Type: System.Int32) (Syntax: '[1]')
Array reference: IInstanceReferenceExpression (OperationKind.InstanceReferenceExpression, Type: System.Int32[]) (Syntax: 'a')
Indices(1):
ILiteralExpression (OperationKind.LiteralExpression, Type: System.Int32, Constant: 1) (Syntax: '1')
......
......@@ -42,7 +42,7 @@ static void Main()
IExpressionStatement (OperationKind.ExpressionStatement) (Syntax: 'sum += ids[i];')
Expression: ICompoundAssignmentExpression (BinaryOperatorKind.Add) (OperationKind.CompoundAssignmentExpression, Type: System.Int32) (Syntax: 'sum += ids[i]')
Left: ILocalReferenceExpression: sum (OperationKind.LocalReferenceExpression, Type: System.Int32) (Syntax: 'sum')
Right: IArrayElementReferenceExpression (OperationKind.None) (Syntax: 'ids[i]')
Right: IArrayElementReferenceExpression (OperationKind.ArrayElementReferenceExpression, Type: System.Int32) (Syntax: 'ids[i]')
Array reference: ILocalReferenceExpression: ids (OperationKind.LocalReferenceExpression, Type: System.Int32[]) (Syntax: 'ids')
Indices(1):
ILocalReferenceExpression: i (OperationKind.LocalReferenceExpression, Type: System.Int32) (Syntax: 'i')
......
......@@ -311,9 +311,7 @@ public LazyArrayCreationExpression(Lazy<ImmutableArray<IOperation>> dimensionSiz
internal abstract partial class BaseArrayElementReferenceExpression : Operation, IArrayElementReferenceExpression
{
protected BaseArrayElementReferenceExpression(SemanticModel semanticModel, SyntaxNode syntax, ITypeSymbol type, Optional<object> constantValue, bool isImplicit) :
// https://github.com/dotnet/roslyn/issues/22006
//base(OperationKind.ArrayElementReferenceExpression, semanticModel, syntax, type, constantValue, isImplicit)
base(OperationKind.None, semanticModel, syntax, type, constantValue, isImplicit)
base(OperationKind.ArrayElementReferenceExpression, semanticModel, syntax, type, constantValue, isImplicit)
{
}
......
......@@ -11,7 +11,7 @@ namespace Microsoft.CodeAnalysis.Semantics
/// This interface is reserved for implementation by its associated APIs. We reserve the right to
/// change it in the future.
/// </remarks>
internal interface IArrayElementReferenceExpression : IOperation // https://github.com/dotnet/roslyn/issues/22006
public interface IArrayElementReferenceExpression : IOperation
{
/// <summary>
/// Array to be indexed.
......
......@@ -190,7 +190,7 @@ public override IOperation VisitOmittedArgumentExpression(IOmittedArgumentExpres
return new OmittedArgumentExpression(((Operation)operation).SemanticModel, operation.Syntax, operation.Type, operation.ConstantValue, operation.IsImplicit);
}
internal override IOperation VisitArrayElementReferenceExpression(IArrayElementReferenceExpression operation, object argument)
public override IOperation VisitArrayElementReferenceExpression(IArrayElementReferenceExpression operation, object argument)
{
return new ArrayElementReferenceExpression(Visit(operation.ArrayReference), VisitArray(operation.Indices), ((Operation)operation).SemanticModel, operation.Syntax, operation.Type, operation.ConstantValue, operation.IsImplicit);
}
......
......@@ -76,9 +76,8 @@ public enum OperationKind
ConversionExpression = 0x102,
/// <summary>Indicates an <see cref="IInvocationExpression"/>.</summary>
InvocationExpression = 0x103,
// https://github.com/dotnet/roslyn/issues/22006
// /// <summary>Indicates an <see cref="IArrayElementReferenceExpression"/>.</summary>
// ArrayElementReferenceExpression = 0x104,
/// <summary>Indicates an <see cref="IArrayElementReferenceExpression"/>.</summary>
ArrayElementReferenceExpression = 0x104,
/// <summary>Indicates an <see cref="ILocalReferenceExpression"/>.</summary>
LocalReferenceExpression = 0x105,
/// <summary>Indicates an <see cref="IParameterReferenceExpression"/>.</summary>
......
......@@ -189,8 +189,7 @@ public virtual void VisitOmittedArgumentExpression(IOmittedArgumentExpression op
DefaultVisit(operation);
}
// https://github.com/dotnet/roslyn/issues/22006
internal virtual void VisitArrayElementReferenceExpression(IArrayElementReferenceExpression operation)
public virtual void VisitArrayElementReferenceExpression(IArrayElementReferenceExpression operation)
{
DefaultVisit(operation);
}
......@@ -682,8 +681,7 @@ public virtual TResult VisitOmittedArgumentExpression(IOmittedArgumentExpression
return DefaultVisit(operation, argument);
}
// https://github.com/dotnet/roslyn/issues/22006
internal virtual TResult VisitArrayElementReferenceExpression(IArrayElementReferenceExpression operation, TArgument argument)
public virtual TResult VisitArrayElementReferenceExpression(IArrayElementReferenceExpression operation, TArgument argument)
{
return DefaultVisit(operation, argument);
}
......
......@@ -57,6 +57,7 @@ Microsoft.CodeAnalysis.OperationKind.AnonymousFunctionExpression = 273 -> Micros
Microsoft.CodeAnalysis.OperationKind.AnonymousObjectCreationExpression = 287 -> Microsoft.CodeAnalysis.OperationKind
Microsoft.CodeAnalysis.OperationKind.Argument = 1031 -> Microsoft.CodeAnalysis.OperationKind
Microsoft.CodeAnalysis.OperationKind.ArrayCreationExpression = 276 -> Microsoft.CodeAnalysis.OperationKind
Microsoft.CodeAnalysis.OperationKind.ArrayElementReferenceExpression = 260 -> Microsoft.CodeAnalysis.OperationKind
Microsoft.CodeAnalysis.OperationKind.ArrayInitializer = 1029 -> Microsoft.CodeAnalysis.OperationKind
Microsoft.CodeAnalysis.OperationKind.AwaitExpression = 279 -> Microsoft.CodeAnalysis.OperationKind
Microsoft.CodeAnalysis.OperationKind.BinaryOperatorExpression = 270 -> Microsoft.CodeAnalysis.OperationKind
......@@ -207,6 +208,9 @@ Microsoft.CodeAnalysis.Semantics.IArgument.Value.get -> Microsoft.CodeAnalysis.I
Microsoft.CodeAnalysis.Semantics.IArrayCreationExpression
Microsoft.CodeAnalysis.Semantics.IArrayCreationExpression.DimensionSizes.get -> System.Collections.Immutable.ImmutableArray<Microsoft.CodeAnalysis.IOperation>
Microsoft.CodeAnalysis.Semantics.IArrayCreationExpression.Initializer.get -> Microsoft.CodeAnalysis.Semantics.IArrayInitializer
Microsoft.CodeAnalysis.Semantics.IArrayElementReferenceExpression
Microsoft.CodeAnalysis.Semantics.IArrayElementReferenceExpression.ArrayReference.get -> Microsoft.CodeAnalysis.IOperation
Microsoft.CodeAnalysis.Semantics.IArrayElementReferenceExpression.Indices.get -> System.Collections.Immutable.ImmutableArray<Microsoft.CodeAnalysis.IOperation>
Microsoft.CodeAnalysis.Semantics.IArrayInitializer
Microsoft.CodeAnalysis.Semantics.IArrayInitializer.ElementValues.get -> System.Collections.Immutable.ImmutableArray<Microsoft.CodeAnalysis.IOperation>
Microsoft.CodeAnalysis.Semantics.IAssignmentExpression
......@@ -504,6 +508,7 @@ virtual Microsoft.CodeAnalysis.Semantics.OperationVisitor.VisitAnonymousFunction
virtual Microsoft.CodeAnalysis.Semantics.OperationVisitor.VisitAnonymousObjectCreationExpression(Microsoft.CodeAnalysis.Semantics.IAnonymousObjectCreationExpression operation) -> void
virtual Microsoft.CodeAnalysis.Semantics.OperationVisitor.VisitArgument(Microsoft.CodeAnalysis.Semantics.IArgument operation) -> void
virtual Microsoft.CodeAnalysis.Semantics.OperationVisitor.VisitArrayCreationExpression(Microsoft.CodeAnalysis.Semantics.IArrayCreationExpression operation) -> void
virtual Microsoft.CodeAnalysis.Semantics.OperationVisitor.VisitArrayElementReferenceExpression(Microsoft.CodeAnalysis.Semantics.IArrayElementReferenceExpression operation) -> void
virtual Microsoft.CodeAnalysis.Semantics.OperationVisitor.VisitArrayInitializer(Microsoft.CodeAnalysis.Semantics.IArrayInitializer operation) -> void
virtual Microsoft.CodeAnalysis.Semantics.OperationVisitor.VisitAwaitExpression(Microsoft.CodeAnalysis.Semantics.IAwaitExpression operation) -> void
virtual Microsoft.CodeAnalysis.Semantics.OperationVisitor.VisitBinaryOperatorExpression(Microsoft.CodeAnalysis.Semantics.IBinaryOperatorExpression operation) -> void
......@@ -590,6 +595,7 @@ virtual Microsoft.CodeAnalysis.Semantics.OperationVisitor<TArgument, TResult>.Vi
virtual Microsoft.CodeAnalysis.Semantics.OperationVisitor<TArgument, TResult>.VisitAnonymousObjectCreationExpression(Microsoft.CodeAnalysis.Semantics.IAnonymousObjectCreationExpression operation, TArgument argument) -> TResult
virtual Microsoft.CodeAnalysis.Semantics.OperationVisitor<TArgument, TResult>.VisitArgument(Microsoft.CodeAnalysis.Semantics.IArgument operation, TArgument argument) -> TResult
virtual Microsoft.CodeAnalysis.Semantics.OperationVisitor<TArgument, TResult>.VisitArrayCreationExpression(Microsoft.CodeAnalysis.Semantics.IArrayCreationExpression operation, TArgument argument) -> TResult
virtual Microsoft.CodeAnalysis.Semantics.OperationVisitor<TArgument, TResult>.VisitArrayElementReferenceExpression(Microsoft.CodeAnalysis.Semantics.IArrayElementReferenceExpression operation, TArgument argument) -> TResult
virtual Microsoft.CodeAnalysis.Semantics.OperationVisitor<TArgument, TResult>.VisitArrayInitializer(Microsoft.CodeAnalysis.Semantics.IArrayInitializer operation, TArgument argument) -> TResult
virtual Microsoft.CodeAnalysis.Semantics.OperationVisitor<TArgument, TResult>.VisitAwaitExpression(Microsoft.CodeAnalysis.Semantics.IAwaitExpression operation, TArgument argument) -> TResult
virtual Microsoft.CodeAnalysis.Semantics.OperationVisitor<TArgument, TResult>.VisitBinaryOperatorExpression(Microsoft.CodeAnalysis.Semantics.IBinaryOperatorExpression operation, TArgument argument) -> TResult
......
......@@ -278,7 +278,7 @@ End Class]]>.Value
IArrayCreationExpression (OperationKind.ArrayCreationExpression, Type: System.Int32(), IsInvalid) (Syntax: 'New Integer(x(0)) {1, 2}')
Dimension Sizes(1):
IBinaryOperatorExpression (BinaryOperatorKind.Add, Checked) (OperationKind.BinaryOperatorExpression, Type: System.Int32) (Syntax: 'x(0)')
Left: IArrayElementReferenceExpression (OperationKind.None) (Syntax: 'x(0)')
Left: IArrayElementReferenceExpression (OperationKind.ArrayElementReferenceExpression, Type: System.Int32) (Syntax: 'x(0)')
Array reference: ILocalReferenceExpression: x (OperationKind.LocalReferenceExpression, Type: System.Int32()) (Syntax: 'x')
Indices(1):
ILiteralExpression (OperationKind.LiteralExpression, Type: System.Int32, Constant: 0) (Syntax: '0')
......@@ -565,13 +565,13 @@ End Class]]>.Value
IArrayCreationExpression (OperationKind.ArrayCreationExpression, Type: System.Int32(,)) (Syntax: 'New Integer ... ), x(1)) {}')
Dimension Sizes(2):
IBinaryOperatorExpression (BinaryOperatorKind.Add, Checked) (OperationKind.BinaryOperatorExpression, Type: System.Int32) (Syntax: 'x(0)')
Left: IArrayElementReferenceExpression (OperationKind.None) (Syntax: 'x(0)')
Left: IArrayElementReferenceExpression (OperationKind.ArrayElementReferenceExpression, Type: System.Int32) (Syntax: 'x(0)')
Array reference: IParameterReferenceExpression: x (OperationKind.ParameterReferenceExpression, Type: System.Int32()) (Syntax: 'x')
Indices(1):
ILiteralExpression (OperationKind.LiteralExpression, Type: System.Int32, Constant: 0) (Syntax: '0')
Right: ILiteralExpression (OperationKind.LiteralExpression, Type: System.Int32, Constant: 1) (Syntax: 'x(0)')
IBinaryOperatorExpression (BinaryOperatorKind.Add, Checked) (OperationKind.BinaryOperatorExpression, Type: System.Int32) (Syntax: 'x(1)')
Left: IArrayElementReferenceExpression (OperationKind.None) (Syntax: 'x(1)')
Left: IArrayElementReferenceExpression (OperationKind.ArrayElementReferenceExpression, Type: System.Int32) (Syntax: 'x(1)')
Array reference: IParameterReferenceExpression: x (OperationKind.ParameterReferenceExpression, Type: System.Int32()) (Syntax: 'x')
Indices(1):
ILiteralExpression (OperationKind.LiteralExpression, Type: System.Int32, Constant: 1) (Syntax: '1')
......
......@@ -41,7 +41,7 @@ IForToLoopStatement (LoopKind.ForTo) (OperationKind.LoopStatement) (Syntax: 'For
Instance Receiver: null
Arguments(1):
IArgument (ArgumentKind.Explicit, Matching Parameter: value) (OperationKind.Argument) (Syntax: 'myarray(i)')
IArrayElementReferenceExpression (OperationKind.None) (Syntax: 'myarray(i)')
IArrayElementReferenceExpression (OperationKind.ArrayElementReferenceExpression, Type: System.Int32) (Syntax: 'myarray(i)')
Array reference: ILocalReferenceExpression: myarray (OperationKind.LocalReferenceExpression, Type: System.Int32()) (Syntax: 'myarray')
Indices(1):
ILocalReferenceExpression: i (OperationKind.LocalReferenceExpression, Type: System.Int32) (Syntax: 'i')
......@@ -91,7 +91,7 @@ IForToLoopStatement (LoopKind.ForTo) (OperationKind.LoopStatement) (Syntax: 'For
Instance Receiver: null
Arguments(1):
IArgument (ArgumentKind.Explicit, Matching Parameter: value) (OperationKind.Argument) (Syntax: 'myarray(i)')
IArrayElementReferenceExpression (OperationKind.None) (Syntax: 'myarray(i)')
IArrayElementReferenceExpression (OperationKind.ArrayElementReferenceExpression, Type: System.Int32) (Syntax: 'myarray(i)')
Array reference: ILocalReferenceExpression: myarray (OperationKind.LocalReferenceExpression, Type: System.Int32()) (Syntax: 'myarray')
Indices(1):
ILocalReferenceExpression: i (OperationKind.LocalReferenceExpression, Type: System.Int32) (Syntax: 'i')
......
......@@ -39,7 +39,7 @@ IDoLoopStatement (DoLoopKind: DoWhileBottomLoop) (LoopKind.Do) (OperationKind.Lo
IExpressionStatement (OperationKind.ExpressionStatement) (Syntax: 'sum += ids(i)')
Expression: ICompoundAssignmentExpression (BinaryOperatorKind.Add, Checked) (OperationKind.CompoundAssignmentExpression, Type: System.Int32) (Syntax: 'sum += ids(i)')
Left: ILocalReferenceExpression: sum (OperationKind.LocalReferenceExpression, Type: System.Int32) (Syntax: 'sum')
Right: IArrayElementReferenceExpression (OperationKind.None) (Syntax: 'ids(i)')
Right: IArrayElementReferenceExpression (OperationKind.ArrayElementReferenceExpression, Type: System.Int32) (Syntax: 'ids(i)')
Array reference: ILocalReferenceExpression: ids (OperationKind.LocalReferenceExpression, Type: System.Int32()) (Syntax: 'ids')
Indices(1):
ILocalReferenceExpression: i (OperationKind.LocalReferenceExpression, Type: System.Int32) (Syntax: 'i')
......
......@@ -727,7 +727,7 @@ public override void VisitOmittedArgumentExpression(IOmittedArgumentExpression o
LogCommonPropertiesAndNewLine(operation);
}
internal override void VisitArrayElementReferenceExpression(IArrayElementReferenceExpression operation)
public override void VisitArrayElementReferenceExpression(IArrayElementReferenceExpression operation)
{
LogString(nameof(IArrayElementReferenceExpression));
LogCommonPropertiesAndNewLine(operation);
......
......@@ -245,7 +245,7 @@ public override void VisitOmittedArgumentExpression(IOmittedArgumentExpression o
base.VisitOmittedArgumentExpression(operation);
}
internal override void VisitArrayElementReferenceExpression(IArrayElementReferenceExpression operation)
public override void VisitArrayElementReferenceExpression(IArrayElementReferenceExpression operation)
{
base.VisitArrayElementReferenceExpression(operation);
}
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册