diff --git a/src/Compilers/CSharp/Portable/BoundTree/Expression.cs b/src/Compilers/CSharp/Portable/BoundTree/Expression.cs index d0404309151b93fdd22caa8475e62922f9ca20c5..af6c74e187dcabebe77ed26f7a33bb8f22262c1d 100644 --- a/src/Compilers/CSharp/Portable/BoundTree/Expression.cs +++ b/src/Compilers/CSharp/Portable/BoundTree/Expression.cs @@ -1419,7 +1419,7 @@ internal partial class BoundDynamicIndexerAccess { protected override OperationKind ExpressionKind => OperationKind.None; - protected override ImmutableArray Children => this.Arguments.Add(this.ReceiverOpt).As(); + protected override ImmutableArray Children => this.Arguments.Insert(0, this.ReceiverOpt).As(); public override void Accept(OperationVisitor visitor) { @@ -1567,7 +1567,7 @@ internal partial class BoundPattern internal partial class BoundDeclarationPattern { - protected override ImmutableArray Children => ImmutableArray.Empty; + protected override ImmutableArray Children => ImmutableArray.Create(this.VariableAccess); } internal partial class BoundConstantPattern @@ -1584,8 +1584,6 @@ internal partial class BoundArgListOperator { protected override OperationKind ExpressionKind => OperationKind.None; - protected override ImmutableArray Children => this.Arguments.As(); - public override void Accept(OperationVisitor visitor) { visitor.VisitNoneOperation(this); @@ -2101,6 +2099,8 @@ internal partial class BoundFixedLocalCollectionInitializer { protected override OperationKind ExpressionKind => OperationKind.None; + protected override ImmutableArray Children => ImmutableArray.Create(this.Expression); + public override void Accept(OperationVisitor visitor) { visitor.VisitNoneOperation(this); diff --git a/src/Compilers/CSharp/Test/Semantic/CSharpCompilerSemanticTest.csproj b/src/Compilers/CSharp/Test/Semantic/CSharpCompilerSemanticTest.csproj index e391ca969f34e1c3cb15b14ea4a6787e4c3aea55..fce4ce5d90babfa68ebb39e33a366c40a2135518 100644 --- a/src/Compilers/CSharp/Test/Semantic/CSharpCompilerSemanticTest.csproj +++ b/src/Compilers/CSharp/Test/Semantic/CSharpCompilerSemanticTest.csproj @@ -61,6 +61,7 @@ + diff --git a/src/Compilers/CSharp/Test/Semantic/IOperation/IOperationTests_IFieldReferenceExpression.cs b/src/Compilers/CSharp/Test/Semantic/IOperation/IOperationTests_IFieldReferenceExpression.cs new file mode 100644 index 0000000000000000000000000000000000000000..a32cb3b83ad04973d98b92ff15815e38d1e2536f --- /dev/null +++ b/src/Compilers/CSharp/Test/Semantic/IOperation/IOperationTests_IFieldReferenceExpression.cs @@ -0,0 +1,37 @@ +// Copyright (c) Microsoft. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. + +using Microsoft.CodeAnalysis.CSharp.Syntax; +using Microsoft.CodeAnalysis.Test.Utilities; +using Roslyn.Test.Utilities; +using Xunit; + +namespace Microsoft.CodeAnalysis.CSharp.UnitTests +{ + public partial class IOperationTests : SemanticModelTestBase + { + [Fact, WorkItem(8884, "https://github.com/dotnet/roslyn/issues/8884")] + public void FieldReference_Attribute() + { + string source = @" +using System.Diagnostics; + +class C +{ + private const string field = nameof(field); + + [/**/Conditional(field)/**/] + void M() + { + } +} +"; + string expectedOperationTree = @" +IOperation: (OperationKind.None) (Syntax: 'Conditional(field)') + Children(1): IFieldReferenceExpression: System.String C.field (Static) (OperationKind.FieldReferenceExpression, Type: System.String, Constant: ""field"") (Syntax: 'field') +"; + var expectedDiagnostics = DiagnosticDescription.None; + + VerifyOperationTreeAndDiagnosticsForTest(source, expectedOperationTree, expectedDiagnostics); + } + } +} \ No newline at end of file diff --git a/src/Compilers/CSharp/Test/Semantic/IOperation/IOperationTests_IParameterReferenceExpression.cs b/src/Compilers/CSharp/Test/Semantic/IOperation/IOperationTests_IParameterReferenceExpression.cs index 69643cbbb9ace7fbdc4f09e5260554a4a79220db..c891508048a42d11d1572437bba5c427591ffb06 100644 --- a/src/Compilers/CSharp/Test/Semantic/IOperation/IOperationTests_IParameterReferenceExpression.cs +++ b/src/Compilers/CSharp/Test/Semantic/IOperation/IOperationTests_IParameterReferenceExpression.cs @@ -1,6 +1,7 @@ // Copyright (c) Microsoft. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. using Microsoft.CodeAnalysis.CSharp.Syntax; +using Microsoft.CodeAnalysis.CSharp.Test.Utilities; using Microsoft.CodeAnalysis.Test.Utilities; using Roslyn.Test.Utilities; using Xunit; @@ -137,7 +138,6 @@ public void M(List customers) IReturnStatement (OperationKind.ReturnStatement) (Syntax: 'cust.Name') IPropertyReferenceExpression: System.String Customer.Name { get; set; } (OperationKind.PropertyReferenceExpression, Type: System.String) (Syntax: 'cust.Name') Instance Receiver: IOperation: (OperationKind.None) (Syntax: 'cust') - Children(1): IParameterReferenceExpression: cust (OperationKind.ParameterReferenceExpression, Type: Customer) (Syntax: 'cust') "; var expectedDiagnostics = DiagnosticDescription.None; @@ -380,8 +380,8 @@ public void M(dynamic d, int x) IVariableDeclaration (1 variables) (OperationKind.VariableDeclaration) (Syntax: 'var y /**/;') Variables: Local_1: dynamic y Initializer: IOperation: (OperationKind.None) (Syntax: 'd[x]') - Children(2): IParameterReferenceExpression: x (OperationKind.ParameterReferenceExpression, Type: System.Int32) (Syntax: 'x') - IParameterReferenceExpression: d (OperationKind.ParameterReferenceExpression, Type: dynamic) (Syntax: 'd') + Children(2): IParameterReferenceExpression: d (OperationKind.ParameterReferenceExpression, Type: dynamic) (Syntax: 'd') + IParameterReferenceExpression: x (OperationKind.ParameterReferenceExpression, Type: System.Int32) (Syntax: 'x') "; var expectedDiagnostics = DiagnosticDescription.None; @@ -402,9 +402,9 @@ public void M(dynamic x, int y) "; string expectedOperationTree = @" IOperation: (OperationKind.None) (Syntax: 'x.M(y)') - Children(2): IParameterReferenceExpression: y (OperationKind.ParameterReferenceExpression, Type: System.Int32) (Syntax: 'y') - IOperation: (OperationKind.None) (Syntax: 'x.M') + Children(2): IOperation: (OperationKind.None) (Syntax: 'x.M') Children(1): IParameterReferenceExpression: x (OperationKind.ParameterReferenceExpression, Type: dynamic) (Syntax: 'x') + IParameterReferenceExpression: y (OperationKind.ParameterReferenceExpression, Type: System.Int32) (Syntax: 'y') "; var expectedDiagnostics = DiagnosticDescription.None; @@ -425,8 +425,8 @@ public void M(dynamic x, int y) "; string expectedOperationTree = @" IOperation: (OperationKind.None) (Syntax: 'x(y)') - Children(2): IParameterReferenceExpression: y (OperationKind.ParameterReferenceExpression, Type: System.Int32) (Syntax: 'y') - IParameterReferenceExpression: x (OperationKind.ParameterReferenceExpression, Type: dynamic) (Syntax: 'x') + Children(2): IParameterReferenceExpression: x (OperationKind.ParameterReferenceExpression, Type: dynamic) (Syntax: 'x') + IParameterReferenceExpression: y (OperationKind.ParameterReferenceExpression, Type: System.Int32) (Syntax: 'y') "; var expectedDiagnostics = DiagnosticDescription.None; @@ -565,8 +565,7 @@ public void M(int x) IOperation: (OperationKind.None) (Syntax: 'case var y ... break;') Children(2): IOperation: (OperationKind.None) (Syntax: 'case var y ... (x >= 10):') Children(2): IOperation: (OperationKind.None) (Syntax: 'var y') - Children(2): ILocalReferenceExpression: y (OperationKind.LocalReferenceExpression, Type: System.Int32) (Syntax: 'var y') - IOperation: (OperationKind.None) (Syntax: 'var') + Children(1): ILocalReferenceExpression: y (OperationKind.LocalReferenceExpression, Type: System.Int32) (Syntax: 'var y') IBinaryOperatorExpression (BinaryOperationKind.IntegerGreaterThanOrEqual) (OperationKind.BinaryOperatorExpression, Type: System.Boolean) (Syntax: 'x >= 10') Left: IParameterReferenceExpression: x (OperationKind.ParameterReferenceExpression, Type: System.Int32) (Syntax: 'x') Right: ILiteralExpression (Text: 10) (OperationKind.LiteralExpression, Type: System.Int32, Constant: 10) (Syntax: '10') @@ -598,12 +597,11 @@ public void M(int x) "; string expectedOperationTree = @" IOperation: (OperationKind.None) (Syntax: 'switch (x) ... }') - Children(4): IParameterReferenceExpression: x (OperationKind.ParameterReferenceExpression, Type: System.Int32) (Syntax: 'x') + Children(3): IParameterReferenceExpression: x (OperationKind.ParameterReferenceExpression, Type: System.Int32) (Syntax: 'x') IOperation: (OperationKind.None) (Syntax: 'case var y ... break;') Children(2): IOperation: (OperationKind.None) (Syntax: 'case var y ... (x >= 10):') Children(2): IOperation: (OperationKind.None) (Syntax: 'var y') - Children(2): ILocalReferenceExpression: y (OperationKind.LocalReferenceExpression, Type: System.Int32) (Syntax: 'var y') - IOperation: (OperationKind.None) (Syntax: 'var') + Children(1): ILocalReferenceExpression: y (OperationKind.LocalReferenceExpression, Type: System.Int32) (Syntax: 'var y') IBinaryOperatorExpression (BinaryOperationKind.IntegerGreaterThanOrEqual) (OperationKind.BinaryOperatorExpression, Type: System.Boolean) (Syntax: 'x >= 10') Left: IParameterReferenceExpression: x (OperationKind.ParameterReferenceExpression, Type: System.Int32) (Syntax: 'x') Right: ILiteralExpression (Text: 10) (OperationKind.LiteralExpression, Type: System.Int32, Constant: 10) (Syntax: '10') @@ -612,12 +610,101 @@ public void M(int x) Children(2): IOperation: (OperationKind.None) (Syntax: 'default:') Children(1): IOperation: (OperationKind.None) (Syntax: 'default:') IBranchStatement (BranchKind.Break) (OperationKind.BranchStatement) (Syntax: 'break;') - IOperation: (OperationKind.None) (Syntax: 'default:') - Children(1): IOperation: (OperationKind.None) (Syntax: 'default:') "; var expectedDiagnostics = DiagnosticDescription.None; VerifyOperationTreeAndDiagnosticsForTest(source, expectedOperationTree, expectedDiagnostics); } + + [Fact, WorkItem(8884, "https://github.com/dotnet/roslyn/issues/8884")] + public void ParameterReference_UserDefinedLogicalConditionalOperator() + { + string source = @" +class A +{ + public static bool operator true(A o) { return true; } + public static bool operator false(A o) { return false; } +} +class B : A +{ + public static B operator &(B x, B y) { return x; } +} +class C : B +{ + public static C operator |(C x, C y) { return x; } +} +class P +{ + static void M(C x, C y) + { + if (/**/x && y/**/) + { + } + } +} +"; + string expectedOperationTree = @" +IOperation: (OperationKind.None) (Syntax: 'x && y') + Children(2): IConversionExpression (ConversionKind.Cast, Implicit) (OperationKind.ConversionExpression, Type: B) (Syntax: 'x') + IParameterReferenceExpression: x (OperationKind.ParameterReferenceExpression, Type: C) (Syntax: 'x') + IConversionExpression (ConversionKind.Cast, Implicit) (OperationKind.ConversionExpression, Type: B) (Syntax: 'y') + IParameterReferenceExpression: y (OperationKind.ParameterReferenceExpression, Type: C) (Syntax: 'y') +"; + var expectedDiagnostics = DiagnosticDescription.None; + + VerifyOperationTreeAndDiagnosticsForTest(source, expectedOperationTree, expectedDiagnostics); + } + + [Fact, WorkItem(8884, "https://github.com/dotnet/roslyn/issues/8884")] + public void ParameterReference_NoPiaObjectCreation() + { + var sources0 = @" +using System; +using System.Runtime.InteropServices; + +[assembly: ImportedFromTypeLib(""_.dll"")] +[assembly: Guid(""f9c2d51d-4f44-45f0-9eda-c9d599b58257"")] +[ComImport()] +[Guid(""f9c2d51d-4f44-45f0-9eda-c9d599b58277"")] +[CoClass(typeof(C))] +public interface I + { + int P { get; set; } + } +[Guid(""f9c2d51d-4f44-45f0-9eda-c9d599b58278"")] +public class C +{ + public C(object o) + { + } +} +"; + var sources1 = @" +struct S +{ + public I F(object x) + { + return /**/new I(x)/**/; + } +} +"; + var compilation0 = CreateStandardCompilation(sources0); + compilation0.VerifyDiagnostics(); + + var compilation1 = CreateStandardCompilation( + sources1, + references: new[] { MscorlibRef, SystemRef, compilation0.EmitToImageReference(embedInteropTypes: true) }); + + string expectedOperationTree = @" +IOperation: (OperationKind.None) (Syntax: 'new I(x)') +"; + var expectedDiagnostics = new DiagnosticDescription[] { + // (6,25): error CS1729: 'I' does not contain a constructor that takes 1 arguments + // return /**/new I(x)/**/; + Diagnostic(ErrorCode.ERR_BadCtorArgCount, "(x)").WithArguments("I", "1").WithLocation(6, 25) + }; + + VerifyOperationTreeAndDiagnosticsForTest(compilation1, expectedOperationTree, expectedDiagnostics); + } } } \ No newline at end of file diff --git a/src/Compilers/VisualBasic/Portable/BoundTree/Expression.vb b/src/Compilers/VisualBasic/Portable/BoundTree/Expression.vb index e5eea43a924a700e11e50b6304560b4f8a402bdc..73ea24e4c27a5cd0c0b34781f7703403e1a7c576 100644 --- a/src/Compilers/VisualBasic/Portable/BoundTree/Expression.vb +++ b/src/Compilers/VisualBasic/Portable/BoundTree/Expression.vb @@ -1826,12 +1826,6 @@ Namespace Microsoft.CodeAnalysis.VisualBasic Return OperationKind.None End Function - Protected Overrides ReadOnly Property Children As ImmutableArray(Of IOperation) - Get - Return ImmutableArray.Create(Of IOperation)(Me.UnderlyingLValue) - End Get - End Property - Public Overrides Sub Accept(visitor As OperationVisitor) visitor.VisitNoneOperation(Me) End Sub @@ -1946,12 +1940,6 @@ Namespace Microsoft.CodeAnalysis.VisualBasic Return OperationKind.None End Function - Protected Overrides ReadOnly Property Children As ImmutableArray(Of IOperation) - Get - Return ImmutableArray.Create(Of IOperation)(Me.SourceType) - End Get - End Property - Public Overrides Sub Accept(visitor As OperationVisitor) visitor.VisitNoneOperation(Me) End Sub @@ -2458,12 +2446,6 @@ Namespace Microsoft.CodeAnalysis.VisualBasic Return OperationKind.None End Function - Protected Overrides ReadOnly Property Children As ImmutableArray(Of IOperation) - Get - Return ImmutableArray.Create(Of IOperation)(Me.OriginalArgument) - End Get - End Property - Public Overrides Sub Accept(visitor As OperationVisitor) visitor.VisitNoneOperation(Me) End Sub @@ -2988,12 +2970,6 @@ Namespace Microsoft.CodeAnalysis.VisualBasic Return OperationKind.None End Function - Protected Overrides ReadOnly Property Children As ImmutableArray(Of IOperation) - Get - Return ImmutableArray.Create(Of IOperation)(Me.Expression) - End Get - End Property - Public Overrides Sub Accept(visitor As OperationVisitor) visitor.VisitNoneOperation(Me) End Sub diff --git a/src/Compilers/VisualBasic/Test/Semantic/BasicCompilerSemanticTest.vbproj b/src/Compilers/VisualBasic/Test/Semantic/BasicCompilerSemanticTest.vbproj index 729cc4fb34930102d4a14fc4e6389bfe4ca080d9..5869d2fe1a23d9d73fc4b6907c8f4b63f0f77df2 100644 --- a/src/Compilers/VisualBasic/Test/Semantic/BasicCompilerSemanticTest.vbproj +++ b/src/Compilers/VisualBasic/Test/Semantic/BasicCompilerSemanticTest.vbproj @@ -97,6 +97,7 @@ + diff --git a/src/Compilers/VisualBasic/Test/Semantic/IOperation/IOperationTests_IFieldReferenceExpression.vb b/src/Compilers/VisualBasic/Test/Semantic/IOperation/IOperationTests_IFieldReferenceExpression.vb new file mode 100644 index 0000000000000000000000000000000000000000..016cd8a89dcb66b5cd6f33cdd9782f9f2beec98a --- /dev/null +++ b/src/Compilers/VisualBasic/Test/Semantic/IOperation/IOperationTests_IFieldReferenceExpression.vb @@ -0,0 +1,36 @@ +' Copyright (c) Microsoft. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. + +Imports Microsoft.CodeAnalysis.Semantics +Imports Microsoft.CodeAnalysis.Test.Utilities +Imports Microsoft.CodeAnalysis.VisualBasic.Syntax +Imports Roslyn.Test.Utilities + +Namespace Microsoft.CodeAnalysis.VisualBasic.UnitTests.Semantics + + Partial Public Class IOperationTests + Inherits SemanticModelTestBase + + + Public Sub FieldReference_Attribute() + Dim source = 'BIND:"Conditional(field)" + Private Sub M() + End Sub +End Class]]>.Value + + Dim expectedOperationTree = .Value + + Dim expectedDiagnostics = String.Empty + + VerifyOperationTreeAndDiagnosticsForTest(Of AttributeSyntax)(source, expectedOperationTree, expectedDiagnostics) + End Sub + End Class +End Namespace diff --git a/src/Compilers/VisualBasic/Test/Semantic/IOperation/IOperationTests_IParameterReferenceExpression.vb b/src/Compilers/VisualBasic/Test/Semantic/IOperation/IOperationTests_IParameterReferenceExpression.vb index 4cc0c70da8f3ff21ee1852baeef81ef1cbf24397..65581f7e4b42962f237fd416fb5e05bc5ede6617 100644 --- a/src/Compilers/VisualBasic/Test/Semantic/IOperation/IOperationTests_IParameterReferenceExpression.vb +++ b/src/Compilers/VisualBasic/Test/Semantic/IOperation/IOperationTests_IParameterReferenceExpression.vb @@ -100,6 +100,132 @@ IOperation: (OperationKind.None) (Syntax: 'From cust I ... t cust.Name') VerifyOperationTreeAndDiagnosticsForTest(Of QueryExpressionSyntax)(source, expectedOperationTree, expectedDiagnostics) End Sub + + Public Sub ParameterReference_QueryExpressionAggregateClause() + Dim source = .Value + + Dim expectedOperationTree = .Value + + Dim expectedDiagnostics = String.Empty + + VerifyOperationTreeAndDiagnosticsForTest(Of QueryExpressionSyntax)(source, expectedOperationTree, expectedDiagnostics) + End Sub + + + Public Sub ParameterReference_QueryExpressionOrderByClause() + Dim source = .Value + + Dim expectedOperationTree = .Value + + Dim expectedDiagnostics = String.Empty + + VerifyOperationTreeAndDiagnosticsForTest(Of QueryExpressionSyntax)(source, expectedOperationTree, expectedDiagnostics) + End Sub + + + Public Sub ParameterReference_QueryExpressionGroupByClause() + Dim source = .Value + + Dim expectedOperationTree = , )(keySelector As System.Func(Of System.String, ), resultSelector As System.Func(Of , System.Collections.Generic.IEnumerable(Of System.String), )) As System.Collections.Generic.IEnumerable(Of )) (OperationKind.InvocationExpression, Type: System.Collections.Generic.IEnumerable(Of )) (Syntax: 'Group By w ... nto Count()') + Instance Receiver: IConversionExpression (ConversionKind.Basic, Implicit) (OperationKind.ConversionExpression, Type: System.Collections.Generic.IEnumerable(Of System.String)) (Syntax: 'y In x') + IOperation: (OperationKind.None) (Syntax: 'y In x') + Children(1): IOperation: (OperationKind.None) (Syntax: 'x') + Children(1): IParameterReferenceExpression: x (OperationKind.ParameterReferenceExpression, Type: System.String()) (Syntax: 'x') + Arguments(2): IArgument (ArgumentKind.DefaultValue, Matching Parameter: keySelector) (OperationKind.Argument) (Syntax: 'x') + IConversionExpression (ConversionKind.Basic, Implicit) (OperationKind.ConversionExpression, Type: System.Func(Of System.String, )) (Syntax: 'x') + IOperation: (OperationKind.None) (Syntax: 'x') + Children(1): IOperation: (OperationKind.None) (Syntax: 'Group By w ... nto Count()') + Children(2): IOperation: (OperationKind.None) (Syntax: 'w = x') + Children(1): IParameterReferenceExpression: x (OperationKind.ParameterReferenceExpression, Type: System.String()) (Syntax: 'x') + IOperation: (OperationKind.None) (Syntax: 'z = y') + Children(1): IOperation: (OperationKind.None) (Syntax: 'y') + IArgument (ArgumentKind.DefaultValue, Matching Parameter: resultSelector) (OperationKind.Argument) (Syntax: 'Group By w ... nto Count()') + IConversionExpression (ConversionKind.Basic, Implicit) (OperationKind.ConversionExpression, Type: System.Func(Of , System.Collections.Generic.IEnumerable(Of System.String), )) (Syntax: 'Group By w ... nto Count()') + IOperation: (OperationKind.None) (Syntax: 'Group By w ... nto Count()') + Children(1): IOperation: (OperationKind.None) (Syntax: 'Group By w ... nto Count()') + Children(3): IOperation: (OperationKind.None) (Syntax: 'w') + IOperation: (OperationKind.None) (Syntax: 'z') + IOperation: (OperationKind.None) (Syntax: 'Count()') + Children(1): IOperation: (OperationKind.None) (Syntax: 'Count()') + Children(1): IInvocationExpression ( Function System.Collections.Generic.IEnumerable(Of System.String).Count() As System.Int32) (OperationKind.InvocationExpression, Type: System.Int32) (Syntax: 'Count()') + Instance Receiver: IParameterReferenceExpression: $VB$ItAnonymous (OperationKind.ParameterReferenceExpression, Type: System.Collections.Generic.IEnumerable(Of System.String)) (Syntax: 'Group By w ... nto Count()') +]]>.Value + + Dim expectedDiagnostics = String.Empty + + VerifyOperationTreeAndDiagnosticsForTest(Of QueryExpressionSyntax)(source, expectedOperationTree, expectedDiagnostics) + End Sub + Public Sub ParameterReference_ObjectAndCollectionInitializer() Dim source = + Public Sub ParameterReference_LateAddressOfOperator() + Dim source = .Value + + Dim expectedOperationTree = .Value + + Dim expectedDiagnostics = String.Empty + + VerifyOperationTreeAndDiagnosticsForTest(Of UnaryExpressionSyntax)(source, expectedOperationTree, expectedDiagnostics) + End Sub + + + Public Sub ParameterReference_NullableIsTrueOperator() + Dim source = .Value + + Dim expectedOperationTree = .Value + + Dim expectedDiagnostics = String.Empty + + VerifyOperationTreeAndDiagnosticsForTest(Of MultiLineIfBlockSyntax)(source, expectedOperationTree, expectedDiagnostics) + End Sub + + + Public Sub ParameterReference_NoPiaObjectCreation() + Dim sources0 = + + + + + +Public Interface I + Property P As Integer +End Interface + +Public Class C + Public Sub New(o As Object) + End Sub +End Class +]]> + + Dim sources1 = + + + Dim compilation0 = CreateCompilationWithMscorlib(sources0) + compilation0.AssertTheseDiagnostics() + + ' No errors for /r:_.dll + Dim compilation1 = CreateCompilationWithReferences( + sources1, + references:={MscorlibRef, SystemRef, compilation0.EmitToImageReference(embedInteropTypes:=True)}) + + Dim expectedOperationTree = .Value + + Dim expectedDiagnostics = .Value + + VerifyOperationTreeAndDiagnosticsForTest(Of ObjectCreationExpressionSyntax)(compilation1, "a.vb", expectedOperationTree, expectedDiagnostics) + End Sub End Class End Namespace