Skip to content

Commit

Permalink
Merge pull request #72205 from raulsntos/dotnet/proxy-class
Browse files Browse the repository at this point in the history
Fix lookup of C# types by their engine name
  • Loading branch information
akien-mga committed Jan 28, 2023
2 parents 092bbfc + 65d0d05 commit 80f59aa
Showing 1 changed file with 27 additions and 3 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -243,9 +243,33 @@ internal static void SetGodotObjectPtr(IntPtr gcHandlePtr, IntPtr newPtr)

if (wrapperType == null)
{
wrapperType = AppDomain.CurrentDomain.GetAssemblies()
.FirstOrDefault(a => a.GetName().Name == "GodotSharpEditor")?
.GetType("Godot." + nativeTypeNameStr);
wrapperType = GetTypeByGodotClassAttr(typeof(GodotObject).Assembly, nativeTypeNameStr);
}

if (wrapperType == null)
{
var editorAssembly = AppDomain.CurrentDomain.GetAssemblies()
.FirstOrDefault(a => a.GetName().Name == "GodotSharpEditor");
wrapperType = editorAssembly?.GetType("Godot." + nativeTypeNameStr);

if (wrapperType == null)
{
wrapperType = GetTypeByGodotClassAttr(editorAssembly, nativeTypeNameStr);
}
}

static Type? GetTypeByGodotClassAttr(Assembly assembly, string nativeTypeNameStr)
{
var types = assembly.GetTypes();
foreach (var type in types)
{
var attr = type.GetCustomAttribute<GodotClassNameAttribute>();
if (attr?.Name == nativeTypeNameStr)
{
return type;
}
}
return null;
}

static bool IsStatic(Type type) => type.IsAbstract && type.IsSealed;
Expand Down

0 comments on commit 80f59aa

Please sign in to comment.