1 ///////////////////////////////////////////////////////////////////////////////////////////////
2 // checkstyle: Checks Java source code and other text files for adherence to a set of rules.
3 // Copyright (C) 2001-2025 the original author or authors.
4 //
5 // This library is free software; you can redistribute it and/or
6 // modify it under the terms of the GNU Lesser General Public
7 // License as published by the Free Software Foundation; either
8 // version 2.1 of the License, or (at your option) any later version.
9 //
10 // This library is distributed in the hope that it will be useful,
11 // but WITHOUT ANY WARRANTY; without even the implied warranty of
12 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13 // Lesser General Public License for more details.
14 //
15 // You should have received a copy of the GNU Lesser General Public
16 // License along with this library; if not, write to the Free Software
17 // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
18 ///////////////////////////////////////////////////////////////////////////////////////////////
19
20 package com.puppycrawl.tools.checkstyle.xpath.iterators;
21
22 import java.util.ArrayList;
23 import java.util.Collection;
24 import java.util.List;
25
26 import net.sf.saxon.om.NodeInfo;
27 import net.sf.saxon.tree.iter.AxisIterator;
28
29 /**
30 * Iterates list in backward direction.
31 */
32 public class ReverseListIterator implements AxisIterator {
33 /**
34 * List of nodes.
35 */
36 private final List<? extends NodeInfo> items;
37 /**
38 * Current index.
39 */
40 private int index;
41
42 /**
43 * Constructor for {@code ReverseListIterator} class.
44 *
45 * @param items the collection of nodes.
46 */
47 public ReverseListIterator(Collection<? extends NodeInfo> items) {
48 if (items == null) {
49 this.items = null;
50 index = -1;
51 }
52 else {
53 this.items = new ArrayList<>(items);
54 index = items.size() - 1;
55 }
56 }
57
58 /**
59 * Get the next item in the sequence.
60 *
61 * @return the next Item. If there are no more nodes, return null.
62 */
63 @Override
64 public NodeInfo next() {
65 final NodeInfo result;
66 if (index == -1) {
67 result = null;
68 }
69 else {
70 result = items.get(index);
71 index--;
72 }
73 return result;
74 }
75 }