{"record":{"id":"4f15a179bc73084b","repo":"antlr/antlr4","slug":"not-yet-implemented","errorCode":null,"errorMessage":"Not yet implemented.","messagePattern":"Not yet implemented\\.","errorType":"exception","errorClass":"NotSupportedException","httpStatus":null,"severity":"error","filePath":"runtime/CSharp/src/Atn/ATNDeserializer.cs","lineNumber":834,"sourceCode":"                IList<Transition> optimizedTransitions = new List<Transition>();\n                for (int i_1 = 0; i_1 < decision.NumberOfOptimizedTransitions; i_1++)\n                {\n                    if (!setTransitions.Contains(i_1))\n                    {\n                        optimizedTransitions.Add(decision.GetOptimizedTransition(i_1));\n                    }\n                }\n                ATNState blockEndState = decision.GetOptimizedTransition(setTransitions.MinElement).target.GetOptimizedTransition(0).target;\n                IntervalSet matchSet = new IntervalSet();\n                for (int i_2 = 0; i_2 < setTransitions.GetIntervals().Count; i_2++)\n                {\n                    Interval interval = setTransitions.GetIntervals()[i_2];\n                    for (int j = interval.a; j <= interval.b; j++)\n                    {\n                        Transition matchTransition = decision.GetOptimizedTransition(j).target.GetOptimizedTransition(0);\n                        if (matchTransition is NotSetTransition)\n                        {\n                            throw new NotSupportedException(\"Not yet implemented.\");\n                        }\n                        else\n                        {\n                            matchSet.AddAll(matchTransition.Label);\n                        }\n                    }\n                }\n                Transition newTransition;\n                if (matchSet.GetIntervals().Count == 1)\n                {\n                    if (matchSet.Count == 1)\n                    {\n                        newTransition = new AtomTransition(blockEndState, matchSet.MinElement);\n                    }\n                    else\n                    {\n                        Interval matchInterval = matchSet.GetIntervals()[0];\n                        newTransition = new RangeTransition(blockEndState, matchInterval.a, matchInterval.b);","sourceCodeStart":816,"sourceCodeEnd":852,"githubUrl":"https://github.com/antlr/antlr4/blob/7d5770395bb7b02eb56e7c62662cb1d7c08f42a3/runtime/CSharp/src/Atn/ATNDeserializer.cs#L816-L852","documentation":"During ATN edge-factoring (set transition optimization), when a candidate set transition resolves through a NotSetTransition, the C# runtime cannot merge it and throws NotSupportedException('Not yet implemented.'). The equivalent Java code contains the same unimplemented branch, so hitting it means the optimizer encountered a ~ (not-set) transition shape it cannot factor.","triggerScenarios":"Deserializing an ATN (LexerInterpreter, ParserInterpreter, or generated code with optimization enabled) whose decision contains NotSet transitions participating in a factorable set — typically grammars using '~' token sets inside decisions, combined with edge optimization.","commonSituations":"Complex lexer rules with negated sets ('~[...])'; older serialized ATNs reprocessed by a runtime whose optimizer added this path; rare even with such grammars because the branch needs a specific state arrangement.","solutions":["Disable ATN optimization for deserialization (options with Optimize = false) so edge factoring is skipped","Regenerate the grammar with the matching tool/runtime version so serialized ATN matches optimizer expectations","If reproducible on the current release, report upstream — the branch is a known TODO"],"exampleFix":"// before\nvar options = ATNDeserializationOptions.Default; // optimize on\nnew ATNDeserializer(options).Deserialize(data);\n\n// after\nvar options = new ATNDeserializationOptions();\noptions.Optimize = false;\noptions.MakeReadOnly();\nnew ATNDeserializer(options).Deserialize(data);","handlingStrategy":"fallback","validationCode":"var opts = new ATNDeserializationOptions();\nopts.Optimize = false;\nopts.MakeReadOnly(); // avoids the unimplemented optimizer branch","typeGuard":null,"tryCatchPattern":"try { new ATNDeserializer(options).Deserialize(data); } catch (NotSupportedException e) { when (e.Message == \"Not yet implemented.\") { /* retry with Optimize=false */ } }","preventionTips":["If a grammar uses negated sets in decisions and you deserialize ATNs at runtime, keep optimization off","Report reproducible grammars upstream so the TODO gets implemented"],"tags":["antlr","atn","optimizer","csharp"],"backgroundTag":null,"analyzedSha":"7d5770395bb7b02eb56e7c62662cb1d7c08f42a3","analyzedAt":"2026-08-14T14:47:56.354Z","schemaVersion":2},"datasetVersion":"2026-08-15T22:17:37.221Z"}