-
Notifications
You must be signed in to change notification settings - Fork 0
Open
Description
Описание проблемы
В классе RuleContext документирован инвариант, согласно которому корневые узлы должны иметь parent == null И invokingState == -1. Однако, в тестовом коде обнаружены случаи нарушения этого инварианта.
Документация утверждает
Из Javadoc класса RuleContext:
- Строка 42: "If parent is null, this should be -1"
- Строка 36: "The root node always has a null pointer and invokingState of -1"
Обнаруженные нарушения
Найдены случаи создания контекстов с parent == null, но invokingState != -1:
src/test/java/org/antlr/v4/test/tool/ExpectedTokensTest.java:163—new ParserRuleContext(null, 4)src/test/java/org/antlr/v4/test/tool/ExpectedTokensTest.java:170—new ParserRuleContext(null, 9)src/test/java/org/antlr/v4/runtime/tree/TreesTest.java:55—new TestParserRuleContext(null, 0, 0)src/test/java/org/antlr/v4/runtime/tree/TreesTest.java:170—new TestParserRuleContext(null, 0, 0)
Последствия
- Метод
isEmpty()(строки 95-97 в RuleContext.java) проверяет толькоinvokingState == -1, что может дать неправильный результат для контекстов сparent == nullиinvokingState != -1 - Отсутствует валидация в конструкторе, позволяющая создавать такие объекты, нарушающие инвариант
- Неясно, является ли это преднамеренной особенностью или багом
Необходимые действия
- Выяснить, почему тесты создают такие контексты и является ли это корректным поведением
- Если это баг в тестах — исправить тесты
- Если это преднамеренное поведение — обновить документацию и пересмотреть метод
isEmpty()для ясности его семантики - Рассмотреть добавление валидации в конструктор для обеспечения инварианта
Ссылки
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
No labels