From 4d83c345bd3cddee208b0bdb18d9b91d4aa3bbc4 Mon Sep 17 00:00:00 2001 From: Conor MacNeill Date: Thu, 29 Nov 2001 13:47:38 +0000 Subject: [PATCH] Additional functionality for classfileset. Change baseclass paramater to rootclass and make it use dot notation for the classname rather than making it a file. Also allow multiple nested elements to define more than one root class Example: git-svn-id: https://svn.apache.org/repos/asf/ant/core/trunk@270045 13f79535-47bb-0310-9956-ffa450edef68 --- .../types/optional/depend/ClassfileSet.java | 32 ++++++--- .../types/optional/depend/DependScanner.java | 68 ++++++++++--------- 2 files changed, 59 insertions(+), 41 deletions(-) diff --git a/src/main/org/apache/tools/ant/types/optional/depend/ClassfileSet.java b/src/main/org/apache/tools/ant/types/optional/depend/ClassfileSet.java index 1f42c2c3f..3a7e122c2 100644 --- a/src/main/org/apache/tools/ant/types/optional/depend/ClassfileSet.java +++ b/src/main/org/apache/tools/ant/types/optional/depend/ClassfileSet.java @@ -55,6 +55,8 @@ package org.apache.tools.ant.types.optional.depend; import java.io.File; import java.util.Stack; +import java.util.List; +import java.util.ArrayList; import org.apache.tools.ant.BuildException; import org.apache.tools.ant.DirectoryScanner; import org.apache.tools.ant.Project; @@ -72,16 +74,24 @@ import org.apache.tools.ant.util.depend.Dependencies; * @author Holger Engels */ public class ClassfileSet extends FileSet { - private File baseClass = null; + private List rootClasses = new ArrayList(); - /** - * Set the directory for the fileset. Prevents both "dir" and "src" - * from being specified. - */ - public void setBaseClass(File baseClass) + static public class ClassRoot { + private String rootClass; + + public void setClassname(String name) { + this.rootClass = name; + } + + public String getClassname() { + return rootClass; + } + } + + public void setRootClass(String rootClass) throws BuildException { - this.baseClass = baseClass; + rootClasses.add(rootClass); } public void setDir(File dir) throws BuildException { @@ -95,8 +105,12 @@ public class ClassfileSet extends FileSet { public DirectoryScanner getDirectoryScanner(Project p) { DependScanner scanner = new DependScanner(); scanner.setBasedir(getDir(p)); - scanner.setBaseClass(baseClass); + scanner.setRootClasses(rootClasses); scanner.scan(); return scanner; - } + } + + public void addConfiguredRoot(ClassRoot root) { + rootClasses.add(root.getClassname()); + } } diff --git a/src/main/org/apache/tools/ant/types/optional/depend/DependScanner.java b/src/main/org/apache/tools/ant/types/optional/depend/DependScanner.java index 0db4d3e2a..da1c9550a 100644 --- a/src/main/org/apache/tools/ant/types/optional/depend/DependScanner.java +++ b/src/main/org/apache/tools/ant/types/optional/depend/DependScanner.java @@ -72,6 +72,8 @@ public class DependScanner extends DirectoryScanner { File baseClass; List included = new LinkedList(); + private List rootClasses; + /** * Sets the basedir for scanning. This is the directory that is scanned * recursively. @@ -103,8 +105,8 @@ public class DependScanner extends DirectoryScanner { * * @param domain the domain */ - public void setBaseClass(File baseClass) { - this.baseClass = baseClass; + public void setRootClasses(List rootClasses) { + this.rootClasses = rootClasses; } /** @@ -129,52 +131,54 @@ public class DependScanner extends DirectoryScanner { */ public void scan() { Dependencies visitor = new Dependencies(); + Set set = new TreeSet(); - Set newSet = new HashSet(); + final String base; - String start; try { base = basedir.getCanonicalPath() + File.separator; - start = baseClass.getCanonicalPath(); } catch (Exception e) { throw new IllegalArgumentException(e.getMessage()); } - start = start.substring(base.length(), start.length() - ".class".length()).replace(File.separatorChar, '/'); - System.err.println("start: " + start); - - newSet.add(start); - set.add(start); - - do { - Iterator i = newSet.iterator(); - while (i.hasNext()) { - String fileName = base + ((String)i.next()).replace('/', File.separatorChar) + ".class"; - - try { - JavaClass javaClass = new ClassParser(fileName).parse(); - javaClass.accept(visitor); - } - catch (IOException e) { - System.err.println("exception: " + e.getMessage()); + for (Iterator rootClassIterator = rootClasses.iterator(); rootClassIterator.hasNext();) { + Set newSet = new HashSet(); + String start = (String)rootClassIterator.next(); + start = start.replace('.', '/'); + + newSet.add(start); + set.add(start); + + do { + Iterator i = newSet.iterator(); + while (i.hasNext()) { + String fileName = base + ((String)i.next()).replace('/', File.separatorChar) + ".class"; + + try { + JavaClass javaClass = new ClassParser(fileName).parse(); + javaClass.accept(visitor); + } + catch (IOException e) { + System.err.println("exception: " + e.getMessage()); + } } - } - newSet.clear(); - newSet.addAll(visitor.getDependencies()); - visitor.clearDependencies(); - - Dependencies.applyFilter(newSet, new Filter() { + newSet.clear(); + newSet.addAll(visitor.getDependencies()); + visitor.clearDependencies(); + + Dependencies.applyFilter(newSet, new Filter() { public boolean accept(Object object) { String fileName = base + ((String)object).replace('/', File.separatorChar) + ".class"; return new File(fileName).exists(); } }); - newSet.removeAll(set); - set.addAll(newSet); + newSet.removeAll(set); + set.addAll(newSet); + } + while (newSet.size() > 0); } - while (newSet.size() > 0); - + included.clear(); included.addAll(set); }