git-svn-id: https://svn.apache.org/repos/asf/ant/core/trunk@469781 13f79535-47bb-0310-9956-ffa450edef68master
@@ -18,12 +18,13 @@ | |||||
package org.apache.tools.ant; | package org.apache.tools.ant; | ||||
/** | /** | ||||
* Base class for components of a project, including tasks and data types. | * Base class for components of a project, including tasks and data types. | ||||
* Provides common facilities. | * Provides common facilities. | ||||
* | * | ||||
*/ | */ | ||||
public abstract class ProjectComponent { | |||||
public abstract class ProjectComponent implements Cloneable { | |||||
/** | /** | ||||
* Project object of this component. | * Project object of this component. | ||||
@@ -122,4 +123,14 @@ public abstract class ProjectComponent { | |||||
} | } | ||||
} | } | ||||
} | } | ||||
/** | |||||
* @since Ant 1.7 | |||||
* @return a shallow copy of this projectcomponent. | |||||
*/ | |||||
public Object clone() throws CloneNotSupportedException { | |||||
ProjectComponent pc = (ProjectComponent) super.clone(); | |||||
pc.setLocation(getLocation()); | |||||
pc.setProject(getProject()); | |||||
return pc; | |||||
} | |||||
} | } |
@@ -459,16 +459,12 @@ public abstract class AbstractFileSet extends DataType | |||||
} | } | ||||
ds.setBasedir(dir); | ds.setBasedir(dir); | ||||
final int count = additionalPatterns.size(); | |||||
for (int i = 0; i < count; i++) { | |||||
Object o = additionalPatterns.elementAt(i); | |||||
defaultPatterns.append((PatternSet) o, p); | |||||
} | |||||
PatternSet ps = mergePatterns(p); | |||||
p.log(getDataTypeName() + ": Setup scanner in dir " + dir | p.log(getDataTypeName() + ": Setup scanner in dir " + dir | ||||
+ " with " + defaultPatterns, Project.MSG_DEBUG); | |||||
+ " with " + ps, Project.MSG_DEBUG); | |||||
ds.setIncludes(defaultPatterns.getIncludePatterns(p)); | |||||
ds.setExcludes(defaultPatterns.getExcludePatterns(p)); | |||||
ds.setIncludes(ps.getIncludePatterns(p)); | |||||
ds.setExcludes(ps.getExcludePatterns(p)); | |||||
if (ds instanceof SelectorScanner) { | if (ds instanceof SelectorScanner) { | ||||
SelectorScanner ss = (SelectorScanner) ds; | SelectorScanner ss = (SelectorScanner) ds; | ||||
ss.setSelectors(getSelectors(p)); | ss.setSelectors(getSelectors(p)); | ||||
@@ -803,8 +799,7 @@ public abstract class AbstractFileSet extends DataType | |||||
if (isReference()) { | if (isReference()) { | ||||
return getRef(p).mergePatterns(p); | return getRef(p).mergePatterns(p); | ||||
} | } | ||||
PatternSet ps = new PatternSet(); | |||||
ps.append(defaultPatterns, p); | |||||
PatternSet ps = (PatternSet) defaultPatterns.clone(); | |||||
final int count = additionalPatterns.size(); | final int count = additionalPatterns.size(); | ||||
for (int i = 0; i < count; i++) { | for (int i = 0; i < count; i++) { | ||||
Object o = additionalPatterns.elementAt(i); | Object o = additionalPatterns.elementAt(i); | ||||
@@ -37,7 +37,7 @@ import org.apache.tools.ant.util.IdentityStack; | |||||
* but not <path>).</p> | * but not <path>).</p> | ||||
* | * | ||||
*/ | */ | ||||
public abstract class DataType extends ProjectComponent { | |||||
public abstract class DataType extends ProjectComponent implements Cloneable { | |||||
/** | /** | ||||
* The description the user has set. | * The description the user has set. | ||||
@@ -352,5 +352,18 @@ public abstract class DataType extends ProjectComponent { | |||||
return d == null ? getDataTypeName() : getDataTypeName() + " " + d; | return d == null ? getDataTypeName() : getDataTypeName() + " " + d; | ||||
} | } | ||||
/** | |||||
* @since Ant 1.7 | |||||
* @return a shallow copy of this DataType. | |||||
*/ | |||||
public Object clone() throws CloneNotSupportedException { | |||||
DataType dt = (DataType) super.clone(); | |||||
dt.setDescription(getDescription()); | |||||
if (getRefid() != null) { | |||||
dt.setRefid(getRefid()); | |||||
} | |||||
dt.setChecked(isChecked()); | |||||
return dt; | |||||
} | |||||
} | } | ||||
@@ -497,19 +497,15 @@ public class PatternSet extends DataType implements Cloneable { | |||||
* @return a clone of this patternset. | * @return a clone of this patternset. | ||||
*/ | */ | ||||
public Object clone() { | public Object clone() { | ||||
if (isReference()) { | |||||
return getRef(getProject()).clone(); | |||||
} else { | |||||
try { | |||||
PatternSet ps = (PatternSet) super.clone(); | |||||
ps.includeList = (Vector) includeList.clone(); | |||||
ps.excludeList = (Vector) excludeList.clone(); | |||||
ps.includesFileList = (Vector) includesFileList.clone(); | |||||
ps.excludesFileList = (Vector) excludesFileList.clone(); | |||||
return ps; | |||||
} catch (CloneNotSupportedException e) { | |||||
throw new BuildException(e); | |||||
} | |||||
try { | |||||
PatternSet ps = (PatternSet) super.clone(); | |||||
ps.includeList = (Vector) includeList.clone(); | |||||
ps.excludeList = (Vector) excludeList.clone(); | |||||
ps.includesFileList = (Vector) includesFileList.clone(); | |||||
ps.excludesFileList = (Vector) excludesFileList.clone(); | |||||
return ps; | |||||
} catch (CloneNotSupportedException e) { | |||||
throw new BuildException(e); | |||||
} | } | ||||
} | } | ||||