1 25 package classycle.ant; 26 27 import java.io.File ; 28 import java.io.IOException ; 29 import java.io.PrintWriter ; 30 import java.util.Map ; 31 32 import org.apache.tools.ant.BuildException; 33 34 import classycle.Analyser; 35 import classycle.dependency.DefaultResultRenderer; 36 import classycle.dependency.DependencyChecker; 37 import classycle.dependency.ResultRenderer; 38 import classycle.util.Text; 39 40 109 public class DependencyCheckingTask extends ClassycleTask 110 { 111 private String _definitionFile; 112 private String _dependencyDefinition; 113 private String _resultRenderer; 114 private boolean _failOnUnwantedDependencies; 115 116 public void setFailOnUnwantedDependencies(boolean failOnUnwantedDependencies) 117 { 118 _failOnUnwantedDependencies = failOnUnwantedDependencies; 119 } 120 121 public void setDefinitionFile(String definitionFile) 122 { 123 _definitionFile = definitionFile; 124 } 125 126 public void setResultRenderer(String resultRenderer) 127 { 128 _resultRenderer = resultRenderer; 129 } 130 131 public void addText(String text) 132 { 133 _dependencyDefinition = text.trim(); 134 } 135 136 public void execute() throws BuildException 137 { 138 super.execute(); 139 140 boolean ok = false; 141 try 142 { 143 Analyser analyser = new Analyser(getClassFileNames(), getPattern(), 144 getReflectionPattern(), 145 isMergeInnerClasses()); 146 Map properties = _definitionFile == null ? getProject().getProperties() 147 : System.getProperties(); 148 DependencyChecker dependencyChecker 149 = new DependencyChecker(analyser, 150 getDependencyDefinitions(), 151 properties, 152 getRenderer()); 153 PrintWriter printWriter = new PrintWriter (System.out); 154 ok = dependencyChecker.check(printWriter); 155 printWriter.flush(); 156 } catch (BuildException e) 157 { 158 throw e; 159 } catch (Exception e) 160 { 161 throw new BuildException(e); 162 } 163 if (_failOnUnwantedDependencies && ok == false) 164 { 165 throw new BuildException( 166 "Unwanted dependencies found. See output for details."); 167 } 168 } 169 170 private ResultRenderer getRenderer() throws InstantiationException , 171 IllegalAccessException , 172 ClassNotFoundException 173 { 174 ResultRenderer renderer = new DefaultResultRenderer(); 175 if (_resultRenderer != null) 176 { 177 renderer = (ResultRenderer) Class.forName(_resultRenderer).newInstance(); 178 } 179 return renderer; 180 } 181 182 private String getDependencyDefinitions() throws IOException , BuildException 183 { 184 String result = _dependencyDefinition;; 185 if (_definitionFile != null) 186 { 187 File baseDir = getOwningTarget().getProject().getBaseDir(); 188 result = Text.readTextFile(new File (baseDir, _definitionFile)); 189 } 190 if (result.length() == 0) { 191 throw new BuildException("Empty dependency definition."); 192 } 193 return result; 194 } 195 } 196 | Popular Tags |