diff --git a/src/Compilers/CSharp/Desktop/CommandLine/CommandLineParser.cs b/src/Compilers/CSharp/Desktop/CommandLine/CommandLineParser.cs index a066561e3287742e9becb27ac3ec56e663c2a5fa..f744ddb0f8dab121c9ffad8317361334cfa16a7a 100644 --- a/src/Compilers/CSharp/Desktop/CommandLine/CommandLineParser.cs +++ b/src/Compilers/CSharp/Desktop/CommandLine/CommandLineParser.cs @@ -1477,19 +1477,7 @@ private static void ValidateWin32Settings(string win32ResourceFile, string win32 { // Use FileShare.ReadWrite because the file could be opened by the current process. // For example, it is an XML doc file produced by the build. - var stream = new FileStream(fullPath, FileMode.Open, FileAccess.Read, FileShare.ReadWrite); - - // Lock the entire content to prevent others from modifying it while we are reading. - try - { - stream.Lock(0, long.MaxValue); - return stream; - } - catch - { - stream.Dispose(); - throw; - } + return new FileStream(fullPath, FileMode.Open, FileAccess.Read, FileShare.ReadWrite); }; return new ResourceDescription(resourceName, fileName, dataProvider, isPublic, embedded, checkArgs: false); } diff --git a/src/Compilers/VisualBasic/Desktop/CommandLine/CommandLineParser.vb b/src/Compilers/VisualBasic/Desktop/CommandLine/CommandLineParser.vb index ab83a51d6194a070c9da725233a07ada8bed7d9f..2ca80508ca539323bf7fe4da0f6b825961cd0e60 100644 --- a/src/Compilers/VisualBasic/Desktop/CommandLine/CommandLineParser.vb +++ b/src/Compilers/VisualBasic/Desktop/CommandLine/CommandLineParser.vb @@ -1388,16 +1388,7 @@ lVbRuntimePlus: Dim dataProvider As Func(Of Stream) = Function() ' Use FileShare.ReadWrite because the file could be opened by the current process. ' For example, it Is an XML doc file produced by the build. - Dim stream = New FileStream(fullPath, FileMode.Open, FileAccess.Read, FileShare.ReadWrite) - - ' Lock the entire content to prevent others from modifying it while we are reading. - Try - stream.Lock(0, Long.MaxValue) - Return stream - Catch - stream.Dispose() - Throw - End Try + Return New FileStream(fullPath, FileMode.Open, FileAccess.Read, FileShare.ReadWrite) End Function Return New ResourceDescription(resourceName, fileName, dataProvider, isPublic, embedded, checkArgs:=False) End Function diff --git a/src/Compilers/VisualBasic/Desktop/VisualBasicSerializableCompilationOptions.vb b/src/Compilers/VisualBasic/Desktop/VisualBasicSerializableCompilationOptions.vb index 417e5fc5def9c15279c6c8ec30c12724a0804489..bc246d66b28b4ed0acdd0348e3ff48db714c1a62 100644 --- a/src/Compilers/VisualBasic/Desktop/VisualBasicSerializableCompilationOptions.vb +++ b/src/Compilers/VisualBasic/Desktop/VisualBasicSerializableCompilationOptions.vb @@ -18,6 +18,7 @@ Namespace Microsoft.CodeAnalysis.VisualBasic Private Const OptionExplicitString = "OptionExplicit" Private Const OptionCompareTextString = "OptionCompareText" Private Const EmbedVbCoreRuntimeString = "EmbedVbCoreRuntime" + Private Const SuppressEmbeddedDeclarations = "SuppressEmbeddedDeclarations" Private Const ParseOptionsString = "ParseOptions" Sub New(options As VisualBasicCompilationOptions) @@ -60,6 +61,7 @@ Namespace Microsoft.CodeAnalysis.VisualBasic optionExplicit:=info.GetBoolean(OptionExplicitString), optionCompareText:=info.GetBoolean(OptionCompareTextString), embedVbCoreRuntime:=info.GetBoolean(EmbedVbCoreRuntimeString), + suppressEmbeddedDeclarations:=info.GetBoolean(SuppressEmbeddedDeclarations), parseOptions:=If(serializableOptions IsNot Nothing, serializableOptions.Options, Nothing)) End Sub @@ -73,6 +75,7 @@ Namespace Microsoft.CodeAnalysis.VisualBasic info.AddValue(OptionExplicitString, _options.OptionExplicit) info.AddValue(OptionCompareTextString, _options.OptionCompareText) info.AddValue(EmbedVbCoreRuntimeString, _options.EmbedVbCoreRuntime) + info.AddValue(SuppressEmbeddedDeclarations, _options.SuppressEmbeddedDeclarations) info.AddValue(ParseOptionsString, If(_options.ParseOptions IsNot Nothing, New VisualBasicSerializableParseOptions(_options.ParseOptions), Nothing)) End Sub diff --git a/src/Compilers/VisualBasic/Portable/Compilation/VisualBasicCompilation.vb b/src/Compilers/VisualBasic/Portable/Compilation/VisualBasicCompilation.vb index d0982e77014a6bb0ff039fa8596ab13751ae7f1a..fff8e8e8a9e56e7dd6d1c6418d27c044b9302940 100644 --- a/src/Compilers/VisualBasic/Portable/Compilation/VisualBasicCompilation.vb +++ b/src/Compilers/VisualBasic/Portable/Compilation/VisualBasicCompilation.vb @@ -225,11 +225,12 @@ Namespace Microsoft.CodeAnalysis.VisualBasic Friend Property MyTemplate As SyntaxTree Get If m_lazyMyTemplate Is VisualBasicSyntaxTree.Dummy Then - If Me.Options.EmbedVbCoreRuntime Then + Dim compilationOptions = Me.Options + If compilationOptions.EmbedVbCoreRuntime OrElse compilationOptions.SuppressEmbeddedDeclarations Then m_lazyMyTemplate = Nothing Else ' first see whether we can use one from global cache - Dim parseOptions = If(Me.Options.ParseOptions, VisualBasicParseOptions.Default) + Dim parseOptions = If(compilationOptions.ParseOptions, VisualBasicParseOptions.Default) Dim tree As SyntaxTree = Nothing If s_myTemplateCache.TryGetValue(parseOptions, tree) Then @@ -1108,7 +1109,8 @@ Namespace Microsoft.CodeAnalysis.VisualBasic ' In new flavors of the framework, types, that XML helpers depend upon, are ' defined in assemblies with different names. Let's not hardcode these names, ' let's check for presence of types instead. - Return InternalXmlHelperDependencyIsSatisfied(WellKnownType.System_Linq_Enumerable) AndAlso + Return Not Me.Options.SuppressEmbeddedDeclarations AndAlso + InternalXmlHelperDependencyIsSatisfied(WellKnownType.System_Linq_Enumerable) AndAlso InternalXmlHelperDependencyIsSatisfied(WellKnownType.System_Xml_Linq_XElement) AndAlso InternalXmlHelperDependencyIsSatisfied(WellKnownType.System_Xml_Linq_XName) AndAlso InternalXmlHelperDependencyIsSatisfied(WellKnownType.System_Xml_Linq_XAttribute) AndAlso diff --git a/src/Compilers/VisualBasic/Portable/VisualBasicCompilationOptions.vb b/src/Compilers/VisualBasic/Portable/VisualBasicCompilationOptions.vb index 2e2544a59a6e971fef99bb04c62d1ef3669e3959..c76b8dd70a082814b07f720f2bb2105fd08029b4 100644 --- a/src/Compilers/VisualBasic/Portable/VisualBasicCompilationOptions.vb +++ b/src/Compilers/VisualBasic/Portable/VisualBasicCompilationOptions.vb @@ -29,6 +29,10 @@ Namespace Microsoft.CodeAnalysis.VisualBasic Private _embedVbCoreRuntime As Boolean Private _parseOptions As VisualBasicParseOptions + ' The assemblies emitted by the expression compiler should never contain embedded declarations - + ' those should come from the user's code. + Private _suppressEmbeddedDeclarations As Boolean + ''' ''' Initializes a new instance of the VisualBasicCompilationOptions type with various options. ''' @@ -108,6 +112,7 @@ Namespace Microsoft.CodeAnalysis.VisualBasic generalDiagnosticOption, specificDiagnosticOptions, concurrentBuild, + suppressEmbeddedDeclarations:=False, extendedCustomDebugInformation:=True, xmlReferenceResolver:=xmlReferenceResolver, sourceReferenceResolver:=sourceReferenceResolver, @@ -141,6 +146,7 @@ Namespace Microsoft.CodeAnalysis.VisualBasic generalDiagnosticOption As ReportDiagnostic, specificDiagnosticOptions As IEnumerable(Of KeyValuePair(Of String, ReportDiagnostic)), concurrentBuild As Boolean, + suppressEmbeddedDeclarations As Boolean, extendedCustomDebugInformation As Boolean, xmlReferenceResolver As XmlReferenceResolver, sourceReferenceResolver As SourceReferenceResolver, @@ -181,7 +187,11 @@ Namespace Microsoft.CodeAnalysis.VisualBasic _optionExplicit = optionExplicit _optionCompareText = optionCompareText _embedVbCoreRuntime = embedVbCoreRuntime + _suppressEmbeddedDeclarations = suppressEmbeddedDeclarations _parseOptions = parseOptions + + Debug.Assert(Not (_embedVbCoreRuntime AndAlso _suppressEmbeddedDeclarations), + "_embedVbCoreRuntime and _suppressEmbeddedDeclarations are mutually exclusive") End Sub Private Sub New(other As VisualBasicCompilationOptions) @@ -198,6 +208,7 @@ Namespace Microsoft.CodeAnalysis.VisualBasic optionCompareText:=other.OptionCompareText, parseOptions:=other.ParseOptions, embedVbCoreRuntime:=other.EmbedVbCoreRuntime, + suppressEmbeddedDeclarations:=other.SuppressEmbeddedDeclarations, optimizationLevel:=other.OptimizationLevel, checkOverflow:=other.CheckOverflow, cryptoKeyContainer:=other.CryptoKeyContainer, @@ -301,6 +312,18 @@ Namespace Microsoft.CodeAnalysis.VisualBasic End Get End Property + ''' + ''' Gets the embedded declaration suppression setting. + ''' + ''' + ''' The embedded declaration suppression setting. + ''' + Friend ReadOnly Property SuppressEmbeddedDeclarations As Boolean + Get + Return _suppressEmbeddedDeclarations + End Get + End Property + ''' ''' Gets the Parse Options setting. ''' Compilation level parse options. Used when compiling synthetic embedded code such as My template @@ -512,6 +535,20 @@ Namespace Microsoft.CodeAnalysis.VisualBasic Return New VisualBasicCompilationOptions(Me) With {.ExtendedCustomDebugInformation_internal_protected_set = extendedCustomDebugInformation} End Function + ''' + ''' Creates a new VisualBasicCompilationOptions instance with different embedded declaration suppression setting specified. + ''' + ''' The embedded declaration suppression setting. + ''' A new instance of VisualBasicCompilationOptions, if the embedded declaration suppression setting is different; otherwise current instance. + ''' Only expected to be called from the expression compiler. + Friend Function WithSuppressEmbeddedDeclarations(suppressEmbeddedDeclarations As Boolean) As VisualBasicCompilationOptions + If suppressEmbeddedDeclarations = _suppressEmbeddedDeclarations Then + Return Me + End If + + Return New VisualBasicCompilationOptions(Me) With {._suppressEmbeddedDeclarations = suppressEmbeddedDeclarations} + End Function + ''' ''' Creates a new VisualBasicCompilationOptions instance with a different cryptography key container specified ''' @@ -805,6 +842,7 @@ Namespace Microsoft.CodeAnalysis.VisualBasic Me.OptionExplicit = other.OptionExplicit AndAlso Me.OptionCompareText = other.OptionCompareText AndAlso Me.EmbedVbCoreRuntime = other.EmbedVbCoreRuntime AndAlso + Me.SuppressEmbeddedDeclarations = other.SuppressEmbeddedDeclarations AndAlso If(Me.ParseOptions Is Nothing, other.ParseOptions Is Nothing, Me.ParseOptions.Equals(other.ParseOptions)) End Function @@ -831,7 +869,8 @@ Namespace Microsoft.CodeAnalysis.VisualBasic Hash.Combine(Me.OptionExplicit, Hash.Combine(Me.OptionCompareText, Hash.Combine(Me.EmbedVbCoreRuntime, - Hash.Combine(Me.ParseOptions, 0))))))))) + Hash.Combine(Me.SuppressEmbeddedDeclarations, + Hash.Combine(Me.ParseOptions, 0)))))))))) End Function End Class End Namespace diff --git a/src/Compilers/VisualBasic/Test/Semantic/Binding/Binder_Expressions_Tests.vb b/src/Compilers/VisualBasic/Test/Semantic/Binding/Binder_Expressions_Tests.vb index 4edbfaeaebd16dbdd9ed4ef6fbde02718d60754a..50f6685f57a1391aa48f33d139977a7cc810f65d 100644 --- a/src/Compilers/VisualBasic/Test/Semantic/Binding/Binder_Expressions_Tests.vb +++ b/src/Compilers/VisualBasic/Test/Semantic/Binding/Binder_Expressions_Tests.vb @@ -1,12 +1,8 @@ ' 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 -Imports Microsoft.CodeAnalysis.Test.Utilities -Imports Microsoft.CodeAnalysis.Text Imports Microsoft.CodeAnalysis.VisualBasic -Imports Microsoft.CodeAnalysis.VisualBasic.Symbols Imports Microsoft.CodeAnalysis.VisualBasic.Syntax -Imports Microsoft.CodeAnalysis.VisualBasic.UnitTests.Emit Imports Roslyn.Test.Utilities Namespace Microsoft.CodeAnalysis.VisualBasic.UnitTests @@ -21,7 +17,7 @@ Namespace Microsoft.CodeAnalysis.VisualBasic.UnitTests ' Test that BC30157 is generated for a member access off With when there is no containing With. Public Sub MemberAccessNoContainingWith() - Dim compilation = CompilationUtils.CreateCompilationWithMscorlibAndVBRuntime( + Dim compilation = CreateCompilationWithMscorlibAndVBRuntime( Imports System @@ -34,7 +30,7 @@ End Module ) - CompilationUtils.AssertTheseDiagnostics(compilation, + AssertTheseDiagnostics(compilation, BC30157: Leading '.' or '!' can only appear inside a 'With' statement. x = .foo @@ -109,7 +105,7 @@ End Module ' Test access to a local variable, parameter, type parameter, namespace with arity. Public Sub LocalVariableWrongArity() - Dim compilation = CompilationUtils.CreateCompilationWithMscorlibAndVBRuntime( + Dim compilation = CreateCompilationWithMscorlibAndVBRuntime( Imports System @@ -137,7 +133,7 @@ End Class ) - CompilationUtils.AssertTheseDiagnostics(compilation, + AssertTheseDiagnostics(compilation, BC32045: 'x' has no type parameters and so cannot have type arguments. y = x(Of Integer) @@ -179,7 +175,7 @@ End Module ' Test access to a local variable and assignment of them.. Public Sub ArrayAssignmentError1() - Dim compilation = CompilationUtils.CreateCompilationWithMscorlibAndVBRuntime( + Dim compilation = CreateCompilationWithMscorlibAndVBRuntime( Imports System @@ -194,7 +190,7 @@ End Module ) - CompilationUtils.AssertTheseDiagnostics(compilation, + AssertTheseDiagnostics(compilation, BC30106: Number of indices exceeds the number of dimensions of the indexed array. z(1,1) = "world" @@ -232,7 +228,7 @@ End Module ' Test access to a local variable and assignment of them.. Public Sub ArrayAssignmentError2() - Dim compilation = CompilationUtils.CreateCompilationWithMscorlibAndVBRuntime( + Dim compilation = CreateCompilationWithMscorlibAndVBRuntime( Option strict on @@ -249,7 +245,7 @@ End Module ) - CompilationUtils.AssertTheseDiagnostics(compilation, + AssertTheseDiagnostics(compilation, BC30512: Option Strict On disallows implicit conversions from 'UInteger' to 'Integer'. z(i) = "world" @@ -361,7 +357,7 @@ End Module ' Test access to simple identifier that isn't found anywhere. Public Sub SimpleNameNotFound() - Dim compilation = CompilationUtils.CreateCompilationWithMscorlibAndVBRuntime( + Dim compilation = CreateCompilationWithMscorlibAndVBRuntime( Imports System @@ -375,7 +371,7 @@ End Module ) - CompilationUtils.AssertTheseDiagnostics(compilation, + AssertTheseDiagnostics(compilation, BC30451: 'foo' is not declared. It may be inaccessible due to its protection level. x = foo @@ -386,7 +382,7 @@ BC30451: 'foo' is not declared. It may be inaccessible due to its protection lev Public Sub QualifiedNameBeforeDotNotFound() - Dim compilation = CompilationUtils.CreateCompilationWithMscorlibAndVBRuntime( + Dim compilation = CreateCompilationWithMscorlibAndVBRuntime( Imports System @@ -403,7 +399,7 @@ End Module ) - CompilationUtils.AssertTheseDiagnostics(compilation, + AssertTheseDiagnostics(compilation, BC30451: 'Rdim123' is not declared. It may be inaccessible due to its protection level. Rdim123.Rdim456() @@ -417,7 +413,7 @@ BC30456: 'B' is not a member of 'MainModule.A'. ' Test access to qualified identifier not found, in various scopes Public Sub QualifiedNameNotFound() - Dim compilation = CompilationUtils.CreateCompilationWithMscorlibAndVBRuntime( + Dim compilation = CreateCompilationWithMscorlibAndVBRuntime( Imports System @@ -443,7 +439,7 @@ End Module ) - CompilationUtils.AssertTheseDiagnostics(compilation, + AssertTheseDiagnostics(compilation, BC30456: 'foo' is not a member of 'N'. x = N.foo @@ -463,7 +459,7 @@ BC30456: 'foo' is not a member of 'M1'. ' Test access qualified identifier off of type parameter Public Sub TypeParamCantQualify() - Dim compilation = CompilationUtils.CreateCompilationWithMscorlib( + Dim compilation = CreateCompilationWithMscorlib( Imports System @@ -478,7 +474,7 @@ End Class ) - CompilationUtils.AssertTheseDiagnostics(compilation, + AssertTheseDiagnostics(compilation, BC32098: Type parameters cannot be used as qualifiers. x = T.foo @@ -489,7 +485,7 @@ BC32098: Type parameters cannot be used as qualifiers. ' Test access to simple identifier that can be found, but has an error. Public Sub BadSimpleName() - Dim compilation = CompilationUtils.CreateCompilationWithMscorlibAndVBRuntime( + Dim compilation = CreateCompilationWithMscorlibAndVBRuntime( Imports System @@ -507,7 +503,7 @@ End Module ) - CompilationUtils.AssertTheseDiagnostics(compilation, + AssertTheseDiagnostics(compilation, BC32042: Too few type arguments to 'Foo(Of T)'. y = Foo.x @@ -518,7 +514,7 @@ BC32042: Too few type arguments to 'Foo(Of T)'. ' Test access to qualified identifier that can be found, but has an error. Public Sub BadQualifiedName() - Dim compilation = CompilationUtils.CreateCompilationWithMscorlibAndVBRuntime( + Dim compilation = CreateCompilationWithMscorlibAndVBRuntime( Imports System @@ -549,7 +545,7 @@ End Module ) ' Note that we produce different (but I think better) error messages than Dev10. - CompilationUtils.AssertTheseDiagnostics(compilation, + AssertTheseDiagnostics(compilation, BC32042: Too few type arguments to 'Foo(Of T)'. y = N.Foo.x @@ -569,7 +565,7 @@ BC42025: Access of shared member, constant member, enum member or nested type th ' Test access to instance member in various ways to get various errors. Public Sub AccessInstanceFromStatic() - Dim compilation = CompilationUtils.CreateCompilationWithMscorlib( + Dim compilation = CreateCompilationWithMscorlib( Class K @@ -604,7 +600,7 @@ End Class ) - CompilationUtils.AssertTheseDiagnostics(compilation, + AssertTheseDiagnostics(compilation, BC30469: Reference to a non-shared member requires an object reference. y() @@ -630,7 +626,7 @@ BC30469: Reference to a non-shared member requires an object reference. ' Test access to static member in various ways to get various errors. Public Sub AccessStaticViaInstance() - Dim compilation = CompilationUtils.CreateCompilationWithMscorlib( + Dim compilation = CreateCompilationWithMscorlib( Class K @@ -665,7 +661,7 @@ End Class ) - CompilationUtils.AssertTheseDiagnostics(compilation, + AssertTheseDiagnostics(compilation, BC42025: Access of shared member, constant member, enum member or nested type through an instance; qualifying expression will not be evaluated. zInstance.yy() @@ -694,7 +690,7 @@ End Class - Dim c1 = CompilationUtils.CreateCompilationWithMscorlibAndVBRuntime(source).VerifyDiagnostics( + Dim c1 = CreateCompilationWithMscorlibAndVBRuntime(source).VerifyDiagnostics( Diagnostic(ERRID.WRN_SharedMemberThroughInstance, "j.MaxValue"), Diagnostic(ERRID.WRN_SharedMemberThroughInstance, "i.MaxValue")) @@ -702,7 +698,7 @@ End Class Public Sub ConstantFields1() - Dim compilation = CompilationUtils.CreateCompilationWithMscorlibAndVBRuntime( + Dim compilation = CreateCompilationWithMscorlibAndVBRuntime( Module Module1 @@ -807,9 +803,9 @@ End Module - Dim compilation = CompilationUtils.CreateCompilationWithMscorlibAndVBRuntime(compilationDef) + Dim compilation = CreateCompilationWithMscorlibAndVBRuntime(compilationDef) - CompilationUtils.AssertTheseDiagnostics(compilation, + AssertTheseDiagnostics(compilation, BC30068: Expression is a value and therefore cannot be the target of an assignment. Foo(1) = Nothing @@ -867,7 +863,7 @@ End Class - compilation = CompilationUtils.CreateCompilationWithMscorlibAndVBRuntime(compilationDef, TestOptions.ReleaseExe) + compilation = CreateCompilationWithMscorlibAndVBRuntime(compilationDef, TestOptions.ReleaseExe) CompileAndVerify(compilation, - compilation = CompilationUtils.CreateCompilationWithMscorlibAndVBRuntime(compilationDef) + compilation = CreateCompilationWithMscorlibAndVBRuntime(compilationDef) - CompilationUtils.AssertTheseDiagnostics(compilation, + AssertTheseDiagnostics(compilation, BC42105: Function 'Foo' doesn't return a value on all code paths. A null reference exception could occur at run time when the result is used. End Function @@ -953,9 +949,9 @@ End Module - Dim compilation = CompilationUtils.CreateCompilationWithMscorlibAndVBRuntime(compilationDef) + Dim compilation = CreateCompilationWithMscorlibAndVBRuntime(compilationDef) - CompilationUtils.AssertTheseDiagnostics(compilation, + AssertTheseDiagnostics(compilation, BC30491: Expression does not produce a value. Main().ToString @@ -986,7 +982,7 @@ End Module - Dim compilation = CompilationUtils.CreateCompilationWithMscorlibAndVBRuntime(compilationDef, TestOptions.ReleaseExe) + Dim compilation = CreateCompilationWithMscorlibAndVBRuntime(compilationDef, TestOptions.ReleaseExe) CompileAndVerify(compilation, - compilation = CompilationUtils.CreateCompilationWithMscorlibAndVBRuntime(compilationDef, TestOptions.ReleaseExe) + compilation = CreateCompilationWithMscorlibAndVBRuntime(compilationDef, TestOptions.ReleaseExe) - CompilationUtils.AssertTheseDiagnostics(compilation, + AssertTheseDiagnostics(compilation, BC30455: Argument not specified for parameter 'x' of 'Public Function Foo(x As Integer) As Integer'. System.Console.WriteLine(Foo.ToString) @@ -1060,9 +1056,9 @@ End Class - Dim compilation = CompilationUtils.CreateCompilationWithMscorlibAndVBRuntime(compilationDef) + Dim compilation = CreateCompilationWithMscorlibAndVBRuntime(compilationDef) - CompilationUtils.AssertTheseDiagnostics(compilation, + AssertTheseDiagnostics(compilation, BC30108: 'S' is a type and cannot be used as an expression. S() @@ -1090,9 +1086,9 @@ BC30108: 'S' is a type and cannot be used as an expression. - Dim compilation = CompilationUtils.CreateCompilationWithMscorlibAndVBRuntime(compilationDef) + Dim compilation = CreateCompilationWithMscorlibAndVBRuntime(compilationDef) - CompilationUtils.AssertNoErrors(compilation) + AssertNoErrors(compilation) End Sub @@ -1112,9 +1108,9 @@ BC30108: 'S' is a type and cannot be used as an expression. - Dim compilation = CompilationUtils.CreateCompilationWithMscorlibAndVBRuntime(compilationDef) + Dim compilation = CreateCompilationWithMscorlibAndVBRuntime(compilationDef) - CompilationUtils.AssertTheseDiagnostics(compilation, + AssertTheseDiagnostics(compilation, BC32059: Array lower bounds can be only '0'. Dim x1(0! To 5) as Single @@ -1148,9 +1144,9 @@ End Class - Dim compilation = CompilationUtils.CreateCompilationWithMscorlibAndVBRuntime(compilationDef) + Dim compilation = CreateCompilationWithMscorlibAndVBRuntime(compilationDef) - CompilationUtils.AssertTheseDiagnostics(compilation, + AssertTheseDiagnostics(compilation, BC42024: Unused local variable: 'foo'. Dim foo As Integer @@ -1263,9 +1259,9 @@ End Class - Dim compilation = CompilationUtils.CreateCompilationWithMscorlibAndVBRuntime(compilationDef) + Dim compilation = CreateCompilationWithMscorlibAndVBRuntime(compilationDef) - CompilationUtils.AssertNoErrors(compilation) + AssertNoErrors(compilation) End Sub @@ -1292,9 +1288,9 @@ End Class - Dim compilation = CompilationUtils.CreateCompilationWithMscorlibAndVBRuntime(compilationDef) + Dim compilation = CreateCompilationWithMscorlibAndVBRuntime(compilationDef) - CompilationUtils.AssertTheseDiagnostics(compilation, + AssertTheseDiagnostics(compilation, BC30369: Cannot refer to an instance member of a class from within a shared method or shared member initializer without an explicit instance of the class. Dim x As Integer = Q.Zip 'this should be an error @@ -1343,9 +1339,9 @@ End Class - Dim compilation = CompilationUtils.CreateCompilationWithMscorlibAndVBRuntime(compilationDef) + Dim compilation = CreateCompilationWithMscorlibAndVBRuntime(compilationDef) - CompilationUtils.AssertTheseDiagnostics(compilation, + AssertTheseDiagnostics(compilation, BC30455: Argument not specified for parameter 'x' of 'Public ReadOnly Property color(x As Integer) As Color'. dim a = color.G(1) ' error, missing parameter to color property ~~~~~ @@ -1396,9 +1392,9 @@ End Class - Dim compilation = CompilationUtils.CreateCompilationWithMscorlibAndVBRuntime(compilationDef) + Dim compilation = CreateCompilationWithMscorlibAndVBRuntime(compilationDef) - CompilationUtils.AssertNoErrors(compilation) + AssertNoErrors(compilation) End Sub @@ -1451,9 +1447,9 @@ End Module - Dim compilation = CompilationUtils.CreateCompilationWithMscorlibAndVBRuntime(compilationDef) + Dim compilation = CreateCompilationWithMscorlibAndVBRuntime(compilationDef) - CompilationUtils.AssertNoErrors(compilation) + AssertNoErrors(compilation) CompileAndVerify(compilationDef, expectedOutput:="evaluated"). VerifyIL("Module1.Test.DefaultColor", @@ -1521,9 +1517,9 @@ End Module - Dim compilation = CompilationUtils.CreateCompilationWithMscorlibAndVBRuntime(compilationDef) + Dim compilation = CreateCompilationWithMscorlibAndVBRuntime(compilationDef) - CompilationUtils.AssertNoErrors(compilation) + AssertNoErrors(compilation) CompileAndVerify(compilationDef, expectedOutput:="evaluated"). VerifyIL("Module1.Test.DefaultColor", @@ -1593,10 +1589,10 @@ End Module - Dim compilation = CompilationUtils.CreateCompilationWithMscorlibAndVBRuntime(compilationDef) + Dim compilation = CreateCompilationWithMscorlibAndVBRuntime(compilationDef) - CompilationUtils.AssertTheseDiagnostics(compilation, + AssertTheseDiagnostics(compilation, BC30455: Argument not specified for parameter 'x' of 'Public ReadOnly Property Color(x As Integer) As Module1.Color'. c1 = Color.G(1) ' missing parameter x @@ -1656,10 +1652,10 @@ End Module - Dim compilation = CompilationUtils.CreateCompilationWithMscorlibAndVBRuntime(compilationDef) + Dim compilation = CreateCompilationWithMscorlibAndVBRuntime(compilationDef) - CompilationUtils.AssertNoDiagnostics(compilation) + AssertNoDiagnostics(compilation) End Sub @@ -1717,9 +1713,9 @@ End Module - Dim compilation = CompilationUtils.CreateCompilationWithMscorlibAndVBRuntime(compilationDef) + Dim compilation = CreateCompilationWithMscorlibAndVBRuntime(compilationDef) - CompilationUtils.AssertNoErrors(compilation) + AssertNoErrors(compilation) CompileAndVerify(compilationDef, expectedOutput:="evaluated"). VerifyIL("Module1.Test.DefaultColor", @@ -1793,9 +1789,9 @@ End Module - Dim compilation = CompilationUtils.CreateCompilationWithMscorlibAndVBRuntime(compilationDef) + Dim compilation = CreateCompilationWithMscorlibAndVBRuntime(compilationDef) - CompilationUtils.AssertNoErrors(compilation) + AssertNoErrors(compilation) CompileAndVerify(compilationDef, expectedOutput:="evaluated"). VerifyIL("Module1.Test.DefaultColor", @@ -1890,9 +1886,9 @@ End Module - Dim compilation = CompilationUtils.CreateCompilationWithMscorlibAndVBRuntime(compilationDef) + Dim compilation = CreateCompilationWithMscorlibAndVBRuntime(compilationDef) - CompilationUtils.AssertNoErrors(compilation) + AssertNoErrors(compilation) CompileAndVerify(compilationDef, expectedOutput:="evaluated"). VerifyIL("Module1.Test.DefaultColor", @@ -1950,9 +1946,9 @@ End Class - Dim compilation = CompilationUtils.CreateCompilationWithMscorlibAndVBRuntime(compilationDef) + Dim compilation = CreateCompilationWithMscorlibAndVBRuntime(compilationDef) - CompilationUtils.AssertNoDiagnostics(compilation) + AssertNoDiagnostics(compilation) CompileAndVerify(compilationDef, expectedOutput:="48"). VerifyIL("Foo.M", @@ -2006,9 +2002,9 @@ End Class - Dim compilation = CompilationUtils.CreateCompilationWithMscorlibAndVBRuntime(compilationDef) + Dim compilation = CreateCompilationWithMscorlibAndVBRuntime(compilationDef) - CompilationUtils.AssertTheseDiagnostics(compilation, + AssertTheseDiagnostics(compilation, BC30369: Cannot refer to an instance member of a class from within a shared method or shared member initializer without an explicit instance of the class. Return Bar2.c ~~~~ @@ -2036,8 +2032,8 @@ End Module - Dim compilation = CompilationUtils.CreateCompilationWithMscorlibAndVBRuntime(text) - CompilationUtils.AssertTheseDiagnostics(compilation, + Dim compilation = CreateCompilationWithMscorlibAndVBRuntime(text) + AssertTheseDiagnostics(compilation, BC42024: Unused local variable: 'y'. Dim y As System.Collections.Generic.List(Of M) @@ -2075,8 +2071,8 @@ End Module - Dim compilation = CompilationUtils.CreateCompilationWithMscorlibAndVBRuntime(text) - CompilationUtils.AssertTheseDiagnostics(compilation, + Dim compilation = CreateCompilationWithMscorlibAndVBRuntime(text) + AssertTheseDiagnostics(compilation, BC30182: Type expected. Dim x = GetType(NS) @@ -2105,8 +2101,8 @@ End Namespace - Dim compilation = CompilationUtils.CreateCompilationWithMscorlibAndVBRuntime(text) - CompilationUtils.AssertNoErrors(compilation) + Dim compilation = CreateCompilationWithMscorlibAndVBRuntime(text) + AssertNoErrors(compilation) End Sub @@ -2129,14 +2125,14 @@ Imports Con = System.Console - Dim compilation = CompilationUtils.CreateCompilationWithMscorlibAndVBRuntime(text) - CompilationUtils.AssertNoErrors(compilation) + Dim compilation = CreateCompilationWithMscorlibAndVBRuntime(text) + AssertNoErrors(compilation) End Sub Public Sub Bug9300_1() - Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlibAndVBRuntime( + Dim compilation1 = CreateCompilationWithMscorlibAndVBRuntime( Imports System.Runtime.CompilerServices @@ -2175,12 +2171,12 @@ BC30251: Type 'Object()' has no constructors. Foo(Sub(x) x.New()) ~~~~~ - CompilationUtils.AssertTheseDiagnostics(compilation1, expectedErrors1) + AssertTheseDiagnostics(compilation1, expectedErrors1) End Sub Public Sub Bug9300_2() - Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlibAndVBRuntime( + Dim compilation1 = CreateCompilationWithMscorlibAndVBRuntime( Imports System.Runtime.CompilerServices @@ -2220,12 +2216,12 @@ BC30282: Constructor call is valid only as the first statement in an instance co Foo(Sub(x) x.New()) ~~~~~ - CompilationUtils.AssertTheseDiagnostics(compilation1, expectedErrors1) + AssertTheseDiagnostics(compilation1, expectedErrors1) End Sub Public Sub Bug9300_3() - Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlibAndVBRuntime( + Dim compilation1 = CreateCompilationWithMscorlibAndVBRuntime( Imports System.Runtime.CompilerServices @@ -2272,7 +2268,7 @@ Action(Of IEnumerable) Public Sub IllegalTypeExpressionsFromParserShouldNotBlowUpBinding() - Dim compilation1 = CompilationUtils.CreateCompilationWithMscorlibAndVBRuntime( + Dim compilation1 = CreateCompilationWithMscorlibAndVBRuntime( Class Outer(Of T) @@ -2289,7 +2285,7 @@ Action(Of IEnumerable) ) - CompilationUtils.AssertTheseDiagnostics(compilation1, + AssertTheseDiagnostics(compilation1, BC32099: Comma or ')' expected. System.Console.WriteLine(GetType(Outer(Of ).Inner(Of T))) ' BC32099: Comma or ')' expected. ~ @@ -2316,7 +2312,7 @@ BC30182: Type expected. - Dim c1 = CompilationUtils.CreateCompilationWithMscorlibAndVBRuntimeAndReferences(source1_with) + Dim c1 = CreateCompilationWithMscorlibAndVBRuntimeAndReferences(source1_with) Dim baseBuffer = CompileAndVerify(c1).EmittedAssemblyData @@ -2344,7 +2340,7 @@ BC30182: Type expected. - Dim c2 = CompilationUtils.CreateCompilationWithMscorlibAndVBRuntimeAndReferences(source2, {MetadataReference.CreateFromImage(baseBuffer)}) + Dim c2 = CreateCompilationWithMscorlibAndVBRuntimeAndReferences(source2, {MetadataReference.CreateFromImage(baseBuffer)}) Dim derivedBuffer = CompileAndVerify(c2).EmittedAssemblyData @@ -2370,11 +2366,11 @@ BC30182: Type expected. - Dim c1_without = CompilationUtils.CreateCompilationWithMscorlibAndVBRuntimeAndReferences(source1_without) + Dim c1_without = CreateCompilationWithMscorlibAndVBRuntimeAndReferences(source1_without) Dim image = CompileAndVerify(c1_without).EmittedAssemblyData - Dim c3 = CompilationUtils.CreateCompilationWithMscorlibAndVBRuntimeAndReferences(source3, {MetadataReference.CreateFromImage(derivedBuffer), MetadataReference.CreateFromImage(image)}) + Dim c3 = CreateCompilationWithMscorlibAndVBRuntimeAndReferences(source3, {MetadataReference.CreateFromImage(derivedBuffer), MetadataReference.CreateFromImage(image)}) AssertTheseDiagnostics(c3, BC30545: Property access must assign to the property or use its value. @@ -2416,7 +2412,7 @@ End Class ) - CompilationUtils.AssertNoDiagnostics(compilation) + AssertNoDiagnostics(compilation) End Sub @@ -2447,7 +2443,7 @@ End Class ) - CompilationUtils.AssertTheseDiagnostics(compilation, + AssertTheseDiagnostics(compilation, BC30455: Argument not specified for parameter 'a' of 'Public Overridable ReadOnly Property TypeSubstitution(a As Integer) As TypeSubstitution'. Return TypeSubstitution.Create() ~~~~~~~~~~~~~~~~ @@ -2485,7 +2481,7 @@ End Class ) - CompilationUtils.AssertNoDiagnostics(compilation) + AssertNoDiagnostics(compilation) End Sub @@ -2530,7 +2526,7 @@ BC30068: Expression is a value and therefore cannot be the target of an assignme Public Sub Bug12900() - Dim compilation = CompilationUtils.CreateCompilationWithMscorlibAndVBRuntime( + Dim compilation = CreateCompilationWithMscorlibAndVBRuntime( Imports System @@ -2542,7 +2538,7 @@ End Module ) - CompilationUtils.AssertTheseDiagnostics(compilation, + AssertTheseDiagnostics(compilation, BC30438: Constants must have a value. Const local _? As Integer @@ -2555,7 +2551,7 @@ BC30203: Identifier expected. Public Sub Bug13080() - Dim compilation = CompilationUtils.CreateCompilationWithMscorlibAndVBRuntime( + Dim compilation = CreateCompilationWithMscorlibAndVBRuntime( Imports System @@ -2567,7 +2563,7 @@ End Module ) - CompilationUtils.AssertTheseDiagnostics(compilation, + AssertTheseDiagnostics(compilation, BC30203: Identifier expected. Const ' @@ -2581,7 +2577,7 @@ BC30438: Constants must have a value. Public Sub GetTypeAllowsArrayOfModules() - Dim compilation = CompilationUtils.CreateCompilationWithMscorlibAndVBRuntime( + Dim compilation = CreateCompilationWithMscorlibAndVBRuntime( Imports System @@ -2644,7 +2640,7 @@ BC31422: 'System.Void' can only be used in a GetType expression. Public Sub GetTypeAllowsModuleAlias() - Dim compilation = CompilationUtils.CreateCompilationWithMscorlibAndVBRuntime( + Dim compilation = CreateCompilationWithMscorlibAndVBRuntime( Imports ModuleAlias = Bar.Test @@ -2694,7 +2690,7 @@ End Class - Dim compilation = CompilationUtils.CreateCompilationWithMscorlibAndVBRuntimeAndReferences(source, { SystemCoreRef }, options:=TestOptions.ReleaseExe) + Dim compilation = CreateCompilationWithMscorlibAndVBRuntimeAndReferences(source, {SystemCoreRef}, options:=TestOptions.ReleaseExe) AssertTheseDiagnostics(compilation, ) CompileAndVerify(compilation, expectedOutput:="42") @@ -2703,7 +2699,7 @@ End Class Public Sub Bug1108036() - Dim compilation = CompilationUtils.CreateCompilationWithMscorlibAndVBRuntime( + Dim compilation = CreateCompilationWithMscorlibAndVBRuntime( Class Color @@ -2744,7 +2740,7 @@ BC30521: Overload resolution failed because no accessible 'Color' is most specif Public Sub Bug1108036_2() - Dim compilation = CompilationUtils.CreateCompilationWithMscorlibAndVBRuntime( + Dim compilation = CreateCompilationWithMscorlibAndVBRuntime( Class Color @@ -2785,7 +2781,7 @@ BC30521: Overload resolution failed because no accessible 'Color' is most specif Public Sub Bug969006_1() - Dim compilation = CompilationUtils.CreateCompilationWithMscorlibAndVBRuntime( + Dim compilation = CreateCompilationWithMscorlibAndVBRuntime( Enum E @@ -2831,7 +2827,7 @@ End Class Public Sub Bug969006_2() - Dim compilation = CompilationUtils.CreateCompilationWithMscorlibAndVBRuntime( + Dim compilation = CreateCompilationWithMscorlibAndVBRuntime( Enum E @@ -2877,7 +2873,7 @@ End Class Public Sub Bug969006_3() - Dim compilation = CompilationUtils.CreateCompilationWithMscorlibAndVBRuntime( + Dim compilation = CreateCompilationWithMscorlibAndVBRuntime( Enum E @@ -2928,7 +2924,7 @@ BC42104: Variable 'e' is used before it has been assigned a value. A null refere Public Sub Bug969006_4() - Dim compilation = CompilationUtils.CreateCompilationWithMscorlibAndVBRuntime( + Dim compilation = CreateCompilationWithMscorlibAndVBRuntime( Enum E @@ -2979,7 +2975,7 @@ BC42104: Variable 'e' is used before it has been assigned a value. A null refere Public Sub Bug1108007_1() - Dim compilation = CompilationUtils.CreateCompilationWithMscorlibAndVBRuntime( + Dim compilation = CreateCompilationWithMscorlibAndVBRuntime( Class Color @@ -3012,14 +3008,14 @@ End Class Assert.Equal(SymbolKind.NamedType, symbol.Kind) AssertTheseDiagnostics(compilation, ) - + CompileAndVerify(compilation, expectedOutput:="42") End Sub Public Sub Bug1108007_2() - Dim compilation = CompilationUtils.CreateCompilationWithMscorlibAndVBRuntime( + Dim compilation = CreateCompilationWithMscorlibAndVBRuntime( Imports System @@ -3041,7 +3037,7 @@ Class Program Dim x As Object = "" Color.M(x) Catch e As Exception - Console.WriteLine(e) + Console.WriteLine(e.GetType()) End Try End Sub End Class @@ -3059,19 +3055,13 @@ End Class AssertTheseDiagnostics(compilation, ) - CompileAndVerify(compilation, expectedOutput:=) + CompileAndVerify(compilation, expectedOutput:=) End Sub Public Sub Bug1108007_3() - Dim compilation = CompilationUtils.CreateCompilationWithMscorlibAndVBRuntime( + Dim compilation = CreateCompilationWithMscorlibAndVBRuntime( Public Sub Bug1108007_4() - Dim compilation = CompilationUtils.CreateCompilationWithMscorlibAndVBRuntime( + Dim compilation = CreateCompilationWithMscorlibAndVBRuntime( Imports System @@ -3136,7 +3126,7 @@ Class Color Dim x As Object = "" Color.M(x) Catch e As Exception - Console.WriteLine(e) + Console.WriteLine(e.GetType()) End Try End Sub @@ -3160,17 +3150,13 @@ End Class AssertTheseDiagnostics(compilation, ) - CompileAndVerify(compilation, expectedOutput:=) + CompileAndVerify(compilation, expectedOutput:=) End Sub Public Sub Bug1108007_5() - Dim compilation = CompilationUtils.CreateCompilationWithMscorlibAndVBRuntime( + Dim compilation = CreateCompilationWithMscorlibAndVBRuntime( Imports System @@ -3224,7 +3210,7 @@ End Class Public Sub Bug1108007_6() - Dim compilation = CompilationUtils.CreateCompilationWithMscorlibAndVBRuntime( + Dim compilation = CreateCompilationWithMscorlibAndVBRuntime( Imports System @@ -3248,7 +3234,7 @@ Class Program Try Dim p = New Program() Catch e As Exception - Console.WriteLine(e) + Console.WriteLine(e.GetType()) End Try End Sub End Class @@ -3266,18 +3252,13 @@ End Class AssertTheseDiagnostics(compilation, ) - CompileAndVerify(compilation, expectedOutput:=) + CompileAndVerify(compilation, expectedOutput:=) End Sub Public Sub Bug1108007_7() - Dim compilation = CompilationUtils.CreateCompilationWithMscorlibAndVBRuntime( + Dim compilation = CreateCompilationWithMscorlibAndVBRuntime( Imports System @@ -3321,7 +3302,7 @@ End Class Public Sub Bug1108007_8() - Dim compilation = CompilationUtils.CreateCompilationWithMscorlibAndVBRuntime( + Dim compilation = CreateCompilationWithMscorlibAndVBRuntime( Imports System @@ -3344,7 +3325,7 @@ Class Outer Dim x As Object = "" Color.M(x) Catch e As Exception - Console.WriteLine(e) + Console.WriteLine(e.GetType()) End Try End Sub @@ -3368,19 +3349,13 @@ End Class AssertTheseDiagnostics(compilation, ) - CompileAndVerify(compilation, expectedOutput:=) + CompileAndVerify(compilation, expectedOutput:=) End Sub Public Sub Bug1108007_9() - Dim compilation = CompilationUtils.CreateCompilationWithMscorlibAndVBRuntime( + Dim compilation = CreateCompilationWithMscorlibAndVBRuntime( Class Color @@ -3426,7 +3401,7 @@ End Class Public Sub Bug1114969() - Dim compilation = CompilationUtils.CreateCompilationWithMscorlibAndVBRuntime( + Dim compilation = CreateCompilationWithMscorlibAndVBRuntime( Class Color diff --git a/src/Compilers/VisualBasic/Test/Semantic/Compilation/VisualBasicCompilationOptionsTests.vb b/src/Compilers/VisualBasic/Test/Semantic/Compilation/VisualBasicCompilationOptionsTests.vb index c63b626b7dbea88c6f5d0975021264547c6b35ce..951cb5922f332e1d5bbda94e61c06dee521eb005 100644 --- a/src/Compilers/VisualBasic/Test/Semantic/Compilation/VisualBasicCompilationOptionsTests.vb +++ b/src/Compilers/VisualBasic/Test/Semantic/Compilation/VisualBasicCompilationOptionsTests.vb @@ -495,6 +495,7 @@ BC2042: The options /vbruntime* and /target:module cannot be combined. "OptionExplicit", "OptionCompareText", "EmbedVbCoreRuntime", + "SuppressEmbeddedDeclarations", "ParseOptions") End Sub diff --git a/src/EditorFeatures/CSharpTest/Recommendations/ThisKeywordRecommenderTests.cs b/src/EditorFeatures/CSharpTest/Recommendations/ThisKeywordRecommenderTests.cs index 5e4df94ffc0fe7dcba04eb69e0bfec3a1f291579..5252c106d245dd275b9fab6a16ccfd605b42f98f 100644 --- a/src/EditorFeatures/CSharpTest/Recommendations/ThisKeywordRecommenderTests.cs +++ b/src/EditorFeatures/CSharpTest/Recommendations/ThisKeywordRecommenderTests.cs @@ -526,5 +526,97 @@ void M() { var c = new C { x = 2, y = 3, $$"); } + + [WorkItem(725, "https://github.com/dotnet/roslyn/issues/725")] + [WorkItem(1107414)] + [Fact, Trait(Traits.Feature, Traits.Features.KeywordRecommending)] + public void InExpressionBodiedMembersProperty() + { + VerifyKeyword(@" +class C +{ + int x; + int M => $$ + int p; +}"); + } + + [WorkItem(725, "https://github.com/dotnet/roslyn/issues/725")] + [WorkItem(1107414)] + [Fact, Trait(Traits.Feature, Traits.Features.KeywordRecommending)] + public void InExpressionBodiedMembersMethod() + { + VerifyKeyword(@" +class C +{ + int x; + int give() => $$"); + } + + [WorkItem(725, "https://github.com/dotnet/roslyn/issues/725")] + [WorkItem(1107414)] + [Fact, Trait(Traits.Feature, Traits.Features.KeywordRecommending)] + public void InExpressionBodiedMembersIndexer() + { + VerifyKeyword(@" +class C +{ + int x; + public object this[int i] => $$"); + } + + [WorkItem(725, "https://github.com/dotnet/roslyn/issues/725")] + [WorkItem(1107414)] + [Fact, Trait(Traits.Feature, Traits.Features.KeywordRecommending)] + public void NotInExpressionBodiedMembers_Static() + { + VerifyAbsence(@" +class C +{ + int x; + static int M => $$"); + } + + [WorkItem(725, "https://github.com/dotnet/roslyn/issues/725")] + [WorkItem(1107414)] + [Fact, Trait(Traits.Feature, Traits.Features.KeywordRecommending)] + public void NotInExpressionBodiedMembersOperator() + { + VerifyAbsence(@" +class C +{ + int x; + public static C operator - (C c1) => $$"); + } + + [WorkItem(725, "https://github.com/dotnet/roslyn/issues/725")] + [WorkItem(1107414)] + [Fact, Trait(Traits.Feature, Traits.Features.KeywordRecommending)] + public void NotInExpressionBodiedMembersConversionOperator() + { + VerifyAbsence(@" +class F +{ +} + +class C +{ + int x; + public static explicit operator F(C c1) => $$"); + } + + [WorkItem(725, "https://github.com/dotnet/roslyn/issues/725")] + [WorkItem(1107414)] + [Fact, Trait(Traits.Feature, Traits.Features.KeywordRecommending)] + public void OutsideExpressionBodiedMember() + { + VerifyAbsence(@" +class C +{ + int x; + int M => this.x;$$ + int p; +}"); + } } } diff --git a/src/ExpressionEvaluator/CSharp/Test/ExpressionCompiler/LocalsTests.cs b/src/ExpressionEvaluator/CSharp/Test/ExpressionCompiler/LocalsTests.cs index 86bca7ac6acb07c45e24ec68336e8036ff2f7b76..bdf3d2083282683cddace2ec08599ef1cc44c341 100644 --- a/src/ExpressionEvaluator/CSharp/Test/ExpressionCompiler/LocalsTests.cs +++ b/src/ExpressionEvaluator/CSharp/Test/ExpressionCompiler/LocalsTests.cs @@ -2392,6 +2392,56 @@ .maxstack 1 locals.Free(); } + [WorkItem(947)] + [Fact] + public void DuplicateEditorBrowsableAttributes() + { + const string libSource = @" +namespace System.ComponentModel +{ + public enum EditorBrowsableState + { + Always = 0, + Never = 1, + Advanced = 2 + } + + [AttributeUsage(AttributeTargets.All)] + internal sealed class EditorBrowsableAttribute : Attribute + { + public EditorBrowsableAttribute(EditorBrowsableState state) { } + } +} +"; + + const string source = @" +[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] +class C +{ + void M() + { + } +} +"; + var libRef = CreateCompilationWithMscorlib(libSource).EmitToImageReference(); + var comp = CreateCompilationWithMscorlib(source, new[] { SystemRef }, TestOptions.DebugDll); + + byte[] exeBytes; + byte[] pdbBytes; + ImmutableArray unusedReferences; + var result = comp.EmitAndGetReferences(out exeBytes, out pdbBytes, out unusedReferences); + Assert.True(result); + + var runtime = CreateRuntimeInstance(GetUniqueName(), ImmutableArray.Create(MscorlibRef, SystemRef, SystemCoreRef, SystemXmlLinqRef, libRef), exeBytes, new SymReader(pdbBytes)); + + string typeName; + var locals = ArrayBuilder.GetInstance(); + CompilationTestData testData; + GetLocals(runtime, "C.M", argumentsOnly: false, locals: locals, count: 1, typeName: out typeName, testData: out testData); + Assert.Equal("this", locals.Single().LocalName); + locals.Free(); + } + private static void GetLocals(RuntimeInstance runtime, string methodName, bool argumentsOnly, ArrayBuilder locals, int count, out string typeName, out CompilationTestData testData) { var context = CreateMethodContext(runtime, methodName); diff --git a/src/ExpressionEvaluator/Core/Source/Concord/Microsoft.VisualStudio.Debugger.Engine.il b/src/ExpressionEvaluator/Core/Source/Concord/Microsoft.VisualStudio.Debugger.Engine.il index fc5448795e6db1271fbcbd53c0c03b731d3e17ba..e64c0eecddb7b8c2daf616dd0b9f25bf0e0c7fd3 100644 --- a/src/ExpressionEvaluator/Core/Source/Concord/Microsoft.VisualStudio.Debugger.Engine.il +++ b/src/ExpressionEvaluator/Core/Source/Concord/Microsoft.VisualStudio.Debugger.Engine.il @@ -39,13 +39,13 @@ .ver 1:0:0:0 } .module Microsoft.VisualStudio.Debugger.Engine.dll -// MVID: {F69E895E-D452-4E38-95BE-7B90DD70E62B} +// MVID: {163431D2-419D-4E9C-8C45-797F632D58BA} .imagebase 0x00400000 .file alignment 0x00000200 .stackreserve 0x00100000 .subsystem 0x0003 // WINDOWS_CUI .corflags 0x00000001 // ILONLY -// Image base: 0x018D0000 +// Image base: 0x02B50000 // =============== CLASS MEMBERS DECLARATION =================== diff --git a/src/ExpressionEvaluator/Core/Source/Concord/Microsoft.VisualStudio.Debugger.Metadata.il b/src/ExpressionEvaluator/Core/Source/Concord/Microsoft.VisualStudio.Debugger.Metadata.il index 73323dfc0fe74576884e2d19b8d11d325e2dec5e..3eb0d052d95962d84ddec5669d23e972c7a4f4d7 100644 --- a/src/ExpressionEvaluator/Core/Source/Concord/Microsoft.VisualStudio.Debugger.Metadata.il +++ b/src/ExpressionEvaluator/Core/Source/Concord/Microsoft.VisualStudio.Debugger.Metadata.il @@ -38,13 +38,13 @@ .ver 14:0:0:0 } .module Microsoft.VisualStudio.Debugger.Metadata.dll -// MVID: {9E55C756-FD12-43E3-ADCD-A828058B43EB} +// MVID: {AAC4EFF2-9AD3-4C4A-9D40-218365A20C54} .imagebase 0x00400000 .file alignment 0x00000200 .stackreserve 0x00100000 .subsystem 0x0003 // WINDOWS_CUI .corflags 0x00000001 // ILONLY -// Image base: 0x00E60000 +// Image base: 0x00BC0000 // =============== CLASS MEMBERS DECLARATION =================== diff --git a/src/ExpressionEvaluator/VisualBasic/Source/ExpressionCompiler/CompilationExtensions.vb b/src/ExpressionEvaluator/VisualBasic/Source/ExpressionCompiler/CompilationExtensions.vb index 542c87c94329012619da9c170f7a20188e2715cf..f3bf3e20b0f3a7eabc657785414a813dc25ba53e 100644 --- a/src/ExpressionEvaluator/VisualBasic/Source/ExpressionCompiler/CompilationExtensions.vb +++ b/src/ExpressionEvaluator/VisualBasic/Source/ExpressionCompiler/CompilationExtensions.vb @@ -102,7 +102,8 @@ Namespace Microsoft.CodeAnalysis.VisualBasic.ExpressionEvaluator platform:=Platform.AnyCpu, ' Platform should match PEModule.Machine, in this case I386. optimizationLevel:=OptimizationLevel.Release, assemblyIdentityComparer:=DesktopAssemblyIdentityComparer.Default). - WithMetadataImportOptions(MetadataImportOptions.All) + WithMetadataImportOptions(MetadataImportOptions.All). + WithSuppressEmbeddedDeclarations(True) End Module diff --git a/src/ExpressionEvaluator/VisualBasic/Test/ExpressionCompiler/ExpressionCompilerTests.vb b/src/ExpressionEvaluator/VisualBasic/Test/ExpressionCompiler/ExpressionCompilerTests.vb index 89ef9dd54f53d1ffc4aa7a81032827fd9a47a581..7e9e21434a3ee98e8d683ed92c048e7d00be5852 100644 --- a/src/ExpressionEvaluator/VisualBasic/Test/ExpressionCompiler/ExpressionCompilerTests.vb +++ b/src/ExpressionEvaluator/VisualBasic/Test/ExpressionCompiler/ExpressionCompilerTests.vb @@ -1694,7 +1694,8 @@ End Class Assert.Equal(DkmEvaluationResultStorageType.None, resultProperties.StorageType) End Sub - + + Public Sub EvaluateXmlMemberAccess() Dim source = "Class C @@ -1721,6 +1722,7 @@ End Class" Dim errorMessage As String = Nothing Dim testData = New CompilationTestData() Dim result = context.CompileExpression("x.@a", resultProperties, errorMessage, testData, VisualBasicDiagnosticFormatter.Instance) + Assert.Null(errorMessage) testData.GetMethodData("<>x.<>m0").VerifyIL( "{ // Code size 22 (0x16) @@ -3119,7 +3121,8 @@ End Module End Sub - + + Public Sub ConditionalAccessExpressionType() Dim source = "Class C @@ -3179,6 +3182,7 @@ End Class" testData = New CompilationTestData() result = context.CompileExpression("Me?.X.@a", resultProperties, errorMessage, testData, VisualBasicDiagnosticFormatter.Instance) + Assert.Null(errorMessage) methodData = testData.GetMethodData("<>x.<>m0") Assert.Equal(DirectCast(methodData.Method, MethodSymbol).ReturnType.SpecialType, SpecialType.System_String) methodData.VerifyIL( diff --git a/src/ExpressionEvaluator/VisualBasic/Test/ExpressionCompiler/LocalsTests.vb b/src/ExpressionEvaluator/VisualBasic/Test/ExpressionCompiler/LocalsTests.vb index 295040285709b7de02431b979b2a248a333c0311..49e6717db7a61a309ea04f42f726ee1f7de921c5 100644 --- a/src/ExpressionEvaluator/VisualBasic/Test/ExpressionCompiler/LocalsTests.vb +++ b/src/ExpressionEvaluator/VisualBasic/Test/ExpressionCompiler/LocalsTests.vb @@ -2414,6 +2414,59 @@ End Class" locals.Free() End Sub + + + Public Sub DuplicateEditorBrowsableAttributes() + Const libSource = " +Namespace System.ComponentModel + + Public Enum EditorBrowsableState + Always = 0 + Never = 1 + Advanced = 2 + End Enum + + + Friend NotInheritable Class EditorBrowsableAttribute + Inherits Attribute + + Public Sub New(state As EditorBrowsableState) + End Sub + End Class + +End Namespace +" + + Const source = " + +Class C + Sub M() + End Sub +End Class +" + + Dim libRef = CreateCompilationWithMscorlib({libSource}, compOptions:=TestOptions.DebugDll).EmitToImageReference() + Dim comp = CreateCompilationWithReferences({VisualBasicSyntaxTree.ParseText(source)}, {MscorlibRef, SystemRef}, TestOptions.DebugDll) + + Dim exeBytes As Byte() = Nothing + Dim pdbBytes As Byte() = Nothing + Dim unusedReferences As ImmutableArray(Of MetadataReference) = Nothing + Dim result = comp.EmitAndGetReferences(exeBytes, pdbBytes, unusedReferences) + Assert.True(result) + + ' Referencing SystemCoreRef and SystemXmlLinqRef will cause Microsoft.VisualBasic.Embedded to be compiled + ' and it depends on EditorBrowsableAttribute. + Dim runtimeReferences = ImmutableArray.Create(MscorlibRef, SystemRef, SystemCoreRef, SystemXmlLinqRef, libRef) + Dim runtime = CreateRuntimeInstance(GetUniqueName(), runtimeReferences, exeBytes, New SymReader(pdbBytes)) + + Dim typeName As String = Nothing + Dim locals = ArrayBuilder(Of LocalAndMethod).GetInstance() + Dim testData As CompilationTestData = Nothing + GetLocals(runtime, "C.M", argumentsOnly:=False, locals:=locals, count:=1, typeName:=typeName, testData:=testData) + Assert.Equal("Me", locals.Single().LocalName) + locals.Free() + End Sub + Private Shared Sub GetLocals(runtime As RuntimeInstance, methodName As String, argumentsOnly As Boolean, locals As ArrayBuilder(Of LocalAndMethod), count As Integer, ByRef typeName As String, ByRef testData As CompilationTestData) Dim context = CreateMethodContext(runtime, methodName) testData = New CompilationTestData() diff --git a/src/Workspaces/CSharp/Portable/Extensions/ContextQuery/SyntaxTreeExtensions.cs b/src/Workspaces/CSharp/Portable/Extensions/ContextQuery/SyntaxTreeExtensions.cs index 31e193b1140010e0d96131c9106620bb12c2d320..5a16d80bcb441e63380682e151661f3fcab397a4 100644 --- a/src/Workspaces/CSharp/Portable/Extensions/ContextQuery/SyntaxTreeExtensions.cs +++ b/src/Workspaces/CSharp/Portable/Extensions/ContextQuery/SyntaxTreeExtensions.cs @@ -3,7 +3,6 @@ using System.Collections.Generic; using System.Linq; using System.Threading; -using Microsoft.CodeAnalysis.CSharp; using Microsoft.CodeAnalysis.CSharp.Symbols; using Microsoft.CodeAnalysis.CSharp.Syntax; using Microsoft.CodeAnalysis.CSharp.Utilities; @@ -1422,6 +1421,12 @@ public static bool IsInstanceContext(this SyntaxTree syntaxTree, int position, S return false; } + var expressionBody = containingMember.GetExpressionBody(); + if (expressionBody != null) + { + return TextSpan.FromBounds(expressionBody.ArrowToken.Span.End, expressionBody.FullSpan.End).IntersectsWith(position); + } + // Must be a property or something method-like. if (containingMember.HasMethodShape()) { diff --git a/src/Workspaces/CSharp/Portable/Extensions/MemberDeclarationSyntaxExtensions.cs b/src/Workspaces/CSharp/Portable/Extensions/MemberDeclarationSyntaxExtensions.cs index c609d048abe5d3361fc977bef2cb0e5fe6e26aa6..c97c60fb6151220dbff1993c353d7f3a41fd6d6f 100644 --- a/src/Workspaces/CSharp/Portable/Extensions/MemberDeclarationSyntaxExtensions.cs +++ b/src/Workspaces/CSharp/Portable/Extensions/MemberDeclarationSyntaxExtensions.cs @@ -316,6 +316,25 @@ public static BlockSyntax GetBody(this MemberDeclarationSyntax memberDeclaration return null; } + public static ArrowExpressionClauseSyntax GetExpressionBody(this MemberDeclarationSyntax memberDeclaration) + { + switch (memberDeclaration?.Kind()) + { + case SyntaxKind.PropertyDeclaration: + return ((PropertyDeclarationSyntax)memberDeclaration).ExpressionBody; + case SyntaxKind.MethodDeclaration: + return ((MethodDeclarationSyntax)memberDeclaration).ExpressionBody; + case SyntaxKind.IndexerDeclaration: + return ((IndexerDeclarationSyntax)memberDeclaration).ExpressionBody; + case SyntaxKind.OperatorDeclaration: + return ((OperatorDeclarationSyntax)memberDeclaration).ExpressionBody; + case SyntaxKind.ConversionOperatorDeclaration: + return ((ConversionOperatorDeclarationSyntax)memberDeclaration).ExpressionBody; + default: + return null; + } + } + public static MemberDeclarationSyntax WithBody( this MemberDeclarationSyntax memberDeclaration, BlockSyntax body)