/** * @since 2.14 */ protected int computeParamStackOffset(List<AbstractElement> currentState, List<Integer> paramStack) { int paramIndex = paramStack.size() - 1; if (!paramStack.isEmpty()) { for(AbstractElement abstractElement: currentState) { if (abstractElement instanceof RuleCall) { RuleCall call = (RuleCall) abstractElement; if (!call.getArguments().isEmpty()) { paramIndex--; } } } } return paramIndex; }
/** * @since 2.14 */ protected int setParamConfigAndUpdateOffset(FollowElementCalculator calculator, List<Integer> paramStack, int paramIndex, AbstractElement abstractElement) { if (paramIndex >= 0) { calculator.setParameterConfig(paramStack.get(paramIndex)); } else { calculator.setParameterConfig(0); } if (abstractElement instanceof RuleCall) { RuleCall call = (RuleCall) abstractElement; if (!call.getArguments().isEmpty()) { paramIndex++; } } return paramIndex; }
final List<NamedArgument> arguments = ruleCall.getArguments(); AbstractRule abstractRule = ruleCall.getRule(); boolean needsCurrent = passCurrentIntoFragment && GrammarUtil.isEObjectFragmentRule(abstractRule) && !GrammarUtil.isDatatypeRule((ParserRule) getOriginalElement(abstractRule));
@Override public Boolean caseRuleCall(RuleCall object) { if (!visitedRuleCalls.add(object)) return isOptional(object); acceptor.accept(object); Set<Parameter> oldConfig = currentConfig; try { if (!object.getArguments().isEmpty()) { currentConfig = ParameterConfigHelper.getAssignedArguments(object, getParameterValues(object)); } else { currentConfig = Collections.emptySet(); } Boolean result = doSwitch(object.getRule()) || isOptional(object); visitedRuleCalls.remove(object); return result; } finally { currentConfig = oldConfig; } }
protected boolean shouldUseParent(ICompositeNode result, int offset, ILeafNode leaf) { if (leaf.getTotalEndOffset() == offset) { return true; } if (result.getGrammarElement() instanceof RuleCall) { RuleCall rc = (RuleCall) result.getGrammarElement(); if (!rc.getArguments().isEmpty()) { return true; } Assignment assignment = GrammarUtil.containingAssignment(rc); if (assignment != null && (GrammarUtil.isMultipleCardinality(assignment) || (assignment.eContainer() instanceof AbstractElement && GrammarUtil .isMultipleCardinality((AbstractElement) assignment.eContainer())))) { return true; } } return false; }
/** * @since 2.14 */ protected String[][] getRequiredRuleNames(Param param, AbstractElement elementToParse) { if (elementToParse instanceof RuleCall) { RuleCall call = (RuleCall) elementToParse; if (call.getRule() instanceof ParserRule) { String antlrRuleName = ruleNames.getAntlrRuleName(call.getRule()); if (!call.getArguments().isEmpty()) { Set<Parameter> context = param.getAssignedParametes(); Set<Parameter> arguments = getAssignedArguments(call, context); int config = getParameterConfig(arguments); antlrRuleName = ruleNames.getAntlrRuleName(call.getRule(), config); } return new String[][] { { antlrRuleName } }; } } return EMPTY_ARRAY; }
AbstractElement first = group.getElements().get(0); AbstractElement result = getPredicatedElement(first); if (ruleCall.getArguments().isEmpty()) { return result;