📄 filesiterable.java
字号:
package org.codehaus.classloader;
import java.io.File;
import java.io.FileFilter;
import java.lang.ref.WeakReference;
import java.net.URL;
import java.util.HashMap;
import java.util.Iterator;
import java.util.NoSuchElementException;
class FilesIterable {
private final HashMap cache = new HashMap();
private WeakReference baseref = null;
private ClassProvider getBaseClassLoader(ClassLoaderManager man, final ClassLoader parent,
final URL[] base){
ClassProvider result = getCachedBaseClassProvider();
if(result == null){
result = new ManagedURLClassLoader(man, base, parent);
baseref = new WeakReference(result);
}
return result;
}
private ClassProvider getCachedBaseClassProvider(){
if(baseref == null) return null;
return (ClassProvider)baseref.get();
}
private ClassProvider getCachedClassProvider(File key){
final WeakReference ref = (WeakReference)cache.get(key);
if(ref==null) return null;
return (ClassProvider)ref.get();
}
private void cacheClassLoader(File key, ClassProvider provider){
cache.put(key, new WeakReference(provider));
}
Iterator iterateFiles(final ClassLoaderManager man, final ClassLoader parent,
final URL[] base, final File[] files, final FileFilter filter) {
return new Iterator(){
private int at = (base==null||base.length==0)?0:-1;
public boolean hasNext() {
return at<files.length;
}
public Object next() {
synchronized(cache){
if(!hasNext()){
throw new NoSuchElementException();
}
if(at==-1){
at = 0;
return getBaseClassLoader(man, parent, base);
}
final File file = files[at++];
ClassProvider cur = getCachedClassProvider(file);
if(file.isDirectory()){
if(cur==null){
cur = new FileTreeClassLoaderManager(man, parent, null, file, filter);
cacheClassLoader(file, cur);
}
}
else{
if(cur == null || ((ManagedFileClassLoader)cur).getTimestamp() < file.lastModified()){
cur = new ManagedFileClassLoader(man, file, parent);
cacheClassLoader(file, cur);
}
}
return cur;
}
}
public void remove() {
throw new UnsupportedOperationException();
}
};
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -