/** * @param pattern * @return true if the pattern contains xbase check() or eval() expressions, false otherwise. */ public static boolean hasXBaseExpression(Pattern pattern) { final TreeIterator<EObject> eAllContents = pattern.eAllContents(); while (eAllContents.hasNext()) { if (eAllContents.next() instanceof XExpression) return true; } return false; }
/** Finds all patterns referenced from the given pattern. */ public static Set<Pattern> getReferencedPatterns(Pattern sourcePattern) { Set<Pattern> result = new HashSet<Pattern>(); TreeIterator<EObject> eAllContents = sourcePattern.eAllContents(); while (eAllContents.hasNext()) { EObject element = eAllContents.next(); if (element instanceof PatternCall) { PatternCall call = (PatternCall) element; final Pattern patternRef = call.getPatternRef(); if (patternRef != null) { result.add(patternRef); } } } return result; }
@Override public Map<PatternCall, Set<PatternCall>> get() { Map<PatternCall, Set<PatternCall>> graph = new HashMap<PatternCall, Set<PatternCall>>(); TreeIterator<EObject> resourceIterator = resource.getAllContents(); while (resourceIterator.hasNext()) { EObject resourceContent = resourceIterator.next(); if (resourceContent instanceof PatternCall) { PatternCall source = (PatternCall) resourceContent; Set<PatternCall> targets = new TreeSet<PatternCall>(patternCallComparator); graph.put(source, targets); TreeIterator<EObject> headIterator = source.getPatternRef().eAllContents(); while (headIterator.hasNext()) { EObject headContent = headIterator.next(); if (headContent instanceof PatternCall) { PatternCall target = (PatternCall) headContent; targets.add(target); } } } } return graph; } }