Add support for custom types/members attributes parsing in scripting bindings

This commit is contained in:
Wojciech Figat
2022-10-10 14:38:54 +02:00
parent 5faa11e0a2
commit 7924a62db6
2 changed files with 45 additions and 3 deletions

View File

@@ -130,7 +130,7 @@ namespace Flax.Build.Bindings
return context.StringCache.ToArray();
}
private struct TagParameter
public struct TagParameter
{
public string Tag;
public string Value;
@@ -338,7 +338,12 @@ namespace Flax.Build.Bindings
currentParam.Attributes = tag.Value;
break;
default:
Log.Warning($"Unknown or not supported tag parameter {tag} used on {"function parameter"} at line {context.Tokenizer.CurrentLine}");
bool valid = false;
ParseFunctionParameterTag?.Invoke(ref valid, tag, ref currentParam);
if (valid)
break;
var location = "function parameter";
Log.Warning($"Unknown or not supported tag parameter {tag} used on {location} at line {context.Tokenizer.CurrentLine}");
break;
}
}
@@ -597,6 +602,10 @@ namespace Flax.Build.Bindings
desc.Namespace = tag.Value;
break;
default:
bool valid = false;
ParseTypeTag?.Invoke(ref valid, tag, desc);
if (valid)
break;
Log.Warning($"Unknown or not supported tag parameter {tag} used on {desc.Name} at line {context.Tokenizer.CurrentLine}");
break;
}
@@ -678,6 +687,10 @@ namespace Flax.Build.Bindings
desc.Namespace = tag.Value;
break;
default:
bool valid = false;
ParseTypeTag?.Invoke(ref valid, tag, desc);
if (valid)
break;
Log.Warning($"Unknown or not supported tag parameter {tag} used on {desc.Name} at line {context.Tokenizer.CurrentLine}");
break;
}
@@ -805,6 +818,10 @@ namespace Flax.Build.Bindings
desc.IsHidden = true;
break;
default:
bool valid = false;
ParseMemberTag?.Invoke(ref valid, tag, desc);
if (valid)
break;
Log.Warning($"Unknown or not supported tag parameter {tag} used on {desc.Name} at line {context.Tokenizer.CurrentLine}");
break;
}
@@ -1062,6 +1079,10 @@ namespace Flax.Build.Bindings
desc.Namespace = tag.Value;
break;
default:
bool valid = false;
ParseTypeTag?.Invoke(ref valid, tag, desc);
if (valid)
break;
Log.Warning($"Unknown or not supported tag parameter {tag} used on {desc.Name} at line {context.Tokenizer.CurrentLine}");
break;
}
@@ -1129,6 +1150,10 @@ namespace Flax.Build.Bindings
desc.Namespace = tag.Value;
break;
default:
bool valid = false;
ParseTypeTag?.Invoke(ref valid, tag, desc);
if (valid)
break;
Log.Warning($"Unknown or not supported tag parameter {tag} used on {desc.Name} at line {context.Tokenizer.CurrentLine}");
break;
}
@@ -1252,6 +1277,10 @@ namespace Flax.Build.Bindings
desc.NoArray = true;
break;
default:
bool valid = false;
ParseMemberTag?.Invoke(ref valid, tag, desc);
if (valid)
break;
Log.Warning($"Unknown or not supported tag parameter {tag} used on {desc.Name} at line {context.Tokenizer.CurrentLine}");
break;
}
@@ -1314,6 +1343,10 @@ namespace Flax.Build.Bindings
desc.IsHidden = true;
break;
default:
bool valid = false;
ParseMemberTag?.Invoke(ref valid, tag, desc);
if (valid)
break;
Log.Warning($"Unknown or not supported tag parameter {tag} used on {desc.Name} at line {context.Tokenizer.CurrentLine}");
break;
}
@@ -1379,6 +1412,10 @@ namespace Flax.Build.Bindings
desc.Namespace = tag.Value;
break;
default:
bool valid = false;
ParseTypeTag?.Invoke(ref valid, tag, desc);
if (valid)
break;
Log.Warning($"Unknown or not supported tag parameter {tag} used on {desc.Name} at line {context.Tokenizer.CurrentLine}");
break;
}

View File

@@ -43,11 +43,16 @@ namespace Flax.Build.Bindings
}
public delegate void GenerateModuleBindingsDelegate(BuildData buildData, IGrouping<string, Module> binaryModule);
public delegate void GenerateBinaryModuleBindingsDelegate(BuildData buildData, ModuleInfo moduleInfo, ref BindingsResult bindings);
public delegate void ParseTypeTagDelegate(ref bool valid, TagParameter tag, ApiTypeInfo typeInfo);
public delegate void ParseMemberTagDelegate(ref bool valid, TagParameter tag, MemberInfo memberInfo);
public delegate void ParseFunctionParameterTagDelegate(ref bool valid, TagParameter tag, ref FunctionInfo.ParameterInfo parameterInfo);
public static event GenerateModuleBindingsDelegate GenerateModuleBindings;
public static event GenerateBinaryModuleBindingsDelegate GenerateBinaryModuleBindings;
public static event ParseTypeTagDelegate ParseTypeTag;
public static event ParseMemberTagDelegate ParseMemberTag;
public static event ParseFunctionParameterTagDelegate ParseFunctionParameterTag;
public static ModuleInfo CurrentModule;
public static ModuleInfo ParseModule(BuildData buildData, Module module, BuildOptions moduleOptions = null)