View Javadoc
1 /* FOREGEJ - FOrmatting REfactoring GEnerating Java 2 * 3 * Copyright (C) 2003 Andreas Arrgard 4 * 5 * This library is free software; you can redistribute it and/or 6 * modify it under the terms of the GNU Lesser General Public 7 * License as published by the Free Software Foundation; either 8 * version 2.1 of the License, or (at your option) any later version. 9 * 10 * This library is distributed in the hope that it will be useful, 11 * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 13 * Lesser General Public License for more details. 14 * 15 * You should have received a copy of the GNU Lesser General Public 16 * License along with this library; if not, write to the Free Software 17 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 18 */ 19 package com.octagroup.foregej.java.tools; 20 import java.util.Iterator; 21 import java.util.Vector; 22 import com.octagroup.foregej.java.lang.ast.AST_CLASS_DEF; 23 import com.octagroup.foregej.java.lang.ast.AST_CTOR_DEF; 24 import com.octagroup.foregej.java.lang.ast.AST_INTERFACE_DEF; 25 import com.octagroup.foregej.java.lang.ast.AST_METHOD_DEF; 26 import com.octagroup.foregej.java.lang.ast.AST_OBJBLOCK; 27 import com.octagroup.foregej.java.lang.ast.AST_VARIABLE_DEF; 28 import com.octagroup.foregej.java.lang.ast.CompilationUnit; 29 /*** 30 * This class is used to "run" the tools. 31 * <p> 32 * All we have to do is to pass a compilation unit to this class and all 33 * the tools will be called. 34 * </p> 35 */ 36 public class ToolRunner 37 { 38 /*** 39 * These are all the tools that we will use to process the 40 * CompilationUnits 41 */ 42 private Vector tools_=new Vector(); 43 /*** 44 * The singleton instance 45 */ 46 private static ToolRunner instance_s=null; 47 /*** 48 * Returns the singleton instance. 49 * 50 * @return the singleton instance. 51 */ 52 public static ToolRunner getInstance() 53 { 54 if(instance_s==null) { 55 instance_s=new ToolRunner(); 56 } 57 return instance_s; 58 } 59 /*** 60 * Adds a tool to the tool runner. 61 * <p> 62 * When the <code>process</code>metod is invoked a new instance of the 63 * tool will be created. 64 * </p> 65 * 66 * @param tool 67 */ 68 public void addTool(Class tool) 69 { 70 tools_.add(tool); 71 } 72 /*** 73 * This method processes a CompilationUnit 74 * <p> 75 * It creates a new instance of the registered tools and starts to 76 * process the compilation unt with that tool. 77 * </p> 78 * 79 * @param cu the CompilationUnit to process. 80 */ 81 public void process(CompilationUnit cu) 82 { 83 try{ 84 Iterator tools=tools_.iterator(); 85 while(tools.hasNext()){ 86 Class tool=(Class)tools.next(); 87 process(cu, (Tool)tool.newInstance()); 88 } 89 }catch (InstantiationException e) { 90 throw new RuntimeException("ToolRunner.process: InstantiationException:"+e.getMessage()); 91 }catch (IllegalAccessException e) { 92 throw new RuntimeException("ToolRunner.process: IllegalAccessException:"+e.getMessage()); 93 } 94 } 95 /*** 96 * Processes a CompilationUnit with a tool 97 * 98 * @param cu the CompilationUnit to process. 99 * @param tool the tool to process the compilation unit with. 100 */ 101 private void process(CompilationUnit cu,Tool tool) 102 { 103 boolean cont=tool.process(cu); 104 if(cont) { 105 AST_INTERFACE_DEF interfaze=cu.getAstInterfaceDef(); 106 AST_CLASS_DEF clazz=cu.getAstClassDef(); 107 if(interfaze!=null) { 108 process(interfaze, tool); 109 } else if(clazz!=null) { 110 process(clazz, tool); 111 } else { 112 throw new IllegalStateException("ToolRunner.process: CompilationUnit did not contain a class or interface."); 113 } 114 } 115 } 116 /*** 117 * Processes a Class with a tool 118 * 119 * @param clazz the Class to process. 120 * @param tool the tool to process the class with. 121 */ 122 private void process(AST_CLASS_DEF clazz,Tool tool) 123 { 124 boolean cont=tool.process(clazz); 125 if(cont) { 126 process(clazz.getAstBody(), tool); 127 } 128 } 129 /*** 130 * Processes an Interface with a tool 131 * 132 * @param interfaze the Interface to process. 133 * @param tool the tool to process the interface with. 134 */ 135 private void process(AST_INTERFACE_DEF interfaze,Tool tool) 136 { 137 boolean cont=tool.process(interfaze); 138 if(cont) { 139 process(interfaze.getAstBody(), tool); 140 } 141 } 142 /*** 143 * Helper method that passes all the variables, cobstructors and 144 * methods on to the tool. 145 * 146 * @param objBlock the ast that contains all the methods 147 * @param tool the tool that performs the processing. 148 */ 149 private void process(AST_OBJBLOCK objBlock,Tool tool) 150 { 151 Iterator variables=objBlock.getAstVariables().iterator(); 152 while(variables.hasNext()){ 153 AST_VARIABLE_DEF variable=(AST_VARIABLE_DEF)variables.next(); 154 tool.process(variable); 155 } 156 Iterator ctors=objBlock.getAstConstructors().iterator(); 157 while(ctors.hasNext()){ 158 AST_CTOR_DEF ctor=(AST_CTOR_DEF)ctors.next(); 159 tool.process(ctor); 160 } 161 Iterator methods=objBlock.getAstMethods().iterator(); 162 while(methods.hasNext()){ 163 AST_METHOD_DEF method=(AST_METHOD_DEF)methods.next(); 164 tool.process(method); 165 } 166 } 167 }

This page was automatically generated by Maven