public List<Keyword> findKeywords(String... keywords) { Set<String> kwds = new HashSet<String>(Arrays.asList(keywords)); ArrayList<Keyword> r = new ArrayList<Keyword>(); for (AbstractRule ar : getRules()) { TreeIterator<EObject> i = ar.eAllContents(); while (i.hasNext()) { EObject o = i.next(); if (o instanceof Keyword) { Keyword k = (Keyword) o; if (kwds.contains(k.getValue())) r.add(k); } } } return r; }
public List<RuleCall> findRuleCalls(AbstractRule... rules) { Set<AbstractRule> rls = new HashSet<AbstractRule>(Arrays.asList(rules)); ArrayList<RuleCall> r = new ArrayList<RuleCall>(); for (AbstractRule ar : getRules()) { TreeIterator<EObject> i = ar.eAllContents(); while (i.hasNext()) { EObject o = i.next(); if (o instanceof RuleCall) { RuleCall c = (RuleCall) o; if (rls.contains(c.getRule())) r.add(c); } } } return r; }
EObject elementInNode = childNode.getGrammarElement(); if(elementInNode != null) { for(Iterator<EObject> i = ruleInGrammar.eAllContents(); i.hasNext();) { EObject nextInGrammar = i.next();
public List<Pair<Keyword, Keyword>> findKeywordPairs(String leftKw, String rightKw) { ArrayList<Pair<Keyword, Keyword>> pairs = new ArrayList<Pair<Keyword, Keyword>>(); for (AbstractRule ar : getRules()) if (ar instanceof ParserRule && !GrammarUtil.isDatatypeRule((ParserRule) ar)) { Stack<Keyword> openings = new Stack<Keyword>(); TreeIterator<EObject> i = ar.eAllContents(); while (i.hasNext()) { EObject o = i.next(); if (o instanceof Keyword) { Keyword k = (Keyword) o; if (leftKw.equals(k.getValue())) openings.push(k); else if (rightKw.equals(k.getValue())) { if (openings.size() > 0) pairs.add(Tuples.create(openings.pop(), k)); } } } } return pairs; }
@SuppressWarnings("unchecked") protected <T> List<T> findByNestedRuleCall(Class<T> clazz, AbstractRule... rule) { Set<AbstractRule> rls = new HashSet<AbstractRule>(Arrays.asList(rule)); ArrayList<T> r = new ArrayList<T>(); for (AbstractRule ar : getRules()) { TreeIterator<EObject> i = ar.eAllContents(); while (i.hasNext()) { EObject o = i.next(); if (clazz.isInstance(o)) { TreeIterator<EObject> ct = o.eAllContents(); while (ct.hasNext()) { EObject cto = ct.next(); if (cto instanceof RuleCall && rls.contains(((RuleCall) cto).getRule())) { r.add((T) o); break; } } i.prune(); } } } return r; }
/** * @return pair of rule calls this is extended version of * {@link org.eclipse.xtext.service.AbstractElementFinder#findKeywordPairs(String, String)} * @see org.eclipse.xtext.service.AbstractElementFinder#findKeywordPairs(String, String) */ private List<Pair<RuleCall, RuleCall>> findRulePairs(Grammar grammar, AbstractRule leftRule, AbstractRule rightRule) { ArrayList<Pair<RuleCall, RuleCall>> pairs = new ArrayList<>(); for (AbstractRule ar : GrammarUtil.allRules(grammar)) { if (ar instanceof ParserRule && !GrammarUtil.isDatatypeRule((ParserRule) ar)) { Stack<RuleCall> openings = new Stack<>(); TreeIterator<EObject> i = ar.eAllContents(); while (i.hasNext()) { EObject o = i.next(); if (o instanceof RuleCall) { RuleCall rc = (RuleCall) o; if (rc.getRule() == leftRule) { openings.push(rc); } else if (rc.getRule() == rightRule) { if (openings.size() > 0) { pairs.add(Tuples.create(openings.pop(), rc)); } } } } } } return pairs; }
protected Set<MatcherState> findRuleCallsTo(AbstractRule rule, Set<AbstractRule> visited) { if (!visited.add(rule)) return Collections.emptySet(); Set<MatcherState> result = Sets.newHashSet(); Iterator<EObject> i = rule.eAllContents(); while (i.hasNext()) { EObject obj = i.next(); if (obj instanceof AbstractElement) { MatcherState state = nfaProvider.getNFA((AbstractElement) obj); if (state.hasTransitions()) for (MatcherTransition incoming : state.getAllIncoming()) if (incoming.isRuleCall() && result.add(incoming.getSource()) && incoming.getSource().isEndState()) result.addAll(findRuleCallsTo( GrammarUtil.containingRule(incoming.getSource().getGrammarElement()), visited)); } } return result; }
public List<CrossReference> findCrossReferences(EClassifier... targetEClassifiers) { Set<EClassifier> classifiers = new HashSet<EClassifier>(Arrays.asList(targetEClassifiers)); Collection<EClass> classes = Lists.newArrayList(Iterables.filter(classifiers, EClass.class)); ArrayList<CrossReference> r = new ArrayList<CrossReference>(); for (AbstractRule ar : getRules()) { TreeIterator<EObject> i = ar.eAllContents(); while (i.hasNext()) { EObject o = i.next(); if (o instanceof CrossReference) { CrossReference c = (CrossReference) o; if (classifiers.contains(c.getType().getClassifier())) r.add(c); else if (c.getType().getClassifier() instanceof EClass) for (EClass cls : classes) if (EcoreUtil2.isAssignableFrom(cls,(EClass) c.getType().getClassifier())) { r.add(c); break; } i.prune(); } } } return r; }
protected boolean ruleContainsRecursiveUnassignedRuleCall(AbstractRule rule, Set<AbstractRule> visited) { if (!visited.add(rule)) return true; TreeIterator<EObject> i = rule.eAllContents(); while (i.hasNext()) { EObject o = i.next(); if (o instanceof Assignment) i.prune(); else if (o instanceof RuleCall && isParserRule(((RuleCall) o).getRule())) { if (ruleContainsRecursiveUnassignedRuleCall(((RuleCall) o).getRule(), visited)) return true; } } return false; }
protected boolean ruleContainsAssignedAction(AbstractRule rule, Set<AbstractRule> visited) { if (!visited.add(rule)) return false; TreeIterator<EObject> i = rule.eAllContents(); while (i.hasNext()) { EObject o = i.next(); if (o instanceof Action && ((Action) o).getFeature() != null) return true; else if (o instanceof Assignment) i.prune(); else if (o instanceof RuleCall && isParserRule(((RuleCall) o).getRule())) { if (ruleContainsAssignedAction(((RuleCall) o).getRule(), visited)) return true; } } return false; }
_builder.newLine(); Iterable<AbstractElement> _iterable = IteratorExtensions.<AbstractElement>toIterable(Iterators.<AbstractElement>filter(rule.eAllContents(), AbstractElement.class)); for(final AbstractElement element : _iterable) { _builder.append("\t"); _builder.newLineIfNotEmpty(); Iterable<AbstractElement> _iterable_1 = IteratorExtensions.<AbstractElement>toIterable(Iterators.<AbstractElement>filter(rule.eAllContents(), AbstractElement.class)); for(final AbstractElement element_1 : _iterable_1) { _builder.newLine(); _builder.newLine(); Iterable<AbstractElement> _iterable_2 = IteratorExtensions.<AbstractElement>toIterable(Iterators.<AbstractElement>filter(rule_1.eAllContents(), AbstractElement.class)); for(final AbstractElement element_2 : _iterable_2) { _builder.append("\t");