Browse Source

Merge pull request #78220 from raulsntos/dotnet/reserved-assembly-name-3.x

[3.x] C#: Avoid GodotSharp as project assembly name
Rémi Verschelde 2 years ago
parent
commit
9ba9a41766

+ 1 - 6
doc/classes/VisibilityEnabler2D.xml

@@ -47,9 +47,6 @@
 		<member name="process_parent" type="bool" setter="set_enabler" getter="is_enabler_enabled" default="false">
 			If [code]true[/code], the parent's [method Node._process] will be stopped.
 		</member>
-		<member name="visibility_parent" type="bool" setter="set_enabler" getter="is_enabler_enabled" default="true">
-			If [code]true[/code] and the parent is a [CanvasItem], the parent will be hidden.
-		</member>
 	</members>
 	<constants>
 		<constant name="ENABLER_PAUSE_ANIMATIONS" value="0" enum="Enabler">
@@ -70,9 +67,7 @@
 		<constant name="ENABLER_PAUSE_ANIMATED_SPRITES" value="5" enum="Enabler">
 			This enabler will stop [AnimatedSprite] nodes animations.
 		</constant>
-		<constant name="ENABLER_PARENT_VISIBILITY" value="6" enum="Enabler">
-		</constant>
-		<constant name="ENABLER_MAX" value="7" enum="Enabler">
+		<constant name="ENABLER_MAX" value="6" enum="Enabler">
 			Represents the size of the [enum Enabler] enum.
 		</constant>
 	</constants>

+ 2 - 10
modules/mono/csharp_script.cpp

@@ -59,6 +59,7 @@
 #include "mono_gd/gd_mono_utils.h"
 #include "signal_awaiter_utils.h"
 #include "utils/macros.h"
+#include "utils/path_utils.h"
 #include "utils/string_utils.h"
 #include "utils/thread_local.h"
 
@@ -721,16 +722,7 @@ bool CSharpLanguage::is_assembly_reloading_needed() {
 
 	GDMonoAssembly *proj_assembly = gdmono->get_project_assembly();
 
-	String appname = ProjectSettings::get_singleton()->get("application/config/name");
-	String assembly_name = ProjectSettings::get_singleton()->get_setting("mono/project/assembly_name");
-
-	if (assembly_name.empty()) {
-		String appname_safe = OS::get_singleton()->get_safe_dir_name(appname);
-		if (appname_safe.empty()) {
-			appname_safe = "UnnamedProject";
-		}
-		assembly_name = appname_safe;
-	}
+	String assembly_name = path::get_csharp_project_name();
 
 	assembly_name += ".dll";
 

+ 6 - 0
modules/mono/editor/GodotTools/GodotTools.Core/StringExtensions.cs

@@ -77,6 +77,12 @@ namespace GodotTools.Core
             foreach (string invalidChar in invalidChars)
                 safeDirName = safeDirName.Replace(invalidChar, "-");
 
+            // Avoid reserved names that conflict with Godot assemblies
+            if (safeDirName == "GodotSharp" || safeDirName == "GodotSharpEditor")
+            {
+                safeDirName += "_";
+            }
+
             return safeDirName;
         }
     }

+ 2 - 7
modules/mono/godotsharp_dirs.cpp

@@ -44,6 +44,7 @@
 #endif
 
 #include "mono_gd/gd_mono.h"
+#include "utils/path_utils.h"
 
 namespace GodotSharpDirs {
 
@@ -149,15 +150,9 @@ private:
 		GLOBAL_DEF_RST("mono/project/solution_directory", "");
 		GLOBAL_DEF_RST("mono/project/c#_project_directory", "");
 
-		String appname = ProjectSettings::get_singleton()->get("application/config/name");
-		String appname_safe = OS::get_singleton()->get_safe_dir_name(appname);
-		if (appname_safe.empty()) {
-			appname_safe = "UnnamedProject";
-		}
-
 		project_assembly_name = ProjectSettings::get_singleton()->get("mono/project/assembly_name");
 		if (project_assembly_name.empty()) {
-			project_assembly_name = appname_safe;
+			project_assembly_name = path::get_csharp_project_name();
 			ProjectSettings::get_singleton()->set("mono/project/assembly_name", project_assembly_name);
 		}
 

+ 1 - 7
modules/mono/mono_gd/gd_mono.cpp

@@ -987,13 +987,7 @@ bool GDMono::_load_project_assembly() {
 	if (project_assembly)
 		return true;
 
-	String assembly_name = ProjectSettings::get_singleton()->get("mono/project/assembly_name");
-
-	if (assembly_name.empty()) {
-		String appname = ProjectSettings::get_singleton()->get("application/config/name");
-		String appname_safe = OS::get_singleton()->get_safe_dir_name(appname);
-		assembly_name = appname_safe;
-	}
+	String assembly_name = path::get_csharp_project_name();
 
 	bool success = load_assembly(assembly_name, &project_assembly);
 

+ 19 - 0
modules/mono/utils/path_utils.cpp

@@ -208,4 +208,23 @@ String relative_to(const String &p_path, const String &p_relative_to) {
 	return relative_to_impl(path_abs_norm, relative_to_abs_norm);
 }
 
+String get_csharp_project_name() {
+	String name = GLOBAL_GET("mono/project/assembly_name");
+	if (name.empty()) {
+		name = GLOBAL_GET("application/config/name");
+		name = OS::get_singleton()->get_safe_dir_name(name);
+	}
+
+	if (name.empty()) {
+		name = "UnnamedProject";
+	}
+
+	// Avoid reserved names that conflict with Godot assemblies.
+	if (name == "GodotSharp" || name == "GodotSharpEditor") {
+		name += "_";
+	}
+
+	return name;
+}
+
 } // namespace path

+ 2 - 0
modules/mono/utils/path_utils.h

@@ -59,6 +59,8 @@ String realpath(const String &p_path);
 
 String relative_to(const String &p_path, const String &p_relative_to);
 
+String get_csharp_project_name();
+
 } // namespace path
 
 #endif // MONO_PATH_UTILS_H

