Browse Source

put some more effort into detecting duplicate imports. PR 55097

git-svn-id: https://svn.apache.org/repos/asf/ant/core/trunk@1554400 13f79535-47bb-0310-9956-ffa450edef68
master
Stefan Bodewig 11 years ago
parent
commit
6a6bf38798
2 changed files with 53 additions and 14 deletions
  1. +8
    -4
      WHATSNEW
  2. +45
    -10
      src/main/org/apache/tools/ant/taskdefs/ImportTask.java

+ 8
- 4
WHATSNEW View File

@@ -8,10 +8,14 @@ Changes that could break older environments:
Fixed bugs:
-----------

* <import>/<include> failed when the importing file was loaded from an
URI or a jar and it imported a file from the local file system via
an absolute path.
Bugzilla Report 50953
* <import>/<include> failed when the importing file was loaded from an
URI or a jar and it imported a file from the local file system via
an absolute path.
Bugzilla Report 50953

* <import> could import the same resource twice when imported via
different resource types.
Bugzilla Report 55097

Other changes:
--------------


+ 45
- 10
src/main/org/apache/tools/ant/taskdefs/ImportTask.java View File

@@ -27,6 +27,7 @@ import org.apache.tools.ant.types.Resource;
import org.apache.tools.ant.types.ResourceCollection;
import org.apache.tools.ant.types.resources.FileProvider;
import org.apache.tools.ant.types.resources.FileResource;
import org.apache.tools.ant.types.resources.URLProvider;
import org.apache.tools.ant.types.resources.URLResource;
import org.apache.tools.ant.types.resources.Union;
import org.apache.tools.ant.util.FileUtils;
@@ -182,17 +183,8 @@ public class ImportTask extends Task {
}
}

File importedFile = null;
FileProvider fp = importedResource.as(FileProvider.class);
if (fp != null) {
importedFile = fp.getFile();
}

if (!isInIncludeMode() &&
(importStack.contains(importedResource)
|| (importedFile != null && importStack.contains(importedFile))
)
) {
hasAlreadyBeenImported(importedResource, importStack)) {
getProject().log(
"Skipped already imported file:\n "
+ importedResource + "\n", Project.MSG_VERBOSE);
@@ -280,6 +272,49 @@ public class ImportTask extends Task {
return f.isAbsolute() && f.exists();
}

private boolean hasAlreadyBeenImported(Resource importedResource,
Vector<Object> importStack) {
File importedFile = null;
FileProvider fp = importedResource.as(FileProvider.class);
if (fp != null) {
importedFile = fp.getFile();
}
URL importedURL = null;
URLProvider up = importedResource.as(URLProvider.class);
if (up != null) {
importedURL = up.getURL();
}
for (Object o : importStack) {
if (isOneOf(o, importedResource, importedFile, importedURL)) {
return true;
}
}
return false;
}

private boolean isOneOf(Object o, Resource importedResource,
File importedFile, URL importedURL) {
if (o.equals(importedResource) || o.equals(importedFile)
|| o.equals(importedURL)) {
return true;
}
if (o instanceof Resource) {
if (importedFile != null) {
FileProvider fp = ((Resource) o).as(FileProvider.class);
if (fp != null && fp.getFile().equals(importedFile)) {
return true;
}
}
if (importedURL != null) {
URLProvider up = ((Resource) o).as(URLProvider.class);
if (up != null && up.getURL().equals(importedURL)) {
return true;
}
}
}
return false;
}

/**
* Whether the task is in include (as opposed to import) mode.
*


Loading…
Cancel
Save