code: protected static void classifyJoinExpressions(Collection<AbstractExpression> exprList,
              Collection<String> outerTables, Collection<String> innerTables,
              List<AbstractExpression> outerList, List<AbstractExpression> innerList,
              List<AbstractExpression> innerOuterList, List<AbstractExpression> noneList)
      {
          HashSet<String> tableAliasSet = new HashSet<>();
          HashSet<String> outerSet = new HashSet<>(outerTables);
          HashSet<String> innerSet = new HashSet<>(innerTables);
          for (AbstractExpression expr : exprList) {
              tableAliasSet.clear();
              getTablesForExpression(expr, tableAliasSet);
              String tableAliases[] = tableAliasSet.toArray(new String[0]);
              if (tableAliasSet.isEmpty()) {
                  noneList.add(expr);
              } else {
                  boolean outer = false;
                  boolean inner = false;
                  for (String alias : tableAliases) {
                      outer = outer || outerSet.contains(alias);
                      inner = inner || innerSet.contains(alias);
                  }
                  if (outer && inner) {
                      innerOuterList.add(expr);
                  } else if (outer) {
                      outerList.add(expr);
                  } else if (inner) {
                      innerList.add(expr);
                  } else {
                      // can not be, right?
                      assert(false);
                  }
              }
          }
      }
docs: Split the input expression list into the three categories
  1. TVE expressions with outer tables only
  2. TVE expressions with inner tables only
  3. TVE expressions with inner and outer tables
  The outer tables are the tables reachable from the outer node of the join
  The inner tables are the tables reachable from the inner node of the join
  @param exprList expression list to split
  @param outerTables outer table
  @param innerTable outer table
  @param outerList expressions with outer table only
  @param innerList expressions with inner table only
  @param innerOuterList with inner and outer tables