From 9cf0ee63c8424074fa423c35eb9810abd23f0ef2 Mon Sep 17 00:00:00 2001 From: Eugene Zhuravlev Date: Mon, 17 Jun 2013 09:59:53 +0400 Subject: [PATCH] optimization: do not attempt to load bytecode second time for missing classes --- .../InstrumentationClassFinder.java | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/java/compiler/instrumentation-util/src/com/intellij/compiler/instrumentation/InstrumentationClassFinder.java b/java/compiler/instrumentation-util/src/com/intellij/compiler/instrumentation/InstrumentationClassFinder.java index 77a13ad1d844..3716f4d540ef 100644 --- a/java/compiler/instrumentation-util/src/com/intellij/compiler/instrumentation/InstrumentationClassFinder.java +++ b/java/compiler/instrumentation-util/src/com/intellij/compiler/instrumentation/InstrumentationClassFinder.java @@ -101,7 +101,7 @@ public class InstrumentationClassFinder { return aClass; } - final InputStream is = aClass == null? getClassBytesAsStream(internalName) : null; + final InputStream is = aClass == null? getClassBytesStream(internalName) : null; if (is == null) { if (aClass == null) { @@ -132,6 +132,23 @@ public class InstrumentationClassFinder { public InputStream getClassBytesAsStream(String className) throws IOException { final String internalName = className.replace('.', '/'); // normalize + final PseudoClass aClass = myLoaded.get(internalName); + if (aClass == PseudoClass.NULL_OBJ) { + return null; + } + InputStream bytes = null; + try { + bytes = getClassBytesStream(internalName); + } + finally { + if (aClass == null && bytes == null) { + myLoaded.put(internalName, PseudoClass.NULL_OBJ); + } + } + return bytes; + } + + private InputStream getClassBytesStream(String internalName) throws IOException { InputStream is = null; // first look into platformCp final String resourceName = internalName + CLASS_RESOURCE_EXTENSION;