From 3854b67daac14188d47a86bb6b84ccb00c087f5f Mon Sep 17 00:00:00 2001 From: Roman Shevchenko Date: Mon, 1 Sep 2014 15:05:08 +0400 Subject: java-decompiler: post-import cleanup (tests reorganized) --- build.xml | 24 +++- .../main/decompiler/ConsoleDecompiler.java | 7 +- .../java/decompiler/SingleClassesTest.java | 124 +++++++++++++++++++++ test/unit/TestSingleClasses.java | 95 ---------------- test/unit/classes/TestClassFields.java | 13 --- test/unit/classes/TestClassLambda.java | 67 ----------- test/unit/classes/TestClassLoop.java | 48 -------- test/unit/classes/TestClassSwitch.java | 16 --- test/unit/classes/TestClassTypes.java | 54 --------- test/unit/classes/TestClassVar.java | 44 -------- test/unit/results/TestClassFields.dec | 14 --- test/unit/results/TestClassLambda.dec | 75 ------------- test/unit/results/TestClassLoop.dec | 45 -------- test/unit/results/TestClassSwitch.dec | 16 --- test/unit/results/TestClassTypes.dec | 50 --------- test/unit/results/TestClassVar.dec | 43 ------- testData/classes/pkg/TestClassFields.class | Bin 0 -> 415 bytes testData/classes/pkg/TestClassLambda.class | Bin 0 -> 3714 bytes testData/classes/pkg/TestClassLoop.class | Bin 0 -> 880 bytes testData/classes/pkg/TestClassSwitch.class | Bin 0 -> 464 bytes testData/classes/pkg/TestClassTypes.class | Bin 0 -> 1151 bytes testData/classes/pkg/TestClassVar.class | Bin 0 -> 992 bytes testData/results/TestClassFields.dec | 13 +++ testData/results/TestClassLambda.dec | 75 +++++++++++++ testData/results/TestClassLoop.dec | 45 ++++++++ testData/results/TestClassSwitch.dec | 16 +++ testData/results/TestClassTypes.dec | 50 +++++++++ testData/results/TestClassVar.dec | 43 +++++++ testData/src/pkg/TestClassFields.java | 28 +++++ testData/src/pkg/TestClassLambda.java | 82 ++++++++++++++ testData/src/pkg/TestClassLoop.java | 63 +++++++++++ testData/src/pkg/TestClassSwitch.java | 31 ++++++ testData/src/pkg/TestClassTypes.java | 69 ++++++++++++ testData/src/pkg/TestClassVar.java | 59 ++++++++++ 34 files changed, 727 insertions(+), 582 deletions(-) create mode 100644 test/org/jetbrains/java/decompiler/SingleClassesTest.java delete mode 100644 test/unit/TestSingleClasses.java delete mode 100644 test/unit/classes/TestClassFields.java delete mode 100644 test/unit/classes/TestClassLambda.java delete mode 100644 test/unit/classes/TestClassLoop.java delete mode 100644 test/unit/classes/TestClassSwitch.java delete mode 100644 test/unit/classes/TestClassTypes.java delete mode 100644 test/unit/classes/TestClassVar.java delete mode 100644 test/unit/results/TestClassFields.dec delete mode 100644 test/unit/results/TestClassLambda.dec delete mode 100644 test/unit/results/TestClassLoop.dec delete mode 100644 test/unit/results/TestClassSwitch.dec delete mode 100644 test/unit/results/TestClassTypes.dec delete mode 100644 test/unit/results/TestClassVar.dec create mode 100644 testData/classes/pkg/TestClassFields.class create mode 100644 testData/classes/pkg/TestClassLambda.class create mode 100644 testData/classes/pkg/TestClassLoop.class create mode 100644 testData/classes/pkg/TestClassSwitch.class create mode 100644 testData/classes/pkg/TestClassTypes.class create mode 100644 testData/classes/pkg/TestClassVar.class create mode 100644 testData/results/TestClassFields.dec create mode 100644 testData/results/TestClassLambda.dec create mode 100644 testData/results/TestClassLoop.dec create mode 100644 testData/results/TestClassSwitch.dec create mode 100644 testData/results/TestClassTypes.dec create mode 100644 testData/results/TestClassVar.dec create mode 100644 testData/src/pkg/TestClassFields.java create mode 100644 testData/src/pkg/TestClassLambda.java create mode 100644 testData/src/pkg/TestClassLoop.java create mode 100644 testData/src/pkg/TestClassSwitch.java create mode 100644 testData/src/pkg/TestClassTypes.java create mode 100644 testData/src/pkg/TestClassVar.java diff --git a/build.xml b/build.xml index 1c1a5f0..24d18f0 100644 --- a/build.xml +++ b/build.xml @@ -3,13 +3,19 @@ - + + + + + + + @@ -27,4 +33,20 @@ + + + + + + + + + + + + + + + + diff --git a/src/org/jetbrains/java/decompiler/main/decompiler/ConsoleDecompiler.java b/src/org/jetbrains/java/decompiler/main/decompiler/ConsoleDecompiler.java index 50a55cf..28bb4ee 100644 --- a/src/org/jetbrains/java/decompiler/main/decompiler/ConsoleDecompiler.java +++ b/src/org/jetbrains/java/decompiler/main/decompiler/ConsoleDecompiler.java @@ -133,7 +133,12 @@ public class ConsoleDecompiler implements IBytecodeProvider, IDecompilatSaver { public void decompileContext(File root) { this.root = root; - fernflower.decompileContext(); + try { + fernflower.decompileContext(); + } + finally { + fernflower.clearContext(); + } } // ******************************************************************* diff --git a/test/org/jetbrains/java/decompiler/SingleClassesTest.java b/test/org/jetbrains/java/decompiler/SingleClassesTest.java new file mode 100644 index 0000000..1e37d97 --- /dev/null +++ b/test/org/jetbrains/java/decompiler/SingleClassesTest.java @@ -0,0 +1,124 @@ +/* + * Copyright 2000-2014 JetBrains s.r.o. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.jetbrains.java.decompiler; + +import org.jetbrains.java.decompiler.main.decompiler.ConsoleDecompiler; +import org.jetbrains.java.decompiler.main.extern.IFernflowerPreferences; +import org.junit.After; +import org.junit.Before; +import org.junit.Test; + +import java.io.*; +import java.util.HashMap; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertTrue; + +public class SingleClassesTest { + private File tempDir; + private ConsoleDecompiler decompiler; + + @Before + public void setUp() throws IOException { + tempDir = File.createTempFile("decompiler_test_", "_dir"); + assertTrue(tempDir.delete()); + assertTrue(tempDir.mkdirs()); + decompiler = new ConsoleDecompiler(new HashMap() {{ + boolean win = System.getProperty("os.name", "").startsWith("Windows"); + put(IFernflowerPreferences.LOG_LEVEL, "warn"); + put(IFernflowerPreferences.RENAME_ENTITIES, "1"); + put(IFernflowerPreferences.HIDE_DEFAULT_CONSTRUCTOR, "1"); + put(IFernflowerPreferences.DECOMPILE_GENERIC_SIGNATURES, "0"); + put(IFernflowerPreferences.IDEA_NOT_NULL_ANNOTATION, "1"); + put(IFernflowerPreferences.LAMBDA_TO_ANONYMOUS_CLASS, "0"); + put(IFernflowerPreferences.USE_DEBUG_VARNAMES, "0"); + put(IFernflowerPreferences.NEW_LINE_SEPARATOR, (win ? "0" : "1")); + }}); + } + + @After + public void tearDown() { + decompiler = null; + delete(tempDir); + tempDir = null; + } + + @Test public void testClassFields() { doTest("TestClassFields"); } + @Test public void testClassLambda() { doTest("TestClassLambda"); } + @Test public void testClassLoop() { doTest("TestClassLoop"); } + @Test public void testClassSwitch() { doTest("TestClassSwitch"); } + @Test public void testClassTypes() { doTest("TestClassTypes"); } + @Test public void testClassVar() { doTest("TestClassVar"); } + + private void doTest(String testName) { + try { + File testDataDir = new File("testData"); + if (!isTestDataDir(testDataDir)) testDataDir = new File("community/plugins/java-decompiler/engine/testData"); + if (!isTestDataDir(testDataDir)) testDataDir = new File("plugins/java-decompiler/engine/testData"); + assertTrue(isTestDataDir(testDataDir)); + + File classFile = new File(testDataDir, "/classes/pkg/" + testName + ".class"); + assertTrue(classFile.isFile()); + decompiler.addSpace(classFile, true); + decompiler.decompileContext(tempDir); + + File decompiledFile = new File(tempDir, testName + ".java"); + assertTrue(decompiledFile.isFile()); + + File referenceFile = new File(testDataDir, "results/" + testName + ".dec"); + assertTrue(referenceFile.isFile()); + + String decompiledContent = getContent(decompiledFile); + String referenceContent = getContent(referenceFile); + assertEquals(referenceContent, decompiledContent); + } + catch (Exception e) { + throw new RuntimeException(e); + } + } + + private static boolean isTestDataDir(File dir) { + return dir.isDirectory() && new File(dir, "classes").isDirectory() && new File(dir, "results").isDirectory(); + } + + private static String getContent(File file) throws IOException { + Reader reader = new InputStreamReader(new FileInputStream(file), "UTF-8"); + try { + char[] buff = new char[16 * 1024]; + StringBuilder content = new StringBuilder(); + int n; + while ((n = reader.read(buff)) > 0) { + content.append(buff, 0, n); + } + return content.toString(); + } + finally { + reader.close(); + } + } + + private static void delete(File file) { + if (file.isDirectory()) { + File[] files = file.listFiles(); + if (files != null) { + for (File f : files) delete(f); + } + } + else { + assertTrue(file.delete()); + } + } +} diff --git a/test/unit/TestSingleClasses.java b/test/unit/TestSingleClasses.java deleted file mode 100644 index 754fcec..0000000 --- a/test/unit/TestSingleClasses.java +++ /dev/null @@ -1,95 +0,0 @@ -package unit; - -import static org.junit.Assert.*; - -import java.io.File; -import java.io.IOException; -import java.nio.file.Files; -import java.util.Date; -import java.util.HashMap; - -import org.junit.Test; - -import de.fernflower.main.decompiler.ConsoleDecompiler; -import de.fernflower.main.extern.IFernflowerPreferences; - -public class TestSingleClasses { - - @Test - public void test() throws IOException { - - Date start = new Date(); - - String current_path = new File(".").getCanonicalPath().toString(); - - iterateDirectory(new File(current_path + "/bin/unit/classes/")); - - System.out.println("\n\nTime elapsed " + (new Date().getTime() - start.getTime())/1000); - } - - private void iterateDirectory(File dir) throws IOException { - - for (File file : dir.listFiles()) { - if (file.isDirectory()) { - iterateDirectory(file); - } else if(file.getName().endsWith(".class")) { - decompileAndCheckFile(file); - } - } - } - - private void decompileAndCheckFile(File file) throws IOException { - - try { - - ConsoleDecompiler decompiler = new ConsoleDecompiler(new HashMap(){{ - put("log", "warn"); - put("ren", "1"); - put(IFernflowerPreferences.HIDE_DEFAULT_CONSTRUCTOR, "1"); - put(IFernflowerPreferences.DECOMPILE_GENERIC_SIGNATURES, "0"); - put(IFernflowerPreferences.IDEA_NOT_NULL_ANNOTATION, "1"); - put(IFernflowerPreferences.LAMBDA_TO_ANONYMOUS_CLASS, "0"); - put(IFernflowerPreferences.USE_DEBUG_VARNAMES, "0"); - put(IFernflowerPreferences.NEW_LINE_SEPARATOR, "0"); - }}); - - decompiler.addSpace(file, true); - - // files - String current_path = new File(".").getCanonicalPath().toString(); - - String file_class_name = file.getName(); - String file_name = file_class_name.substring(0, file_class_name.lastIndexOf(".class")); - String file_java_name = file_name+".java"; - - File reference_file = new File(current_path + "/test/unit/results/" + file_name + ".dec"); - if(!reference_file.exists()) { - return; // no reference file for some reason, not yet created - } - - File temp_dir = new File(Files.createTempDirectory("tempdec_"+file_name).toString()); - - // decompile it - decompiler.decompileContext(temp_dir); - - // get both the decompiled file content and the reference - // NOTE: reference files are saved with Windows-style line endings. Convert them if you are decompiling to Unix. - File decompiled_file = new File(temp_dir, file_java_name); - String decompiled_content = new String(Files.readAllBytes(decompiled_file.toPath()), "UTF-8"); - String reference_content = new String(Files.readAllBytes(reference_file.toPath()), "UTF-8"); - - // clean up - decompiled_file.delete(); - temp_dir.delete(); - - // compare file content with the reference - assertEquals(decompiled_content, reference_content); - - } catch(Exception ex) { - System.out.println("ERROR: testing file " + file.getCanonicalPath()); - ex.printStackTrace(); - } - - } - -} diff --git a/test/unit/classes/TestClassFields.java b/test/unit/classes/TestClassFields.java deleted file mode 100644 index 8ae7449..0000000 --- a/test/unit/classes/TestClassFields.java +++ /dev/null @@ -1,13 +0,0 @@ -package unit.classes; - -public class TestClassFields { - - private static int[] sizes; - private static String[] names; - - static { - - names = new String[]{"name1", "name2"}; - sizes = new int[names.length]; - } -} diff --git a/test/unit/classes/TestClassLambda.java b/test/unit/classes/TestClassLambda.java deleted file mode 100644 index a2b9d9a..0000000 --- a/test/unit/classes/TestClassLambda.java +++ /dev/null @@ -1,67 +0,0 @@ -package unit.classes; - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; -import java.util.OptionalInt; -import java.util.function.IntBinaryOperator; -import java.util.function.Supplier; - -public class TestClassLambda { - - public int field = 0; - - public void testLambda() { - - List list = Arrays.asList(1, 2, 3, 4, 5, 6, 7); - int b = (int)Math.random(); - - list.forEach(n -> {int a = 2 * n; System.out.println(a + b + field);}); - } - - public void testLambda1() { - - int a = (int)Math.random(); - - Runnable r = () -> { System.out.println("hello" + a); }; - - Runnable r1 = () -> { System.out.println("hello1" + a); }; - } - - public void testLambda2() { - reduce((left, right) -> Math.max(left, right)); - } - - public void testLambda3() { // IDEA-127301 - reduce(Math::max); - } - - public void testLambda4() { - reduce(TestClassLambda::localMax); - } - - public void testLambda5() { - String x = "abcd"; - function(x::toString); - } - - public void testLambda6() { - List list = new ArrayList(); - int bottom = list.size() * 2; - int top = list.size() * 5; - list.removeIf( s -> (bottom >= s.length() && s.length() <= top) ); - } - - public static OptionalInt reduce(IntBinaryOperator op) { - return null; - } - - public static String function(Supplier supplier) { - return supplier.get(); - } - - public static int localMax(int first, int second) { - return 0; - } - -} diff --git a/test/unit/classes/TestClassLoop.java b/test/unit/classes/TestClassLoop.java deleted file mode 100644 index 5288cf6..0000000 --- a/test/unit/classes/TestClassLoop.java +++ /dev/null @@ -1,48 +0,0 @@ -package unit.classes; - -public class TestClassLoop { - - public static void testSimpleInfinite() { - - while(true) { - System.out.println(); - } - - } - - public static void testFinally() { - - boolean a = (Math.random() > 0); - - while(true) { - try { - if(!a) { - return; - } - } finally { - System.out.println("1"); - } - } - - } - - public static void testFinallyContinue() { - - boolean a = (Math.random() > 0); - - for(;;) { - try { - System.out.println("1"); - } finally { - if(a) { - System.out.println("3"); - continue; - } - } - - System.out.println("4"); - } - - } - -} diff --git a/test/unit/classes/TestClassSwitch.java b/test/unit/classes/TestClassSwitch.java deleted file mode 100644 index 3e29d5e..0000000 --- a/test/unit/classes/TestClassSwitch.java +++ /dev/null @@ -1,16 +0,0 @@ -package unit.classes; - -public class TestClassSwitch { - - public void testCaseOrder(int a) { - - switch(a) { - case 13: - System.out.println(13); - return; - case 5: - System.out.println(5); - } - } - -} diff --git a/test/unit/classes/TestClassTypes.java b/test/unit/classes/TestClassTypes.java deleted file mode 100644 index a8a5116..0000000 --- a/test/unit/classes/TestClassTypes.java +++ /dev/null @@ -1,54 +0,0 @@ -package unit.classes; - -import java.util.ArrayList; -import java.util.List; - -public class TestClassTypes { - - public void testBoolean() { - - byte var7 = 0; - long time = System.currentTimeMillis(); - - if(time % 2 > 0) { - var7 = 1; - } else if(time % 3 > 0) { - var7 = 2; - } - - if(var7 == 1) { - System.out.println(); - } - } - - public boolean testBit(int var0) { - return (var0 & 1) == 1; - } - - public void testSwitchConsts(int a) { - - switch (a) { - case 88: - System.out.println("1"); - break; - case 656: - System.out.println("2"); - break; - case 65201: - case 65489: - System.out.println("3"); - } - } - - public void testAssignmentType(List list) { - - List a = list; - - if(a != null) { - (a = new ArrayList(a)).add("23"); - } - - System.out.println(a.size()); - } - -} diff --git a/test/unit/classes/TestClassVar.java b/test/unit/classes/TestClassVar.java deleted file mode 100644 index fdba5c6..0000000 --- a/test/unit/classes/TestClassVar.java +++ /dev/null @@ -1,44 +0,0 @@ -package unit.classes; - - -public class TestClassVar { - - private boolean field_boolean = (Math.random() > 0); - public int field_int = 0; - - public void testFieldSSAU() { - - for(int i = 0; i < 10; i++) { - - try { - System.out.println(); - } finally { - if (field_boolean) { - System.out.println(); - } - } - - } - } - - public Long testFieldSSAU1() { // IDEA-127466 - return new Long(field_int++); - } - - public void testComplexPropagation() { - - int a = 0; - - while (a < 10) { - - int b = a; - - for(; a < 10 && a == 0; a++) {} - - if (b != a) { - System.out.println(); - } - } - } - -} diff --git a/test/unit/results/TestClassFields.dec b/test/unit/results/TestClassFields.dec deleted file mode 100644 index 85aea77..0000000 --- a/test/unit/results/TestClassFields.dec +++ /dev/null @@ -1,14 +0,0 @@ -package unit.classes; - - -public class TestClassFields { - - private static int[] sizes; - private static String[] names = new String[]{"name1", "name2"}; - - - static { - sizes = new int[names.length]; - } - -} diff --git a/test/unit/results/TestClassLambda.dec b/test/unit/results/TestClassLambda.dec deleted file mode 100644 index 6ff82d8..0000000 --- a/test/unit/results/TestClassLambda.dec +++ /dev/null @@ -1,75 +0,0 @@ -package unit.classes; - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; -import java.util.OptionalInt; -import java.util.function.Consumer; -import java.util.function.IntBinaryOperator; -import java.util.function.Predicate; -import java.util.function.Supplier; - -public class TestClassLambda { - - public int field = 0; - - - public void testLambda() { - List var1 = Arrays.asList(new Integer[]{Integer.valueOf(1), Integer.valueOf(2), Integer.valueOf(3), Integer.valueOf(4), Integer.valueOf(5), Integer.valueOf(6), Integer.valueOf(7)}); - int var2 = (int)Math.random(); - var1.forEach((var2x) -> { - int var3 = 2 * var2x.intValue(); - System.out.println(var3 + var2 + this.field); - }); - } - - public void testLambda1() { - int var1 = (int)Math.random(); - Runnable var2 = () -> { - System.out.println("hello" + var1); - }; - Runnable var3 = () -> { - System.out.println("hello1" + var1); - }; - } - - public void testLambda2() { - reduce((var0, var1) -> { - return Math.max(var0, var1); - }); - } - - public void testLambda3() { - reduce(Math::max); - } - - public void testLambda4() { - reduce(TestClassLambda::localMax); - } - - public void testLambda5() { - String var1 = "abcd"; - function(var1::toString); - } - - public void testLambda6() { - ArrayList var1 = new ArrayList(); - int var2 = var1.size() * 2; - int var3 = var1.size() * 5; - var1.removeIf((var2x) -> { - return var2 >= var2x.length() && var2x.length() <= var3; - }); - } - - public static OptionalInt reduce(IntBinaryOperator var0) { - return null; - } - - public static String function(Supplier var0) { - return (String)var0.get(); - } - - public static int localMax(int var0, int var1) { - return 0; - } -} diff --git a/test/unit/results/TestClassLoop.dec b/test/unit/results/TestClassLoop.dec deleted file mode 100644 index a931148..0000000 --- a/test/unit/results/TestClassLoop.dec +++ /dev/null @@ -1,45 +0,0 @@ -package unit.classes; - - -public class TestClassLoop { - - public static void testSimpleInfinite() { - while(true) { - System.out.println(); - } - } - - public static void testFinally() { - boolean var0 = Math.random() > 0.0D; - - while(true) { - try { - if(!var0) { - return; - } - } finally { - System.out.println("1"); - } - } - } - - public static void testFinallyContinue() { - boolean var0 = Math.random() > 0.0D; - - while(true) { - while(true) { - try { - System.out.println("1"); - break; - } finally { - if(var0) { - System.out.println("3"); - continue; - } - } - } - - System.out.println("4"); - } - } -} diff --git a/test/unit/results/TestClassSwitch.dec b/test/unit/results/TestClassSwitch.dec deleted file mode 100644 index 386a341..0000000 --- a/test/unit/results/TestClassSwitch.dec +++ /dev/null @@ -1,16 +0,0 @@ -package unit.classes; - - -public class TestClassSwitch { - - public void testCaseOrder(int var1) { - switch(var1) { - case 5: - System.out.println(5); - default: - return; - case 13: - System.out.println(13); - } - } -} diff --git a/test/unit/results/TestClassTypes.dec b/test/unit/results/TestClassTypes.dec deleted file mode 100644 index 0bda616..0000000 --- a/test/unit/results/TestClassTypes.dec +++ /dev/null @@ -1,50 +0,0 @@ -package unit.classes; - -import java.util.ArrayList; -import java.util.List; - -public class TestClassTypes { - - public void testBoolean() { - byte var1 = 0; - long var2 = System.currentTimeMillis(); - if(var2 % 2L > 0L) { - var1 = 1; - } else if(var2 % 3L > 0L) { - var1 = 2; - } - - if(var1 == 1) { - System.out.println(); - } - - } - - public boolean testBit(int var1) { - return (var1 & 1) == 1; - } - - public void testSwitchConsts(int var1) { - switch(var1) { - case 88: - System.out.println("1"); - break; - case 656: - System.out.println("2"); - break; - case 65201: - case 65489: - System.out.println("3"); - } - - } - - public void testAssignmentType(List var1) { - Object var2 = var1; - if(var1 != null) { - ((List)(var2 = new ArrayList(var1))).add("23"); - } - - System.out.println(((List)var2).size()); - } -} diff --git a/test/unit/results/TestClassVar.dec b/test/unit/results/TestClassVar.dec deleted file mode 100644 index cca4d7a..0000000 --- a/test/unit/results/TestClassVar.dec +++ /dev/null @@ -1,43 +0,0 @@ -package unit.classes; - - -public class TestClassVar { - - private boolean field_boolean = Math.random() > 0.0D; - public int field_int = 0; - - - public void testFieldSSAU() { - for(int var1 = 0; var1 < 10; ++var1) { - try { - System.out.println(); - } finally { - if(this.field_boolean) { - System.out.println(); - } - - } - } - - } - - public Long testFieldSSAU1() { - return new Long((long)(this.field_int++)); - } - - public void testComplexPropagation() { - int var1 = 0; - - while(var1 < 10) { - int var2; - for(var2 = var1; var1 < 10 && var1 == 0; ++var1) { - ; - } - - if(var2 != var1) { - System.out.println(); - } - } - - } -} diff --git a/testData/classes/pkg/TestClassFields.class b/testData/classes/pkg/TestClassFields.class new file mode 100644 index 0000000..c1c0c6b Binary files /dev/null and b/testData/classes/pkg/TestClassFields.class differ diff --git a/testData/classes/pkg/TestClassLambda.class b/testData/classes/pkg/TestClassLambda.class new file mode 100644 index 0000000..cbb9448 Binary files /dev/null and b/testData/classes/pkg/TestClassLambda.class differ diff --git a/testData/classes/pkg/TestClassLoop.class b/testData/classes/pkg/TestClassLoop.class new file mode 100644 index 0000000..d363692 Binary files /dev/null and b/testData/classes/pkg/TestClassLoop.class differ diff --git a/testData/classes/pkg/TestClassSwitch.class b/testData/classes/pkg/TestClassSwitch.class new file mode 100644 index 0000000..2fd6b52 Binary files /dev/null and b/testData/classes/pkg/TestClassSwitch.class differ diff --git a/testData/classes/pkg/TestClassTypes.class b/testData/classes/pkg/TestClassTypes.class new file mode 100644 index 0000000..45288ca Binary files /dev/null and b/testData/classes/pkg/TestClassTypes.class differ diff --git a/testData/classes/pkg/TestClassVar.class b/testData/classes/pkg/TestClassVar.class new file mode 100644 index 0000000..d66170c Binary files /dev/null and b/testData/classes/pkg/TestClassVar.class differ diff --git a/testData/results/TestClassFields.dec b/testData/results/TestClassFields.dec new file mode 100644 index 0000000..2a20fb8 --- /dev/null +++ b/testData/results/TestClassFields.dec @@ -0,0 +1,13 @@ +package pkg; + + +public class TestClassFields { + + private static int[] sizes; + private static String[] names = new String[]{"name1", "name2"}; + + + static { + sizes = new int[names.length]; + } +} diff --git a/testData/results/TestClassLambda.dec b/testData/results/TestClassLambda.dec new file mode 100644 index 0000000..baf2cd7 --- /dev/null +++ b/testData/results/TestClassLambda.dec @@ -0,0 +1,75 @@ +package pkg; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import java.util.OptionalInt; +import java.util.function.Consumer; +import java.util.function.IntBinaryOperator; +import java.util.function.Predicate; +import java.util.function.Supplier; + +public class TestClassLambda { + + public int field = 0; + + + public void testLambda() { + List var1 = Arrays.asList(new Integer[]{Integer.valueOf(1), Integer.valueOf(2), Integer.valueOf(3), Integer.valueOf(4), Integer.valueOf(5), Integer.valueOf(6), Integer.valueOf(7)}); + int var2 = (int)Math.random(); + var1.forEach((var2x) -> { + int var3 = 2 * var2x.intValue(); + System.out.println(var3 + var2 + this.field); + }); + } + + public void testLambda1() { + int var1 = (int)Math.random(); + Runnable var2 = () -> { + System.out.println("hello" + var1); + }; + Runnable var3 = () -> { + System.out.println("hello1" + var1); + }; + } + + public void testLambda2() { + reduce((var0, var1) -> { + return Math.max(var0, var1); + }); + } + + public void testLambda3() { + reduce(Math::max); + } + + public void testLambda4() { + reduce(TestClassLambda::localMax); + } + + public void testLambda5() { + String var1 = "abcd"; + function(var1::toString); + } + + public void testLambda6() { + ArrayList var1 = new ArrayList(); + int var2 = var1.size() * 2; + int var3 = var1.size() * 5; + var1.removeIf((var2x) -> { + return var2 >= var2x.length() && var2x.length() <= var3; + }); + } + + public static OptionalInt reduce(IntBinaryOperator var0) { + return null; + } + + public static String function(Supplier var0) { + return (String)var0.get(); + } + + public static int localMax(int var0, int var1) { + return 0; + } +} diff --git a/testData/results/TestClassLoop.dec b/testData/results/TestClassLoop.dec new file mode 100644 index 0000000..b231ae0 --- /dev/null +++ b/testData/results/TestClassLoop.dec @@ -0,0 +1,45 @@ +package pkg; + + +public class TestClassLoop { + + public static void testSimpleInfinite() { + while(true) { + System.out.println(); + } + } + + public static void testFinally() { + boolean var0 = Math.random() > 0.0D; + + while(true) { + try { + if(!var0) { + return; + } + } finally { + System.out.println("1"); + } + } + } + + public static void testFinallyContinue() { + boolean var0 = Math.random() > 0.0D; + + while(true) { + while(true) { + try { + System.out.println("1"); + break; + } finally { + if(var0) { + System.out.println("3"); + continue; + } + } + } + + System.out.println("4"); + } + } +} diff --git a/testData/results/TestClassSwitch.dec b/testData/results/TestClassSwitch.dec new file mode 100644 index 0000000..496dd15 --- /dev/null +++ b/testData/results/TestClassSwitch.dec @@ -0,0 +1,16 @@ +package pkg; + + +public class TestClassSwitch { + + public void testCaseOrder(int var1) { + switch(var1) { + case 5: + System.out.println(5); + default: + return; + case 13: + System.out.println(13); + } + } +} diff --git a/testData/results/TestClassTypes.dec b/testData/results/TestClassTypes.dec new file mode 100644 index 0000000..2c856b1 --- /dev/null +++ b/testData/results/TestClassTypes.dec @@ -0,0 +1,50 @@ +package pkg; + +import java.util.ArrayList; +import java.util.List; + +public class TestClassTypes { + + public void testBoolean() { + byte var1 = 0; + long var2 = System.currentTimeMillis(); + if(var2 % 2L > 0L) { + var1 = 1; + } else if(var2 % 3L > 0L) { + var1 = 2; + } + + if(var1 == 1) { + System.out.println(); + } + + } + + public boolean testBit(int var1) { + return (var1 & 1) == 1; + } + + public void testSwitchConsts(int var1) { + switch(var1) { + case 88: + System.out.println("1"); + break; + case 656: + System.out.println("2"); + break; + case 65201: + case 65489: + System.out.println("3"); + } + + } + + public void testAssignmentType(List var1) { + Object var2 = var1; + if(var1 != null) { + ((List)(var2 = new ArrayList(var1))).add("23"); + } + + System.out.println(((List)var2).size()); + } +} diff --git a/testData/results/TestClassVar.dec b/testData/results/TestClassVar.dec new file mode 100644 index 0000000..ceb3a4d --- /dev/null +++ b/testData/results/TestClassVar.dec @@ -0,0 +1,43 @@ +package pkg; + + +public class TestClassVar { + + private boolean field_boolean = Math.random() > 0.0D; + public int field_int = 0; + + + public void testFieldSSAU() { + for(int var1 = 0; var1 < 10; ++var1) { + try { + System.out.println(); + } finally { + if(this.field_boolean) { + System.out.println(); + } + + } + } + + } + + public Long testFieldSSAU1() { + return new Long((long)(this.field_int++)); + } + + public void testComplexPropagation() { + int var1 = 0; + + while(var1 < 10) { + int var2; + for(var2 = var1; var1 < 10 && var1 == 0; ++var1) { + ; + } + + if(var2 != var1) { + System.out.println(); + } + } + + } +} diff --git a/testData/src/pkg/TestClassFields.java b/testData/src/pkg/TestClassFields.java new file mode 100644 index 0000000..347b687 --- /dev/null +++ b/testData/src/pkg/TestClassFields.java @@ -0,0 +1,28 @@ +/* + * Copyright 2000-2014 JetBrains s.r.o. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package pkg; + +public class TestClassFields { + + private static int[] sizes; + private static String[] names; + + static { + + names = new String[]{"name1", "name2"}; + sizes = new int[names.length]; + } +} diff --git a/testData/src/pkg/TestClassLambda.java b/testData/src/pkg/TestClassLambda.java new file mode 100644 index 0000000..d3fc7f6 --- /dev/null +++ b/testData/src/pkg/TestClassLambda.java @@ -0,0 +1,82 @@ +/* + * Copyright 2000-2014 JetBrains s.r.o. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package pkg; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import java.util.OptionalInt; +import java.util.function.IntBinaryOperator; +import java.util.function.Supplier; + +public class TestClassLambda { + + public int field = 0; + + public void testLambda() { + + List list = Arrays.asList(1, 2, 3, 4, 5, 6, 7); + int b = (int)Math.random(); + + list.forEach(n -> {int a = 2 * n; System.out.println(a + b + field);}); + } + + public void testLambda1() { + + int a = (int)Math.random(); + + Runnable r = () -> { System.out.println("hello" + a); }; + + Runnable r1 = () -> { System.out.println("hello1" + a); }; + } + + public void testLambda2() { + reduce((left, right) -> Math.max(left, right)); + } + + public void testLambda3() { // IDEA-127301 + reduce(Math::max); + } + + public void testLambda4() { + reduce(TestClassLambda::localMax); + } + + public void testLambda5() { + String x = "abcd"; + function(x::toString); + } + + public void testLambda6() { + List list = new ArrayList(); + int bottom = list.size() * 2; + int top = list.size() * 5; + list.removeIf( s -> (bottom >= s.length() && s.length() <= top) ); + } + + public static OptionalInt reduce(IntBinaryOperator op) { + return null; + } + + public static String function(Supplier supplier) { + return supplier.get(); + } + + public static int localMax(int first, int second) { + return 0; + } + +} diff --git a/testData/src/pkg/TestClassLoop.java b/testData/src/pkg/TestClassLoop.java new file mode 100644 index 0000000..25964d9 --- /dev/null +++ b/testData/src/pkg/TestClassLoop.java @@ -0,0 +1,63 @@ +/* + * Copyright 2000-2014 JetBrains s.r.o. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package pkg; + +public class TestClassLoop { + + public static void testSimpleInfinite() { + + while(true) { + System.out.println(); + } + + } + + public static void testFinally() { + + boolean a = (Math.random() > 0); + + while(true) { + try { + if(!a) { + return; + } + } finally { + System.out.println("1"); + } + } + + } + + public static void testFinallyContinue() { + + boolean a = (Math.random() > 0); + + for(;;) { + try { + System.out.println("1"); + } finally { + if(a) { + System.out.println("3"); + continue; + } + } + + System.out.println("4"); + } + + } + +} diff --git a/testData/src/pkg/TestClassSwitch.java b/testData/src/pkg/TestClassSwitch.java new file mode 100644 index 0000000..aa49bb1 --- /dev/null +++ b/testData/src/pkg/TestClassSwitch.java @@ -0,0 +1,31 @@ +/* + * Copyright 2000-2014 JetBrains s.r.o. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package pkg; + +public class TestClassSwitch { + + public void testCaseOrder(int a) { + + switch(a) { + case 13: + System.out.println(13); + return; + case 5: + System.out.println(5); + } + } + +} diff --git a/testData/src/pkg/TestClassTypes.java b/testData/src/pkg/TestClassTypes.java new file mode 100644 index 0000000..70e23c3 --- /dev/null +++ b/testData/src/pkg/TestClassTypes.java @@ -0,0 +1,69 @@ +/* + * Copyright 2000-2014 JetBrains s.r.o. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package pkg; + +import java.util.ArrayList; +import java.util.List; + +public class TestClassTypes { + + public void testBoolean() { + + byte var7 = 0; + long time = System.currentTimeMillis(); + + if(time % 2 > 0) { + var7 = 1; + } else if(time % 3 > 0) { + var7 = 2; + } + + if(var7 == 1) { + System.out.println(); + } + } + + public boolean testBit(int var0) { + return (var0 & 1) == 1; + } + + public void testSwitchConsts(int a) { + + switch (a) { + case 88: + System.out.println("1"); + break; + case 656: + System.out.println("2"); + break; + case 65201: + case 65489: + System.out.println("3"); + } + } + + public void testAssignmentType(List list) { + + List a = list; + + if(a != null) { + (a = new ArrayList(a)).add("23"); + } + + System.out.println(a.size()); + } + +} diff --git a/testData/src/pkg/TestClassVar.java b/testData/src/pkg/TestClassVar.java new file mode 100644 index 0000000..9f8fcac --- /dev/null +++ b/testData/src/pkg/TestClassVar.java @@ -0,0 +1,59 @@ +/* + * Copyright 2000-2014 JetBrains s.r.o. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package pkg; + + +public class TestClassVar { + + private boolean field_boolean = (Math.random() > 0); + public int field_int = 0; + + public void testFieldSSAU() { + + for(int i = 0; i < 10; i++) { + + try { + System.out.println(); + } finally { + if (field_boolean) { + System.out.println(); + } + } + + } + } + + public Long testFieldSSAU1() { // IDEA-127466 + return new Long(field_int++); + } + + public void testComplexPropagation() { + + int a = 0; + + while (a < 10) { + + int b = a; + + for(; a < 10 && a == 0; a++) {} + + if (b != a) { + System.out.println(); + } + } + } + +} -- cgit v1.2.3