diff --git a/sources/ClangSharp.PInvokeGenerator/Extensions/StringExtensions.cs b/sources/ClangSharp.PInvokeGenerator/Extensions/StringExtensions.cs index a84497cf..3d13b023 100644 --- a/sources/ClangSharp.PInvokeGenerator/Extensions/StringExtensions.cs +++ b/sources/ClangSharp.PInvokeGenerator/Extensions/StringExtensions.cs @@ -1,6 +1,7 @@ // Copyright (c) .NET Foundation and Contributors. All Rights Reserved. Licensed under the MIT License (MIT). See License.md in the repository root for more information. using System; +using System.IO; using System.Runtime.InteropServices; using ClangSharp.Abstractions; @@ -16,6 +17,9 @@ public static string Unquote(this string str) public static string NormalizePath(this string str) => str.Replace('\\', '/').Replace("//", "/"); + public static string NormalizeFullPath(this string str) + => string.IsNullOrWhiteSpace(str) ? str : Path.GetFullPath(str).NormalizePath(); + public static string AsString(this AccessSpecifier value) => value switch { AccessSpecifier.Public => "public", AccessSpecifier.Protected => "protected", diff --git a/sources/ClangSharp.PInvokeGenerator/PInvokeGenerator.cs b/sources/ClangSharp.PInvokeGenerator/PInvokeGenerator.cs index 56ca0824..054ad18c 100644 --- a/sources/ClangSharp.PInvokeGenerator/PInvokeGenerator.cs +++ b/sources/ClangSharp.PInvokeGenerator/PInvokeGenerator.cs @@ -2934,17 +2934,9 @@ private string GetTypeName(Cursor? cursor, Cursor? context, Type rootType, Type { if (!_typeNames.TryGetValue((cursor, context, type), out var result)) { - result.typeName = type.AsString.NormalizePath(); - - if (result.typeName.Contains("unnamed struct at")) - { - result.typeName = result.typeName.Replace("unnamed struct at", "anonymous struct at"); - } - - if (result.typeName.Contains("unnamed union at")) - { - result.typeName = result.typeName.Replace("unnamed union at", "anonymous union at"); - } + result.typeName = type.AsString.NormalizePath() + .Replace("unnamed struct at", "anonymous struct at") + .Replace("unnamed union at", "anonymous union at"); result.nativeTypeName = result.typeName; @@ -4317,6 +4309,10 @@ bool IsIncludedFileOrLocation(Cursor cursor, CXFile file, CXSourceLocation locat { return true; } + else if (_config.TraversalNames.Contains(fileName.NormalizeFullPath(), equalityComparer)) + { + return true; + } else if (!_config.TraversalNames.Any() && location.IsFromMainFile) { return true; diff --git a/sources/ClangSharp.PInvokeGenerator/PInvokeGeneratorConfiguration.cs b/sources/ClangSharp.PInvokeGenerator/PInvokeGeneratorConfiguration.cs index 97c771bf..6424f3e4 100644 --- a/sources/ClangSharp.PInvokeGenerator/PInvokeGeneratorConfiguration.cs +++ b/sources/ClangSharp.PInvokeGenerator/PInvokeGeneratorConfiguration.cs @@ -311,6 +311,7 @@ public IReadOnlyCollection NativeTypeNamesToStrip init { AddRange(_nativeTypeNamesToStrip, value, StringExtensions.NormalizePath); + AddRange(_nativeTypeNamesToStrip, value, StringExtensions.NormalizeFullPath); } } @@ -362,6 +363,7 @@ public IReadOnlyCollection TraversalNames init { AddRange(_traversalNames, value, StringExtensions.NormalizePath); + AddRange(_traversalNames, value, StringExtensions.NormalizeFullPath); } }