Skip to content
Prev Previous commit
Next Next commit
[wasm] PInvokeTableGenerator: don't fail on errors in reading custom …
…attributes

Inspired by https://devdiv.visualstudio.com/DevDiv/_workitems/edit/1364890?src=WorkItemMention&src-action=artifact_link

Works around a NRE in CustomAttributeData.AttributeType because it's
ConstructorInfo is null.
The mono side issue: mono/mono#15340
  • Loading branch information
radical committed Dec 14, 2021
commit 0bff3bb81468af304cc975fb3bbea4f9da8b80b4
16 changes: 15 additions & 1 deletion src/tasks/WasmAppBuilder/PInvokeTableGenerator.cs
Original file line number Diff line number Diff line change
Expand Up @@ -88,7 +88,21 @@ public void GenPInvokeTable(string[] pinvokeModules, string[] assemblies)

private void CollectPInvokes(List<PInvoke> pinvokes, List<PInvokeCallback> callbacks, Type type)
{
foreach (var method in type.GetMethods(BindingFlags.DeclaredOnly|BindingFlags.Public|BindingFlags.NonPublic|BindingFlags.Static|BindingFlags.Instance)) {
foreach (var method in type.GetMethods(BindingFlags.DeclaredOnly|BindingFlags.Public|BindingFlags.NonPublic|BindingFlags.Static|BindingFlags.Instance))
{
try
{
CollectPInvokesForMethod(method);
}
catch (Exception ex)
{
Log.LogMessage(MessageImportance.Low, $"Could not get pinvoke, or callbacks for method {method.Name}: {ex}");
continue;
}
}

void CollectPInvokesForMethod(MethodInfo method)
{
if ((method.Attributes & MethodAttributes.PinvokeImpl) != 0)
{
var dllimport = method.CustomAttributes.First(attr => attr.AttributeType.Name == "DllImportAttribute");
Expand Down