diff options
author | William Scalf <wscalf@gmail.com> | 2023-08-13 18:35:10 -0400 |
---|---|---|
committer | William Scalf <wscalf@gmail.com> | 2023-08-13 18:35:10 -0400 |
commit | 41cf94e8b61ee81fc0e682f2ee4ea2c6df893d37 (patch) | |
tree | df51a5d8f0f871b6d765c29f439cbde572ac2d9b /modules/mono/editor/Godot.NET.Sdk/Godot.SourceGenerators/ScriptPropertiesGenerator.cs | |
parent | 7ba79d68bd0f97797d7cb37452da6a036ba7c7c9 (diff) | |
download | redot-engine-41cf94e8b61ee81fc0e682f2ee4ea2c6df893d37.tar.gz |
Allow readonly and writeonly C# properties to be accessed from GDScript
Diffstat (limited to 'modules/mono/editor/Godot.NET.Sdk/Godot.SourceGenerators/ScriptPropertiesGenerator.cs')
-rw-r--r-- | modules/mono/editor/Godot.NET.Sdk/Godot.SourceGenerators/ScriptPropertiesGenerator.cs | 44 |
1 files changed, 25 insertions, 19 deletions
diff --git a/modules/mono/editor/Godot.NET.Sdk/Godot.SourceGenerators/ScriptPropertiesGenerator.cs b/modules/mono/editor/Godot.NET.Sdk/Godot.SourceGenerators/ScriptPropertiesGenerator.cs index 94d8696717..219ab7aa44 100644 --- a/modules/mono/editor/Godot.NET.Sdk/Godot.SourceGenerators/ScriptPropertiesGenerator.cs +++ b/modules/mono/editor/Godot.NET.Sdk/Godot.SourceGenerators/ScriptPropertiesGenerator.cs @@ -212,31 +212,37 @@ namespace Godot.SourceGenerators } // Generate GetGodotClassPropertyValue + bool allPropertiesAreWriteOnly = godotClassFields.Length == 0 && godotClassProperties.All(pi => pi.PropertySymbol.IsWriteOnly); - source.Append(" /// <inheritdoc/>\n"); - source.Append(" [global::System.ComponentModel.EditorBrowsable(global::System.ComponentModel.EditorBrowsableState.Never)]\n"); - source.Append(" protected override bool GetGodotClassPropertyValue(in godot_string_name name, "); - source.Append("out godot_variant value)\n {\n"); - - isFirstEntry = true; - foreach (var property in godotClassProperties) + if (!allPropertiesAreWriteOnly) { - GeneratePropertyGetter(property.PropertySymbol.Name, - property.PropertySymbol.Type, property.Type, source, isFirstEntry); - isFirstEntry = false; - } + source.Append(" /// <inheritdoc/>\n"); + source.Append(" [global::System.ComponentModel.EditorBrowsable(global::System.ComponentModel.EditorBrowsableState.Never)]\n"); + source.Append(" protected override bool GetGodotClassPropertyValue(in godot_string_name name, "); + source.Append("out godot_variant value)\n {\n"); - foreach (var field in godotClassFields) - { - GeneratePropertyGetter(field.FieldSymbol.Name, - field.FieldSymbol.Type, field.Type, source, isFirstEntry); - isFirstEntry = false; - } + isFirstEntry = true; + foreach (var property in godotClassProperties) + { + if (property.PropertySymbol.IsWriteOnly) + continue; - source.Append(" return base.GetGodotClassPropertyValue(name, out value);\n"); + GeneratePropertyGetter(property.PropertySymbol.Name, + property.PropertySymbol.Type, property.Type, source, isFirstEntry); + isFirstEntry = false; + } - source.Append(" }\n"); + foreach (var field in godotClassFields) + { + GeneratePropertyGetter(field.FieldSymbol.Name, + field.FieldSymbol.Type, field.Type, source, isFirstEntry); + isFirstEntry = false; + } + + source.Append(" return base.GetGodotClassPropertyValue(name, out value);\n"); + source.Append(" }\n"); + } // Generate GetGodotPropertyList const string dictionaryType = "global::System.Collections.Generic.List<global::Godot.Bridge.PropertyInfo>"; |