1 18 package org.apache.tools.ant.types.optional.depend; 19 20 import java.util.Vector ; 21 import java.util.Enumeration ; 22 import org.apache.tools.ant.Project; 23 import org.apache.tools.ant.DirectoryScanner; 24 import org.apache.tools.ant.types.FileSet; 25 26 34 public class ClassfileSet extends FileSet { 35 40 private Vector rootClasses = new Vector (); 41 42 45 private Vector rootFileSets = new Vector (); 46 47 50 public static class ClassRoot { 51 52 private String rootClass; 53 54 59 public void setClassname(String name) { 60 this.rootClass = name; 61 } 62 63 68 public String getClassname() { 69 return rootClass; 70 } 71 } 72 73 76 public ClassfileSet() { 77 } 78 79 86 public void addRootFileset(FileSet rootFileSet) { 87 rootFileSets.addElement(rootFileSet); 88 } 89 90 95 protected ClassfileSet(ClassfileSet s) { 96 super(s); 97 rootClasses = (Vector ) s.rootClasses.clone(); 98 } 99 100 105 public void setRootClass(String rootClass) { 106 rootClasses.addElement(rootClass); 107 } 108 109 116 public DirectoryScanner getDirectoryScanner(Project p) { 117 if (isReference()) { 118 return getRef(p).getDirectoryScanner(p); 119 } 120 Vector allRootClasses = (Vector ) rootClasses.clone(); 121 for (Enumeration e = rootFileSets.elements(); e.hasMoreElements();) { 122 FileSet additionalRootSet = (FileSet) e.nextElement(); 123 DirectoryScanner additionalScanner 124 = additionalRootSet.getDirectoryScanner(p); 125 String [] files = additionalScanner.getIncludedFiles(); 126 for (int i = 0; i < files.length; ++i) { 127 if (files[i].endsWith(".class")) { 128 String classFilePath 129 = files[i].substring(0, files[i].length() - 6); 130 String className 131 = classFilePath.replace('/', '.').replace('\\', '.'); 132 allRootClasses.addElement(className); 133 } 134 } 135 } 136 DirectoryScanner parentScanner = super.getDirectoryScanner(p); 137 DependScanner scanner = new DependScanner(parentScanner); 138 scanner.setBasedir(getDir(p)); 139 scanner.setRootClasses(allRootClasses); 140 scanner.scan(); 141 return scanner; 142 } 143 144 149 public void addConfiguredRoot(ClassRoot root) { 150 rootClasses.addElement(root.getClassname()); 151 } 152 153 158 public Object clone() { 159 return new ClassfileSet(isReference() 160 ? (ClassfileSet) (getRef(getProject())) : this); 161 } 162 163 } 164 | Popular Tags |