private void resolveFirst(List<Expression> expressions, boolean allowParams) { List<PathPosition> currentPositions = pathPositions; List<PathPosition> newPositions = new ArrayList<>(); int positionsSize = currentPositions.size(); for (int j = 0; j < positionsSize; j++) { int size = expressions.size(); EXPRESSION_LOOP: for (int i = 0; i < size; i++) { PathPosition position = currentPositions.get(j).copy(); pathPositions = new ArrayList<>(); pathPositions.add(currentPosition = position); if (allowParams) { parametersAllowed = true; } expressions.get(i).accept(this); if (allowParams) { parametersAllowed = false; } // We just use the type of the first path position that we find for (PathPosition newPosition : pathPositions) { if (newPosition.getCurrentClass() != null) { newPositions.add(newPosition); break EXPRESSION_LOOP; } } } } currentPosition = null; pathPositions = newPositions; }
@Override public void visit(GeneralCaseExpression expression) { List<PathPosition> currentPositions = pathPositions; List<PathPosition> newPositions = new ArrayList<PathPosition>(); int positionsSize = currentPositions.size(); for (int j = 0; j < positionsSize; j++) { List<WhenClauseExpression> expressions = expression.getWhenClauses(); int size = expressions.size(); for (int i = 0; i < size; i++) { PathPosition position = currentPositions.get(j).copy(); pathPositions = new ArrayList<>(); pathPositions.add(currentPosition = position); expressions.get(i).accept(this); newPositions.addAll(pathPositions); } if (expression.getDefaultExpr() != null) { PathPosition position = currentPositions.get(j).copy(); pathPositions = new ArrayList<>(); pathPositions.add(currentPosition = position); expression.getDefaultExpr().accept(this); newPositions.addAll(pathPositions); } } currentPosition = null; pathPositions = newPositions; }
@Override public void visit(GeneralCaseExpression expression) { List<PathPosition> currentPositions = pathPositions; List<PathPosition> newPositions = new ArrayList<PathPosition>(); int positionsSize = currentPositions.size(); for (int j = 0; j < positionsSize; j++) { List<WhenClauseExpression> expressions = expression.getWhenClauses(); int size = expressions.size(); for (int i = 0; i < size; i++) { PathPosition position = currentPositions.get(j).copy(); pathPositions = new ArrayList<>(); pathPositions.add(currentPosition = position); expressions.get(i).accept(this); newPositions.addAll(pathPositions); } if (expression.getDefaultExpr() != null) { PathPosition position = currentPositions.get(j).copy(); pathPositions = new ArrayList<>(); pathPositions.add(currentPosition = position); expression.getDefaultExpr().accept(this); newPositions.addAll(pathPositions); } } currentPosition = null; pathPositions = newPositions; }
int size = expressions.size(); EXPRESSION_LOOP: for (int i = 0; i < size; i++) { PathPosition position = currentPositions.get(j).copy(); pathPositions = new ArrayList<>(); pathPositions.add(currentPosition = position); PathPosition position = currentPositions.get(j).copy(); pathPositions = new ArrayList<>(); pathPositions.add(currentPosition = position);