Merge pull request #44515 from eddsanity/master

Fixed #42149: bug where the default C# script template would sometimes produce an invalid class name
This commit is contained in:
Rémi Verschelde 2020-12-27 21:40:30 +01:00 committed by GitHub
commit 4425f7c2c1
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23

View file

@ -346,14 +346,18 @@ Ref<Script> CSharpLanguage::get_template(const String &p_class_name, const Strin
"// }\n"
"}\n";
String base_class_name = get_base_class_name(p_base_class_name, p_class_name);
// Replaces all spaces in p_class_name with underscores to prevent
// erronous C# Script templates from being generated when the object name
// has spaces in it.
String class_name_no_spaces = p_class_name.replace(" ", "_");
String base_class_name = get_base_class_name(p_base_class_name, class_name_no_spaces);
script_template = script_template.replace("%BASE%", base_class_name)
.replace("%CLASS%", p_class_name);
.replace("%CLASS%", class_name_no_spaces);
Ref<CSharpScript> script;
script.instance();
script->set_source_code(script_template);
script->set_name(p_class_name);
script->set_name(class_name_no_spaces);
return script;
}
@ -364,9 +368,10 @@ bool CSharpLanguage::is_using_templates() {
void CSharpLanguage::make_template(const String &p_class_name, const String &p_base_class_name, Ref<Script> &p_script) {
String src = p_script->get_source_code();
String base_class_name = get_base_class_name(p_base_class_name, p_class_name);
String class_name_no_spaces = p_class_name.replace(" ", "_");
String base_class_name = get_base_class_name(p_base_class_name, class_name_no_spaces);
src = src.replace("%BASE%", base_class_name)
.replace("%CLASS%", p_class_name)
.replace("%CLASS%", class_name_no_spaces)
.replace("%TS%", _get_indentation());
p_script->set_source_code(src);
}