/* * This file is part of JOP, the Java Optimized Processor * see <http://www.jopdesign.com/> * * Copyright (C) 2010, Stefan Hepp (stefan@stefant.org). * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ package com.jopdesign.common.graphutils; import com.jopdesign.common.AppInfo; import com.jopdesign.common.ClassInfo; /** * This is an interface for actions which are applied to one or more classes. * * <p>This does not really used to implement a visitor pattern, but in most cases we * do not need double dispatch. Instead, we use this interface for pre- and post-order traversal. * </p> * * @author Stefan Hepp (stefan@stefant.org) */ public interface ClassVisitor { /** * Visit a class before recursion. The concrete meaning of the return value depends on the used traverser. * * <p>For recursive traversers, returning false skips descending down for this class. For * other traversers such as {@link AppInfo#iterate(ClassVisitor)} returning false aborts * traversion.</p> * * @param classInfo the class to perform some acton on. * @return true to continue, false to abort iteration or recursion. */ boolean visitClass(ClassInfo classInfo); /** * Finish visiting a class. Called after all children have been visited, but only if * {@link #visitClass(ClassInfo)} has returned true. * * @param classInfo the class for which recursion is finished. */ void finishClass(ClassInfo classInfo); }