C#: Avoid generic types in the script path attribute generator
- Avoid generic types in `ScriptPathAttributeGenerator`, this means they won't be added to the `[AssemblyHasScripts]` attribute and a `[ScriptPath]` attribute won't be added to the class. Since generic classes can't be used as scripts they shouldn't use those attributes, this also makes CSharpScript consider those types invalid since they won't be added to the script/type map. - Avoid generic types in `ScriptManagerBridge.LookupScriptsInAssembly`. - Set `outMethodsDest` in `ScriptManagerBridge.UpdateScriptClassInfo`.
This commit is contained in:
parent
f7cf9fb148
commit
a43e8285a7
2 changed files with 12 additions and 7 deletions
|
@ -45,8 +45,11 @@ namespace Godot.SourceGenerators
|
|||
return false;
|
||||
})
|
||||
)
|
||||
// Ignore classes whose name is not the same as the file name
|
||||
.Where(x => Path.GetFileNameWithoutExtension(x.cds.SyntaxTree.FilePath) == x.symbol.Name)
|
||||
.Where(x =>
|
||||
// Ignore classes whose name is not the same as the file name
|
||||
Path.GetFileNameWithoutExtension(x.cds.SyntaxTree.FilePath) == x.symbol.Name &&
|
||||
// Ignore generic classes
|
||||
!x.symbol.IsGenericType)
|
||||
.GroupBy(x => x.symbol)
|
||||
.ToDictionary(g => g.Key, g => g.Select(x => x.cds));
|
||||
|
||||
|
@ -150,8 +153,6 @@ namespace Godot.SourceGenerators
|
|||
first = false;
|
||||
sourceBuilder.Append("typeof(");
|
||||
sourceBuilder.Append(qualifiedName);
|
||||
if (godotClass.Key.IsGenericType)
|
||||
sourceBuilder.Append($"<{new string(',', godotClass.Key.TypeParameters.Count() - 1)}>");
|
||||
sourceBuilder.Append(")");
|
||||
}
|
||||
|
||||
|
|
|
@ -297,7 +297,7 @@ namespace Godot.Bridge
|
|||
|
||||
foreach (var type in assembly.GetTypes())
|
||||
{
|
||||
if (type.IsNested)
|
||||
if (type.IsNested || type.IsGenericType)
|
||||
continue;
|
||||
|
||||
if (!typeOfGodotObject.IsAssignableFrom(type))
|
||||
|
@ -314,9 +314,12 @@ namespace Godot.Bridge
|
|||
|
||||
if (scriptTypes != null)
|
||||
{
|
||||
for (int i = 0; i < scriptTypes.Length; i++)
|
||||
foreach (var type in scriptTypes)
|
||||
{
|
||||
LookupScriptForClass(scriptTypes[i]);
|
||||
if (type.IsGenericType)
|
||||
continue;
|
||||
|
||||
LookupScriptForClass(type);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -729,6 +732,7 @@ namespace Godot.Bridge
|
|||
{
|
||||
ExceptionUtils.LogException(e);
|
||||
*outTool = godot_bool.False;
|
||||
*outMethodsDest = NativeFuncs.godotsharp_array_new();
|
||||
*outRpcFunctionsDest = NativeFuncs.godotsharp_dictionary_new();
|
||||
*outEventSignalsDest = NativeFuncs.godotsharp_dictionary_new();
|
||||
*outBaseScript = default;
|
||||
|
|
Loading…
Reference in a new issue