From 46eb112201d8b69b3098afee8eac1a274cc8b49c Mon Sep 17 00:00:00 2001 From: John Hamby Date: Thu, 11 Feb 2016 22:29:37 -0800 Subject: [PATCH] Overhaul IInstanceReferenceExpression. --- .../CSharp/Portable/BoundTree/Expression.cs | 22 +++---- .../FieldCouldBeReadOnlyAnalyzer.cs | 2 - .../Diagnostics/OperationTestAnalyzer.cs | 7 +-- .../Core/Portable/Compilation/Expression.cs | 4 +- .../Core/Portable/Compilation/IExpression.cs | 57 +++++++++++++++++-- .../Core/Portable/Compilation/IOperation.cs | 3 +- .../Core/Portable/PublicAPI.Unshipped.txt | 17 ++++-- .../Portable/BoundTree/Expression.vb | 36 +++--------- 8 files changed, 86 insertions(+), 62 deletions(-) diff --git a/src/Compilers/CSharp/Portable/BoundTree/Expression.cs b/src/Compilers/CSharp/Portable/BoundTree/Expression.cs index 4bb385e240c..62091ba8443 100644 --- a/src/Compilers/CSharp/Portable/BoundTree/Expression.cs +++ b/src/Compilers/CSharp/Portable/BoundTree/Expression.cs @@ -884,11 +884,9 @@ public override void Accept(OperationVisitor visitor) internal partial class BoundBaseReference : IInstanceReferenceExpression { - bool IInstanceReferenceExpression.IsExplicit => this.Syntax.Kind() == SyntaxKind.BaseExpression; + InstanceReferenceKind IInstanceReferenceExpression.InstanceReferenceKind => InstanceReferenceKind.BaseClass; - IParameterSymbol IParameterReferenceExpression.Parameter => (IParameterSymbol)this.ExpressionSymbol; - - protected override OperationKind ExpressionKind => OperationKind.BaseClassInstanceReferenceExpression; + protected override OperationKind ExpressionKind => OperationKind.InstanceReferenceExpression; public override void Accept(OperationVisitor visitor) { @@ -903,9 +901,7 @@ public override void Accept(OperationVisitor visitor) internal partial class BoundThisReference : IInstanceReferenceExpression { - bool IInstanceReferenceExpression.IsExplicit => this.Syntax.Kind() == SyntaxKind.ThisExpression; - - IParameterSymbol IParameterReferenceExpression.Parameter => (IParameterSymbol)this.ExpressionSymbol; + InstanceReferenceKind IInstanceReferenceExpression.InstanceReferenceKind => this.Syntax.Kind() == SyntaxKind.ThisExpression ? InstanceReferenceKind.Explicit : InstanceReferenceKind.Implicit; protected override OperationKind ExpressionKind => OperationKind.InstanceReferenceExpression; @@ -941,7 +937,7 @@ public override void Accept(OperationVisitor visitor) internal partial class BoundCompoundAssignmentOperator : ICompoundAssignmentExpression { - BinaryOperationKind ICompoundAssignmentExpression.BinaryKind => Expression.DeriveBinaryOperationKind(this.Operator.Kind); + BinaryOperationKind ICompoundAssignmentExpression.BinaryOperationKind => Expression.DeriveBinaryOperationKind(this.Operator.Kind); IReferenceExpression IAssignmentExpression.Target => this.Left as IReferenceExpression; @@ -966,9 +962,9 @@ public override void Accept(OperationVisitor visitor) internal partial class BoundIncrementOperator : IIncrementExpression { - UnaryOperationKind IIncrementExpression.IncrementKind => Expression.DeriveUnaryOperationKind(this.OperatorKind); + UnaryOperationKind IIncrementExpression.IncrementOperationKind => Expression.DeriveUnaryOperationKind(this.OperatorKind); - BinaryOperationKind ICompoundAssignmentExpression.BinaryKind => Expression.DeriveBinaryOperationKind(((IIncrementExpression)this).IncrementKind); + BinaryOperationKind ICompoundAssignmentExpression.BinaryOperationKind => Expression.DeriveBinaryOperationKind(((IIncrementExpression)this).IncrementOperationKind); IReferenceExpression IAssignmentExpression.Target => this.Operand as IReferenceExpression; @@ -1211,10 +1207,8 @@ public override void Accept(OperationVisitor visitor) internal partial class BoundImplicitReceiver : IInstanceReferenceExpression { - bool IInstanceReferenceExpression.IsExplicit => false; - - IParameterSymbol IParameterReferenceExpression.Parameter => (IParameterSymbol)this.ExpressionSymbol; - + InstanceReferenceKind IInstanceReferenceExpression.InstanceReferenceKind => InstanceReferenceKind.Implicit; + protected override OperationKind ExpressionKind => OperationKind.InstanceReferenceExpression; public override void Accept(OperationVisitor visitor) diff --git a/src/Compilers/Core/CodeAnalysisTest/Diagnostics/FieldCouldBeReadOnlyAnalyzer.cs b/src/Compilers/Core/CodeAnalysisTest/Diagnostics/FieldCouldBeReadOnlyAnalyzer.cs index 7f0921d9ebf..30c4020553f 100644 --- a/src/Compilers/Core/CodeAnalysisTest/Diagnostics/FieldCouldBeReadOnlyAnalyzer.cs +++ b/src/Compilers/Core/CodeAnalysisTest/Diagnostics/FieldCouldBeReadOnlyAnalyzer.cs @@ -104,8 +104,6 @@ private static void AssignTo(IExpression target, bool inConstructor, ITypeSymbol switch (fieldReference.Instance.Kind) { case OperationKind.InstanceReferenceExpression: - case OperationKind.BaseClassInstanceReferenceExpression: - case OperationKind.ClassInstanceReferenceExpression: return; } } diff --git a/src/Compilers/Core/CodeAnalysisTest/Diagnostics/OperationTestAnalyzer.cs b/src/Compilers/Core/CodeAnalysisTest/Diagnostics/OperationTestAnalyzer.cs index 519ad7579c0..79f57176da7 100644 --- a/src/Compilers/Core/CodeAnalysisTest/Diagnostics/OperationTestAnalyzer.cs +++ b/src/Compilers/Core/CodeAnalysisTest/Diagnostics/OperationTestAnalyzer.cs @@ -216,7 +216,7 @@ public sealed override void Initialize(AnalysisContext context) { // Advance binary operation is known to involve a reference to the local used in the test and a constant. advanceIncrement = advanceAssignment.Value; - advanceOperationCode = advanceAssignment.BinaryKind; + advanceOperationCode = advanceAssignment.BinaryOperationKind; } } @@ -918,10 +918,9 @@ public sealed override void Initialize(AnalysisContext context) (operationContext) => { IInstanceReferenceExpression instanceReference = (IInstanceReferenceExpression)operationContext.Operation; - operationContext.ReportDiagnostic(Diagnostic.Create(instanceReference.IsExplicit ? ExplicitInstanceDescriptor : ImplicitInstanceDescriptor, instanceReference.Syntax.GetLocation())); + operationContext.ReportDiagnostic(Diagnostic.Create(instanceReference.InstanceReferenceKind == InstanceReferenceKind.Implicit ? ImplicitInstanceDescriptor : ExplicitInstanceDescriptor, instanceReference.Syntax.GetLocation())); }, - OperationKind.InstanceReferenceExpression, - OperationKind.BaseClassInstanceReferenceExpression); + OperationKind.InstanceReferenceExpression); } } diff --git a/src/Compilers/Core/Portable/Compilation/Expression.cs b/src/Compilers/Core/Portable/Compilation/Expression.cs index 4ffa3e7b91e..322acdf4a25 100644 --- a/src/Compilers/Core/Portable/Compilation/Expression.cs +++ b/src/Compilers/Core/Portable/Compilation/Expression.cs @@ -216,7 +216,7 @@ public CompoundAssignmentExpression(IReferenceExpression target, IExpression val { this.Target = target; this.Value = value; - this.BinaryKind = binaryKind; + this.BinaryOperationKind = binaryKind; this.OperatorMethod = operatorMethod; this.Syntax = syntax; } @@ -225,7 +225,7 @@ public CompoundAssignmentExpression(IReferenceExpression target, IExpression val public IExpression Value { get; } - public BinaryOperationKind BinaryKind { get; } + public BinaryOperationKind BinaryOperationKind { get; } public IMethodSymbol OperatorMethod { get; } diff --git a/src/Compilers/Core/Portable/Compilation/IExpression.cs b/src/Compilers/Core/Portable/Compilation/IExpression.cs index 30d3bb2e69f..6d3233ebb49 100644 --- a/src/Compilers/Core/Portable/Compilation/IExpression.cs +++ b/src/Compilers/Core/Portable/Compilation/IExpression.cs @@ -198,16 +198,29 @@ public enum SyntheticLocalKind } /// - /// Represents a reference to a C# this or VB Me parameter. + /// Represents a C# this or base expression, or a VB Me, MyClass, or MyBase expression. /// - public interface IInstanceReferenceExpression : IParameterReferenceExpression + public interface IInstanceReferenceExpression : IExpression { + /// /// - /// Indicates whether the reference is explicit or implicit in source. + /// Kind of instance reference. /// - bool IsExplicit { get; } + InstanceReferenceKind InstanceReferenceKind { get; } } + public enum InstanceReferenceKind + { + /// Indicates an implicit this or Me expression. + Implicit = 0x0, + /// Indicates an explicit this or Me expression. + Explicit = 0x1, + /// Indicates an explicit base or MyBase expression. + BaseClass = 0x2, + /// Indicates an explicit MyClass expression. + ThisClass = 0x3 + } + /// /// Represents a reference to a member of a class, struct, or interface. /// @@ -713,6 +726,14 @@ public static SimpleUnaryOperationKind GetSimpleUnaryOperationKind(this IUnaryOp return GetSimpleUnaryOperationKind(unary.UnaryOperationKind); } + /// + /// Get unary operation kind independent of data type. + /// + public static SimpleUnaryOperationKind GetSimpleUnaryOperationKind(this IIncrementExpression increment) + { + return GetSimpleUnaryOperationKind(increment.IncrementOperationKind); + } + /// /// Get unary operand kind. /// @@ -721,6 +742,14 @@ public static UnaryOperandKind GetUnaryOperandKind(this IUnaryOperatorExpression return GetUnaryOperandKind(unary.UnaryOperationKind); } + /// + /// Get unary operand kind. + /// + public static UnaryOperandKind GetUnaryOperandKind(this IIncrementExpression increment) + { + return GetUnaryOperandKind(increment.IncrementOperationKind); + } + /// /// Get binary operation kind independent of data type. /// @@ -729,6 +758,14 @@ public static SimpleBinaryOperationKind GetSimpleBinaryOperationKind(this IBinar return GetSimpleBinaryOperationKind(binary.BinaryOperationKind); } + /// + /// Get binary operation kind independent of data type. + /// + public static SimpleBinaryOperationKind GetSimpleBinaryOperationKind(this ICompoundAssignmentExpression compoundAssignment) + { + return GetSimpleBinaryOperationKind(compoundAssignment.BinaryOperationKind); + } + /// /// Get binary operand kinds. /// @@ -737,6 +774,14 @@ public static BinaryOperandsKind GetBinaryOperandsKind(this IBinaryOperatorExpre return GetBinaryOperandsKind(binary.BinaryOperationKind); } + /// + /// Get binary operand kinds. + /// + public static BinaryOperandsKind GetBinaryOperandsKind(this ICompoundAssignmentExpression compoundAssignment) + { + return GetBinaryOperandsKind(compoundAssignment.BinaryOperationKind); + } + public static SimpleUnaryOperationKind GetSimpleUnaryOperationKind(UnaryOperationKind kind) { return (SimpleUnaryOperationKind)((int)kind & UnaryAndBinaryOperationExtensions.SimpleUnaryOperationKindMask); @@ -1036,7 +1081,7 @@ public interface ICompoundAssignmentExpression : IAssignmentExpression, IHasOper /// /// Kind of binary operation. /// - BinaryOperationKind BinaryKind { get; } + BinaryOperationKind BinaryOperationKind { get; } } /// @@ -1047,7 +1092,7 @@ public interface IIncrementExpression : ICompoundAssignmentExpression /// /// Kind of increment. /// - UnaryOperationKind IncrementKind { get; } + UnaryOperationKind IncrementOperationKind { get; } } /// diff --git a/src/Compilers/Core/Portable/Compilation/IOperation.cs b/src/Compilers/Core/Portable/Compilation/IOperation.cs index 8bb23e1da04..489ccd62b97 100644 --- a/src/Compilers/Core/Portable/Compilation/IOperation.cs +++ b/src/Compilers/Core/Portable/Compilation/IOperation.cs @@ -122,9 +122,8 @@ public enum OperationKind /// Indicates an . ArrayCreationExpression = 0x2e, DefaultValueExpression = 0x2f, + /// Indicates an . InstanceReferenceExpression = 0x30, - BaseClassInstanceReferenceExpression = 0x31, - ClassInstanceReferenceExpression = 0x32, /// Indicates an . IsExpression = 0x33, // TypeOperationExpression = 0x34, diff --git a/src/Compilers/Core/Portable/PublicAPI.Unshipped.txt b/src/Compilers/Core/Portable/PublicAPI.Unshipped.txt index a85cde0a04f..bc7191684ef 100644 --- a/src/Compilers/Core/Portable/PublicAPI.Unshipped.txt +++ b/src/Compilers/Core/Portable/PublicAPI.Unshipped.txt @@ -73,12 +73,10 @@ Microsoft.CodeAnalysis.OperationKind.ArrayElementReferenceExpression = 29 -> Mic Microsoft.CodeAnalysis.OperationKind.ArrayInitializer = 69 -> Microsoft.CodeAnalysis.OperationKind Microsoft.CodeAnalysis.OperationKind.AssignmentExpression = 55 -> Microsoft.CodeAnalysis.OperationKind Microsoft.CodeAnalysis.OperationKind.AwaitExpression = 53 -> Microsoft.CodeAnalysis.OperationKind -Microsoft.CodeAnalysis.OperationKind.BaseClassInstanceReferenceExpression = 49 -> Microsoft.CodeAnalysis.OperationKind Microsoft.CodeAnalysis.OperationKind.BinaryOperatorExpression = 40 -> Microsoft.CodeAnalysis.OperationKind Microsoft.CodeAnalysis.OperationKind.BlockStatement = 2 -> Microsoft.CodeAnalysis.OperationKind Microsoft.CodeAnalysis.OperationKind.BranchStatement = 12 -> Microsoft.CodeAnalysis.OperationKind Microsoft.CodeAnalysis.OperationKind.CatchClause = 18 -> Microsoft.CodeAnalysis.OperationKind -Microsoft.CodeAnalysis.OperationKind.ClassInstanceReferenceExpression = 50 -> Microsoft.CodeAnalysis.OperationKind Microsoft.CodeAnalysis.OperationKind.CompoundAssignmentExpression = 56 -> Microsoft.CodeAnalysis.OperationKind Microsoft.CodeAnalysis.OperationKind.ConditionalAccessExpression = 64 -> Microsoft.CodeAnalysis.OperationKind Microsoft.CodeAnalysis.OperationKind.ConditionalChoiceExpression = 41 -> Microsoft.CodeAnalysis.OperationKind @@ -367,7 +365,7 @@ Microsoft.CodeAnalysis.Semantics.ICatchClause.ExceptionLocal.get -> Microsoft.Co Microsoft.CodeAnalysis.Semantics.ICatchClause.Filter.get -> Microsoft.CodeAnalysis.Semantics.IExpression Microsoft.CodeAnalysis.Semantics.ICatchClause.Handler.get -> Microsoft.CodeAnalysis.Semantics.IBlockStatement Microsoft.CodeAnalysis.Semantics.ICompoundAssignmentExpression -Microsoft.CodeAnalysis.Semantics.ICompoundAssignmentExpression.BinaryKind.get -> Microsoft.CodeAnalysis.Semantics.BinaryOperationKind +Microsoft.CodeAnalysis.Semantics.ICompoundAssignmentExpression.BinaryOperationKind.get -> Microsoft.CodeAnalysis.Semantics.BinaryOperationKind Microsoft.CodeAnalysis.Semantics.IConditionalAccessExpression Microsoft.CodeAnalysis.Semantics.IConditionalAccessExpression.Access.get -> Microsoft.CodeAnalysis.Semantics.IExpression Microsoft.CodeAnalysis.Semantics.IConditionalChoiceExpression @@ -419,9 +417,9 @@ Microsoft.CodeAnalysis.Semantics.IIfStatement.Condition.get -> Microsoft.CodeAna Microsoft.CodeAnalysis.Semantics.IIfStatement.IfFalse.get -> Microsoft.CodeAnalysis.IOperation Microsoft.CodeAnalysis.Semantics.IIfStatement.IfTrue.get -> Microsoft.CodeAnalysis.IOperation Microsoft.CodeAnalysis.Semantics.IIncrementExpression -Microsoft.CodeAnalysis.Semantics.IIncrementExpression.IncrementKind.get -> Microsoft.CodeAnalysis.Semantics.UnaryOperationKind +Microsoft.CodeAnalysis.Semantics.IIncrementExpression.IncrementOperationKind.get -> Microsoft.CodeAnalysis.Semantics.UnaryOperationKind Microsoft.CodeAnalysis.Semantics.IInstanceReferenceExpression -Microsoft.CodeAnalysis.Semantics.IInstanceReferenceExpression.IsExplicit.get -> bool +Microsoft.CodeAnalysis.Semantics.IInstanceReferenceExpression.InstanceReferenceKind.get -> Microsoft.CodeAnalysis.Semantics.InstanceReferenceKind Microsoft.CodeAnalysis.Semantics.IInvalidStatement Microsoft.CodeAnalysis.Semantics.IInvocationExpression Microsoft.CodeAnalysis.Semantics.IInvocationExpression.ArgumentsInSourceOrder.get -> System.Collections.Immutable.ImmutableArray @@ -528,6 +526,11 @@ Microsoft.CodeAnalysis.Semantics.IWhileUntilLoopStatement.IsWhile.get -> bool Microsoft.CodeAnalysis.Semantics.IWithStatement Microsoft.CodeAnalysis.Semantics.IWithStatement.Body.get -> Microsoft.CodeAnalysis.IOperation Microsoft.CodeAnalysis.Semantics.IWithStatement.Value.get -> Microsoft.CodeAnalysis.Semantics.IExpression +Microsoft.CodeAnalysis.Semantics.InstanceReferenceKind +Microsoft.CodeAnalysis.Semantics.InstanceReferenceKind.BaseClass = 2 -> Microsoft.CodeAnalysis.Semantics.InstanceReferenceKind +Microsoft.CodeAnalysis.Semantics.InstanceReferenceKind.Explicit = 1 -> Microsoft.CodeAnalysis.Semantics.InstanceReferenceKind +Microsoft.CodeAnalysis.Semantics.InstanceReferenceKind.Implicit = 0 -> Microsoft.CodeAnalysis.Semantics.InstanceReferenceKind +Microsoft.CodeAnalysis.Semantics.InstanceReferenceKind.ThisClass = 3 -> Microsoft.CodeAnalysis.Semantics.InstanceReferenceKind Microsoft.CodeAnalysis.Semantics.LoopKind Microsoft.CodeAnalysis.Semantics.LoopKind.For = 1 -> Microsoft.CodeAnalysis.Semantics.LoopKind Microsoft.CodeAnalysis.Semantics.LoopKind.ForEach = 2 -> Microsoft.CodeAnalysis.Semantics.LoopKind @@ -732,11 +735,15 @@ static Microsoft.CodeAnalysis.Semantics.OperationExtensions.DescendantsAndSelf(t static Microsoft.CodeAnalysis.Semantics.OperationExtensions.GetRootOperation(this Microsoft.CodeAnalysis.ISymbol symbol, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) -> Microsoft.CodeAnalysis.IOperation static Microsoft.CodeAnalysis.Semantics.UnaryAndBinaryOperationExtensions.GetBinaryOperandsKind(Microsoft.CodeAnalysis.Semantics.BinaryOperationKind kind) -> Microsoft.CodeAnalysis.Semantics.BinaryOperandsKind static Microsoft.CodeAnalysis.Semantics.UnaryAndBinaryOperationExtensions.GetBinaryOperandsKind(this Microsoft.CodeAnalysis.Semantics.IBinaryOperatorExpression binary) -> Microsoft.CodeAnalysis.Semantics.BinaryOperandsKind +static Microsoft.CodeAnalysis.Semantics.UnaryAndBinaryOperationExtensions.GetBinaryOperandsKind(this Microsoft.CodeAnalysis.Semantics.ICompoundAssignmentExpression compoundAssignment) -> Microsoft.CodeAnalysis.Semantics.BinaryOperandsKind static Microsoft.CodeAnalysis.Semantics.UnaryAndBinaryOperationExtensions.GetSimpleBinaryOperationKind(Microsoft.CodeAnalysis.Semantics.BinaryOperationKind kind) -> Microsoft.CodeAnalysis.Semantics.SimpleBinaryOperationKind static Microsoft.CodeAnalysis.Semantics.UnaryAndBinaryOperationExtensions.GetSimpleBinaryOperationKind(this Microsoft.CodeAnalysis.Semantics.IBinaryOperatorExpression binary) -> Microsoft.CodeAnalysis.Semantics.SimpleBinaryOperationKind +static Microsoft.CodeAnalysis.Semantics.UnaryAndBinaryOperationExtensions.GetSimpleBinaryOperationKind(this Microsoft.CodeAnalysis.Semantics.ICompoundAssignmentExpression compoundAssignment) -> Microsoft.CodeAnalysis.Semantics.SimpleBinaryOperationKind static Microsoft.CodeAnalysis.Semantics.UnaryAndBinaryOperationExtensions.GetSimpleUnaryOperationKind(Microsoft.CodeAnalysis.Semantics.UnaryOperationKind kind) -> Microsoft.CodeAnalysis.Semantics.SimpleUnaryOperationKind +static Microsoft.CodeAnalysis.Semantics.UnaryAndBinaryOperationExtensions.GetSimpleUnaryOperationKind(this Microsoft.CodeAnalysis.Semantics.IIncrementExpression increment) -> Microsoft.CodeAnalysis.Semantics.SimpleUnaryOperationKind static Microsoft.CodeAnalysis.Semantics.UnaryAndBinaryOperationExtensions.GetSimpleUnaryOperationKind(this Microsoft.CodeAnalysis.Semantics.IUnaryOperatorExpression unary) -> Microsoft.CodeAnalysis.Semantics.SimpleUnaryOperationKind static Microsoft.CodeAnalysis.Semantics.UnaryAndBinaryOperationExtensions.GetUnaryOperandKind(Microsoft.CodeAnalysis.Semantics.UnaryOperationKind kind) -> Microsoft.CodeAnalysis.Semantics.UnaryOperandKind +static Microsoft.CodeAnalysis.Semantics.UnaryAndBinaryOperationExtensions.GetUnaryOperandKind(this Microsoft.CodeAnalysis.Semantics.IIncrementExpression increment) -> Microsoft.CodeAnalysis.Semantics.UnaryOperandKind static Microsoft.CodeAnalysis.Semantics.UnaryAndBinaryOperationExtensions.GetUnaryOperandKind(this Microsoft.CodeAnalysis.Semantics.IUnaryOperatorExpression unary) -> Microsoft.CodeAnalysis.Semantics.UnaryOperandKind virtual Microsoft.CodeAnalysis.Diagnostics.AnalysisContext.ConfigureGeneratedCodeAnalysis(Microsoft.CodeAnalysis.Diagnostics.GeneratedCodeAnalysisFlags analysisMode) -> void virtual Microsoft.CodeAnalysis.Diagnostics.AnalysisContext.EnableConcurrentExecution() -> void diff --git a/src/Compilers/VisualBasic/Portable/BoundTree/Expression.vb b/src/Compilers/VisualBasic/Portable/BoundTree/Expression.vb index 5e89e3c0b59..611ab10caf0 100644 --- a/src/Compilers/VisualBasic/Portable/BoundTree/Expression.vb +++ b/src/Compilers/VisualBasic/Portable/BoundTree/Expression.vb @@ -78,7 +78,7 @@ Namespace Microsoft.CodeAnalysis.VisualBasic End Get End Property - Private ReadOnly Property IBinaryKind As BinaryOperationKind Implements ICompoundAssignmentExpression.BinaryKind + Private ReadOnly Property IBinaryKind As BinaryOperationKind Implements ICompoundAssignmentExpression.BinaryOperationKind Get If ExpressionKind() = OperationKind.CompoundAssignmentExpression Then Dim rightBinary As BoundBinaryOperator = TryCast(Me.Right, BoundBinaryOperator) @@ -154,15 +154,9 @@ Namespace Microsoft.CodeAnalysis.VisualBasic Friend Partial Class BoundMeReference Implements IInstanceReferenceExpression - Private ReadOnly Property IIsExplicit As Boolean Implements IInstanceReferenceExpression.IsExplicit + Private ReadOnly Property IInstanceReferenceKind As InstanceReferenceKind Implements IInstanceReferenceExpression.InstanceReferenceKind Get - Return Not Me.WasCompilerGenerated - End Get - End Property - - Private ReadOnly Property IParameter As IParameterSymbol Implements IParameterReferenceExpression.Parameter - Get - Return DirectCast(Me.ExpressionSymbol, IParameterSymbol) + Return If(Me.WasCompilerGenerated, InstanceReferenceKind.Implicit, InstanceReferenceKind.Explicit) End Get End Property @@ -182,20 +176,14 @@ Namespace Microsoft.CodeAnalysis.VisualBasic Friend Partial Class BoundMyBaseReference Implements IInstanceReferenceExpression - Private ReadOnly Property IIsExplicit As Boolean Implements IInstanceReferenceExpression.IsExplicit - Get - Return True - End Get - End Property - - Private ReadOnly Property IParameter As IParameterSymbol Implements IParameterReferenceExpression.Parameter + Private ReadOnly Property IInstanceReferenceKind As InstanceReferenceKind Implements IInstanceReferenceExpression.InstanceReferenceKind Get - Return DirectCast(Me.ExpressionSymbol, IParameterSymbol) + Return InstanceReferenceKind.BaseClass End Get End Property Protected Overrides Function ExpressionKind() As OperationKind - Return OperationKind.BaseClassInstanceReferenceExpression + Return OperationKind.InstanceReferenceExpression End Function Public Overrides Sub Accept(visitor As OperationVisitor) @@ -210,20 +198,14 @@ Namespace Microsoft.CodeAnalysis.VisualBasic Friend Partial Class BoundMyClassReference Implements IInstanceReferenceExpression - Private ReadOnly Property IIsExplicit As Boolean Implements IInstanceReferenceExpression.IsExplicit - Get - Return True - End Get - End Property - - Private ReadOnly Property IParameter As IParameterSymbol Implements IParameterReferenceExpression.Parameter + Private ReadOnly Property IInstanceReferenceKind As InstanceReferenceKind Implements IInstanceReferenceExpression.InstanceReferenceKind Get - Return DirectCast(Me.ExpressionSymbol, IParameterSymbol) + Return InstanceReferenceKind.ThisClass End Get End Property Protected Overrides Function ExpressionKind() As OperationKind - Return OperationKind.ClassInstanceReferenceExpression + Return OperationKind.InstanceReferenceExpression End Function Public Overrides Sub Accept(visitor As OperationVisitor) -- GitLab