diff --git a/compiler/tests/org/jetbrains/kotlin/codegen/StdlibTest.java b/compiler/tests/org/jetbrains/kotlin/codegen/StdlibTest.java index dc9ebad9adf..b2b865947e2 100644 --- a/compiler/tests/org/jetbrains/kotlin/codegen/StdlibTest.java +++ b/compiler/tests/org/jetbrains/kotlin/codegen/StdlibTest.java @@ -47,6 +47,8 @@ import java.io.File; import java.lang.reflect.Modifier; public class StdlibTest extends KotlinTestWithEnvironment { + private GeneratedClassLoader classLoader; + @Override protected KotlinCoreEnvironment createEnvironment() { CompilerConfiguration configuration = KotlinTestUtils.compilerConfigurationForTests(ConfigurationKind.ALL, TestJdkKind.FULL_JDK); @@ -68,9 +70,7 @@ public class StdlibTest extends KotlinTestWithEnvironment { fail("There were compilation errors"); } - GeneratedClassLoader classLoader = new GeneratedClassLoader( - state.getFactory(), ForTestCompileRuntime.runtimeAndReflectJarClassLoader() - ) { + classLoader = new GeneratedClassLoader(state.getFactory(), ForTestCompileRuntime.runtimeAndReflectJarClassLoader()) { @Override public Class loadClass(@NotNull String name) throws ClassNotFoundException { if (name.startsWith("junit.") || name.startsWith("org.junit.")) { @@ -107,6 +107,14 @@ public class StdlibTest extends KotlinTestWithEnvironment { } } + @Override + protected void tearDown() throws Exception { + super.tearDown(); + + // This is important to prevent a memory leak (ClassFileFactory transitively retains all code generation results) + classLoader.dispose(); + } + @Nullable private static Test createTest(@NotNull ClassLoader classLoader, @NotNull String className) { try {