mirror of
https://github.com/github/codeql.git
synced 2026-04-26 01:05:15 +02:00
Merge pull request #6089 from tamasvajk/feature/interface-member-modifier
C#: Allow abstract modifier on interface members
This commit is contained in:
@@ -72,15 +72,11 @@ namespace Semmle.Extraction.CSharp.Entities
|
||||
|
||||
public static void ExtractModifiers(Context cx, TextWriter trapFile, IEntity key, ISymbol symbol)
|
||||
{
|
||||
var interfaceDefinition = symbol.ContainingType is not null
|
||||
&& symbol.ContainingType.Kind == SymbolKind.NamedType
|
||||
&& symbol.ContainingType.TypeKind == TypeKind.Interface;
|
||||
|
||||
HasAccessibility(cx, trapFile, key, symbol.DeclaredAccessibility);
|
||||
if (symbol.Kind == SymbolKind.ErrorType)
|
||||
trapFile.has_modifiers(key, Modifier.Create(cx, Accessibility.Public));
|
||||
|
||||
if (symbol.IsAbstract && (symbol.Kind != SymbolKind.NamedType || ((INamedTypeSymbol)symbol).TypeKind != TypeKind.Interface) && !interfaceDefinition)
|
||||
if (symbol.IsAbstract && (symbol.Kind != SymbolKind.NamedType || ((INamedTypeSymbol)symbol).TypeKind != TypeKind.Interface))
|
||||
HasModifier(cx, trapFile, key, "abstract");
|
||||
|
||||
if (symbol.IsSealed)
|
||||
@@ -94,10 +90,6 @@ namespace Semmle.Extraction.CSharp.Entities
|
||||
if (symbol.IsVirtual)
|
||||
HasModifier(cx, trapFile, key, "virtual");
|
||||
|
||||
// For some reason, method in interfaces are "virtual", not "abstract"
|
||||
if (symbol.IsAbstract && interfaceDefinition)
|
||||
HasModifier(cx, trapFile, key, "virtual");
|
||||
|
||||
if (symbol.Kind == SymbolKind.Field && ((IFieldSymbol)symbol).IsReadOnly)
|
||||
HasModifier(cx, trapFile, key, "readonly");
|
||||
|
||||
|
||||
@@ -21,3 +21,6 @@
|
||||
| Modifiers.cs:54:52:54:54 | set_P1 | public |
|
||||
| Modifiers.cs:55:20:55:21 | P2 | public |
|
||||
| Modifiers.cs:55:36:55:38 | get_P2 | public |
|
||||
| Modifiers.cs:60:22:60:23 | I1 | public |
|
||||
| Modifiers.cs:62:14:62:15 | M1 | public |
|
||||
| Modifiers.cs:63:14:63:15 | M2 | public |
|
||||
|
||||
@@ -56,4 +56,10 @@ namespace N
|
||||
/*private*/
|
||||
int P3 { /*private*/ get; /*private*/ set; }
|
||||
}
|
||||
|
||||
public interface I1
|
||||
{
|
||||
void M1();
|
||||
void M2() => throw null;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -44,3 +44,8 @@
|
||||
| Modifiers.cs:57:13:57:14 | P3 | file://:0:0:0:0 | private |
|
||||
| Modifiers.cs:57:30:57:32 | get_P3 | file://:0:0:0:0 | private |
|
||||
| Modifiers.cs:57:47:57:49 | set_P3 | file://:0:0:0:0 | private |
|
||||
| Modifiers.cs:60:22:60:23 | I1 | file://:0:0:0:0 | public |
|
||||
| Modifiers.cs:62:14:62:15 | M1 | file://:0:0:0:0 | abstract |
|
||||
| Modifiers.cs:62:14:62:15 | M1 | file://:0:0:0:0 | public |
|
||||
| Modifiers.cs:63:14:63:15 | M2 | file://:0:0:0:0 | public |
|
||||
| Modifiers.cs:63:14:63:15 | M2 | file://:0:0:0:0 | virtual |
|
||||
|
||||
Reference in New Issue
Block a user