From c62fb6231888351dad7e8a95001f1be58421cf17 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fredrik=20H=C3=B8is=C3=A6ther=20Rasch?= Date: Sat, 25 May 2024 14:18:44 +0200 Subject: [PATCH] NativeAnnotationAttribute is generated when not included in config's name exclusion list. --- .../PInvokeGenerator.cs | 17 ++++++++--------- 1 file changed, 8 insertions(+), 9 deletions(-) diff --git a/sources/ClangSharp.PInvokeGenerator/PInvokeGenerator.cs b/sources/ClangSharp.PInvokeGenerator/PInvokeGenerator.cs index ffbace62..d3b9bb84 100644 --- a/sources/ClangSharp.PInvokeGenerator/PInvokeGenerator.cs +++ b/sources/ClangSharp.PInvokeGenerator/PInvokeGenerator.cs @@ -65,8 +65,6 @@ public sealed partial class PInvokeGenerator : IDisposable private readonly HashSet _usedRemappings; private readonly string _placeholderMacroType; - private bool _hasAnnotateAttr; - private string _filePath; private string[] _clangCommandLineArgs; private CXTranslationUnit_Flags _translationFlags; @@ -800,16 +798,18 @@ static void GenerateNativeTypeNameAttribute(PInvokeGenerator generator, Stream? static void GenerateNativeAnnotationAttribute(PInvokeGenerator generator, Stream? stream, bool leaveStreamOpen) { + const string AttributeName = "NativeAnnotationAttribute"; var config = generator.Config; - if (!generator._hasAnnotateAttr) + var ns = generator.GetNamespace(AttributeName); + if (config.ExcludedNames.Contains(AttributeName) || config.ExcludedNames.Contains($"{ns}.{AttributeName}")) { return; } if (stream is null) { - var outputPath = Path.Combine(config.OutputLocation, "NativeAnnotationAttribute.cs"); + var outputPath = Path.Combine(config.OutputLocation, $"{AttributeName}.cs"); stream = generator._outputStreamFactory(outputPath); } @@ -828,7 +828,7 @@ static void GenerateNativeAnnotationAttribute(PInvokeGenerator generator, Stream sw.WriteLine(); sw.Write("namespace "); - sw.Write(generator.GetNamespace("NativeAnnotationAttribute")); + sw.Write(ns); if (generator.Config.GenerateFileScopedNamespaces) { @@ -849,18 +849,18 @@ static void GenerateNativeAnnotationAttribute(PInvokeGenerator generator, Stream sw.Write(indentString); sw.WriteLine("[Conditional(\"DEBUG\")]"); sw.Write(indentString); - sw.WriteLine("internal sealed partial class NativeAnnotationAttribute : Attribute"); + sw.WriteLine($"internal sealed partial class {AttributeName} : Attribute"); sw.Write(indentString); sw.WriteLine('{'); sw.Write(indentString); sw.WriteLine(" private readonly string _annotation;"); sw.WriteLine(); sw.Write(indentString); - sw.WriteLine(" /// Initializes a new instance of the class."); + sw.WriteLine($" /// Initializes a new instance of the class."); sw.Write(indentString); sw.WriteLine(" /// The annotation that was used in the native declaration."); sw.Write(indentString); - sw.WriteLine(" public NativeAnnotationAttribute(string annotation)"); + sw.WriteLine($" public {AttributeName}(string annotation)"); sw.Write(indentString); sw.WriteLine(" {"); sw.Write(indentString); @@ -6817,7 +6817,6 @@ private void WithAttributes(NamedDecl namedDecl, bool onlySupportedOSPlatform = case CX_AttrKind_Annotate: { - _hasAnnotateAttr = true; var annotationText = attr.Spelling; outputBuilder.WriteCustomAttribute($"""NativeAnnotation("{annotationText}")"""); break;