private void removeMatchedPattern(final TupleExpr tupleExpr, final StatementPattern pattern, final TupleExprReplacer replacer) { final List<TupleExpr> indexTuples = replacer.createReplacement(pattern); if (indexTuples.size() > 1) { final VarExchangeVisitor vev = new VarExchangeVisitor(pattern); tupleExpr.visit(vev); Join join = new Join(indexTuples.remove(0), indexTuples.remove(0)); for (final TupleExpr geo : indexTuples) { join = new Join(join, geo); } pattern.replaceWith(join); } else if (indexTuples.size() == 1) { pattern.replaceWith(indexTuples.get(0)); pattern.setParentNode(null); } else { throw new IllegalStateException("Must have at least one replacement for matched StatementPattern."); } }