From bc6524f9adbd6875afcfa86f7735c6245c63f9d9 Mon Sep 17 00:00:00 2001 From: Gen Lu Date: Thu, 7 Sep 2017 17:41:57 -0700 Subject: [PATCH] Address review comments --- .../Portable/Operations/CSharpArgument.cs | 4 +- .../IOperation/IOperationTests_IArgument.cs | 3 +- .../Utilities/VisualBasic/BasicTestBase.vb | 7 +-- .../VisualBasicOperationFactory_Methods.vb | 50 ++++++++----------- 4 files changed, 25 insertions(+), 39 deletions(-) diff --git a/src/Compilers/CSharp/Portable/Operations/CSharpArgument.cs b/src/Compilers/CSharp/Portable/Operations/CSharpArgument.cs index 86af2a36f4a..98176e66456 100644 --- a/src/Compilers/CSharp/Portable/Operations/CSharpArgument.cs +++ b/src/Compilers/CSharp/Portable/Operations/CSharpArgument.cs @@ -17,7 +17,7 @@ internal abstract class BaseCSharpArgument : BaseArgument public override CommonConversion OutConversion => new CommonConversion(exists: true, isIdentity: true, isNumeric: false, isReference: false, methodSymbol: null); } - internal sealed partial class CSharpArgument : BaseCSharpArgument + internal sealed class CSharpArgument : BaseCSharpArgument { public CSharpArgument(ArgumentKind argumentKind, IParameterSymbol parameter, IOperation value, SemanticModel semanticModel, SyntaxNode syntax, ITypeSymbol type, Optional constantValue, bool isImplicit) : base(argumentKind, parameter, semanticModel, syntax, type, constantValue, isImplicit) @@ -28,7 +28,7 @@ internal sealed partial class CSharpArgument : BaseCSharpArgument protected override IOperation ValueImpl { get; } } - internal sealed partial class LazyCSharpArgument : BaseCSharpArgument + internal sealed class LazyCSharpArgument : BaseCSharpArgument { private readonly Lazy _lazyValue; diff --git a/src/Compilers/CSharp/Test/Semantic/IOperation/IOperationTests_IArgument.cs b/src/Compilers/CSharp/Test/Semantic/IOperation/IOperationTests_IArgument.cs index a130fc4c6e1..8f568dc4cf3 100644 --- a/src/Compilers/CSharp/Test/Semantic/IOperation/IOperationTests_IArgument.cs +++ b/src/Compilers/CSharp/Test/Semantic/IOperation/IOperationTests_IArgument.cs @@ -2224,7 +2224,7 @@ struct G [CompilerTrait(CompilerFeature.IOperation)] [Fact] - public void GettingInOutConverionFromCSharpArgumentShouldThrowException() + public void GettingInOutConversionFromCSharpArgumentShouldThrowException() { string source = @" class P @@ -2245,6 +2245,7 @@ static void M2(int x) var invocation = (IInvocationExpression)operation; var argument = invocation.ArgumentsInEvaluationOrder[0]; + // We are calling VB extension methods on IArgument in C# code, therefore exception is expteced here. Assert.Throws(() => argument.GetInConversion()); Assert.Throws(() => argument.GetOutConversion()); } diff --git a/src/Compilers/Test/Utilities/VisualBasic/BasicTestBase.vb b/src/Compilers/Test/Utilities/VisualBasic/BasicTestBase.vb index 8d5f1a7abf4..6c04a9776ef 100644 --- a/src/Compilers/Test/Utilities/VisualBasic/BasicTestBase.vb +++ b/src/Compilers/Test/Utilities/VisualBasic/BasicTestBase.vb @@ -861,12 +861,7 @@ Public MustInherit Class BasicTestBaseBase Dim semanticModel = compilation.GetSemanticModel(node.SyntaxTree) Dim operation = semanticModel.GetOperationInternal(node) - If operation IsNot Nothing Then - Return (operation, node) - Else - Return (Nothing, Nothing) - End If - + Return (operation, node) End Function #End Region diff --git a/src/Compilers/VisualBasic/Portable/Operations/VisualBasicOperationFactory_Methods.vb b/src/Compilers/VisualBasic/Portable/Operations/VisualBasicOperationFactory_Methods.vb index e32c16dd031..5b0cd86f8dc 100644 --- a/src/Compilers/VisualBasic/Portable/Operations/VisualBasicOperationFactory_Methods.vb +++ b/src/Compilers/VisualBasic/Portable/Operations/VisualBasicOperationFactory_Methods.vb @@ -105,47 +105,37 @@ Namespace Microsoft.CodeAnalysis.Semantics isImplicit:=isImplicit) Case Else Dim lastParameterIndex = parameters.Length - 1 + Dim kind As ArgumentKind + Dim parameter As ParameterSymbol + If index = lastParameterIndex AndAlso ParameterIsParamArray(parameters(lastParameterIndex)) Then ' TODO: figure out if this is true: ' a compiler generated argument for a ParamArray parameter is created iff ' a list of arguments (including 0 argument) is provided for ParamArray parameter in source ' https://github.com/dotnet/roslyn/issues/18550 - Dim kind = If(argument.WasCompilerGenerated AndAlso argument.Kind = BoundKind.ArrayCreation, ArgumentKind.ParamArray, ArgumentKind.Explicit) - Dim parameter = parameters(lastParameterIndex) - Dim value = Create(argument) - - Return New VisualBasicArgument( - kind, - parameter, - value, - inConversion:=New Conversion(Conversions.Identity), - outConversion:=New Conversion(Conversions.Identity), - semanticModel:=_semanticModel, - syntax:=value.Syntax, - type:=Nothing, - constantValue:=Nothing, - isImplicit:=isImplicit) + kind = If(argument.WasCompilerGenerated AndAlso argument.Kind = BoundKind.ArrayCreation, ArgumentKind.ParamArray, ArgumentKind.Explicit) + parameter = parameters(lastParameterIndex) Else ' TODO: figure our if this is true: ' a compiler generated argument for an Optional parameter is created iff ' the argument is omitted from the source ' https://github.com/dotnet/roslyn/issues/18550 - Dim kind = If(argument.WasCompilerGenerated, ArgumentKind.DefaultValue, ArgumentKind.Explicit) - Dim parameter = parameters(index) - Dim value = Create(argument) - - Return New VisualBasicArgument( - kind, - parameter, - value, - inConversion:=New Conversion(Conversions.Identity), - outConversion:=New Conversion(Conversions.Identity), - semanticModel:=_semanticModel, - syntax:=value.Syntax, - type:=Nothing, - constantValue:=Nothing, - isImplicit:=isImplicit) + kind = If(argument.WasCompilerGenerated, ArgumentKind.DefaultValue, ArgumentKind.Explicit) + parameter = parameters(index) End If + + Dim value = Create(argument) + Return New VisualBasicArgument( + kind, + parameter, + Create(argument), + inConversion:=New Conversion(Conversions.Identity), + outConversion:=New Conversion(Conversions.Identity), + semanticModel:=_semanticModel, + syntax:=value.Syntax, + type:=Nothing, + constantValue:=Nothing, + isImplicit:=isImplicit) End Select End Function -- GitLab