/* * Copyright (C) 2008 JĂșlio Vilmar Gesser. * Copyright (C) 2012 Mozilla Foundation * * This file is part of Java 1.5 parser and Abstract Syntax Tree. * * Java 1.5 parser and Abstract Syntax Tree is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * Java 1.5 parser and Abstract Syntax Tree 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 Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with Java 1.5 parser and Abstract Syntax Tree. If not, see <http://www.gnu.org/licenses/>. */ /* * Created on 09/06/2008 */ package nu.validator.htmlparser.rusttranslate; import japa.parser.ast.stmt.AssertStmt; import japa.parser.ast.stmt.BlockStmt; import japa.parser.ast.stmt.BreakStmt; import japa.parser.ast.stmt.CatchClause; import japa.parser.ast.stmt.ContinueStmt; import japa.parser.ast.stmt.DoStmt; import japa.parser.ast.stmt.EmptyStmt; import japa.parser.ast.stmt.ExplicitConstructorInvocationStmt; import japa.parser.ast.stmt.ExpressionStmt; import japa.parser.ast.stmt.ForStmt; import japa.parser.ast.stmt.ForeachStmt; import japa.parser.ast.stmt.IfStmt; import japa.parser.ast.stmt.LabeledStmt; import japa.parser.ast.stmt.ReturnStmt; import japa.parser.ast.stmt.Statement; import japa.parser.ast.stmt.SwitchEntryStmt; import japa.parser.ast.stmt.SwitchStmt; import japa.parser.ast.stmt.SynchronizedStmt; import japa.parser.ast.stmt.ThrowStmt; import japa.parser.ast.stmt.TryStmt; import japa.parser.ast.stmt.TypeDeclarationStmt; import japa.parser.ast.stmt.WhileStmt; import japa.parser.ast.type.WildcardType; import japa.parser.ast.visitor.GenericVisitorAdapter; import java.util.List; /** * @author Julio Vilmar Gesser * @author Henri Sivonen */ public class LoopBreakAnalyzerVisitor extends GenericVisitorAdapter<Boolean, Boolean> { public Boolean visit(AssertStmt n, Boolean arg) { return false; } public Boolean visit(BlockStmt n, Boolean arg) { for (Statement stmt : n.getStmts()) { if (stmt.accept(this, arg)) { return true; } } return false; } public Boolean visit(BreakStmt n, Boolean arg) { return n.getId() != null; } public Boolean visit(CatchClause n, Boolean arg) { return n.getCatchBlock().accept(this, arg); } public Boolean visit(ContinueStmt n, Boolean arg) { return false; } public Boolean visit(DoStmt n, Boolean arg) { return n.getBody().accept(this, arg); } public Boolean visit(EmptyStmt n, Boolean arg) { return false; } public Boolean visit(ExplicitConstructorInvocationStmt n, Boolean arg) { return false; } public Boolean visit(ExpressionStmt n, Boolean arg) { return false; } public Boolean visit(ForeachStmt n, Boolean arg) { return n.getBody().accept(this, arg); } public Boolean visit(ForStmt n, Boolean arg) { //bogus return false; } public Boolean visit(IfStmt n, Boolean arg) { if (n.getElseStmt() != null) { if (n.getElseStmt().accept(this, arg)) { return true; } } if (n.getThenStmt().accept(this, arg)) { return true; } return false; } public Boolean visit(LabeledStmt n, Boolean arg) { return n.getStmt().accept(this, arg); } public Boolean visit(ReturnStmt n, Boolean arg) { return true; } public Boolean visit(SwitchEntryStmt n, Boolean arg) { return false; } public Boolean visit(SwitchStmt n, Boolean arg) { /* List<SwitchEntryStmt> entries = n.getEntries(); for (int i = 0; i < array.length; i++) { array_type array_element = array[i]; } */ return true; } public Boolean visit(SynchronizedStmt n, Boolean arg) { return n.getBlock().accept(this, arg); } public Boolean visit(ThrowStmt n, Boolean arg) { return true; } public Boolean visit(TryStmt n, Boolean arg) { if (n.getFinallyBlock() != null) { return n.getFinallyBlock().accept(this, arg); } if (n.getCatchs() != null) { for (CatchClause c : n.getCatchs()) { boolean brk = c.accept(this, arg); if (!brk) { return false; } } } return n.getTryBlock().accept(this, arg); } public Boolean visit(TypeDeclarationStmt n, Boolean arg) { return false; } public Boolean visit(WhileStmt n, Boolean arg) { return n.getBody().accept(this, arg); } public Boolean visit(WildcardType n, Boolean arg) { if (n.getExtends() != null) { n.getExtends().accept(this, arg); } if (n.getSuper() != null) { n.getSuper().accept(this, arg); } return null; } }