mirror of https://github.com/ppy/SDL3-CS.git
updated c# source generator to also take other SDL methods into account
This commit is contained in:
parent
5b0abdca7c
commit
1e78619716
|
|
@ -15,14 +15,43 @@ namespace SDL.SourceGeneration
|
||||||
{
|
{
|
||||||
public readonly Dictionary<string, List<GeneratedMethod>> Methods = new Dictionary<string, List<GeneratedMethod>>();
|
public readonly Dictionary<string, List<GeneratedMethod>> Methods = new Dictionary<string, List<GeneratedMethod>>();
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Checks whether the method is from any SDL library.
|
||||||
|
/// It identifies those by checking if the method has a DllImport attribute for a library starting with "SDL".
|
||||||
|
/// </summary>
|
||||||
|
private static bool IsMethodFromSDL(MethodDeclarationSyntax methodNode)
|
||||||
|
{
|
||||||
|
if (methodNode.AttributeLists.Count == 0)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
foreach (var attributeList in methodNode.AttributeLists)
|
||||||
|
{
|
||||||
|
foreach (var attribute in attributeList.Attributes)
|
||||||
|
{
|
||||||
|
if (attribute.Name.ToString() != "DllImport") continue;
|
||||||
|
if (attribute.ArgumentList == null || attribute.ArgumentList.Arguments.Count <= 0) continue; // this should never happen, but rather continue than throw
|
||||||
|
|
||||||
|
var libraryNameArgument = attribute.ArgumentList.Arguments[0];
|
||||||
|
|
||||||
|
if (libraryNameArgument.Expression is LiteralExpressionSyntax literal &&
|
||||||
|
literal.Token.ValueText.StartsWith("SDL", StringComparison.Ordinal))
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
public void OnVisitSyntaxNode(SyntaxNode syntaxNode)
|
public void OnVisitSyntaxNode(SyntaxNode syntaxNode)
|
||||||
{
|
{
|
||||||
if (syntaxNode is MethodDeclarationSyntax method)
|
if (syntaxNode is MethodDeclarationSyntax method)
|
||||||
{
|
{
|
||||||
string name = method.Identifier.ValueText;
|
string name = method.Identifier.ValueText;
|
||||||
bool isUnsafe = name.StartsWith($"{Helper.UnsafePrefix}SDL_", StringComparison.Ordinal);
|
bool isUnsafe = name.StartsWith($"{Helper.UnsafePrefix}", StringComparison.Ordinal);
|
||||||
|
|
||||||
if (!name.StartsWith("SDL_", StringComparison.Ordinal) && !isUnsafe)
|
if (!IsMethodFromSDL(method) && !isUnsafe)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (method.ParameterList.Parameters.Any(p => p.Identifier.IsKind(SyntaxKind.ArgListKeyword)))
|
if (method.ParameterList.Parameters.Any(p => p.Identifier.IsKind(SyntaxKind.ArgListKeyword)))
|
||||||
|
|
|
||||||
|
|
@ -28,7 +28,6 @@ using System.Runtime.InteropServices;
|
||||||
|
|
||||||
namespace SDL
|
namespace SDL
|
||||||
{
|
{
|
||||||
[NativeTypeName("int")]
|
|
||||||
public enum SDL_AudioFormat : uint
|
public enum SDL_AudioFormat : uint
|
||||||
{
|
{
|
||||||
SDL_AUDIO_UNKNOWN = 0x0000U,
|
SDL_AUDIO_UNKNOWN = 0x0000U,
|
||||||
|
|
|
||||||
|
|
@ -89,7 +89,6 @@ namespace SDL
|
||||||
SDL_PACKEDLAYOUT_1010102,
|
SDL_PACKEDLAYOUT_1010102,
|
||||||
}
|
}
|
||||||
|
|
||||||
[NativeTypeName("int")]
|
|
||||||
public enum SDL_PixelFormat : uint
|
public enum SDL_PixelFormat : uint
|
||||||
{
|
{
|
||||||
SDL_PIXELFORMAT_UNKNOWN = 0,
|
SDL_PIXELFORMAT_UNKNOWN = 0,
|
||||||
|
|
@ -240,7 +239,6 @@ namespace SDL
|
||||||
SDL_CHROMA_LOCATION_TOPLEFT = 3,
|
SDL_CHROMA_LOCATION_TOPLEFT = 3,
|
||||||
}
|
}
|
||||||
|
|
||||||
[NativeTypeName("int")]
|
|
||||||
public enum SDL_Colorspace : uint
|
public enum SDL_Colorspace : uint
|
||||||
{
|
{
|
||||||
SDL_COLORSPACE_UNKNOWN = 0,
|
SDL_COLORSPACE_UNKNOWN = 0,
|
||||||
|
|
|
||||||
|
|
@ -265,7 +265,6 @@ base_command = [
|
||||||
"--include-directory", repository_root / SDL_lib_include_root["SDL3"],
|
"--include-directory", repository_root / SDL_lib_include_root["SDL3"],
|
||||||
"--include-directory", repository_root / SDL_lib_include_root["SDL3_image"],
|
"--include-directory", repository_root / SDL_lib_include_root["SDL3_image"],
|
||||||
"--include-directory", repository_root / SDL_lib_include_root["SDL3_ttf"],
|
"--include-directory", repository_root / SDL_lib_include_root["SDL3_ttf"],
|
||||||
# "--libraryPath", "SDL3",
|
|
||||||
"--methodClassName", "SDL3",
|
"--methodClassName", "SDL3",
|
||||||
"--namespace", "SDL",
|
"--namespace", "SDL",
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue