def visitOverride(self, ctx: OverrideParser.OverrideContext) -> Override: override_type = OverrideType.CHANGE children = ctx.getChildren() first_node = next(children) if isinstance(first_node, TerminalNodeImpl): symbol_text = first_node.symbol.text if symbol_text == "+": override_type = OverrideType.ADD key_node = next(children) if self.is_matching_terminal(key_node, OverrideLexer.PLUS): override_type = OverrideType.FORCE_ADD key_node = next(children) elif symbol_text == "~": override_type = OverrideType.DEL key_node = next(children) else: assert False else: key_node = first_node key = self.visitKey(key_node) value: Union[ChoiceSweep, RangeSweep, IntervalSweep, ParsedElementType] eq_node = next(children) if (override_type == OverrideType.DEL and isinstance(eq_node, TerminalNode) and eq_node.symbol.type == Token.EOF): value = None value_type = None else: assert self.is_matching_terminal(eq_node, OverrideLexer.EQUAL) if ctx.value() is None: value = "" value_type = ValueType.ELEMENT else: value = self.visitValue(ctx.value()) if isinstance(value, ChoiceSweep): if value.simple_form: value_type = ValueType.SIMPLE_CHOICE_SWEEP else: value_type = ValueType.CHOICE_SWEEP elif isinstance(value, Glob): value_type = ValueType.GLOB_CHOICE_SWEEP elif isinstance(value, IntervalSweep): value_type = ValueType.INTERVAL_SWEEP elif isinstance(value, RangeSweep): value_type = ValueType.RANGE_SWEEP else: value_type = ValueType.ELEMENT return Override( type=override_type, key_or_group=key.key_or_group, _value=value, value_type=value_type, package=key.package, )
def visitOverride(self, ctx: OverrideParser.OverrideContext) -> Override: override_type = OverrideType.CHANGE children = ctx.getChildren() first_node = next(children) if isinstance(first_node, TerminalNode): symbol_text = first_node.symbol.text if symbol_text == "+": override_type = OverrideType.ADD elif symbol_text == "~": override_type = OverrideType.DEL else: assert False key_node = next(children) else: key_node = first_node key = self.visitKey(key_node) eq_node = next(children) if ( override_type == OverrideType.DEL and isinstance(eq_node, TerminalNode) and eq_node.symbol.type == Token.EOF ): value = None value_type = None else: assert eq_node.symbol.text == "=" value_node = next(children) value = self.visitValue(value_node) if value_node.getChildCount() == 1: if isinstance( value_node.getChild(0), OverrideParser.ChoiceSweepContext ): value_type = ValueType.CHOICE_SWEEP else: value_type = ValueType.ELEMENT else: value_type = ValueType.ELEMENT return Override( type=override_type, key_or_group=key.key_or_group, _value=value, value_type=value_type, pkg1=key.pkg1, pkg2=key.pkg2, )