Skip to content

Commit 9f44bc5

Browse files
authored
Merge pull request github#6089 from tamasvajk/feature/interface-member-modifier
C#: Allow abstract modifier on interface members
2 parents 386d88a + 6683565 commit 9f44bc5

File tree

4 files changed

+15
-9
lines changed

4 files changed

+15
-9
lines changed

csharp/extractor/Semmle.Extraction.CSharp/Entities/Modifier.cs

Lines changed: 1 addition & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -72,15 +72,11 @@ public static void HasModifier(Context cx, TextWriter trapFile, IEntity target,
7272

7373
public static void ExtractModifiers(Context cx, TextWriter trapFile, IEntity key, ISymbol symbol)
7474
{
75-
var interfaceDefinition = symbol.ContainingType is not null
76-
&& symbol.ContainingType.Kind == SymbolKind.NamedType
77-
&& symbol.ContainingType.TypeKind == TypeKind.Interface;
78-
7975
HasAccessibility(cx, trapFile, key, symbol.DeclaredAccessibility);
8076
if (symbol.Kind == SymbolKind.ErrorType)
8177
trapFile.has_modifiers(key, Modifier.Create(cx, Accessibility.Public));
8278

83-
if (symbol.IsAbstract && (symbol.Kind != SymbolKind.NamedType || ((INamedTypeSymbol)symbol).TypeKind != TypeKind.Interface) && !interfaceDefinition)
79+
if (symbol.IsAbstract && (symbol.Kind != SymbolKind.NamedType || ((INamedTypeSymbol)symbol).TypeKind != TypeKind.Interface))
8480
HasModifier(cx, trapFile, key, "abstract");
8581

8682
if (symbol.IsSealed)
@@ -94,10 +90,6 @@ public static void ExtractModifiers(Context cx, TextWriter trapFile, IEntity key
9490
if (symbol.IsVirtual)
9591
HasModifier(cx, trapFile, key, "virtual");
9692

97-
// For some reason, method in interfaces are "virtual", not "abstract"
98-
if (symbol.IsAbstract && interfaceDefinition)
99-
HasModifier(cx, trapFile, key, "virtual");
100-
10193
if (symbol.Kind == SymbolKind.Field && ((IFieldSymbol)symbol).IsReadOnly)
10294
HasModifier(cx, trapFile, key, "readonly");
10395

csharp/ql/test/library-tests/modifiers/Effectively.expected

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,3 +21,6 @@
2121
| Modifiers.cs:54:52:54:54 | set_P1 | public |
2222
| Modifiers.cs:55:20:55:21 | P2 | public |
2323
| Modifiers.cs:55:36:55:38 | get_P2 | public |
24+
| Modifiers.cs:60:22:60:23 | I1 | public |
25+
| Modifiers.cs:62:14:62:15 | M1 | public |
26+
| Modifiers.cs:63:14:63:15 | M2 | public |

csharp/ql/test/library-tests/modifiers/Modifiers.cs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,4 +56,10 @@ public struct S
5656
/*private*/
5757
int P3 { /*private*/ get; /*private*/ set; }
5858
}
59+
60+
public interface I1
61+
{
62+
void M1();
63+
void M2() => throw null;
64+
}
5965
}

csharp/ql/test/library-tests/modifiers/Modifiers.expected

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,3 +44,8 @@
4444
| Modifiers.cs:57:13:57:14 | P3 | file://:0:0:0:0 | private |
4545
| Modifiers.cs:57:30:57:32 | get_P3 | file://:0:0:0:0 | private |
4646
| Modifiers.cs:57:47:57:49 | set_P3 | file://:0:0:0:0 | private |
47+
| Modifiers.cs:60:22:60:23 | I1 | file://:0:0:0:0 | public |
48+
| Modifiers.cs:62:14:62:15 | M1 | file://:0:0:0:0 | abstract |
49+
| Modifiers.cs:62:14:62:15 | M1 | file://:0:0:0:0 | public |
50+
| Modifiers.cs:63:14:63:15 | M2 | file://:0:0:0:0 | public |
51+
| Modifiers.cs:63:14:63:15 | M2 | file://:0:0:0:0 | virtual |

0 commit comments

Comments
 (0)