{"record":{"id":"359c23900b6aa745","repo":"stride3d/stride","slug":"builder","errorCode":null,"errorMessage":"builder","messagePattern":"builder","errorType":"validation","errorClass":"ArgumentNullException","httpStatus":null,"severity":"error","filePath":"sources/shaders/Stride.Shaders.Effects/ShaderMixinManager.cs","lineNumber":33,"sourceCode":"        private static readonly Dictionary<string, IShaderMixinBuilder> RegisteredBuilders = new Dictionary<string, IShaderMixinBuilder>();\n\n        /// <summary>\n        /// Registers a <see cref=\"IShaderMixinBuilder\"/> with the specified sdfx effect name.\n        /// </summary>\n        /// <param name=\"sdfxEffectName\">Name of the mixin.</param>\n        /// <param name=\"builder\">The builder.</param>\n        /// <exception cref=\"System.ArgumentNullException\">\n        /// sdfxEffectName\n        /// or\n        /// builder\n        /// </exception>\n        public static void Register(string sdfxEffectName, IShaderMixinBuilder builder)\n        {\n            if (sdfxEffectName == null)\n                throw new ArgumentNullException(\"sdfxEffectName\");\n\n            if (builder == null)\n                throw new ArgumentNullException(\"builder\");\n\n            lock (RegisteredBuilders)\n            {\n                RegisteredBuilders[sdfxEffectName] = builder;\n            }\n        }\n\n        /// <summary>\n        /// Determines whether the specified PDXFX effect is registered.\n        /// </summary>\n        /// <param name=\"sdfxEffectName\">Name of the PDXFX effect.</param>\n        /// <returns><c>true</c> if the specified PDXFX effect is registered; otherwise, <c>false</c>.</returns>\n        /// <exception cref=\"System.ArgumentNullException\">sdfxEffectName</exception>\n        public static bool Contains(string sdfxEffectName)\n        {\n            if (sdfxEffectName == null) throw new ArgumentNullException(\"sdfxEffectName\");\n\n            var effectName = GetEffectName(sdfxEffectName);","sourceCodeStart":15,"sourceCodeEnd":51,"githubUrl":"https://github.com/stride3d/stride/blob/96fad776d210c221682aac1ccdf4c79dc046fc38/sources/shaders/Stride.Shaders.Effects/ShaderMixinManager.cs#L15-L51","documentation":"ShaderMixinManager.Register throws ArgumentNullException(\"builder\") when the IShaderMixinBuilder instance to register is null. The builder is what will generate the shader mixin for the registered effect name. Fail-fast guard preventing null entries in the global builder registry.","triggerScenarios":"Calling ShaderMixinManager.Register(name, null) — commonly when the builder is created via reflection/Activator and instantiation failed silently, or a DI container returned null.","commonSituations":"Plugin builder types that fail to instantiate; assemblies not loaded so type resolution returns null; factory methods returning null on unsupported platforms.","solutions":["Instantiate the builder before registering (e.g. new MyBuilder()) or fix the factory returning null","Verify the builder's assembly is loaded and the type is constructible","Check DI/activation logs for silent construction failures"],"exampleFix":"// before\nShaderMixinManager.Register(\"MyEffect\", CreateBuilder(type)); // may return null\n// after\nvar builder = CreateBuilder(type) ?? new MyEffect.Builder();\nShaderMixinManager.Register(\"MyEffect\", builder);","handlingStrategy":"validation","validationCode":"if (builder is null) throw new InvalidOperationException($\"Builder for '{sdfxEffectName}' failed to instantiate\");\nShaderMixinManager.Register(sdfxEffectName, builder);","typeGuard":"static bool IsValidBuilder(IShaderMixinBuilder b) => b != null;","tryCatchPattern":"try { ShaderMixinManager.Register(name, builder); }\ncatch (ArgumentNullException ex) when (ex.ParamName == \"builder\") { logger.LogError(ex, \"Builder for {Effect} is null; check instantiation\", name); throw; }","preventionTips":["Instantiate builders directly or verify factory results are non-null","Ensure builder assemblies are loaded before registration","Log DI/activation failures so silent nulls are caught early"],"tags":["csharp","null-argument","registration","shaders"],"backgroundTag":"null-argument","analyzedSha":"96fad776d210c221682aac1ccdf4c79dc046fc38","analyzedAt":"2026-09-14T02:59:31.279Z","contentChangedAt":"2026-09-14T02:59:31.279Z","schemaVersion":2},"datasetVersion":"2026-09-23T08:17:48.524Z"}