You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tomcat.apache.org by ma...@apache.org on 2017/10/05 19:21:18 UTC
svn commit: r1811235 -
/tomcat/trunk/java/org/apache/tomcat/util/scan/StandardJarScanner.java
Author: markt
Date: Thu Oct 5 19:21:18 2017
New Revision: 1811235
URL: http://svn.apache.org/viewvc?rev=1811235&view=rev
Log:
Avoid duplicate processing
Modified:
tomcat/trunk/java/org/apache/tomcat/util/scan/StandardJarScanner.java
Modified: tomcat/trunk/java/org/apache/tomcat/util/scan/StandardJarScanner.java
URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/tomcat/util/scan/StandardJarScanner.java?rev=1811235&r1=1811234&r2=1811235&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/tomcat/util/scan/StandardJarScanner.java (original)
+++ tomcat/trunk/java/org/apache/tomcat/util/scan/StandardJarScanner.java Thu Oct 5 19:21:18 2017
@@ -249,65 +249,73 @@ public class StandardJarScanner implemen
// loader is reached.
boolean isWebapp = true;
+ // Use a Deque so URLs can be removed as they are processed
+ // and new URLs can be added as they are discovered during
+ // processing.
+ Deque<URL> classPathUrlsToProcess = new LinkedList<>();
+
while (classLoader != null && classLoader != stopLoader) {
if (classLoader instanceof URLClassLoader) {
if (isWebapp) {
isWebapp = isWebappClassLoader(classLoader);
}
- // Use a Deque so URLs can be removed as they are processed
- // and new URLs can be added as they are discovered during
- // processing.
- Deque<URL> classPathUrlsToProcess = new LinkedList<>();
classPathUrlsToProcess.addAll(
Arrays.asList(((URLClassLoader) classLoader).getURLs()));
- if (JreCompat.isJre9Available()) {
- // The application and platform class loaders are not
- // instances of URLClassLoader. Use the class path in this
- // case.
- addClassPath(classPathUrlsToProcess);
+ processURLs(scanType, callback, processedURLs, isWebapp, classPathUrlsToProcess);
+ }
+ classLoader = classLoader.getParent();
+ }
- // TODO Java 9 module path
- }
+ if (JreCompat.isJre9Available()) {
+ // The application and platform class loaders are not
+ // instances of URLClassLoader. Use the class path in this
+ // case.
+ addClassPath(classPathUrlsToProcess);
+ processURLs(scanType, callback, processedURLs, false, classPathUrlsToProcess);
+
+ // TODO Java 9 module path
+ }
+ }
+
+
+ protected void processURLs(JarScanType scanType, JarScannerCallback callback,
+ Set<URL> processedURLs, boolean isWebapp, Deque<URL> classPathUrlsToProcess) {
+ while (!classPathUrlsToProcess.isEmpty()) {
+ URL url = classPathUrlsToProcess.pop();
+
+ if (processedURLs.contains(url)) {
+ // Skip this URL it has already been processed
+ continue;
+ }
- while (!classPathUrlsToProcess.isEmpty()) {
- URL url = classPathUrlsToProcess.pop();
+ ClassPathEntry cpe = new ClassPathEntry(url);
- if (processedURLs.contains(url)) {
- // Skip this URL it has already been processed
- continue;
- }
-
- ClassPathEntry cpe = new ClassPathEntry(url);
-
- // JARs are scanned unless the filter says not to.
- // Directories are scanned for pluggability scans or
- // if scanAllDirectories is enabled unless the
- // filter says not to.
- if ((cpe.isJar() ||
- scanType == JarScanType.PLUGGABILITY ||
- isScanAllDirectories()) &&
- getJarScanFilter().check(scanType,
- cpe.getName())) {
- if (log.isDebugEnabled()) {
- log.debug(sm.getString("jarScan.classloaderJarScan", url));
- }
- try {
- processedURLs.add(url);
- process(scanType, callback, url, null, isWebapp, classPathUrlsToProcess);
- } catch (IOException ioe) {
- log.warn(sm.getString("jarScan.classloaderFail", url), ioe);
- }
- } else {
- // JAR / directory has been skipped
- if (log.isTraceEnabled()) {
- log.trace(sm.getString("jarScan.classloaderJarNoScan", url));
- }
- }
+ // JARs are scanned unless the filter says not to.
+ // Directories are scanned for pluggability scans or
+ // if scanAllDirectories is enabled unless the
+ // filter says not to.
+ if ((cpe.isJar() ||
+ scanType == JarScanType.PLUGGABILITY ||
+ isScanAllDirectories()) &&
+ getJarScanFilter().check(scanType,
+ cpe.getName())) {
+ if (log.isDebugEnabled()) {
+ log.debug(sm.getString("jarScan.classloaderJarScan", url));
+ }
+ try {
+ processedURLs.add(url);
+ process(scanType, callback, url, null, isWebapp, classPathUrlsToProcess);
+ } catch (IOException ioe) {
+ log.warn(sm.getString("jarScan.classloaderFail", url), ioe);
+ }
+ } else {
+ // JAR / directory has been skipped
+ if (log.isTraceEnabled()) {
+ log.trace(sm.getString("jarScan.classloaderJarNoScan", url));
}
}
- classLoader = classLoader.getParent();
}
}
---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@tomcat.apache.org
For additional commands, e-mail: dev-help@tomcat.apache.org