From d57ea9dc8626d0af366b391fc987eee058e869ae Mon Sep 17 00:00:00 2001 From: Anna Kozlova Date: Wed, 29 Jul 2015 17:49:09 +0200 Subject: [PATCH] write history right into file to avoid OOME --- .../actions/AbstractImportTestsAction.java | 2 +- .../sm/runner/ui/SMTestRunnerResultsForm.java | 35 +++++++------------ 2 files changed, 14 insertions(+), 23 deletions(-) diff --git a/platform/smRunner/src/com/intellij/execution/testframework/sm/runner/history/actions/AbstractImportTestsAction.java b/platform/smRunner/src/com/intellij/execution/testframework/sm/runner/history/actions/AbstractImportTestsAction.java index 109f1b8ca9f9..a95c3c3011c8 100644 --- a/platform/smRunner/src/com/intellij/execution/testframework/sm/runner/history/actions/AbstractImportTestsAction.java +++ b/platform/smRunner/src/com/intellij/execution/testframework/sm/runner/history/actions/AbstractImportTestsAction.java @@ -128,7 +128,7 @@ public abstract class AbstractImportTestsAction extends AnAction { int historySize = getHistorySize(); final File[] files = getTestHistoryRoot(project).listFiles(); - if (files != null && files.length >= historySize) { + if (files != null && files.length >= historySize + 1) { Arrays.sort(files, new Comparator() { @Override public int compare(File o1, File o2) { diff --git a/platform/smRunner/src/com/intellij/execution/testframework/sm/runner/ui/SMTestRunnerResultsForm.java b/platform/smRunner/src/com/intellij/execution/testframework/sm/runner/ui/SMTestRunnerResultsForm.java index d736b9550f29..0ab67c1325d5 100644 --- a/platform/smRunner/src/com/intellij/execution/testframework/sm/runner/ui/SMTestRunnerResultsForm.java +++ b/platform/smRunner/src/com/intellij/execution/testframework/sm/runner/ui/SMTestRunnerResultsForm.java @@ -41,7 +41,6 @@ import com.intellij.openapi.progress.util.ColorProgressBar; import com.intellij.openapi.project.Project; import com.intellij.openapi.util.Disposer; import com.intellij.openapi.util.Pass; -import com.intellij.openapi.util.io.FileUtil; import com.intellij.openapi.util.registry.Registry; import com.intellij.openapi.util.text.StringUtil; import com.intellij.openapi.wm.IdeFocusManager; @@ -67,8 +66,7 @@ import java.awt.*; import java.awt.event.InputEvent; import java.awt.event.KeyEvent; import java.io.File; -import java.io.IOException; -import java.io.StringWriter; +import java.io.FileWriter; import java.text.SimpleDateFormat; import java.util.*; import java.util.List; @@ -789,7 +787,7 @@ public class SMTestRunnerResultsForm extends TestResultsPanel private final TestConsoleProperties myConsoleProperties; private SMTestProxy.SMRootTestProxy myRoot; private RunConfiguration myConfiguration; - private String myOutput; + private File myOutputFile; public MySaveHistoryTask(TestConsoleProperties consoleProperties, SMTestProxy.SMRootTestProxy root, RunConfiguration configuration) { super(consoleProperties.getProject(), "Save Test Results", true); @@ -806,14 +804,16 @@ public class SMTestRunnerResultsForm extends TestResultsPanel handler.getTransformer().setOutputProperty(OutputKeys.INDENT, "yes"); handler.getTransformer().setOutputProperty("{http://xml.apache.org/xslt}indent-amount", "4"); - StringWriter w = new StringWriter(); - handler.setResult(new StreamResult(w)); + final String configurationNameIncludedDate = PathUtil.suggestFileName(myConfiguration.getName()) + " - " + + new SimpleDateFormat(HISTORY_DATE_FORMAT).format(new Date()); + + myOutputFile = new File(AbstractImportTestsAction.getTestHistoryRoot(myProject), configurationNameIncludedDate + ".xml"); + handler.setResult(new StreamResult(new FileWriter(myOutputFile))); final SMTestProxy.SMRootTestProxy root = myRoot; final RunConfiguration configuration = myConfiguration; if (root != null && configuration != null) { TestResultsXmlFormatter.execute(root, configuration, myConsoleProperties, handler); } - myOutput = w.toString(); } catch (ProcessCanceledException e) { throw e; @@ -825,27 +825,18 @@ public class SMTestRunnerResultsForm extends TestResultsPanel @Override public void onSuccess() { - if (myOutput != null) { - try { - AbstractImportTestsAction.adjustHistory(myProject); - final String configurationNameIncludedDate = PathUtil.suggestFileName(myConfiguration.getName()) + " - " + - new SimpleDateFormat(HISTORY_DATE_FORMAT).format(new Date()); - final File file = new File(AbstractImportTestsAction.getTestHistoryRoot(myProject), configurationNameIncludedDate + ".xml"); - FileUtil.writeToFile(file, myOutput); - TestHistoryConfiguration.getInstance(myProject).registerHistoryItem(file.getName(), - myConfiguration.getName(), - myConfiguration.getType().getId()); - } - catch (IOException e) { - LOG.info("Fail to write test history", e); - } + if (myOutputFile != null && myOutputFile.exists()) { + AbstractImportTestsAction.adjustHistory(myProject); + TestHistoryConfiguration.getInstance(myProject).registerHistoryItem(myOutputFile.getName(), + myConfiguration.getName(), + myConfiguration.getType().getId()); } } public void dispose() { myConfiguration = null; myRoot = null; - myOutput = null; + myOutputFile = null; } } }