提交 e1047488 编写于 作者: A AlekseyTs

Merge pull request #3245 from AlekseyTs/Bug1129404

Check current language version for “Global” keyword only if it starts namespace name in namespace declaration.
......@@ -158,7 +158,8 @@ Namespace Microsoft.CodeAnalysis.VisualBasic.Syntax.InternalSyntax
Optional nonArrayName As Boolean = False,
Optional disallowGenericArgumentsOnLastQualifiedName As Boolean = False,
Optional allowEmptyGenericArguments As Boolean = False,
Optional ByRef allowedEmptyGenericArguments As Boolean = False
Optional ByRef allowedEmptyGenericArguments As Boolean = False,
Optional isNameInNamespaceDeclaration As Boolean = False
) As NameSyntax
Debug.Assert(allowGenericArguments OrElse Not allowEmptyGenericArguments, "Inconsistency in generic arguments parsing requirements!!!")
......@@ -171,7 +172,10 @@ Namespace Microsoft.CodeAnalysis.VisualBasic.Syntax.InternalSyntax
If CurrentToken.Kind = SyntaxKind.GlobalKeyword Then
result = SyntaxFactory.GlobalName(DirectCast(CurrentToken, KeywordSyntax))
result = CheckFeatureAvailability(Feature.GlobalNamespace, result)
If isNameInNamespaceDeclaration Then
result = CheckFeatureAvailability(Feature.GlobalNamespace, result)
End If
GetNextToken()
......@@ -1641,7 +1645,8 @@ Namespace Microsoft.CodeAnalysis.VisualBasic.Syntax.InternalSyntax
requireQualification:=False,
allowGlobalNameSpace:=True,
allowGenericArguments:=False,
allowGenericsWithoutOf:=True)
allowGenericsWithoutOf:=True,
isNameInNamespaceDeclaration:=True)
If namespaceName.ContainsDiagnostics Then
' Resync at EOS so we don't get expecting EOS errors
......
......@@ -234,4 +234,69 @@ End Class
Diagnostic(ERRID.ERR_LanguageVersion, "?").WithArguments("9.0", "null conditional operations").WithLocation(4, 31),
Diagnostic(ERRID.ERR_LanguageVersion, "?").WithArguments("9.0", "null conditional operations").WithLocation(5, 22))
End Sub
<[Fact]>
Public Sub GlobalKeyword_01()
Dim source = "
Imports System
Namespace Global
Module Program
Sub Main()
End Sub
End Module
End Namespace"
For Each version In {LanguageVersion.VisualBasic9, LanguageVersion.VisualBasic10}
ParseAndVerify(source, version,
Diagnostic(ERRID.ERR_LanguageVersion, "Global").WithArguments($"{CInt(version)}.0", "declaring a Global namespace").WithLocation(4, 11))
Next
For Each version In {LanguageVersion.VisualBasic11, LanguageVersion.VisualBasic12, LanguageVersion.VisualBasic14, VisualBasicParseOptions.Default.LanguageVersion}
ParseAndVerify(source, version, False, Nothing)
Next
End Sub
<[Fact]>
Public Sub GlobalKeyword_02()
Dim source = "
Module Program
Function getValue() As Global.System.Int32
Return 14
End Function
End Module"
For Each version In {LanguageVersion.VisualBasic9, LanguageVersion.VisualBasic10,
LanguageVersion.VisualBasic11, LanguageVersion.VisualBasic12,
LanguageVersion.VisualBasic14, VisualBasicParseOptions.Default.LanguageVersion}
ParseAndVerify(source, version, False, Nothing)
Next
End Sub
<[Fact]>
Public Sub GlobalKeyword_03()
Dim source = "
Imports System
Namespace Global.Ns1
Module Program
Sub Main()
End Sub
End Module
End Namespace"
For Each version In {LanguageVersion.VisualBasic9, LanguageVersion.VisualBasic10}
ParseAndVerify(source, version,
Diagnostic(ERRID.ERR_LanguageVersion, "Global").WithArguments($"{CInt(version)}.0", "declaring a Global namespace").WithLocation(4, 11))
Next
For Each version In {LanguageVersion.VisualBasic11, LanguageVersion.VisualBasic12, LanguageVersion.VisualBasic14, VisualBasicParseOptions.Default.LanguageVersion}
ParseAndVerify(source, version, False, Nothing)
Next
End Sub
End Class
\ No newline at end of file
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册