diff --git a/src/main/org/apache/tools/ant/taskdefs/AntStructure.java b/src/main/org/apache/tools/ant/taskdefs/AntStructure.java index 013e051dc..a387389a1 100644 --- a/src/main/org/apache/tools/ant/taskdefs/AntStructure.java +++ b/src/main/org/apache/tools/ant/taskdefs/AntStructure.java @@ -178,6 +178,16 @@ public class AntStructure extends Task { StringBuffer sb = new StringBuffer("").append(lSep); + sb.append("").append(lSep); + out.println(sb); + return; + } + Vector v = new Vector(); if (ih.supportsCharacters()) { v.addElement("#PCDATA"); @@ -218,6 +228,8 @@ public class AntStructure extends Task { if (type.equals(java.lang.Boolean.class) || type.equals(java.lang.Boolean.TYPE)) { sb.append("%boolean; "); + } else if (org.apache.tools.ant.types.Reference.class.isAssignableFrom(type)) { + sb.append("IDREF "); } else if (org.apache.tools.ant.EnumeratedAttribute.class.isAssignableFrom(type)) { try { EnumeratedAttribute ea = diff --git a/src/main/org/apache/tools/ant/types/FileSet.java b/src/main/org/apache/tools/ant/types/FileSet.java index 16758d149..ba3bfe564 100644 --- a/src/main/org/apache/tools/ant/types/FileSet.java +++ b/src/main/org/apache/tools/ant/types/FileSet.java @@ -57,7 +57,9 @@ package org.apache.tools.ant.types; import org.apache.tools.ant.BuildException; import org.apache.tools.ant.DirectoryScanner; import org.apache.tools.ant.Project; + import java.io.File; +import java.util.Vector; /** * Moved out of MatchingTask to make it a standalone object that could @@ -71,7 +73,8 @@ import java.io.File; */ public class FileSet { - private PatternSet patterns = new PatternSet(); + private PatternSet defaultPatterns = new PatternSet(); + private Vector additionalPatterns = new Vector(); private File dir; private boolean useDefaultExcludes = true; @@ -95,21 +98,29 @@ public class FileSet { } public PatternSet createPatternSet() { + PatternSet patterns = new PatternSet(); + additionalPatterns.addElement(patterns); return patterns; } + public Reference createPatternSetRef() { + Reference r = new Reference(); + additionalPatterns.addElement(r); + return r; + } + /** * add a name entry on the include list */ public PatternSet.NameEntry createInclude() { - return patterns.createInclude(); + return defaultPatterns.createInclude(); } /** * add a name entry on the exclude list */ public PatternSet.NameEntry createExclude() { - return patterns.createExclude(); + return defaultPatterns.createExclude(); } /** @@ -119,7 +130,7 @@ public class FileSet { * @param includes the string containing the include patterns */ public void setIncludes(String includes) { - patterns.setIncludes(includes); + defaultPatterns.setIncludes(includes); } /** @@ -129,7 +140,7 @@ public class FileSet { * @param excludes the string containing the exclude patterns */ public void setExcludes(String excludes) { - patterns.setExcludes(excludes); + defaultPatterns.setExcludes(excludes); } /** @@ -139,7 +150,7 @@ public class FileSet { * the include patterns from. */ public void setIncludesfile(File incl) throws BuildException { - patterns.setIncludesfile(incl); + defaultPatterns.setIncludesfile(incl); } /** @@ -149,7 +160,7 @@ public class FileSet { * the include patterns from. */ public void setExcludesfile(File excl) throws BuildException { - patterns.setExcludesfile(excl); + defaultPatterns.setExcludesfile(excl); } /** @@ -169,8 +180,25 @@ public class FileSet { public DirectoryScanner getDirectoryScanner(Project p) { DirectoryScanner ds = new DirectoryScanner(); ds.setBasedir(dir); - ds.setIncludes(patterns.getIncludePatterns(p)); - ds.setExcludes(patterns.getExcludePatterns(p)); + + for (int i=0; i. + */ + +package org.apache.tools.ant.types; + +import org.apache.tools.ant.Project; +import org.apache.tools.ant.BuildException; + +/** + * Named collection of include/exclude tags. + * + *

Class to hold a reference to another object in the project. + * + * @author Stefan Bodewig + */ +public class Reference { + + private String refid; + + public Reference() { + super(); + } + + public Reference(String id) { + this(); + setRefId(id); + } + + public void setRefId(String id) { + refid = id; + } + + public String getRefId() { + return refid; + } + + public Object getReferencedObject(Project project) throws BuildException { + if (refid == null) { + throw new BuildException("No reference specified"); + } + + Object o = project.getReferences().get(refid); + if (o == null) { + throw new BuildException("Refernce "+refid+" not found."); + } + return o; + } +}