/* * xtc - The eXTensible Compiler * Copyright (C) 2007 New York University * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * version 2 as published by the Free Software Foundation. * * This program 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 General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, * USA. */ package xtc.typical; import xtc.tree.Visitor; import xtc.tree.GNode; import xtc.tree.Node; /** * Visitor to set flags indicating which liraries are used. * * @author Anh Le * @version $Revision: 1.2 $ */ public class FlagSetter extends Visitor { /** A variable to check if List is used. */ public boolean isListUsed; /** A variable to check if ArrayList is used. */ public boolean isArrayListUsed; /** A variable to check if BigInteger is used. */ public boolean isBigIntegerUsed; /** A variable to check if Pair is used. */ public boolean isPairUsed; /** A variable to check if Node is used. */ public boolean isNodeUsed; /** A variable to check if GNode is used. */ public boolean isGNodeUsed; /** A variable to check if Primitives is used. */ public boolean isPrimitivesUsed; /** A variable to check if Record is used. */ public boolean isRecordUsed; /** A variable to check if Variant is used. */ public boolean isVariantUsed; /** A variable to check if Tuple is used. */ public boolean isTupleUsed; /** A variable to check if Reduction is used. */ public boolean isReductionUsed; /** A variable to check if Name is used. */ public boolean isNameUsed; /** A variable to check if Scope is used. */ public boolean isScopeUsed; /** A variable to check if ScopeKind is used. */ public boolean isScopeKindUsed; /** A variable to check if Analyzer is used. */ public boolean isAnalyzerUsed; /** * Create a new flag settor. * * @param n The root of the expression. * */ public FlagSetter(GNode n) { // Set all flag to false isListUsed = false; isArrayListUsed = false; isBigIntegerUsed = false; isPairUsed = false; isNodeUsed = false; isGNodeUsed = false; isPrimitivesUsed = false; isRecordUsed = false; isVariantUsed = false; isTupleUsed = false; isReductionUsed = false; isNameUsed = false; isScopeUsed = false; isScopeKindUsed = false; isAnalyzerUsed = false; // Dispatch dispatch(n); } /** * Check the name of a used library and set the corresponding flag variable. * * @param name The name of the library. */ private void checkName(String name) { if ("List".equals(name)) isListUsed = true; else if ("ArrayList".equals(name)) isArrayListUsed = true; else if ("BigInteger".equals(name)) isBigIntegerUsed = true; else if ("Pair".equals(name)) isPairUsed = true; else if ("Node".equals(name)) isNodeUsed = true; else if ("GNode".equals(name)) isGNodeUsed = true; else if ("Primitives".equals(name)) isPrimitivesUsed = true; else if ("Record".equals(name)) isRecordUsed = true; else if ("Variant".equals(name)) isVariantUsed = true; else if ("Tuple".equals(name)) isTupleUsed = true; else if ("Reduction".equals(name)) isReductionUsed = true; else if ("Name".equals(name)) isNameUsed = true; else if ("Scope".equals(name)) isScopeUsed = true; else if ("ScopeKind".equals(name)) isScopeKindUsed = true; else if ("Analyzer".equals(name)) isAnalyzerUsed = true; } /** * Set flags in ConstructorDeclaration . * * @param n The node */ public void visitConstructorDeclaration(GNode n) { dispatch(n.getGeneric(1)); dispatch(n.getGeneric(3)); dispatch(n.getGeneric(5)); } /** * Set flags in FieldDeclaration . * * @param n The node */ public void visitFieldDeclaration(GNode n) { dispatch(n.getGeneric(1)); dispatch(n.getGeneric(2)); } /** * Set flags in TypeParameter . * * @param n The node */ public void visitTypeParameter(GNode n) { checkName(n.getString(0)); dispatch(n.getGeneric(1)); } /** * Set flags in TypeInstantiation . * * @param n The node */ public void visitTypeInstantiation(GNode n) { checkName(n.getString(0)); dispatch(n.getGeneric(1)); } /** * Set flags in EnumConstant. * * @param n The node */ public void visitEnumConstant(GNode n) { dispatch(n.getGeneric(0)); dispatch(n.getGeneric(2)); dispatch(n.getGeneric(3)); } /** * Set flags in QualifiedIdentifier. * * @param n The node */ public void visitQualifiedIdentifier(GNode n) { for (int i = 0; i < n.size(); i++) { checkName(n.getString(i)); } } /** * Set flags in PrimaryIdentifier. * * @param n The node */ public void visitPrimaryIdentifier(GNode n) { checkName(n.getString(0)); } /** * Set flags in PrimaryIdentifier. * * @param n The node */ public void visitDeclarator(GNode n) { dispatch(n.getGeneric(2)); } /** * Set flags in AnnotationDeclaration. * * @param n The node */ public void visitAnnotationDeclaration(GNode n) { dispatch(n.getGeneric(2)); } /** * Set flags in SelectionExpression. * * @param n The node */ public void visitSelectionExpression(GNode n) { dispatch(n.getGeneric(0)); } /** * Set flags in PostfixExpression. * * @param n The node */ public void visitPostfixExpression(GNode n) { dispatch(n.getGeneric(0)); } /** * Set flags in Type. * * @param n The node */ public void visitType(GNode n) { dispatch(n.getGeneric(0)); } /** * Set flags in CallExpression. * * @param n The node */ public void visitCallExpression(GNode n) { dispatch(n.getGeneric(0)); dispatch(n.getGeneric(1)); dispatch(n.getGeneric(3)); } /** * Set flags in Expression. * * @param n The node */ public void visitExpression(GNode n) { dispatch(n.getGeneric(0)); dispatch(n.getGeneric(2)); } /** * Set flags in EqualityExpression. * * @param n The node */ public void visitEqualityExpression(GNode n) { dispatch(n.getGeneric(0)); dispatch(n.getGeneric(2)); } /** * Set flags in RelationalExpression. * * @param n The node */ public void visitRelationalExpression(GNode n) { dispatch(n.getGeneric(0)); dispatch(n.getGeneric(2)); } /** * Set flags in ShiftExpression. * * @param n The node */ public void visitShiftExpression(GNode n) { dispatch(n.getGeneric(0)); dispatch(n.getGeneric(2)); } /** * Set flags in AdditiveExpression. * * @param n The node */ public void visitAdditiveExpression(GNode n) { dispatch(n.getGeneric(0)); dispatch(n.getGeneric(2)); } /** * Set flags in MultiplicativeExpression. * * @param n The node */ public void visitMultiplicativeExpression(GNode n) { dispatch(n.getGeneric(0)); dispatch(n.getGeneric(2)); } /** * Set flags in ClassDeclaration. * * @param n The node */ public void visitClassDeclaration(GNode n) { dispatch(n.getGeneric(2)); dispatch(n.getGeneric(3)); dispatch(n.getGeneric(4)); dispatch(n.getGeneric(5)); } /** * Set flags in InterfaceDeclaration. * * @param n The node */ public void visitInterfaceDeclaration(GNode n) { dispatch(n.getGeneric(2)); dispatch(n.getGeneric(3)); dispatch(n.getGeneric(4)); } /** * Set flags in EnumDeclaration. * * @param n The node */ public void visitEnumDeclaration(GNode n) { dispatch(n.getGeneric(2)); dispatch(n.getGeneric(3)); dispatch(n.getGeneric(4)); } /** * Set flags in EnhancedForControl. * * @param n The node */ public void visitEnhancedForControl(GNode n) { dispatch(n.getGeneric(1)); dispatch(n.getGeneric(3)); } /** * Set flags in AnnotationMethod. * * @param n The node */ public void visitAnnotationMethod(GNode n) { dispatch(n.getGeneric(1)); dispatch(n.getGeneric(3)); } /** * Set flags in MethodDeclaration. * * @param n The node */ public void visitMethodDeclaration(GNode n) { dispatch(n.getGeneric(1)); dispatch(n.getGeneric(2)); dispatch(n.getGeneric(4)); dispatch(n.getGeneric(7)); } /** * Set flags in BlockDeclaration. * * @param n The node */ public void visitBlockDeclaration(GNode n) { dispatch(n.getGeneric(1)); } /** * Set flags in LabeledStatement. * * @param n The node */ public void visitLabeledStatement(GNode n) { dispatch(n.getGeneric(1)); } /** * Set flags in UnaryExpression. * * @param n The node */ public void visitUnaryExpression(GNode n) { dispatch(n.getGeneric(1)); } /** * Set flags in FormalParameter. * * @param n The node */ public void visitFormalParameter(GNode n) { dispatch(n.getGeneric(1)); } /** * Set flags in ElementValuePair. * * @param n The node */ public void visitElementValuePair(GNode n) { dispatch(n.getGeneric(1)); } /** * Set flags in WildcardBound. * * @param n The node */ public void visitWildcardBound(GNode n) { dispatch(n.getGeneric(1)); } /** * Set flags in this node. * * @param n The node */ public void visitClassBody(GNode n) { for (int i = 0; i < n.size(); i++) { dispatch(n.getGeneric(i)); } } /** * Set flags in this node. * * @param n The node */ public void visitExtension(GNode n) { for (int i = 0; i < n.size(); i++) { dispatch(n.getGeneric(i)); } } /** * Set flags in this node. * * @param n The node */ public void visitImplementation(GNode n) { for (int i = 0; i < n.size(); i++) { dispatch(n.getGeneric(i)); } } /** * Set flags in this node. * * @param n The node */ public void visitBlock(GNode n) { for (int i = 0; i < n.size(); i++) { dispatch(n.getGeneric(i)); } } /** * Set flags in this node. * * @param n The node */ public void visitConditionalStatement(GNode n) { for (int i = 0; i < n.size(); i++) { dispatch(n.getGeneric(i)); } } /** * Set flags in this node. * * @param n The node */ public void visitForStatement(GNode n) { for (int i = 0; i < n.size(); i++) { dispatch(n.getGeneric(i)); } } /** * Set flags in this node. * * @param n The node */ public void visitWhileStatement(GNode n) { for (int i = 0; i < n.size(); i++) { dispatch(n.getGeneric(i)); } } /** * Set flags in this node. * * @param n The node */ public void visitDoWhileStatement(GNode n) { for (int i = 0; i < n.size(); i++) { dispatch(n.getGeneric(i)); } } /** * Set flags in this node. * * @param n The node */ public void visitTryCatchFinallyStatement(GNode n) { for (int i = 0; i < n.size(); i++) { dispatch(n.getGeneric(i)); } } /** * Set flags in this node. * * @param n The node */ public void visitSwitchStatement(GNode n) { for (int i = 0; i < n.size(); i++) { dispatch(n.getGeneric(i)); } } /** * Set flags in this node. * * @param n The node */ public void visitSynchronizedStatement(GNode n) { for (int i = 0; i < n.size(); i++) { dispatch(n.getGeneric(i)); } } /** * Set flags in this node. * * @param n The node */ public void visitReturnStatement(GNode n) { for (int i = 0; i < n.size(); i++) { dispatch(n.getGeneric(i)); } } /** * Set flags in this node. * * @param n The node */ public void visitThrowStatement(GNode n) { for (int i = 0; i < n.size(); i++) { dispatch(n.getGeneric(i)); } } /** * Set flags in this node. * * @param n The node */ public void visitExpressionStatement(GNode n) { for (int i = 0; i < n.size(); i++) { dispatch(n.getGeneric(i)); } } /** * Set flags in this node. * * @param n The node */ public void visitAssertStatement(GNode n) { for (int i = 0; i < n.size(); i++) { dispatch(n.getGeneric(i)); } } /** * Set flags in this node. * * @param n The node */ public void visitBasicForControl(GNode n) { for (int i = 0; i < n.size(); i++) { dispatch(n.getGeneric(i)); } } /** * Set flags in this node. * * @param n The node */ public void visitCatchClause(GNode n) { for (int i = 0; i < n.size(); i++) { dispatch(n.getGeneric(i)); } } /** * Set flags in this node. * * @param n The node */ public void visitCaseClause(GNode n) { for (int i = 0; i < n.size(); i++) { dispatch(n.getGeneric(i)); } } /** * Set flags in this node. * * @param n The node */ public void visitDefaultClause(GNode n) { for (int i = 0; i < n.size(); i++) { dispatch(n.getGeneric(i)); } } /** * Set flags in this node. * * @param n The node */ public void visitExpressionList(GNode n) { for (int i = 0; i < n.size(); i++) { dispatch(n.getGeneric(i)); } } /** * Set flags in this node. * * @param n The node */ public void visitConditionalExpression(GNode n) { for (int i = 0; i < n.size(); i++) { dispatch(n.getGeneric(i)); } } /** * Set flags in this node. * * @param n The node */ public void visitLogicalOrExpression(GNode n) { for (int i = 0; i < n.size(); i++) { dispatch(n.getGeneric(i)); } } /** * Set flags in this node. * * @param n The node */ public void visitLogicalAndExpression(GNode n) { for (int i = 0; i < n.size(); i++) { dispatch(n.getGeneric(i)); } } /** * Set flags in this node. * * @param n The node */ public void visitBitwiseOrExpression(GNode n) { for (int i = 0; i < n.size(); i++) { dispatch(n.getGeneric(i)); } } /** * Set flags in this node. * * @param n The node */ public void visitBitwiseXorExpression(GNode n) { for (int i = 0; i < n.size(); i++) { dispatch(n.getGeneric(i)); } } /** * Set flags in this node. * * @param n The node */ public void visitBitwiseAndExpression(GNode n) { for (int i = 0; i < n.size(); i++) { dispatch(n.getGeneric(i)); } } /** * Set flags in this node. * * @param n The node */ public void visitInstanceOfExpression(GNode n) { for (int i = 0; i < n.size(); i++) { dispatch(n.getGeneric(i)); } } /** * Set flags in this node. * * @param n The node */ public void visitBitwiseNegationExpression(GNode n) { for (int i = 0; i < n.size(); i++) { dispatch(n.getGeneric(i)); } } /** * Set flags in this node. * * @param n The node */ public void visitLogicalNegationExpression(GNode n) { for (int i = 0; i < n.size(); i++) { dispatch(n.getGeneric(i)); } } /** * Set flags in this node. * * @param n The node */ public void visitBasicCastExpression(GNode n) { for (int i = 0; i < n.size(); i++) { dispatch(n.getGeneric(i)); } } /** * Set flags in this node. * * @param n The node */ public void visitCastExpression(GNode n) { for (int i = 0; i < n.size(); i++) { dispatch(n.getGeneric(i)); } } /** * Set flags in this node. * * @param n The node */ public void visitSuperExpression(GNode n) { for (int i = 0; i < n.size(); i++) { dispatch(n.getGeneric(i)); } } /** * Set flags in this node. * * @param n The node */ public void visitSubscriptExpression(GNode n) { for (int i = 0; i < n.size(); i++) { dispatch(n.getGeneric(i)); } } /** * Set flags in this node. * * @param n The node */ public void visitNewClassExpression(GNode n) { for (int i = 0; i < n.size(); i++) { dispatch(n.getGeneric(i)); } } /** * Set flags in this node. * * @param n The node */ public void visitClassLiteralExpression(GNode n) { for (int i = 0; i < n.size(); i++) { dispatch(n.getGeneric(i)); } } /** * Set flags in this node. * * @param n The node */ public void visitThisExpression(GNode n) { for (int i = 0; i < n.size(); i++) { dispatch(n.getGeneric(i)); } } /** * Set flags in this node. * * @param n The node */ public void visitNewArrayExpression(GNode n) { for (int i = 0; i < n.size(); i++) { dispatch(n.getGeneric(i)); } } /** * Set flags in this node. * * @param n The node */ public void visitConcreteDimensions(GNode n) { for (int i = 0; i < n.size(); i++) { dispatch(n.getGeneric(i)); } } /** * Set flags in this node. * * @param n The node */ public void visitArrayInitializer(GNode n) { for (int i = 0; i < n.size(); i++) { dispatch(n.getGeneric(i)); } } /** * Set flags in this node. * * @param n The node */ public void visitArguments(GNode n) { for (int i = 0; i < n.size(); i++) { dispatch(n.getGeneric(i)); } } /** * Set flags in this node. * * @param n The node */ public void visitFormalParameters(GNode n) { for (int i = 0; i < n.size(); i++) { dispatch(n.getGeneric(i)); } } /** * Set flags in this node. * * @param n The node */ public void visitDeclarators(GNode n) { for (int i = 0; i < n.size(); i++) { dispatch(n.getGeneric(i)); } } /** * Set flags in this node. * * @param n The node */ public void visitAnnotations(GNode n) { for (int i = 0; i < n.size(); i++) { dispatch(n.getGeneric(i)); } } /** * Set flags in this node. * * @param n The node */ public void visitAnnotation(GNode n) { for (int i = 0; i < n.size(); i++) { dispatch(n.getGeneric(i)); } } /** * Set flags in this node. * * @param n The node */ public void visitElementValuePairs(GNode n) { for (int i = 0; i < n.size(); i++) { dispatch(n.getGeneric(i)); } } /** * Set flags in this node. * * @param n The node */ public void visitDefaultValue(GNode n) { for (int i = 0; i < n.size(); i++) { dispatch(n.getGeneric(i)); } } /** * Set flags in this node. * * @param n The node */ public void visitEnumConstants(GNode n) { for (int i = 0; i < n.size(); i++) { dispatch(n.getGeneric(i)); } } /** * Set flags in this node. * * @param n The node */ public void visitEnumMembers(GNode n) { for (int i = 0; i < n.size(); i++) { dispatch(n.getGeneric(i)); } } /** * Set flags in this node. * * @param n The node */ public void visitTypeParameters(GNode n) { for (int i = 0; i < n.size(); i++) { dispatch(n.getGeneric(i)); } } /** * Set flags in this node. * * @param n The node */ public void visitBound(GNode n) { for (int i = 0; i < n.size(); i++) { dispatch(n.getGeneric(i)); } } /** * Set flags in this node. * * @param n The node */ public void visitTypeArguments(GNode n) { for (int i = 0; i < n.size(); i++) { dispatch(n.getGeneric(i)); } } /** * Set flags in this node. * * @param n The node */ public void visitWildcard(GNode n) { for (int i = 0; i < n.size(); i++) { dispatch(n.getGeneric(i)); } } /** * Set flags in this node. * * @param n The node */ public void visitInstantiatedType(GNode n) { for (int i = 0; i < n.size(); i++) { dispatch(n.getGeneric(i)); } } /** * Set flags in the other nodes. * * @param n The node */ public void visit(GNode n) { // do nothing } }