private static List<Time> getSubordinateTimes(Event event, Sentence sentence, JCas jCas) { List<Time> times = new ArrayList<Time>(); TreebankNode eventNode = selectMatchingLeaf(jCas, event); for (Time time : JCasUtil.selectCovered(jCas, Time.class, sentence)) { TreebankNode timeNode = selectHighestCoveredTreebankNode(jCas, time); if (eventNode != null && timeNode != null) { String path = noLeavesPath(TreebankNodeUtil.getPath(eventNode, timeNode)); if (SUBORDINATE_PATH_PATTERN.matcher(path).matches()) { times.add(time); } } } return times; } }