package com.aptana.rdt.internal.parser.warnings; import org.jruby.ast.RescueBodyNode; import org.jruby.ast.RetryNode; import org.rubypeople.rdt.core.parser.warnings.RubyLintVisitor; import com.aptana.rdt.AptanaRDTPlugin; import com.aptana.rdt.IProblem; public class RetryOutsideRescueBodyChecker extends RubyLintVisitor { boolean insideRescue = false; public RetryOutsideRescueBodyChecker(String contents) { super(AptanaRDTPlugin.getDefault().getOptions(), contents); } @Override public Object visitRetryNode(RetryNode iVisited) { if (!insideRescue) { createProblem(iVisited.getPosition(), "'retry' will not be allowed outside a rescue block in Ruby 1.9"); } return super.visitRetryNode(iVisited); } @Override public Object visitRescueBodyNode(RescueBodyNode iVisited) { insideRescue = true; return super.visitRescueBodyNode(iVisited); } @Override public void exitRescueBodyNode(RescueBodyNode iVisited) { insideRescue = false; super.exitRescueBodyNode(iVisited); } @Override protected String getOptionKey() { return AptanaRDTPlugin.COMPILER_PB_RETRY_OUTSIDE_RESCUE; } @Override protected int getProblemID() { return IProblem.RetryOutsideRescueBody; } }