Skip to content

Commit

Permalink
Improve performance of classpathmanager find by keeping track of any …
Browse files Browse the repository at this point in the history
…items which weren't previously found.
  • Loading branch information
harrisric committed Apr 24, 2024
1 parent 7d19004 commit 43c7ea0
Showing 1 changed file with 21 additions and 12 deletions.
33 changes: 21 additions & 12 deletions weaver/src/main/java/org/aspectj/weaver/bcel/ClassPathManager.java
Original file line number Diff line number Diff line change
Expand Up @@ -31,9 +31,11 @@
import java.util.ArrayList;
import java.util.Enumeration;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.zip.ZipEntry;
import java.util.zip.ZipFile;

Expand Down Expand Up @@ -61,28 +63,30 @@ public class ClassPathManager {

private static final int MAXOPEN_DEFAULT = 1000;

private List<Entry> entries;
private final List<Entry> entries;

private final Set<String> notFound = new HashSet<>(100);

// In order to control how many open files we have, we maintain a list.
// The max number is configured through the property:
// org.aspectj.weaver.openarchives
// and it defaults to 1000
private List<ZipFile> openArchives = new ArrayList<>();
private final List<ZipFile> openArchives = new ArrayList<>();

static {
String openzipsString = getSystemPropertyWithoutSecurityException("org.aspectj.weaver.openarchives",
Integer.toString(MAXOPEN_DEFAULT));
maxOpenArchives = Integer.parseInt(openzipsString);
if (maxOpenArchives < 20) {
maxOpenArchives = 1000;
maxOpenArchives = MAXOPEN_DEFAULT;
}
}

public ClassPathManager(List<String> classpath, IMessageHandler handler) {
if (trace.isTraceEnabled()) {
trace.enter("<init>", this, new Object[] { classpath==null?"null":classpath.toString(), handler });
}
entries = new ArrayList<>();
entries = new ArrayList<>(classpath == null ? 1 : classpath.size());
for (String classpathEntry: classpath) {
addPath(classpathEntry,handler);
}
Expand All @@ -92,6 +96,7 @@ public ClassPathManager(List<String> classpath, IMessageHandler handler) {
}

protected ClassPathManager() {
entries = null;
}

public void addPath(String name, IMessageHandler handler) {
Expand Down Expand Up @@ -127,6 +132,9 @@ public ClassFile find(UnresolvedType type) {
trace.enter("find", this, type);
}
String name = type.getName();
if (notFound.contains(name)) {
return null;
}
for (Iterator<Entry> i = entries.iterator(); i.hasNext();) {
Entry entry = i.next();
try {
Expand All @@ -151,6 +159,7 @@ public ClassFile find(UnresolvedType type) {
if (trace.isTraceEnabled()) {
trace.exit("find", null);
}
notFound.add(name);
return null;
}

Expand Down Expand Up @@ -181,9 +190,9 @@ abstract static class Entry {

static class ByteBasedClassFile extends ClassFile {

private byte[] bytes;
private final byte[] bytes;
private ByteArrayInputStream bais;
private String path;
private final String path;

public ByteBasedClassFile(byte[] bytes, String path) {
this.bytes = bytes;
Expand Down Expand Up @@ -215,7 +224,7 @@ public void close() {
}

static class FileClassFile extends ClassFile {
private File file;
private final File file;
private FileInputStream fis;

public FileClassFile(File file) {
Expand Down Expand Up @@ -247,7 +256,7 @@ public String getPath() {
}

class DirEntry extends Entry {
private String dirPath;
private final String dirPath;

public DirEntry(File dir) {
this.dirPath = dir.getPath();
Expand All @@ -273,8 +282,8 @@ public String toString() {
}

static class ZipEntryClassFile extends ClassFile {
private ZipEntry entry;
private ZipFileEntry zipFile;
private final ZipEntry entry;
private final ZipFileEntry zipFile;
private InputStream is;

public ZipEntryClassFile(ZipFileEntry zipFile, ZipEntry entry) {
Expand Down Expand Up @@ -407,7 +416,7 @@ private synchronized void buildPackageMap() {
class TypeIdentifier extends SimpleFileVisitor<Path> {

// What are we looking for?
private String name;
private final String name;

// If set, where did we find it?
public Path found;
Expand Down Expand Up @@ -586,7 +595,7 @@ public String toString() {
}

/* private */static boolean hasClassExtension(String name) {
return name.toLowerCase().endsWith((".class"));
return name.toLowerCase().endsWith(".class");
}

public void closeArchives() {
Expand Down

0 comments on commit 43c7ea0

Please sign in to comment.