From 451c65e1239857fdf15b02aace0e4a31b5107c61 Mon Sep 17 00:00:00 2001 From: Roman Shevchenko Date: Thu, 5 Jan 2017 19:18:09 +0100 Subject: [PATCH] Cleanup (unifies VM options bean API) --- .../diagnostic/OutOfMemoryDialog.java | 4 +- .../com/intellij/diagnostic/VMOptions.java | 74 +++++++++--------- .../intellij/diagnostic/VMOptionsTest.java | 76 +++++++------------ 3 files changed, 67 insertions(+), 87 deletions(-) diff --git a/platform/platform-impl/src/com/intellij/diagnostic/OutOfMemoryDialog.java b/platform/platform-impl/src/com/intellij/diagnostic/OutOfMemoryDialog.java index 43e554b37965..ac868c36a1c8 100644 --- a/platform/platform-impl/src/com/intellij/diagnostic/OutOfMemoryDialog.java +++ b/platform/platform-impl/src/com/intellij/diagnostic/OutOfMemoryDialog.java @@ -137,13 +137,13 @@ public class OutOfMemoryDialog extends DialogWrapper { private void save() { try { int heapSize = Integer.parseInt(myHeapSizeField.getText()); - VMOptions.writeXmx(heapSize); + VMOptions.writeOption(MemoryKind.HEAP, heapSize); } catch (NumberFormatException ignored) { } try { int codeCacheSize = Integer.parseInt(myCodeCacheSizeField.getText()); - VMOptions.writeCodeCache(codeCacheSize); + VMOptions.writeOption(MemoryKind.CODE_CACHE, codeCacheSize); } catch (NumberFormatException ignored) { } } diff --git a/platform/platform-impl/src/com/intellij/diagnostic/VMOptions.java b/platform/platform-impl/src/com/intellij/diagnostic/VMOptions.java index 3c60a9315ddf..cadf2260b988 100644 --- a/platform/platform-impl/src/com/intellij/diagnostic/VMOptions.java +++ b/platform/platform-impl/src/com/intellij/diagnostic/VMOptions.java @@ -22,6 +22,7 @@ import com.intellij.openapi.util.SystemInfo; import com.intellij.openapi.util.io.FileUtil; import com.intellij.openapi.util.text.StringUtil; import com.intellij.util.SystemProperties; +import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import org.jetbrains.annotations.TestOnly; @@ -42,7 +43,7 @@ public class VMOptions { public final String optionName; public final String option; - public final Pattern pattern; + private final Pattern pattern; MemoryKind(String name, String separator) { optionName = name; @@ -51,42 +52,9 @@ public class VMOptions { } } - public static int readXmx() { - return readOption(MemoryKind.HEAP, true); - } - - public static int readMaxPermGen() { - return readOption(MemoryKind.PERM_GEN, true); - } - - public static int readCodeCache() { - return readOption(MemoryKind.CODE_CACHE, true); - } - - public static void writeXmx(int value) { - writeOption(MemoryKind.HEAP, value); - } - - public static void writeMaxPermGen(int value) { - writeOption(MemoryKind.PERM_GEN, value); - } - - public static void writeCodeCache(int value) { - writeOption(MemoryKind.CODE_CACHE, value); - } - - public static int readOption(MemoryKind kind, boolean effective) { + public static int readOption(@NotNull MemoryKind kind, boolean effective) { List arguments; - if (ourTestPath != null) { - try { - String content = FileUtil.loadFile(new File(ourTestPath)); - arguments = Collections.singletonList(content); - } - catch (IOException e) { - throw new RuntimeException(e); - } - } - else if (effective) { + if (effective) { arguments = ManagementFactory.getRuntimeMXBean().getInputArguments(); } else { @@ -129,7 +97,7 @@ public class VMOptions { return 1; } - private static void writeOption(MemoryKind option, int value) { + public static void writeOption(@NotNull MemoryKind option, int value) { File file = getWriteFile(); if (file == null) { LOG.warn("VM options file not configured"); @@ -231,4 +199,36 @@ public class VMOptions { static void clearTestFile() { ourTestPath = null; } + + // + /** @deprecated use {@link #readOption(MemoryKind, boolean)} (to be removed in IDEA 2018) */ + public static int readXmx() { + return readOption(MemoryKind.HEAP, true); + } + + /** @deprecated use {@link #readOption(MemoryKind, boolean)} (to be removed in IDEA 2018) */ + public static int readMaxPermGen() { + return readOption(MemoryKind.PERM_GEN, true); + } + + /** @deprecated use {@link #readOption(MemoryKind, boolean)} (to be removed in IDEA 2018) */ + public static int readCodeCache() { + return readOption(MemoryKind.CODE_CACHE, true); + } + + /** @deprecated use {@link #writeOption(MemoryKind, int)} (to be removed in IDEA 2018) */ + public static void writeXmx(int value) { + writeOption(MemoryKind.HEAP, value); + } + + /** @deprecated use {@link #writeOption(MemoryKind, int)} (to be removed in IDEA 2018) */ + public static void writeMaxPermGen(int value) { + writeOption(MemoryKind.PERM_GEN, value); + } + + /** @deprecated use {@link #writeOption(MemoryKind, int)} (to be removed in IDEA 2018) */ + public static void writeCodeCache(int value) { + writeOption(MemoryKind.CODE_CACHE, value); + } + // } \ No newline at end of file diff --git a/platform/platform-tests/testSrc/com/intellij/diagnostic/VMOptionsTest.java b/platform/platform-tests/testSrc/com/intellij/diagnostic/VMOptionsTest.java index 9c32bf8c8ab1..529ba651c3e3 100644 --- a/platform/platform-tests/testSrc/com/intellij/diagnostic/VMOptionsTest.java +++ b/platform/platform-tests/testSrc/com/intellij/diagnostic/VMOptionsTest.java @@ -24,11 +24,9 @@ import org.junit.Test; import java.io.File; import java.io.IOException; -import java.util.regex.Matcher; -import java.util.regex.Pattern; import static org.assertj.core.api.Assertions.assertThat; -import static org.junit.Assert.*; +import static org.junit.Assert.assertEquals; public class VMOptionsTest { @Rule public TempDirectory myTempDir = new TempDirectory(); @@ -47,100 +45,82 @@ public class VMOptionsTest { VMOptions.clearTestFile(); } - @Test - public void testRegExpr() { - Pattern p = VMOptions.MemoryKind.HEAP.pattern; - - Matcher m = p.matcher("-option -Xmx128mb -option"); - assertTrue(m.find()); - assertEquals("128", m.group(1)); - assertEquals("mb", m.group(2)); - - m = p.matcher("-option -Xmx -option"); - assertTrue(m.find()); - assertEquals("", m.group(1)); - assertEquals("", m.group(2)); - - m = p.matcher("-option -Xxx -option"); - assertFalse(m.find()); - } - @Test public void testReading() { - assertEquals(512, VMOptions.readXmx()); - assertEquals(128, VMOptions.readMaxPermGen()); + assertEquals(512, VMOptions.readOption(VMOptions.MemoryKind.HEAP, false)); + assertEquals(128, VMOptions.readOption(VMOptions.MemoryKind.PERM_GEN, false)); } @Test public void testReadingEmpty() throws IOException { FileUtil.writeToFile(myFile, ""); - assertEquals(-1, VMOptions.readXmx()); - assertEquals(-1, VMOptions.readMaxPermGen()); + assertEquals(-1, VMOptions.readOption(VMOptions.MemoryKind.HEAP, false)); + assertEquals(-1, VMOptions.readOption(VMOptions.MemoryKind.PERM_GEN, false)); } @Test public void testReadingKilos() throws IOException { FileUtil.writeToFile(myFile, "-Xmx512000k -XX:MaxPermSize=128000K -XX:ReservedCodeCacheSize=256000K"); - assertEquals(512000 / 1024, VMOptions.readXmx()); - assertEquals(128000 / 1024, VMOptions.readMaxPermGen()); - assertEquals(256000 / 1024, VMOptions.readCodeCache()); + assertEquals(512000 / 1024, VMOptions.readOption(VMOptions.MemoryKind.HEAP, false)); + assertEquals(128000 / 1024, VMOptions.readOption(VMOptions.MemoryKind.PERM_GEN, false)); + assertEquals(256000 / 1024, VMOptions.readOption(VMOptions.MemoryKind.CODE_CACHE, false)); } @Test public void testReadingGigs() throws IOException { FileUtil.writeToFile(myFile, "-Xmx512g\n-XX:MaxPermSize=128G"); - assertEquals(512 * 1024, VMOptions.readXmx()); - assertEquals(128 * 1024, VMOptions.readMaxPermGen()); + assertEquals(512 * 1024, VMOptions.readOption(VMOptions.MemoryKind.HEAP, false)); + assertEquals(128 * 1024, VMOptions.readOption(VMOptions.MemoryKind.PERM_GEN, false)); } @Test public void testReadingWithoutUnit() throws IOException { FileUtil.writeToFile(myFile, "-Xmx512\n-XX:MaxPermSize=128"); - assertEquals(512, VMOptions.readXmx()); - assertEquals(128, VMOptions.readMaxPermGen()); + assertEquals(512, VMOptions.readOption(VMOptions.MemoryKind.HEAP, false)); + assertEquals(128, VMOptions.readOption(VMOptions.MemoryKind.PERM_GEN, false)); } @Test public void testWriting() throws IOException { - VMOptions.writeXmx(1024); - VMOptions.writeMaxPermGen(512); + VMOptions.writeOption(VMOptions.MemoryKind.HEAP, 1024); + VMOptions.writeOption(VMOptions.MemoryKind.PERM_GEN, 512); - assertThat(FileUtil.loadFile(myFile)).isEqualToIgnoringWhitespace("-Xmx1024m\n-XX:MaxPermSize=512m"); + assertThat(FileUtil.loadFile(myFile)).isEqualToIgnoringWhitespace("-Xmx1024m -XX:MaxPermSize=512m"); } @Test public void testWritingPreservingLocation() throws IOException { FileUtil.writeToFile(myFile, "-someOption\n-Xmx512m\n-XX:MaxPermSize=128m\n-anotherOption"); - VMOptions.writeXmx(1024); - VMOptions.writeMaxPermGen(256); + VMOptions.writeOption(VMOptions.MemoryKind.HEAP, 1024); + VMOptions.writeOption(VMOptions.MemoryKind.PERM_GEN, 256); - assertThat(FileUtil.loadFile(myFile)).isEqualToIgnoringWhitespace("-someOption\n-Xmx1024m\n-XX:MaxPermSize=256m\n-anotherOption"); + assertThat(FileUtil.loadFile(myFile)).isEqualToIgnoringWhitespace("-someOption -Xmx1024m -XX:MaxPermSize=256m -anotherOption"); } @Test public void testWritingNew() throws IOException { FileUtil.writeToFile(myFile, "-someOption"); - VMOptions.writeXmx(1024); - VMOptions.writeMaxPermGen(256); - VMOptions.writeCodeCache(256); + VMOptions.writeOption(VMOptions.MemoryKind.HEAP, 1024); + VMOptions.writeOption(VMOptions.MemoryKind.PERM_GEN, 256); + VMOptions.writeOption(VMOptions.MemoryKind.CODE_CACHE, 256); - assertThat(FileUtil.loadFile(myFile)).isEqualToIgnoringWhitespace("-someOption\n-Xmx1024m\n-XX:MaxPermSize=256m\n-XX:ReservedCodeCacheSize=256m"); + assertThat(FileUtil.loadFile(myFile)).isEqualToIgnoringWhitespace("-someOption -Xmx1024m -XX:MaxPermSize=256m -XX:ReservedCodeCacheSize=256m"); } @Test public void testWritingReadOnlyFile() throws IOException { FileUtil.setReadOnlyAttribute(myFile.getPath(), true); - VMOptions.writeXmx(1024); - VMOptions.writeMaxPermGen(256); + VMOptions.writeOption(VMOptions.MemoryKind.HEAP, 1024); + VMOptions.writeOption(VMOptions.MemoryKind.PERM_GEN, 256); - assertThat(FileUtil.loadFile(myFile)).isEqualToIgnoringWhitespace("-Xmx1024m\n-XX:MaxPermSize=256m"); + assertThat(FileUtil.loadFile(myFile)).isEqualToIgnoringWhitespace("-Xmx1024m -XX:MaxPermSize=256m"); } @Test @@ -149,9 +129,9 @@ public class VMOptionsTest { FileUtil.delete(testFile); VMOptions.setTestFile(testFile.getPath()); - VMOptions.writeXmx(1024); - VMOptions.writeMaxPermGen(256); + VMOptions.writeOption(VMOptions.MemoryKind.HEAP, 1024); + VMOptions.writeOption(VMOptions.MemoryKind.PERM_GEN, 256); - assertThat(FileUtil.loadFile(testFile)).isEqualToIgnoringWhitespace("-Xmx1024m\n-XX:MaxPermSize=256m"); + assertThat(FileUtil.loadFile(testFile)).isEqualToIgnoringWhitespace("-Xmx1024m -XX:MaxPermSize=256m"); } } \ No newline at end of file