diff --git a/src/Compilers/CSharp/Portable/Operations/CSharpArgument.cs b/src/Compilers/CSharp/Portable/Operations/CSharpArgument.cs index 86af2a36f4ae9098e58723c90e54aab2b1c6933d..98176e664562d182433f57dfe99db5b5cc1b7e29 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 a130fc4c6e1a1ca89dae775ebf3ff8a7dbeb7bce..8f568dc4cf31fc27397a88fea0aa423d1aadc23c 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 8d5f1a7abf4daa67db25ed7187417e26a357a41e..6c04a9776ef5e6babf5806c3d43ae7adf8e3ade9 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 e32c16dd031ec8d078513c970abe900bbf13762b..5b0cd86f8dc120ad24ba1a2e03146e995e2fa059 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