From e07dacb6336beba3fb0ced91884fee2fb08b1ac3 Mon Sep 17 00:00:00 2001 From: nik Date: Wed, 22 Aug 2012 09:28:33 +0400 Subject: [PATCH] fixed memory leak in tests --- .../compiler/server/BuildManager.java | 6 ++++ .../intellij/compiler/CompilerTestUtil.java | 28 +++++++++++++++++++ .../compiler/GroovyCompilerTestCase.java | 22 ++------------- 3 files changed, 37 insertions(+), 19 deletions(-) diff --git a/java/compiler/impl/src/com/intellij/compiler/server/BuildManager.java b/java/compiler/impl/src/com/intellij/compiler/server/BuildManager.java index 2980b7862698..14c5e330f782 100644 --- a/java/compiler/impl/src/com/intellij/compiler/server/BuildManager.java +++ b/java/compiler/impl/src/com/intellij/compiler/server/BuildManager.java @@ -77,6 +77,7 @@ import org.jboss.netty.handler.codec.protobuf.ProtobufVarint32LengthFieldPrepend import org.jdom.Element; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import org.jetbrains.annotations.TestOnly; import org.jetbrains.jps.api.*; import org.jetbrains.jps.cmdline.BuildMain; import org.jetbrains.jps.cmdline.ClasspathBootstrap; @@ -916,6 +917,11 @@ public class BuildManager implements ApplicationComponent{ return listenPort; } + @TestOnly + public void stopWatchingProject(Project project) { + myProjectDataMap.remove(getProjectPath(project)); + } + private static String classpathToString(List cp) { StringBuilder builder = new StringBuilder(); for (File file : cp) { diff --git a/java/compiler/impl/testSrc/com/intellij/compiler/CompilerTestUtil.java b/java/compiler/impl/testSrc/com/intellij/compiler/CompilerTestUtil.java index fccbe1606c53..120e1518ef2d 100644 --- a/java/compiler/impl/testSrc/com/intellij/compiler/CompilerTestUtil.java +++ b/java/compiler/impl/testSrc/com/intellij/compiler/CompilerTestUtil.java @@ -2,8 +2,13 @@ package com.intellij.compiler; import com.intellij.compiler.impl.TranslatingCompilerFilesMonitor; import com.intellij.compiler.impl.javaCompiler.javac.JavacSettings; +import com.intellij.compiler.server.BuildManager; +import com.intellij.openapi.application.Result; +import com.intellij.openapi.application.WriteAction; +import com.intellij.openapi.application.ex.ApplicationManagerEx; import com.intellij.openapi.project.Project; import com.intellij.openapi.projectRoots.ProjectJdkTable; +import com.intellij.openapi.projectRoots.impl.JavaAwareProjectJdkTableImpl; import com.intellij.openapi.projectRoots.impl.ProjectJdkTableImpl; import com.intellij.openapi.roots.ProjectRootManager; import com.intellij.openapi.util.JDOMUtil; @@ -55,4 +60,27 @@ public class CompilerTestUtil { throw new RuntimeException(e); } } + + public static void enableExternalCompiler(final Project project) { + new WriteAction() { + protected void run(final Result result) { + CompilerWorkspaceConfiguration.getInstance(project).USE_COMPILE_SERVER = true; + ApplicationManagerEx.getApplicationEx().doNotSave(false); + JavaAwareProjectJdkTableImpl table = JavaAwareProjectJdkTableImpl.getInstanceEx(); + table.addJdk(table.getInternalJdk()); + } + }.execute(); + } + + public static void disableExternalCompiler(final Project project) { + new WriteAction() { + protected void run(final Result result) { + CompilerWorkspaceConfiguration.getInstance(project).USE_COMPILE_SERVER = false; + ApplicationManagerEx.getApplicationEx().doNotSave(true); + JavaAwareProjectJdkTableImpl table = JavaAwareProjectJdkTableImpl.getInstanceEx(); + table.removeJdk(table.getInternalJdk()); + BuildManager.getInstance().stopWatchingProject(project); + } + }.execute(); + } } diff --git a/plugins/groovy/test/org/jetbrains/plugins/groovy/compiler/GroovyCompilerTestCase.java b/plugins/groovy/test/org/jetbrains/plugins/groovy/compiler/GroovyCompilerTestCase.java index 86900f6c8145..7ab37ba8e41e 100644 --- a/plugins/groovy/test/org/jetbrains/plugins/groovy/compiler/GroovyCompilerTestCase.java +++ b/plugins/groovy/test/org/jetbrains/plugins/groovy/compiler/GroovyCompilerTestCase.java @@ -17,7 +17,6 @@ package org.jetbrains.plugins.groovy.compiler; import com.intellij.compiler.CompilerManagerImpl; import com.intellij.compiler.CompilerTestUtil; -import com.intellij.compiler.CompilerWorkspaceConfiguration; import com.intellij.execution.ExecutionException; import com.intellij.execution.Executor; import com.intellij.execution.application.ApplicationConfiguration; @@ -33,14 +32,12 @@ import com.intellij.openapi.Disposable; import com.intellij.openapi.application.AccessToken; import com.intellij.openapi.application.Result; import com.intellij.openapi.application.WriteAction; -import com.intellij.openapi.application.ex.ApplicationManagerEx; import com.intellij.openapi.command.WriteCommandAction; import com.intellij.openapi.compiler.*; import com.intellij.openapi.module.ModifiableModuleModel; import com.intellij.openapi.module.Module; import com.intellij.openapi.module.ModuleManager; import com.intellij.openapi.module.StdModuleTypes; -import com.intellij.openapi.projectRoots.Sdk; import com.intellij.openapi.projectRoots.impl.JavaAwareProjectJdkTableImpl; import com.intellij.openapi.projectRoots.impl.JavaSdkImpl; import com.intellij.openapi.roots.*; @@ -94,13 +91,8 @@ public abstract class GroovyCompilerTestCase extends JavaCodeInsightFixtureTestC //noinspection ConstantConditions CompilerProjectExtension.getInstance(getProject()).setCompilerOutputUrl(myMainOutput.findOrCreateDir("out").getUrl()); if (useJps()) { - ApplicationManagerEx.getApplicationEx().doNotSave(false); - CompilerWorkspaceConfiguration.getInstance(getProject()).USE_COMPILE_SERVER = true; - - JavaAwareProjectJdkTableImpl jdkTable = JavaAwareProjectJdkTableImpl.getInstanceEx(); - Sdk internalJdk = jdkTable.getInternalJdk(); - jdkTable.addJdk(internalJdk); - ModuleRootModificationUtil.setModuleSdk(myModule, internalJdk); + CompilerTestUtil.enableExternalCompiler(getProject()); + ModuleRootModificationUtil.setModuleSdk(myModule, JavaAwareProjectJdkTableImpl.getInstanceEx().getInternalJdk()); } } }.execute(); @@ -125,15 +117,7 @@ public abstract class GroovyCompilerTestCase extends JavaCodeInsightFixtureTestC public void run() { try { if (useJps()) { - CompilerWorkspaceConfiguration.getInstance(getProject()).USE_COMPILE_SERVER = false; - ApplicationManagerEx.getApplicationEx().doNotSave(true); - new WriteCommandAction(getProject()) { - @Override - protected void run(Result result) throws Throwable { - final JavaAwareProjectJdkTableImpl jdkTable = JavaAwareProjectJdkTableImpl.getInstanceEx(); - jdkTable.removeJdk(jdkTable.getInternalJdk()); - } - }.execute(); + CompilerTestUtil.disableExternalCompiler(getProject()); } myMainOutput.tearDown();