(final StructuredContent start,
final List tokens, final int firstToken)
| 1186 | /// |
| 1187 | /// - `IllegalArgumentException` |
| 1188 | @SuppressWarnings("PMD.SwitchStmtsShouldHaveDefault") |
| 1189 | private StructuredContent apply(final StructuredContent start, |
| 1190 | final List tokens, final int firstToken) |
| 1191 | throws IllegalArgumentException { |
| 1192 | |
| 1193 | if (start == null) { |
| 1194 | return null; |
| 1195 | } |
| 1196 | |
| 1197 | final int nTokens = tokens.size(); |
| 1198 | if (firstToken >= nTokens) { |
| 1199 | return start; |
| 1200 | } |
| 1201 | boolean glob = false; |
| 1202 | for (int i = firstToken; i < nTokens; i++) { |
| 1203 | final String tok1 = (String) tokens.get(i); |
| 1204 | if (tok1.length() == 1 |
| 1205 | && ResultTokenizer.isDelimiter(tok1.charAt(0))) { |
| 1206 | continue; |
| 1207 | } |
| 1208 | if (tok1.length() == 2) { |
| 1209 | if (tok1.equals(SELECT_GLOB)) { |
| 1210 | glob = true; |
| 1211 | continue; |
| 1212 | } else if (tok1.equals(SELECT_PARENT)) { |
| 1213 | return apply(start.getParent(), tokens, i + 1); |
| 1214 | } |
| 1215 | } |
| 1216 | |
| 1217 | if (i + 1 >= nTokens) { |
| 1218 | return start; |
| 1219 | } |
| 1220 | final String tok2 = (String) tokens.get(i + 1); |
| 1221 | final char t2 = tok2.charAt(0); |
| 1222 | switch (t2) { |
| 1223 | case SEPARATOR: |
| 1224 | List children; |
| 1225 | if (glob) { |
| 1226 | children = start.getDescendants(tok1); |
| 1227 | } else { |
| 1228 | children = start.getChildren(tok1); |
| 1229 | } |
| 1230 | if (!children.isEmpty()) { |
| 1231 | return apply(new SubContent(children, start), |
| 1232 | tokens, i + 2); |
| 1233 | } |
| 1234 | return null; |
| 1235 | case ARRAY_START: |
| 1236 | if (i + 2 >= nTokens) { |
| 1237 | throw new IllegalArgumentException( |
| 1238 | "Syntax error: array must be followed by a dimension: " |
| 1239 | + tok1); |
| 1240 | } |
| 1241 | final String tok3 = (String) tokens.get(i + 2); |
| 1242 | |
| 1243 | Evaluator evaluator = EvaluatorFactory |
| 1244 | .createEvaluator(tok3); |
| 1245 |
no test coverage detected