1 package net.sourceforge.jenesis4java; 2 3 /* 4 * #%L 5 * Jenesis 4 Java Code Generator 6 * %% 7 * Copyright (C) 2000 - 2016 jenesis4java 8 * %% 9 * This program is free software: you can redistribute it and/or modify 10 * it under the terms of the GNU Lesser General Public License as 11 * published by the Free Software Foundation, either version 3 of the 12 * License, or (at your option) any later version. 13 * 14 * This program is distributed in the hope that it will be useful, 15 * but WITHOUT ANY WARRANTY; without even the implied warranty of 16 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 17 * GNU General Lesser Public License for more details. 18 * 19 * You should have received a copy of the GNU General Lesser Public 20 * License along with this program. If not, see 21 * <http://www.gnu.org/licenses/lgpl-3.0.html>. 22 * #L% 23 */ 24 25 /** 26 * Base implementation for a visitor that goes as deep as desired. 27 * <p> 28 * Traversal is done in pre-order. 29 */ 30 public abstract class ConditionalVisitor implements ReplacingVisitor { 31 32 @Override 33 public final Codeable visitReplace(Codeable current, Codeable parent) { 34 if (current != null) { 35 boolean traverseFurther = visit(current, parent); 36 if (traverseFurther) { 37 current.visit(this); 38 } 39 } 40 return current; 41 } 42 43 /** 44 * This method is called for each non-{@code null} Codeable. 45 * 46 * @param current 47 * The currently visited Codeable. This is never {@code null}. 48 * @param parent 49 * The parent of the visited Codeable. This is never {@code null} 50 * . 51 * @return {@code true}, if the visitor is to visit the children of the 52 * current node, {@code false}, if not. 53 */ 54 public abstract boolean visit(Codeable current, Codeable parent); 55 56 }