in src/com/intellij/rt/coverage/util/classFinder/ClassPathEntry.java [92:125]
private void collectClasses(final String curPath, final File parent, final ClassEntry.Consumer consumer, final InputStream[] is) {
File[] files = parent.listFiles();
if (files != null) {
String prefix = curPath.isEmpty() ? "" : curPath + ".";
// force anonymous classes to come after its outer class
Arrays.sort(files, new Comparator<File>() {
public int compare(File o1, File o2) {
return ClassNameUtil.removeClassSuffix(o1.getName()).compareTo(ClassNameUtil.removeClassSuffix(o2.getName()));
}
});
for (final File f : files) {
final String name = f.getName();
if (name.endsWith(ClassNameUtil.CLASS_FILE_SUFFIX)) {
final String className = prefix + ClassNameUtil.removeClassSuffix(name);
if (shouldInclude(className)) {
is[0] = null;
try {
consumer.consume(new ClassEntry(className) {
@Override
public InputStream getClassInputStream() throws IOException {
is[0] = new FileInputStream(f);
return is[0];
}
});
} finally {
CoverageIOUtil.close(is[0]);
}
}
} else if (f.isDirectory()) {
collectClasses(prefix + name, f, consumer, is);
}
}
}
}