/*=============================================================================#
 # Copyright (c) 2007, 2019 Stephan Wahlbrink and others.
 # 
 # This program and the accompanying materials are made available under the
 # terms of the Eclipse Public License 2.0 which is available at
 # https://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0
 # which is available at https://www.apache.org/licenses/LICENSE-2.0.
 # 
 # SPDX-License-Identifier: EPL-2.0 OR Apache-2.0
 # 
 # Contributors:
 #     Stephan Wahlbrink <sw@wahlbrink.eu> - initial API and implementation
 #=============================================================================*/

package org.eclipse.statet.r.core.rsource.ast;

import java.lang.reflect.InvocationTargetException;


/**
 * No intended to implement. It can be used to test which methods RAstVisitor are implemented.
 */
public interface IRAstVisitorTest {
	
	public void visit(SourceComponent node) throws InvocationTargetException;
	
	public void visit(Block node) throws InvocationTargetException;
	
	public void visit(Group node) throws InvocationTargetException;
	
	public void visit(CIfElse node) throws InvocationTargetException;
	
	public void visit(CForLoop node) throws InvocationTargetException;
	
	public void visit(CRepeatLoop node) throws InvocationTargetException;
	
	public void visit(CWhileLoop node) throws InvocationTargetException;
	
	public void visit(CLoopCommand node) throws InvocationTargetException;
	
	public void visit(FCall node) throws InvocationTargetException;
	
	public void visit(FCall.Args node) throws InvocationTargetException;
	
	public void visit(FCall.Arg node) throws InvocationTargetException;
	
	public void visit(FDef node) throws InvocationTargetException;
	
	public void visit(FDef.Args node) throws InvocationTargetException;
	
	public void visit(FDef.Arg node) throws InvocationTargetException;
	
	public void visit(Assignment node) throws InvocationTargetException;
	
	public void visit(Model node) throws InvocationTargetException;
	
	public void visit(Relational node) throws InvocationTargetException;
	
	public void visit(Logical node) throws InvocationTargetException;
	
	public void visit(Arithmetic node) throws InvocationTargetException;
	
	public void visit(Power node) throws InvocationTargetException;
	
	public void visit(Seq node) throws InvocationTargetException;
	
	public void visit(Special node) throws InvocationTargetException;
	
	public void visit(Sign node) throws InvocationTargetException;
	
	public void visit(SubIndexed node) throws InvocationTargetException;
	
	public void visit(SubIndexed.Args node) throws InvocationTargetException;
	
	public void visit(SubIndexed.Arg node) throws InvocationTargetException;
	
	public void visit(SubNamed node) throws InvocationTargetException;
	
	public void visit(NSGet node) throws InvocationTargetException;
	
	public void visit(StringConst node) throws InvocationTargetException;
	
	public void visit(NumberConst node) throws InvocationTargetException;
	
	public void visit(NullConst node) throws InvocationTargetException;
	
	public void visit(Symbol node) throws InvocationTargetException;
	
	public void visit(Help node) throws InvocationTargetException;
	
	public void visit(Dummy node) throws InvocationTargetException;
	
}
