1 /////////////////////////////////////////////////////////////////////////////////////////////// 2 // checkstyle: Checks Java source code and other text files for adherence to a set of rules. 3 // Copyright (C) 2001-2024 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 }