From 4f967363a62b362e9e80f3e38ec069f35b913fc8 Mon Sep 17 00:00:00 2001 From: Andrey Breslav Date: Thu, 25 Apr 2013 21:39:07 +0400 Subject: [PATCH] More callbacks in preloader --- .../jet/preloading/ClassPreloadingUtils.java | 32 ++++++++++++++++--- 1 file changed, 27 insertions(+), 5 deletions(-) diff --git a/compiler/preloader/src/org/jetbrains/jet/preloading/ClassPreloadingUtils.java b/compiler/preloader/src/org/jetbrains/jet/preloading/ClassPreloadingUtils.java index 975b8762ba5..e2586a57d5f 100644 --- a/compiler/preloader/src/org/jetbrains/jet/preloading/ClassPreloadingUtils.java +++ b/compiler/preloader/src/org/jetbrains/jet/preloading/ClassPreloadingUtils.java @@ -29,8 +29,12 @@ import java.util.zip.ZipInputStream; public class ClassPreloadingUtils { - public interface ClassHandler { - void beforeDefineClass(String name, int sizeInBytes); + public static abstract class ClassHandler { + public void beforeDefineClass(String name, int sizeInBytes) {} + public void afterDefineClass(String name) {} + + public void beforeLoadJar(File jarFile) {} + public void afterLoadJar(File jarFile) {} } /** @@ -48,7 +52,7 @@ public class ClassPreloadingUtils { public static ClassLoader preloadClasses( Collection jarFiles, int classCountEstimation, ClassLoader parent, ClassHandler handler ) throws IOException { - Map entries = loadAllClassesFromJars(jarFiles, classCountEstimation); + Map entries = loadAllClassesFromJars(jarFiles, classCountEstimation, handler); return createMemoryBasedClassLoader(parent, entries, handler); } @@ -86,7 +90,13 @@ public class ClassPreloadingUtils { handler.beforeDefineClass(name, sizeInBytes); } - return defineClass(name, resourceData.bytes, 0, sizeInBytes); + Class definedClass = defineClass(name, resourceData.bytes, 0, sizeInBytes); + + if (handler != null) { + handler.afterDefineClass(name); + } + + return definedClass; } @Override @@ -108,10 +118,18 @@ public class ClassPreloadingUtils { }; } - private static Map loadAllClassesFromJars(Collection jarFiles, int classNumberEstimate) throws IOException { + private static Map loadAllClassesFromJars( + Collection jarFiles, + int classNumberEstimate, + ClassHandler handler + ) throws IOException { Map resources = new HashMap(classNumberEstimate); for (File jarFile : jarFiles) { + if (handler != null) { + handler.beforeLoadJar(jarFile); + } + FileInputStream fileInputStream = new FileInputStream(jarFile); try { byte[] buffer = new byte[10 * 1024]; @@ -144,6 +162,10 @@ public class ClassPreloadingUtils { // Ignore } } + + if (handler != null) { + handler.afterLoadJar(jarFile); + } } return resources; }