Skip to content

Static UFUNCTION name collision in generated bindings. #93

@geekrelief

Description

@geekrelief

In my case, I discovered a static function, name collision trying to bind MetasoundEngine.

In Engine\Plugins\Runtime\Metasound\Source\MetasoundEngine\Public\MetasoundSettings.h, there are two classes with UFUNCTION's of the same name.

UCLASS(Hidden)
class METASOUNDENGINE_API UMetaSoundQualityHelper : public UObject
{
	GENERATED_BODY()

public:
	/**
	* Returns a list of quality settings to present to a combobox
	* */
	UFUNCTION(meta = (DeprecatedFunction, DeprecationMessage = "Use UMetaSoundSettings::GetQualityNames instead"))
	static TArray<FName> GetQualityNames() { return { }; };
};
UCLASS(config = MetaSound, defaultconfig, meta = (DisplayName = "MetaSounds"))
class METASOUNDENGINE_API UMetaSoundSettings : public UDeveloperSettings
{
...
	/* Returns an array of quality setting names. Can be used to present to a combobox. Ex:
	 * UPROPERTY(... meta=(GetOptions="MetasoundEngine.MetaSoundSettings.GetQualityNames"))
	 * FName QualitySetting;
	*/
	UFUNCTION()
	static TArray<FName> GetQualityNames();
...
}

In this case one of the functions is deprecated, and there was another place where I got a collision but I didn't record where that happened. It'll probably happen quite a few times in the engine.

In the Nim generated bindings static functions aren't qualified. We need a way to deal with them automatically, e.g. log or display a message if there's a collision, modify the name of static functions to include the class name if they're in the same module, or resort to manual bindings so they can be renamed.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions