C#: Ignore explicit interface implementations
This commit is contained in:
parent
61d2c85511
commit
0372bd56b6
4 changed files with 34 additions and 2 deletions
|
@ -194,6 +194,32 @@ namespace Godot.SourceGenerators
|
|||
location?.SourceTree?.FilePath));
|
||||
}
|
||||
|
||||
public static void ReportExportedMemberIsExplicitInterfaceImplementation(
|
||||
GeneratorExecutionContext context,
|
||||
ISymbol exportedMemberSymbol
|
||||
)
|
||||
{
|
||||
var locations = exportedMemberSymbol.Locations;
|
||||
var location = locations.FirstOrDefault(l => l.SourceTree != null) ?? locations.FirstOrDefault();
|
||||
|
||||
string message = $"Attempted to export explicit interface property implementation: " +
|
||||
$"'{exportedMemberSymbol.ToDisplayString()}'";
|
||||
|
||||
string description = $"{message}. Explicit interface implementations can't be exported." +
|
||||
" Remove the '[Export]' attribute.";
|
||||
|
||||
context.ReportDiagnostic(Diagnostic.Create(
|
||||
new DiagnosticDescriptor(id: "GD0106",
|
||||
title: message,
|
||||
messageFormat: message,
|
||||
category: "Usage",
|
||||
DiagnosticSeverity.Error,
|
||||
isEnabledByDefault: true,
|
||||
description),
|
||||
location,
|
||||
location?.SourceTree?.FilePath));
|
||||
}
|
||||
|
||||
public static void ReportSignalDelegateMissingSuffix(
|
||||
GeneratorExecutionContext context,
|
||||
INamedTypeSymbol delegateSymbol)
|
||||
|
|
|
@ -113,7 +113,7 @@ namespace Godot.SourceGenerators
|
|||
var propertySymbols = members
|
||||
.Where(s => !s.IsStatic && s.Kind == SymbolKind.Property)
|
||||
.Cast<IPropertySymbol>()
|
||||
.Where(s => !s.IsIndexer);
|
||||
.Where(s => !s.IsIndexer && s.ExplicitInterfaceImplementations.Length == 0);
|
||||
|
||||
var fieldSymbols = members
|
||||
.Where(s => !s.IsStatic && s.Kind == SymbolKind.Field && !s.IsImplicitlyDeclared)
|
||||
|
|
|
@ -151,6 +151,12 @@ namespace Godot.SourceGenerators
|
|||
continue;
|
||||
}
|
||||
|
||||
if (property.ExplicitInterfaceImplementations.Length > 0)
|
||||
{
|
||||
Common.ReportExportedMemberIsExplicitInterfaceImplementation(context, property);
|
||||
continue;
|
||||
}
|
||||
|
||||
var propertyType = property.Type;
|
||||
var marshalType = MarshalUtils.ConvertManagedTypeToMarshalType(propertyType, typeCache);
|
||||
|
||||
|
|
|
@ -113,7 +113,7 @@ namespace Godot.SourceGenerators
|
|||
var propertySymbols = members
|
||||
.Where(s => !s.IsStatic && s.Kind == SymbolKind.Property)
|
||||
.Cast<IPropertySymbol>()
|
||||
.Where(s => !s.IsIndexer);
|
||||
.Where(s => !s.IsIndexer && s.ExplicitInterfaceImplementations.Length == 0);
|
||||
|
||||
var fieldSymbols = members
|
||||
.Where(s => !s.IsStatic && s.Kind == SymbolKind.Field && !s.IsImplicitlyDeclared)
|
||||
|
|
Loading…
Reference in a new issue