diff --git a/src/Compilers/CSharp/Portable/Parser/LanguageParser.cs b/src/Compilers/CSharp/Portable/Parser/LanguageParser.cs index 967b4b718e73fbec2a30d91fee71bf9ea253be51..dd0720de6cbf5654162c594d6ad7067bb8bc53ff 100644 --- a/src/Compilers/CSharp/Portable/Parser/LanguageParser.cs +++ b/src/Compilers/CSharp/Portable/Parser/LanguageParser.cs @@ -3446,6 +3446,13 @@ private bool IsPossibleAccessorModifier() } var token = this.PeekToken(peekIndex); + if (token.Kind == SyntaxKind.CloseBraceToken) + { + // If we see "{ get { } public } + // then we will think that "public" likely starts an accessor. + return true; + } + switch (token.ContextualKind) { case SyntaxKind.GetKeyword: diff --git a/src/Compilers/CSharp/Test/Syntax/Parsing/ParserErrorMessageTests.cs b/src/Compilers/CSharp/Test/Syntax/Parsing/ParserErrorMessageTests.cs index 265cca2849b4cfa9ee482d627e2dc04c9981761c..992a94c5ca37b8fb2bbf8863bcfb78c861f60843 100644 --- a/src/Compilers/CSharp/Test/Syntax/Parsing/ParserErrorMessageTests.cs +++ b/src/Compilers/CSharp/Test/Syntax/Parsing/ParserErrorMessageTests.cs @@ -2305,12 +2305,8 @@ public static int Main() // (7,13): error CS1043: { or ; expected // get return 1; Diagnostic(ErrorCode.ERR_SemiOrLBraceExpected, "return"), - // (9,15): error CS1014: A get or set accessor expected - // public static int Main() - Diagnostic(ErrorCode.ERR_GetOrSetExpected, "int"), - // (9,15): error CS1513: } expected - // public static int Main() - Diagnostic(ErrorCode.ERR_RbraceExpected, "int")); + // (8,2): error CS1513: } expected + Diagnostic(ErrorCode.ERR_RbraceExpected, "")); } [Fact] diff --git a/src/Compilers/CSharp/Test/Syntax/Parsing/ParsingErrorRecoveryTests.cs b/src/Compilers/CSharp/Test/Syntax/Parsing/ParsingErrorRecoveryTests.cs index 37854f7cf47f24b6631f5687bfc434f136a07f4f..dacecfcd7bcad53f7261b4675b3ee947b169ea2d 100644 --- a/src/Compilers/CSharp/Test/Syntax/Parsing/ParsingErrorRecoveryTests.cs +++ b/src/Compilers/CSharp/Test/Syntax/Parsing/ParsingErrorRecoveryTests.cs @@ -5494,7 +5494,7 @@ public void TestModifiedMemberAfterPropertyGetBrace() Assert.False(pd.AccessorList.OpenBraceToken.IsMissing); Assert.NotNull(pd.AccessorList.CloseBraceToken); Assert.True(pd.AccessorList.CloseBraceToken.IsMissing); - Assert.Equal(2, pd.AccessorList.Accessors.Count); + Assert.Equal(1, pd.AccessorList.Accessors.Count); var acc = pd.AccessorList.Accessors[0]; Assert.Equal(SyntaxKind.GetAccessorDeclaration, acc.Kind()); Assert.NotNull(acc.Keyword); @@ -5508,10 +5508,9 @@ public void TestModifiedMemberAfterPropertyGetBrace() Assert.True(acc.Body.CloseBraceToken.IsMissing); Assert.Equal(SyntaxKind.None, acc.SemicolonToken.Kind()); - Assert.Equal(3, file.Errors().Length); + Assert.Equal(2, file.Errors().Length); Assert.Equal((int)ErrorCode.ERR_RbraceExpected, file.Errors()[0].Code); - Assert.Equal((int)ErrorCode.ERR_GetOrSetExpected, file.Errors()[1].Code); - Assert.Equal((int)ErrorCode.ERR_RbraceExpected, file.Errors()[2].Code); + Assert.Equal((int)ErrorCode.ERR_RbraceExpected, file.Errors()[1].Code); } [Fact] diff --git a/src/Test/Utilities/Runtime.FX46/TestRuntime.FX46.csproj.nuget.targets b/src/Test/Utilities/Runtime.FX46/TestRuntime.FX46.csproj.nuget.targets index faedd111031aaf6a008da01d6c6875b94f98abe2..3f4e381f4a7b33ca210848686c6ea75b1bca0b13 100644 --- a/src/Test/Utilities/Runtime.FX46/TestRuntime.FX46.csproj.nuget.targets +++ b/src/Test/Utilities/Runtime.FX46/TestRuntime.FX46.csproj.nuget.targets @@ -1,7 +1,7 @@  - C:\Users\tomat\.nuget\packages\ + C:\Users\cyrusn\.nuget\packages\ diff --git a/src/Test/Utilities/Runtime.FX46/TestRuntime.FX46.nuget.targets b/src/Test/Utilities/Runtime.FX46/TestRuntime.FX46.nuget.targets index faedd111031aaf6a008da01d6c6875b94f98abe2..3f4e381f4a7b33ca210848686c6ea75b1bca0b13 100644 --- a/src/Test/Utilities/Runtime.FX46/TestRuntime.FX46.nuget.targets +++ b/src/Test/Utilities/Runtime.FX46/TestRuntime.FX46.nuget.targets @@ -1,7 +1,7 @@  - C:\Users\tomat\.nuget\packages\ + C:\Users\cyrusn\.nuget\packages\