未验证 提交 d2d6bc02 编写于 作者: A AlekseyTs 提交者: GitHub

Enable completion for modifiers/keywords allowed within interfaces. (#34294)

* Enable completion for modifiers allowed for interface members.

* Enable completion of keywords within an interface
上级 672e5a49
......@@ -27972,6 +27972,8 @@ enum T4
{
B
}
delegate void T5();
}
class Test1 : I1.T1
......@@ -27983,6 +27985,7 @@ static void Main()
System.Console.WriteLine(new I1.T2());
System.Console.WriteLine(new I1.T3());
System.Console.WriteLine(I1.T4.B);
System.Console.WriteLine(new I1.T5(a.M1));
}
public void M1()
......@@ -28000,7 +28003,7 @@ private void ValidateNestedTypes_01(string source1, Accessibility expected = Acc
parseOptions: TestOptions.Regular,
targetFramework: targetFramework);
for (int i = 1; i <= 4; i++)
for (int i = 1; i <= 5; i++)
{
Assert.Equal(expected, compilation1.GetMember("I1.T" + i).DeclaredAccessibility);
}
......@@ -28009,7 +28012,8 @@ private void ValidateNestedTypes_01(string source1, Accessibility expected = Acc
@"M1
I1+T2
I1+T3
B",
B
I1+T5",
verify: verify);
}
......@@ -28100,6 +28104,8 @@ public enum T4
{
B
}
public delegate void T5();
}
class Test1 : I1.T1
......@@ -28111,6 +28117,7 @@ static void Main()
System.Console.WriteLine(new I1.T2());
System.Console.WriteLine(new I1.T3());
System.Console.WriteLine(I1.T4.B);
System.Console.WriteLine(new I1.T5(a.M1));
}
public void M1()
......@@ -28144,6 +28151,8 @@ protected enum T4
{
B
}
protected delegate void T5();
}
";
var source1 =
......@@ -28157,6 +28166,7 @@ static void Main()
System.Console.WriteLine(new I1.T2());
System.Console.WriteLine(new I1.T3());
System.Console.WriteLine(I1.T4.B);
System.Console.WriteLine(new I1.T5(a.M1));
}
class Test2 : I1.T1
......@@ -28175,7 +28185,7 @@ public void M1()
parseOptions: TestOptions.Regular,
targetFramework: TargetFramework.DesktopLatestExtended);
for (int i = 1; i <= 4; i++)
for (int i = 1; i <= 5; i++)
{
Assert.Equal(Accessibility.Protected, compilation1.GetMember("I1.T" + i).DeclaredAccessibility);
}
......@@ -28192,7 +28202,10 @@ public void M1()
Diagnostic(ErrorCode.ERR_RuntimeDoesNotSupportProtectedAccessForInterfaceMember, "T3").WithLocation(12, 22),
// (15,20): error CS8707: Target runtime doesn't support 'protected', 'protected internal', or 'private protected' accessibility for a member of an interface.
// protected enum T4
Diagnostic(ErrorCode.ERR_RuntimeDoesNotSupportProtectedAccessForInterfaceMember, "T4").WithLocation(15, 20)
Diagnostic(ErrorCode.ERR_RuntimeDoesNotSupportProtectedAccessForInterfaceMember, "T4").WithLocation(15, 20),
// (20,29): error CS8707: Target runtime doesn't support 'protected', 'protected internal', or 'private protected' accessibility for a member of an interface.
// protected delegate void T5();
Diagnostic(ErrorCode.ERR_RuntimeDoesNotSupportProtectedAccessForInterfaceMember, "T5").WithLocation(20, 29)
);
var source2 =
......@@ -28206,6 +28219,7 @@ static void Main()
System.Console.WriteLine(new I1.T2());
System.Console.WriteLine(new I1.T3());
System.Console.WriteLine(I1.T4.B);
System.Console.WriteLine(new I1.T5(a.M1));
}
class Test2 : I1.T1
......@@ -28238,9 +28252,15 @@ public void M1()
// (10,37): error CS0122: 'I1.T4' is inaccessible due to its protection level
// System.Console.WriteLine(I1.T4.B);
Diagnostic(ErrorCode.ERR_BadAccess, "T4").WithArguments("I1.T4").WithLocation(10, 37),
// (13,22): error CS0122: 'I1.T1' is inaccessible due to its protection level
// (11,41): error CS0122: 'I1.T5' is inaccessible due to its protection level
// System.Console.WriteLine(new I1.T5(a.M1));
Diagnostic(ErrorCode.ERR_BadAccess, "T5").WithArguments("I1.T5").WithLocation(11, 41),
// (11,46): error CS0122: 'I1.T1.M1()' is inaccessible due to its protection level
// System.Console.WriteLine(new I1.T5(a.M1));
Diagnostic(ErrorCode.ERR_BadAccess, "M1").WithArguments("I1.T1.M1()").WithLocation(11, 46),
// (14,22): error CS0122: 'I1.T1' is inaccessible due to its protection level
// class Test2 : I1.T1
Diagnostic(ErrorCode.ERR_BadAccess, "T1").WithArguments("I1.T1").WithLocation(13, 22)
Diagnostic(ErrorCode.ERR_BadAccess, "T1").WithArguments("I1.T1").WithLocation(14, 22)
};
compilation2.VerifyDiagnostics(expected);
......@@ -28263,7 +28283,8 @@ public void M1()
@"M1
I1+T2
I1+T3
B",
B
I1+T5",
verify: VerifyOnMonoOrCoreClr);
var compilation5 = CreateCompilation(source2, options: TestOptions.DebugExe,
......@@ -28297,6 +28318,8 @@ protected internal enum T4
{
B
}
protected internal delegate void T5();
}
";
var source1 =
......@@ -28310,6 +28333,7 @@ static void Main()
System.Console.WriteLine(new I1.T2());
System.Console.WriteLine(new I1.T3());
System.Console.WriteLine(I1.T4.B);
System.Console.WriteLine(new I1.T5(a.M1));
}
class Test2 : I1.T1
......@@ -28333,6 +28357,7 @@ static void Main()
System.Console.WriteLine(new I1.T2());
System.Console.WriteLine(new I1.T3());
System.Console.WriteLine(I1.T4.B);
System.Console.WriteLine(new I1.T5(a.M1));
}
class Test2 : I1.T1
......@@ -28351,7 +28376,7 @@ public void M1()
parseOptions: TestOptions.Regular,
targetFramework: TargetFramework.DesktopLatestExtended);
for (int i = 1; i <= 4; i++)
for (int i = 1; i <= 5; i++)
{
Assert.Equal(Accessibility.ProtectedOrInternal, compilation1.GetMember("I1.T" + i).DeclaredAccessibility);
}
......@@ -28368,7 +28393,10 @@ public void M1()
Diagnostic(ErrorCode.ERR_RuntimeDoesNotSupportProtectedAccessForInterfaceMember, "T3").WithLocation(12, 31),
// (15,29): error CS8707: Target runtime doesn't support 'protected', 'protected internal', or 'private protected' accessibility for a member of an interface.
// protected internal enum T4
Diagnostic(ErrorCode.ERR_RuntimeDoesNotSupportProtectedAccessForInterfaceMember, "T4").WithLocation(15, 29)
Diagnostic(ErrorCode.ERR_RuntimeDoesNotSupportProtectedAccessForInterfaceMember, "T4").WithLocation(15, 29),
// (20,38): error CS8707: Target runtime doesn't support 'protected', 'protected internal', or 'private protected' accessibility for a member of an interface.
// protected internal delegate void T5();
Diagnostic(ErrorCode.ERR_RuntimeDoesNotSupportProtectedAccessForInterfaceMember, "T5").WithLocation(20, 38)
);
......@@ -28390,7 +28418,8 @@ public void M1()
@"M1
I1+T2
I1+T3
B",
B
I1+T5",
verify: VerifyOnMonoOrCoreClr);
var compilation5 = CreateCompilation(source2, options: TestOptions.DebugExe,
......@@ -28414,9 +28443,15 @@ public void M1()
// (10,37): error CS0122: 'I1.T4' is inaccessible due to its protection level
// System.Console.WriteLine(I1.T4.B);
Diagnostic(ErrorCode.ERR_BadAccess, "T4").WithArguments("I1.T4").WithLocation(10, 37),
// (13,22): error CS0122: 'I1.T1' is inaccessible due to its protection level
// (11,41): error CS0122: 'I1.T5' is inaccessible due to its protection level
// System.Console.WriteLine(new I1.T5(a.M1));
Diagnostic(ErrorCode.ERR_BadAccess, "T5").WithArguments("I1.T5").WithLocation(11, 41),
// (11,46): error CS0122: 'I1.T1.M1()' is inaccessible due to its protection level
// System.Console.WriteLine(new I1.T5(a.M1));
Diagnostic(ErrorCode.ERR_BadAccess, "M1").WithArguments("I1.T1.M1()").WithLocation(11, 46),
// (14,22): error CS0122: 'I1.T1' is inaccessible due to its protection level
// class Test2 : I1.T1
Diagnostic(ErrorCode.ERR_BadAccess, "T1").WithArguments("I1.T1").WithLocation(13, 22)
Diagnostic(ErrorCode.ERR_BadAccess, "T1").WithArguments("I1.T1").WithLocation(14, 22)
);
}
}
......@@ -28443,6 +28478,8 @@ internal enum T4
{
B
}
internal delegate void T5();
}
";
var source2 =
......@@ -28456,6 +28493,7 @@ static void Main()
System.Console.WriteLine(new I1.T2());
System.Console.WriteLine(new I1.T3());
System.Console.WriteLine(I1.T4.B);
System.Console.WriteLine(new I1.T5(a.M1));
}
public void M1()
......@@ -28489,7 +28527,13 @@ public void M1()
Diagnostic(ErrorCode.ERR_BadAccess, "T3").WithArguments("I1.T3").WithLocation(9, 41),
// (10,37): error CS0122: 'I1.T4' is inaccessible due to its protection level
// System.Console.WriteLine(I1.T4.B);
Diagnostic(ErrorCode.ERR_BadAccess, "T4").WithArguments("I1.T4").WithLocation(10, 37)
Diagnostic(ErrorCode.ERR_BadAccess, "T4").WithArguments("I1.T4").WithLocation(10, 37),
// (11,41): error CS0122: 'I1.T5' is inaccessible due to its protection level
// System.Console.WriteLine(new I1.T5(a.M1));
Diagnostic(ErrorCode.ERR_BadAccess, "T5").WithArguments("I1.T5").WithLocation(11, 41),
// (11,46): error CS0122: 'I1.T1.M1()' is inaccessible due to its protection level
// System.Console.WriteLine(new I1.T5(a.M1));
Diagnostic(ErrorCode.ERR_BadAccess, "M1").WithArguments("I1.T1.M1()").WithLocation(11, 46)
};
compilation2.VerifyDiagnostics(expected);
......@@ -28521,6 +28565,8 @@ private enum T4
B
}
private delegate void T5();
class Test1 : I1.T1
{
static void Main()
......@@ -28530,6 +28576,7 @@ static void Main()
System.Console.WriteLine(new I1.T2());
System.Console.WriteLine(new I1.T3());
System.Console.WriteLine(I1.T4.B);
System.Console.WriteLine(new I1.T5(a.M1));
}
public void M1()
......@@ -28631,6 +28678,8 @@ private protected enum T4
{
B
}
private protected delegate void T5();
}
";
var source1 =
......@@ -28644,6 +28693,7 @@ static void Main()
System.Console.WriteLine(new I1.T2());
System.Console.WriteLine(new I1.T3());
System.Console.WriteLine(I1.T4.B);
System.Console.WriteLine(new I1.T5(a.M1));
}
class Test2 : I1.T1
......@@ -28667,6 +28717,7 @@ static void Main()
System.Console.WriteLine(new I1.T2());
System.Console.WriteLine(new I1.T3());
System.Console.WriteLine(I1.T4.B);
System.Console.WriteLine(new I1.T5(a.M1));
}
class Test2 : I1.T1
......@@ -28684,7 +28735,7 @@ public void M1()
parseOptions: TestOptions.Regular,
targetFramework: TargetFramework.DesktopLatestExtended);
for (int i = 1; i <= 4; i++)
for (int i = 1; i <= 5; i++)
{
Assert.Equal(Accessibility.ProtectedAndInternal, compilation1.GetMember("I1.T" + i).DeclaredAccessibility);
}
......@@ -28701,7 +28752,10 @@ public void M1()
Diagnostic(ErrorCode.ERR_RuntimeDoesNotSupportProtectedAccessForInterfaceMember, "T3").WithLocation(12, 30),
// (15,28): error CS8707: Target runtime doesn't support 'protected', 'protected internal', or 'private protected' accessibility for a member of an interface.
// private protected enum T4
Diagnostic(ErrorCode.ERR_RuntimeDoesNotSupportProtectedAccessForInterfaceMember, "T4").WithLocation(15, 28)
Diagnostic(ErrorCode.ERR_RuntimeDoesNotSupportProtectedAccessForInterfaceMember, "T4").WithLocation(15, 28),
// (20,37): error CS8707: Target runtime doesn't support 'protected', 'protected internal', or 'private protected' accessibility for a member of an interface.
// private protected delegate void T5();
Diagnostic(ErrorCode.ERR_RuntimeDoesNotSupportProtectedAccessForInterfaceMember, "T5").WithLocation(20, 37)
);
var compilation2 = CreateCompilation(source2 + source0, options: TestOptions.DebugExe,
......@@ -28724,9 +28778,15 @@ public void M1()
// (10,37): error CS0122: 'I1.T4' is inaccessible due to its protection level
// System.Console.WriteLine(I1.T4.B);
Diagnostic(ErrorCode.ERR_BadAccess, "T4").WithArguments("I1.T4").WithLocation(10, 37),
// (13,22): error CS0122: 'I1.T1' is inaccessible due to its protection level
// (11,41): error CS0122: 'I1.T5' is inaccessible due to its protection level
// System.Console.WriteLine(new I1.T5(a.M1));
Diagnostic(ErrorCode.ERR_BadAccess, "T5").WithArguments("I1.T5").WithLocation(11, 41),
// (11,46): error CS0122: 'I1.T1.M1()' is inaccessible due to its protection level
// System.Console.WriteLine(new I1.T5(a.M1));
Diagnostic(ErrorCode.ERR_BadAccess, "M1").WithArguments("I1.T1.M1()").WithLocation(11, 46),
// (14,22): error CS0122: 'I1.T1' is inaccessible due to its protection level
// class Test2 : I1.T1
Diagnostic(ErrorCode.ERR_BadAccess, "T1").WithArguments("I1.T1").WithLocation(13, 22)
Diagnostic(ErrorCode.ERR_BadAccess, "T1").WithArguments("I1.T1").WithLocation(14, 22)
};
compilation2.VerifyDiagnostics(expected);
......@@ -178,9 +178,9 @@ public async Task TestInsideStruct()
}
[Fact, Trait(Traits.Feature, Traits.Features.KeywordRecommending)]
public async Task TestNotInsideInterface()
public async Task TestInsideInterface()
{
await VerifyAbsenceAsync(@"interface I {
await VerifyKeywordAsync(@"interface I {
$$");
}
......
......@@ -36,6 +36,15 @@ public async Task TestMethodDeclaration3()
}");
}
[Fact, Trait(Traits.Feature, Traits.Features.KeywordRecommending)]
public async Task TestInsideInterface()
{
await VerifyKeywordAsync(@"interface C
{
$$
}");
}
[Fact, Trait(Traits.Feature, Traits.Features.KeywordRecommending)]
public async Task TestMethodDeclarationInGlobalStatement1()
{
......
......@@ -178,9 +178,9 @@ public async Task TestInsideStruct()
}
[Fact, Trait(Traits.Feature, Traits.Features.KeywordRecommending)]
public async Task TestNotInsideInterface()
public async Task TestInsideInterface()
{
await VerifyAbsenceAsync(@"interface I {
await VerifyKeywordAsync(@"interface I {
$$");
}
......
......@@ -191,9 +191,9 @@ public async Task TestInsideStruct()
}
[Fact, Trait(Traits.Feature, Traits.Features.KeywordRecommending)]
public async Task TestNotInsideInterface()
public async Task TestInsideInterface()
{
await VerifyAbsenceAsync(@"interface I {
await VerifyKeywordAsync(@"interface I {
$$");
}
......
......@@ -178,9 +178,9 @@ public async Task TestInsideStruct()
}
[Fact, Trait(Traits.Feature, Traits.Features.KeywordRecommending)]
public async Task TestNotInsideInterface()
public async Task TestInsideInterface()
{
await VerifyAbsenceAsync(@"interface I {
await VerifyKeywordAsync(@"interface I {
$$");
}
......
......@@ -185,9 +185,9 @@ public async Task TestInsideStruct()
}
[Fact, Trait(Traits.Feature, Traits.Features.KeywordRecommending)]
public async Task TestNotInsideInterface()
public async Task TestInsideInterface()
{
await VerifyAbsenceAsync(@"interface I {
await VerifyKeywordAsync(@"interface I {
$$");
}
......
......@@ -167,9 +167,9 @@ public async Task TestInStruct()
}
[Fact, Trait(Traits.Feature, Traits.Features.KeywordRecommending)]
public async Task TestNotInInterface()
public async Task TestInInterface()
{
await VerifyAbsenceAsync(
await VerifyKeywordAsync(
@"interface I {
$$");
}
......
......@@ -178,9 +178,9 @@ public async Task TestInsideStruct()
}
[Fact, Trait(Traits.Feature, Traits.Features.KeywordRecommending)]
public async Task TestNotInsideInterface()
public async Task TestInsideInterface()
{
await VerifyAbsenceAsync(@"interface I {
await VerifyKeywordAsync(@"interface I {
$$");
}
......
......@@ -178,9 +178,9 @@ public async Task TestInsideStruct()
}
[Fact, Trait(Traits.Feature, Traits.Features.KeywordRecommending)]
public async Task TestNotInsideInterface()
public async Task TestInsideInterface()
{
await VerifyAbsenceAsync(@"interface I {
await VerifyKeywordAsync(@"interface I {
$$");
}
......
......@@ -196,9 +196,9 @@ public async Task TestInsidePartialStruct()
}
[Fact, Trait(Traits.Feature, Traits.Features.KeywordRecommending)]
public async Task TestNotInsideInterface()
public async Task TestInsideInterface()
{
await VerifyAbsenceAsync(@"interface I {
await VerifyKeywordAsync(@"interface I {
$$");
}
......
......@@ -189,9 +189,9 @@ public async Task TestInsideStruct()
}
[Fact, Trait(Traits.Feature, Traits.Features.KeywordRecommending)]
public async Task TestNotInsideInterface()
public async Task TestInsideInterface()
{
await VerifyAbsenceAsync(@"interface I {
await VerifyKeywordAsync(@"interface I {
$$");
}
......
......@@ -160,9 +160,9 @@ public async Task TestNotInsideStruct()
}
[Fact, Trait(Traits.Feature, Traits.Features.KeywordRecommending)]
public async Task TestNotInsideInterface()
public async Task TestInsideInterface()
{
await VerifyAbsenceAsync(@"interface I {
await VerifyKeywordAsync(@"interface I {
$$");
}
......
......@@ -181,7 +181,7 @@ public async Task TestInsideStruct()
[Fact, Trait(Traits.Feature, Traits.Features.KeywordRecommending)]
public async Task TestInsideInterface()
{
await VerifyAbsenceAsync(
await VerifyKeywordAsync(
@"interface I {
$$");
}
......
......@@ -191,9 +191,9 @@ public async Task TestInsideStruct()
}
[Fact, Trait(Traits.Feature, Traits.Features.KeywordRecommending)]
public async Task TestNotInsideInterface()
public async Task TestInsideInterface()
{
await VerifyAbsenceAsync(@"interface I {
await VerifyKeywordAsync(@"interface I {
$$");
}
......
......@@ -178,9 +178,9 @@ public async Task TestInsideStruct()
}
[Fact, Trait(Traits.Feature, Traits.Features.KeywordRecommending)]
public async Task TestNotInsideInterface()
public async Task TestInsideInterface()
{
await VerifyAbsenceAsync(@"interface I {
await VerifyKeywordAsync(@"interface I {
$$");
}
......
......@@ -180,9 +180,9 @@ public async Task TestInsideStruct()
}
[Fact, Trait(Traits.Feature, Traits.Features.KeywordRecommending)]
public async Task TestNotInsideInterface()
public async Task TestInsideInterface()
{
await VerifyAbsenceAsync(@"interface I {
await VerifyKeywordAsync(@"interface I {
$$");
}
......
......@@ -234,9 +234,9 @@ public async Task TestInsideStruct()
}
[Fact, Trait(Traits.Feature, Traits.Features.KeywordRecommending)]
public async Task TestNotInsideInterface()
public async Task TestInsideInterface()
{
await VerifyAbsenceAsync(@"interface I {
await VerifyKeywordAsync(@"interface I {
$$");
}
......
......@@ -163,9 +163,9 @@ public async Task TestNotInMethodTypeParameters()
}
[Fact, Trait(Traits.Feature, Traits.Features.KeywordRecommending)]
public async Task TestNotInInterface()
public async Task TestInInterface()
{
await VerifyAbsenceAsync(
await VerifyKeywordAsync(
@"interface I {
[$$");
}
......
......@@ -160,9 +160,9 @@ public async Task TestNotInsideStruct()
}
[Fact, Trait(Traits.Feature, Traits.Features.KeywordRecommending)]
public async Task TestNotInsideInterface()
public async Task TestInsideInterface()
{
await VerifyAbsenceAsync(@"interface I {
await VerifyKeywordAsync(@"interface I {
$$");
}
......
......@@ -191,9 +191,9 @@ public async Task TestInsideStruct()
}
[Fact, Trait(Traits.Feature, Traits.Features.KeywordRecommending)]
public async Task TestNotInsideInterface()
public async Task TestInsideInterface()
{
await VerifyAbsenceAsync(@"interface I {
await VerifyKeywordAsync(@"interface I {
$$");
}
......
......@@ -41,12 +41,12 @@ protected override bool IsValidContext(int position, CSharpSyntaxContext context
context.IsGlobalStatementContext ||
context.IsMemberDeclarationContext(
validModifiers: s_validMemberModifiers,
validTypeDeclarations: SyntaxKindSet.ClassOnlyTypeDeclarations,
validTypeDeclarations: SyntaxKindSet.ClassInterfaceTypeDeclarations,
canBePartial: false,
cancellationToken: cancellationToken) ||
context.IsTypeDeclarationContext(
validModifiers: s_validTypeModifiers,
validTypeDeclarations: SyntaxKindSet.ClassStructTypeDeclarations,
validTypeDeclarations: SyntaxKindSet.ClassInterfaceStructTypeDeclarations,
canBePartial: false,
cancellationToken: cancellationToken);
}
......
......@@ -36,7 +36,7 @@ private static bool InMemberDeclarationContext(int position, CSharpSyntaxContext
|| context.SyntaxTree.IsGlobalMemberDeclarationContext(position, SyntaxKindSet.AllGlobalMemberModifiers, cancellationToken)
|| context.IsMemberDeclarationContext(
validModifiers: SyntaxKindSet.AllMemberModifiers,
validTypeDeclarations: SyntaxKindSet.ClassStructTypeDeclarations,
validTypeDeclarations: SyntaxKindSet.ClassInterfaceStructTypeDeclarations,
canBePartial: true,
cancellationToken: cancellationToken);
}
......
......@@ -34,7 +34,7 @@ protected override bool IsValidContext(int position, CSharpSyntaxContext context
context.IsGlobalStatementContext ||
context.IsTypeDeclarationContext(
validModifiers: s_validModifiers,
validTypeDeclarations: SyntaxKindSet.ClassStructTypeDeclarations,
validTypeDeclarations: SyntaxKindSet.ClassInterfaceStructTypeDeclarations,
canBePartial: true,
cancellationToken: cancellationToken) ||
syntaxTree.IsTypeParameterConstraintStartContext(position, context.LeftToken, cancellationToken);
......
......@@ -44,7 +44,7 @@ private bool IsMemberDeclarationContext(CSharpSyntaxContext context, Cancellatio
context.SyntaxTree.IsGlobalMemberDeclarationContext(context.Position, s_validGlobalModifiers, cancellationToken) ||
context.IsMemberDeclarationContext(
validModifiers: s_validModifiers,
validTypeDeclarations: SyntaxKindSet.ClassStructTypeDeclarations,
validTypeDeclarations: SyntaxKindSet.ClassInterfaceStructTypeDeclarations,
canBePartial: false,
cancellationToken: cancellationToken);
}
......
......@@ -32,7 +32,7 @@ protected override bool IsValidContext(int position, CSharpSyntaxContext context
IsAfterAsyncKeywordInExpressionContext(context, cancellationToken) ||
context.IsTypeDeclarationContext(
validModifiers: s_validModifiers,
validTypeDeclarations: SyntaxKindSet.ClassStructTypeDeclarations,
validTypeDeclarations: SyntaxKindSet.ClassInterfaceStructTypeDeclarations,
canBePartial: false,
cancellationToken: cancellationToken);
}
......
......@@ -28,7 +28,7 @@ protected override bool IsValidContext(int position, CSharpSyntaxContext context
context.IsGlobalStatementContext ||
context.IsTypeDeclarationContext(
validModifiers: s_validModifiers,
validTypeDeclarations: SyntaxKindSet.ClassStructTypeDeclarations,
validTypeDeclarations: SyntaxKindSet.ClassInterfaceStructTypeDeclarations,
canBePartial: false,
cancellationToken: cancellationToken);
}
......
......@@ -47,7 +47,7 @@ protected override bool IsValidContext(int position, CSharpSyntaxContext context
syntaxTree.IsGlobalMemberDeclarationContext(position, s_validGlobalModifiers, cancellationToken) ||
context.IsMemberDeclarationContext(
validModifiers: s_validModifiers,
validTypeDeclarations: SyntaxKindSet.ClassStructTypeDeclarations,
validTypeDeclarations: SyntaxKindSet.ClassInterfaceStructTypeDeclarations,
canBePartial: false,
cancellationToken: cancellationToken);
}
......
......@@ -29,7 +29,7 @@ protected override bool IsValidContext(int position, CSharpSyntaxContext context
context.IsGlobalStatementContext ||
context.IsTypeDeclarationContext(
validModifiers: s_validModifiers,
validTypeDeclarations: SyntaxKindSet.ClassStructTypeDeclarations,
validTypeDeclarations: SyntaxKindSet.ClassInterfaceStructTypeDeclarations,
canBePartial: true,
cancellationToken: cancellationToken);
}
......
......@@ -37,7 +37,7 @@ private static bool IsValidContextForAccessor(CSharpSyntaxContext context)
private static bool IsValidContextForMember(CSharpSyntaxContext context, CancellationToken cancellationToken)
{
if (context.SyntaxTree.IsGlobalMemberDeclarationContext(context.Position, SyntaxKindSet.AllGlobalMemberModifiers, cancellationToken) ||
context.IsMemberDeclarationContext(validModifiers: SyntaxKindSet.AllMemberModifiers, validTypeDeclarations: SyntaxKindSet.ClassStructTypeDeclarations, canBePartial: false, cancellationToken: cancellationToken))
context.IsMemberDeclarationContext(validModifiers: SyntaxKindSet.AllMemberModifiers, validTypeDeclarations: SyntaxKindSet.ClassInterfaceStructTypeDeclarations, canBePartial: false, cancellationToken: cancellationToken))
{
return CheckPreviousAccessibilityModifiers(context);
}
......@@ -47,7 +47,7 @@ private static bool IsValidContextForMember(CSharpSyntaxContext context, Cancell
private static bool IsValidContextForType(CSharpSyntaxContext context, CancellationToken cancellationToken)
{
if (context.IsTypeDeclarationContext(validModifiers: SyntaxKindSet.AllTypeModifiers, validTypeDeclarations: SyntaxKindSet.ClassStructTypeDeclarations, canBePartial: false, cancellationToken: cancellationToken))
if (context.IsTypeDeclarationContext(validModifiers: SyntaxKindSet.AllTypeModifiers, validTypeDeclarations: SyntaxKindSet.ClassInterfaceStructTypeDeclarations, canBePartial: false, cancellationToken: cancellationToken))
{
return CheckPreviousAccessibilityModifiers(context);
}
......
......@@ -34,7 +34,7 @@ protected override bool IsValidContext(int position, CSharpSyntaxContext context
private bool IsMemberDeclarationContext(CSharpSyntaxContext context, CancellationToken cancellationToken)
{
if (context.IsMemberDeclarationContext(validModifiers: s_validMemberModifiers, validTypeDeclarations: SyntaxKindSet.ClassStructTypeDeclarations, canBePartial: false, cancellationToken: cancellationToken))
if (context.IsMemberDeclarationContext(validModifiers: s_validMemberModifiers, validTypeDeclarations: SyntaxKindSet.ClassInterfaceStructTypeDeclarations, canBePartial: false, cancellationToken: cancellationToken))
{
var token = context.LeftToken;
var decl = token.GetAncestor<TypeDeclarationSyntax>();
......@@ -55,7 +55,7 @@ private bool IsTypeDeclarationContext(CSharpSyntaxContext context, CancellationT
{
return context.IsTypeDeclarationContext(
validModifiers: SyntaxKindSet.AllTypeModifiers,
validTypeDeclarations: SyntaxKindSet.ClassStructTypeDeclarations,
validTypeDeclarations: SyntaxKindSet.ClassInterfaceStructTypeDeclarations,
canBePartial: false,
cancellationToken: cancellationToken);
}
......
......@@ -37,7 +37,7 @@ private static bool IsValidContextForAccessor(CSharpSyntaxContext context)
private static bool IsValidContextForMember(CSharpSyntaxContext context, CancellationToken cancellationToken)
{
if (context.SyntaxTree.IsGlobalMemberDeclarationContext(context.Position, SyntaxKindSet.AllGlobalMemberModifiers, cancellationToken) ||
context.IsMemberDeclarationContext(validModifiers: SyntaxKindSet.AllMemberModifiers, validTypeDeclarations: SyntaxKindSet.ClassStructTypeDeclarations, canBePartial: false, cancellationToken: cancellationToken))
context.IsMemberDeclarationContext(validModifiers: SyntaxKindSet.AllMemberModifiers, validTypeDeclarations: SyntaxKindSet.ClassInterfaceStructTypeDeclarations, canBePartial: false, cancellationToken: cancellationToken))
{
var modifiers = context.PrecedingModifiers;
......@@ -58,7 +58,7 @@ private static bool IsValidContextForMember(CSharpSyntaxContext context, Cancell
private static bool IsValidContextForType(CSharpSyntaxContext context, CancellationToken cancellationToken)
{
if (context.IsTypeDeclarationContext(validModifiers: SyntaxKindSet.AllTypeModifiers, validTypeDeclarations: SyntaxKindSet.ClassStructTypeDeclarations, canBePartial: false, cancellationToken: cancellationToken))
if (context.IsTypeDeclarationContext(validModifiers: SyntaxKindSet.AllTypeModifiers, validTypeDeclarations: SyntaxKindSet.ClassInterfaceStructTypeDeclarations, canBePartial: false, cancellationToken: cancellationToken))
{
// private things can't be in namespaces.
var typeDecl = context.ContainingTypeDeclaration;
......
......@@ -35,7 +35,7 @@ private static bool IsValidContextForAccessor(CSharpSyntaxContext context)
private static bool IsValidContextForMember(CSharpSyntaxContext context, CancellationToken cancellationToken)
{
if (context.IsMemberDeclarationContext(validModifiers: SyntaxKindSet.AllMemberModifiers, validTypeDeclarations: SyntaxKindSet.ClassOnlyTypeDeclarations, canBePartial: false, cancellationToken: cancellationToken))
if (context.IsMemberDeclarationContext(validModifiers: SyntaxKindSet.AllMemberModifiers, validTypeDeclarations: SyntaxKindSet.ClassInterfaceTypeDeclarations, canBePartial: false, cancellationToken: cancellationToken))
{
return CheckPreviousAccessibilityModifiers(context);
}
......@@ -45,7 +45,7 @@ private static bool IsValidContextForMember(CSharpSyntaxContext context, Cancell
private static bool IsValidContextForType(CSharpSyntaxContext context, CancellationToken cancellationToken)
{
if (context.IsTypeDeclarationContext(validModifiers: SyntaxKindSet.AllTypeModifiers, validTypeDeclarations: SyntaxKindSet.ClassOnlyTypeDeclarations, canBePartial: false, cancellationToken: cancellationToken))
if (context.IsTypeDeclarationContext(validModifiers: SyntaxKindSet.AllTypeModifiers, validTypeDeclarations: SyntaxKindSet.ClassInterfaceTypeDeclarations, canBePartial: false, cancellationToken: cancellationToken))
{
// protected things can't be in namespaces.
var typeDecl = context.ContainingTypeDeclaration;
......
......@@ -26,7 +26,7 @@ private static bool IsValidContextForMember(CSharpSyntaxContext context, Cancell
if (context.SyntaxTree.IsGlobalMemberDeclarationContext(context.Position, SyntaxKindSet.AllGlobalMemberModifiers, cancellationToken) ||
context.IsMemberDeclarationContext(
validModifiers: SyntaxKindSet.AllMemberModifiers,
validTypeDeclarations: SyntaxKindSet.ClassStructTypeDeclarations,
validTypeDeclarations: SyntaxKindSet.ClassInterfaceStructTypeDeclarations,
canBePartial: false,
cancellationToken: cancellationToken))
{
......@@ -38,7 +38,7 @@ private static bool IsValidContextForMember(CSharpSyntaxContext context, Cancell
private static bool IsValidContextForType(CSharpSyntaxContext context, CancellationToken cancellationToken)
{
if (context.IsTypeDeclarationContext(validModifiers: SyntaxKindSet.AllTypeModifiers, validTypeDeclarations: SyntaxKindSet.ClassStructTypeDeclarations, canBePartial: false, cancellationToken: cancellationToken))
if (context.IsTypeDeclarationContext(validModifiers: SyntaxKindSet.AllTypeModifiers, validTypeDeclarations: SyntaxKindSet.ClassInterfaceStructTypeDeclarations, canBePartial: false, cancellationToken: cancellationToken))
{
return CheckPreviousAccessibilityModifiers(context);
}
......
......@@ -34,7 +34,7 @@ protected override bool IsValidContext(int position, CSharpSyntaxContext context
context.SyntaxTree.IsGlobalMemberDeclarationContext(context.Position, SyntaxKindSet.AllGlobalMemberModifiers, cancellationToken) ||
context.IsMemberDeclarationContext(
validModifiers: s_validMemberModifiers,
validTypeDeclarations: SyntaxKindSet.ClassStructTypeDeclarations,
validTypeDeclarations: SyntaxKindSet.ClassInterfaceStructTypeDeclarations,
canBePartial: false,
cancellationToken: cancellationToken);
}
......@@ -46,7 +46,7 @@ private static bool IsRefReadOnlyContext(CSharpSyntaxContext context)
private static bool IsValidContextForType(CSharpSyntaxContext context, CancellationToken cancellationToken)
{
return context.IsTypeDeclarationContext(validModifiers: SyntaxKindSet.AllTypeModifiers,
validTypeDeclarations: SyntaxKindSet.ClassStructTypeDeclarations, canBePartial: true, cancellationToken);
validTypeDeclarations: SyntaxKindSet.ClassInterfaceStructTypeDeclarations, canBePartial: true, cancellationToken);
}
}
}
......@@ -167,7 +167,7 @@ private static bool IsValidRefExpressionContext(SyntaxTree syntaxTree, int posit
private static bool IsValidContextForType(CSharpSyntaxContext context, CancellationToken cancellationToken)
{
return context.IsTypeDeclarationContext(validModifiers: SyntaxKindSet.AllTypeModifiers,
validTypeDeclarations: SyntaxKindSet.ClassStructTypeDeclarations, canBePartial: true, cancellationToken);
validTypeDeclarations: SyntaxKindSet.ClassInterfaceStructTypeDeclarations, canBePartial: true, cancellationToken);
}
}
}
......@@ -41,12 +41,12 @@ protected override bool IsValidContext(int position, CSharpSyntaxContext context
context.IsGlobalStatementContext ||
context.IsMemberDeclarationContext(
validModifiers: s_validMemberModifiers,
validTypeDeclarations: SyntaxKindSet.ClassOnlyTypeDeclarations,
validTypeDeclarations: SyntaxKindSet.ClassInterfaceTypeDeclarations,
canBePartial: false,
cancellationToken: cancellationToken) ||
context.IsTypeDeclarationContext(
validModifiers: s_validTypeModifiers,
validTypeDeclarations: SyntaxKindSet.ClassStructTypeDeclarations,
validTypeDeclarations: SyntaxKindSet.ClassInterfaceStructTypeDeclarations,
canBePartial: false,
cancellationToken: cancellationToken);
}
......
......@@ -66,7 +66,7 @@ private static bool IsValidContextForMember(CSharpSyntaxContext context, Cancell
context.SyntaxTree.IsGlobalMemberDeclarationContext(context.Position, s_validGlobalMemberModifiers, cancellationToken) ||
context.IsMemberDeclarationContext(
validModifiers: s_validMemberModifiers,
validTypeDeclarations: SyntaxKindSet.ClassStructTypeDeclarations,
validTypeDeclarations: SyntaxKindSet.ClassInterfaceStructTypeDeclarations,
canBePartial: false,
cancellationToken: cancellationToken);
}
......@@ -75,7 +75,7 @@ private static bool IsValidContextForType(CSharpSyntaxContext context, Cancellat
{
return context.IsTypeDeclarationContext(
validModifiers: s_validTypeModifiers,
validTypeDeclarations: SyntaxKindSet.ClassStructTypeDeclarations,
validTypeDeclarations: SyntaxKindSet.ClassInterfaceStructTypeDeclarations,
canBePartial: false,
cancellationToken: cancellationToken);
}
......
......@@ -32,7 +32,7 @@ protected override bool IsValidContext(int position, CSharpSyntaxContext context
context.IsGlobalStatementContext ||
context.IsTypeDeclarationContext(
validModifiers: s_validModifiers,
validTypeDeclarations: SyntaxKindSet.ClassStructTypeDeclarations,
validTypeDeclarations: SyntaxKindSet.ClassInterfaceStructTypeDeclarations,
canBePartial: true,
cancellationToken: cancellationToken) ||
syntaxTree.IsTypeParameterConstraintStartContext(position, context.LeftToken, cancellationToken);
......
......@@ -61,7 +61,7 @@ protected override bool IsValidContext(int position, CSharpSyntaxContext context
return
context.IsStatementContext ||
context.IsGlobalStatementContext ||
context.IsTypeDeclarationContext(validModifiers: s_validTypeModifiers, validTypeDeclarations: SyntaxKindSet.ClassStructTypeDeclarations, canBePartial: false, cancellationToken: cancellationToken) ||
context.IsTypeDeclarationContext(validModifiers: s_validTypeModifiers, validTypeDeclarations: SyntaxKindSet.ClassInterfaceStructTypeDeclarations, canBePartial: false, cancellationToken: cancellationToken) ||
syntaxTree.IsGlobalMemberDeclarationContext(position, s_validGlobalMemberModifiers, cancellationToken) ||
context.IsMemberDeclarationContext(
validModifiers: s_validMemberModifiers,
......
......@@ -28,7 +28,7 @@ protected override bool IsValidContext(int position, CSharpSyntaxContext context
{
return context.IsMemberDeclarationContext(
validModifiers: s_validMemberModifiers,
validTypeDeclarations: SyntaxKindSet.ClassOnlyTypeDeclarations,
validTypeDeclarations: SyntaxKindSet.ClassInterfaceTypeDeclarations,
canBePartial: false,
cancellationToken: cancellationToken);
}
......
......@@ -31,7 +31,7 @@ protected override bool IsValidContext(int position, CSharpSyntaxContext context
context.SyntaxTree.IsGlobalMemberDeclarationContext(context.Position, SyntaxKindSet.AllGlobalMemberModifiers, cancellationToken) ||
context.IsMemberDeclarationContext(
validModifiers: s_validMemberModifiers,
validTypeDeclarations: SyntaxKindSet.ClassStructTypeDeclarations,
validTypeDeclarations: SyntaxKindSet.ClassInterfaceStructTypeDeclarations,
canBePartial: false,
cancellationToken: cancellationToken);
}
......
......@@ -275,7 +275,7 @@ public bool IsTypeAttributeContext(CancellationToken cancellationToken)
if (token.Kind() == SyntaxKind.OpenBracketToken &&
token.Parent.Kind() == SyntaxKind.AttributeList &&
this.SyntaxTree.IsTypeDeclarationContext(
token.SpanStart, contextOpt: null, validModifiers: null, validTypeDeclarations: SyntaxKindSet.ClassStructTypeDeclarations, canBePartial: false, cancellationToken: cancellationToken))
token.SpanStart, contextOpt: null, validModifiers: null, validTypeDeclarations: SyntaxKindSet.ClassInterfaceStructTypeDeclarations, canBePartial: false, cancellationToken: cancellationToken))
{
return true;
}
......
......@@ -407,7 +407,7 @@ public static bool IsAttributeNameContext(this SyntaxTree syntaxTree, int positi
if (token.IsKind(SyntaxKind.OpenBraceToken))
{
if (token.Parent.IsKind(SyntaxKind.ClassDeclaration, SyntaxKind.StructDeclaration))
if (token.Parent.IsKind(SyntaxKind.ClassDeclaration, SyntaxKind.StructDeclaration, SyntaxKind.InterfaceDeclaration))
{
return true;
}
......@@ -511,8 +511,8 @@ public static bool IsAttributeNameContext(this SyntaxTree syntaxTree, int positi
bool canBePartial,
CancellationToken cancellationToken)
{
// We only allow nested types inside a class or struct, not inside a
// an interface or enum.
// We only allow nested types inside a class, struct, or interface, not inside a
// an enum.
var typeDecl = contextOpt != null
? contextOpt.ContainingTypeDeclaration
: syntaxTree.GetContainingTypeDeclaration(position, cancellationToken);
......
......@@ -75,15 +75,16 @@ internal class SyntaxKindSet
SyntaxKind.StructDeclaration,
};
public static readonly ISet<SyntaxKind> ClassStructTypeDeclarations = new HashSet<SyntaxKind>(SyntaxFacts.EqualityComparer)
public static readonly ISet<SyntaxKind> ClassInterfaceTypeDeclarations = new HashSet<SyntaxKind>(SyntaxFacts.EqualityComparer)
{
SyntaxKind.InterfaceDeclaration,
SyntaxKind.ClassDeclaration,
SyntaxKind.StructDeclaration,
};
public static readonly ISet<SyntaxKind> ClassOnlyTypeDeclarations = new HashSet<SyntaxKind>(SyntaxFacts.EqualityComparer)
public static readonly ISet<SyntaxKind> ClassStructTypeDeclarations = new HashSet<SyntaxKind>(SyntaxFacts.EqualityComparer)
{
SyntaxKind.ClassDeclaration,
SyntaxKind.StructDeclaration,
};
public static readonly ISet<SyntaxKind> StructOnlyTypeDeclarations = new HashSet<SyntaxKind>(SyntaxFacts.EqualityComparer)
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册