/*******************************************************************************
 * Copyright (c) 2005, 2016 IBM Corporation and others.
 * All rights reserved. This program and the accompanying materials
 * are made available under the terms of the Eclipse Public License v1.0
 * which accompanies this distribution, and is available at
 * http://www.eclipse.org/legal/epl-v10.html
 *
 *******************************************************************************/
package org.eclipse.dltk.ruby.typeinference;

import org.eclipse.dltk.ast.ASTNode;
import org.eclipse.dltk.ast.ASTVisitor;
import org.eclipse.dltk.ast.declarations.MethodDeclaration;
import org.eclipse.dltk.ast.declarations.ModuleDeclaration;
import org.eclipse.dltk.ast.declarations.TypeDeclaration;
import org.eclipse.dltk.ast.expressions.Expression;
import org.eclipse.dltk.ast.statements.Block;
import org.eclipse.dltk.ast.statements.Statement;
import org.eclipse.dltk.ruby.ast.RubyBlock;

public class OffsetTargetedASTVisitor extends ASTVisitor {

	private final int requestedOffset;

	public OffsetTargetedASTVisitor(int requestedOffset) {
		this.requestedOffset = requestedOffset;
	}

	protected boolean interesting(ASTNode s) {
		// XXX AST offsets bug workaround
		if (s instanceof Block)
			return true;
		if (s.sourceStart() >= 0
				&& s.sourceEnd() > s.sourceStart()
				&& (requestedOffset < s.sourceStart() || requestedOffset >= s
						.sourceEnd()))
			return false;
		return true;
	}

	@Override
	public final boolean visit(MethodDeclaration s) {
		if (!interesting(s))
			return false;
		return visitInteresting(s);
	}

	protected boolean visitInteresting(MethodDeclaration s) {
		return visitGeneralInteresting(s);
	}

	@Override
	public final boolean visit(ModuleDeclaration s) {
		if (!interesting(s))
			return false;
		return visitInteresting(s);
	}

	protected boolean visitInteresting(ModuleDeclaration s) {
		return visitGeneralInteresting(s);
	}

	@Override
	public final boolean visit(TypeDeclaration s) throws Exception {
		if (!interesting(s))
			return false;
		return visitInteresting(s);
	}

	protected boolean visitInteresting(TypeDeclaration s) throws Exception {
		return visitGeneralInteresting(s);
	}

	@Override
	public final boolean visit(Expression s) throws Exception {
		if (!interesting(s))
			return false;
		return visitInteresting(s);
	}

	protected boolean visitInteresting(Expression s) {
		return visitGeneralInteresting(s);
	}

	@Override
	public final boolean visit(Statement s) throws Exception {
		if (!interesting(s))
			return false;
		return visitInteresting(s);
	}

	protected boolean visitInteresting(Statement s) {
		return visitGeneralInteresting(s);
	}

	protected boolean visitInteresting(RubyBlock b) {
		return true;
	}

	@Override
	public final boolean visitGeneral(ASTNode s) throws Exception {
		if (!interesting(s))
			return false;
		if (s instanceof RubyBlock) {
			return visitInteresting((RubyBlock) s);
		}
		return visitGeneralInteresting(s);
	}

	protected boolean visitGeneralInteresting(ASTNode s) {
		return true;
	}

}
