/*
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 * http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package org.apache.sling.resource.filter.api;

import org.apache.sling.resource.filter.impl.node.Node;

/**
 * An interface for visiting AST nodes
 *
 * @param <R>
 *            Return type of the visitor's method.
 * @param <A>
 *            Type of an optional parameter passed to the visitor's method.
 */
public interface Visitor<R> {

    R visit(Node abstractNode);

}