+ 0 - 24
scene/2d/visibility_notifier_2d.cpp

@@ -168,13 +168,6 @@ void VisibilityEnabler2D::_screen_enter() {
 	if (enabler[ENABLER_PARENT_PROCESS] && get_parent()) {
 		get_parent()->set_process(true);
 	}
-	if (enabler[ENABLER_PARENT_VISIBILITY] && get_parent()) {
-		CanvasItem *ci = Object::cast_to<CanvasItem>(get_parent());
-
-		if (ci) {
-			ci->set_visible(true);
-		}
-	}
 
 	visible = true;
 }
@@ -190,13 +183,6 @@ void VisibilityEnabler2D::_screen_exit() {
 	if (enabler[ENABLER_PARENT_PROCESS] && get_parent()) {
 		get_parent()->set_process(false);
 	}
-	if (enabler[ENABLER_PARENT_VISIBILITY] && get_parent()) {
-		CanvasItem *ci = Object::cast_to<CanvasItem>(get_parent());
-
-		if (ci) {
-			ci->set_visible(false);
-		}
-	}
 
 	visible = false;
 }
@@ -279,14 +265,6 @@ void VisibilityEnabler2D::_notification(int p_what) {
 			get_parent()->connect(SceneStringNames::get_singleton()->ready,
 					get_parent(), "set_process", varray(false), CONNECT_REFERENCE_COUNTED);
 		}
-		if (enabler[ENABLER_PARENT_VISIBILITY] && get_parent()) {
-			CanvasItem *ci = Object::cast_to<CanvasItem>(get_parent());
-
-			if (ci) {
-				ci->connect(SceneStringNames::get_singleton()->ready,
-						ci, "set_visible", varray(false), CONNECT_REFERENCE_COUNTED);
-			}
-		}
 	}
 
 	if (p_what == NOTIFICATION_EXIT_TREE) {
@@ -377,7 +355,6 @@ void VisibilityEnabler2D::_bind_methods() {
 	ADD_PROPERTYI(PropertyInfo(Variant::BOOL, "pause_animated_sprites"), "set_enabler", "is_enabler_enabled", ENABLER_PAUSE_ANIMATED_SPRITES);
 	ADD_PROPERTYI(PropertyInfo(Variant::BOOL, "process_parent"), "set_enabler", "is_enabler_enabled", ENABLER_PARENT_PROCESS);
 	ADD_PROPERTYI(PropertyInfo(Variant::BOOL, "physics_process_parent"), "set_enabler", "is_enabler_enabled", ENABLER_PARENT_PHYSICS_PROCESS);
-	ADD_PROPERTYI(PropertyInfo(Variant::BOOL, "visibility_parent"), "set_enabler", "is_enabler_enabled", ENABLER_PARENT_VISIBILITY);
 
 	BIND_ENUM_CONSTANT(ENABLER_PAUSE_ANIMATIONS);
 	BIND_ENUM_CONSTANT(ENABLER_FREEZE_BODIES);
@@ -385,7 +362,6 @@ void VisibilityEnabler2D::_bind_methods() {
 	BIND_ENUM_CONSTANT(ENABLER_PARENT_PROCESS);
 	BIND_ENUM_CONSTANT(ENABLER_PARENT_PHYSICS_PROCESS);
 	BIND_ENUM_CONSTANT(ENABLER_PAUSE_ANIMATED_SPRITES);
-	BIND_ENUM_CONSTANT(ENABLER_PARENT_VISIBILITY);
 	BIND_ENUM_CONSTANT(ENABLER_MAX);
 }
 

+ 0 - 1
scene/2d/visibility_notifier_2d.h

@@ -78,7 +78,6 @@ public:
 		ENABLER_PARENT_PROCESS,
 		ENABLER_PARENT_PHYSICS_PROCESS,
 		ENABLER_PAUSE_ANIMATED_SPRITES,
-		ENABLER_PARENT_VISIBILITY,
 		ENABLER_MAX
 	};