diff --git a/src/main/java/za/ac/sun/cs/coastal/instrument/InstrumentationClassManager.java b/src/main/java/za/ac/sun/cs/coastal/instrument/InstrumentationClassManager.java index 2fe6b76..f3561d2 100644 --- a/src/main/java/za/ac/sun/cs/coastal/instrument/InstrumentationClassManager.java +++ b/src/main/java/za/ac/sun/cs/coastal/instrument/InstrumentationClassManager.java @@ -72,6 +72,7 @@ public class InstrumentationClassManager { private final AtomicLong postInstrumentedSize = new AtomicLong(0); private final Map clearCache = new HashMap<>(); + private static final byte[] LOAD_FILE_FAILED = new byte[0]; private final Map heavyCache = new HashMap<>(); @@ -161,7 +162,7 @@ public void endLoad(long time) { public byte[] loadUninstrumented(String name) { long t = System.currentTimeMillis(); byte[] unInstrumented = clearCache.get(name); - if (unInstrumented == null) { + if (unInstrumented == null || unInstrumented == LOAD_FILE_FAILED) { unInstrumented = loadUninstrumented0(name); } else { cacheHitCount.incrementAndGet(); @@ -176,22 +177,22 @@ private synchronized byte[] loadUninstrumented0(String name) { unInstrumented = loadFile(name.replace('.', '/').concat(".class"), false, false); clearCache.put(name, unInstrumented); } - return unInstrumented; + return unInstrumented != LOAD_FILE_FAILED ? unInstrumented : null; } /* * private static class PrefixingClassReader extends ClassReader { private final * String prefix; - * + * * PrefixingClassReader(InputStream content, String prefix) throws IOException { * super(content); this.prefix = prefix; } - * + * * @Override public void accept(ClassVisitor cv, Attribute[] attrs, int flags) { * cv = new ClassRemapper( cv, new Remapper() { - * + * * @Override public String map(String typeName) { return prefix(typeName); } }); * super.accept(cv, attrs, flags); } - * + * * Prefixes core library class names with prefix. private String prefix(String * typeName) { if (shouldPrefix(typeName)) { return prefix + typeName; } return * typeName; } } @@ -403,7 +404,7 @@ private byte[] loadFile(String filename, boolean tryResource, boolean tryJar) { } } } - return null; + return LOAD_FILE_FAILED; } private byte[] loadFromJar(String jarFilename, String filename) {