summaryrefslogtreecommitdiffstats
path: root/src/test
diff options
context:
space:
mode:
Diffstat (limited to 'src/test')
-rw-r--r--src/test/BradTest.java57
-rw-r--r--src/test/FernflowerTest.java417
-rw-r--r--src/test/JetTest.java40
-rw-r--r--src/test/JunitTest.java95
-rw-r--r--src/test/SumUpClasses.java81
-rw-r--r--src/test/TestAnnotationsEclipse$MyAnnotation.classbin0 -> 402 bytes
-rw-r--r--src/test/TestAnnotationsEclipse$TestInner.classbin0 -> 938 bytes
-rw-r--r--src/test/TestAnnotationsEclipse.classbin0 -> 415 bytes
-rw-r--r--src/test/TestAnnotationsEclipse.java42
-rw-r--r--src/test/TestInput.java54
-rw-r--r--src/test/TestRapc.java38
-rw-r--r--src/test/TestRuntime1_4_2_03.java38
-rw-r--r--src/test/TestSelf.java36
-rw-r--r--src/test/TestValidateXml.java69
-rw-r--r--src/test/TestYWorks.java38
-rw-r--r--src/test/VladDebug.java67
-rw-r--r--src/test/input/TestEclipse7.java59
-rw-r--r--src/test/input/TestJavac7.classbin0 -> 2397 bytes
-rw-r--r--src/test/input/TestJavac7.java59
-rw-r--r--src/test/input/TestJavac8.classbin0 -> 1330 bytes
-rw-r--r--src/test/input/TestJavac8.java58
-rw-r--r--src/test/input/TestLoop.java20
-rw-r--r--src/test/misc/ExtTest.java81
-rw-r--r--src/test/misc/GenericTest.java65
-rw-r--r--src/test/misc/ITest.java9
-rw-r--r--src/test/misc/MainClass.java115
-rw-r--r--src/test/misc/MiscTest.java83
-rw-r--r--src/test/misc/MultipleClassTest.java33
-rw-r--r--src/test/misc/ObfuscatedExceptionDetector.java55
-rw-r--r--src/test/misc/ParentFieldTest.java19
-rw-r--r--src/test/misc/SuperTest.java27
-rw-r--r--src/test/misc/ann/RequestForEnhancement.java22
-rw-r--r--src/test/misc/en/AutocastTest.java17
-rw-r--r--src/test/misc/en/FastSetTest.java60
-rw-r--r--src/test/misc/en/FinallyTest.java22
-rw-r--r--src/test/misc/en/Foo.java52
-rw-r--r--src/test/misc/en/InnerTest$1.java22
-rw-r--r--src/test/misc/en/InnerTest.java13
-rw-r--r--src/test/misc/en/InnerTestOld.java20
-rw-r--r--src/test/misc/en/IrredTest.java1373
-rw-r--r--src/test/misc/en/ListInsertTest.java34
-rw-r--r--src/test/misc/en/Operation.java51
-rw-r--r--src/test/misc/en/SwitchInTest.java19
-rw-r--r--src/test/misc/en/TestOperation.java31
-rw-r--r--src/test/output/TestEclipse7.java15
-rw-r--r--src/test/output/TestJavac7.java129
-rw-r--r--src/test/output/TestJavac8.java104
-rw-r--r--src/test/util/DotExporter.java183
-rw-r--r--src/test/util/MemoryMonitor.java25
-rw-r--r--src/test/util/Timer.java31
-rw-r--r--src/test/util/ZipStripper.java71
51 files changed, 4049 insertions, 0 deletions
diff --git a/src/test/BradTest.java b/src/test/BradTest.java
new file mode 100644
index 0000000..ab9ef7c
--- /dev/null
+++ b/src/test/BradTest.java
@@ -0,0 +1,57 @@
+package test;
+
+import java.util.LinkedList;
+import java.util.List;
+
+public class BradTest {
+
+ public void testForLoop() {
+
+ for(int i = 0; i < 5; i++) {
+ System.out.println(i);
+ }
+
+ int[] testArray = new int[] {};
+
+ for(int i : testArray) {
+ System.out.println(i);
+ }
+
+ int k = 0;
+ int j = 0;
+
+ while(j < 5) {
+
+ System.out.println("Test while.");
+
+ j++;
+
+ if(j < 3) {
+ continue;
+ }
+
+ k++;
+
+ }
+
+ List keys = new java.util.ArrayList();
+
+ for(Object test : keys) {
+
+ System.out.println(test);
+
+ System.out.println(test);
+
+ System.out.println(test);
+
+ }
+
+ List<BradTest> objects = new LinkedList<BradTest>();
+
+ for(BradTest test : objects) {
+ System.out.println(test);
+
+ }
+ }
+
+}
diff --git a/src/test/FernflowerTest.java b/src/test/FernflowerTest.java
new file mode 100644
index 0000000..42b3982
--- /dev/null
+++ b/src/test/FernflowerTest.java
@@ -0,0 +1,417 @@
+package test;
+
+import java.io.File;
+import java.util.Date;
+import java.util.HashMap;
+
+import de.fernflower.main.decompiler.ConsoleDecompiler;
+
+
+public class FernflowerTest {
+
+ public static void main(String[] args) {
+
+ try {
+
+ //TimerFactory.initialize(new File(".").getCanonicalPath()+"/lib/timer/hrtlib.dll");
+
+ Date start = new Date();
+
+
+
+ ConsoleDecompiler decompiler = new ConsoleDecompiler(new HashMap<String, Object>(){{put("log", "warn");put("ren", "1");}});
+
+
+// MemoryMonitor.run = true;
+// new Thread(new MemoryMonitor()).start();
+
+
+// context.addSpace(new File("C:\\Temp\\fernflower\\runtime1_4_2_03\\"), true);
+
+
+// context.addSpace(new File("C:\\revjava\\remote\\data\\input\\"), true);
+
+
+// context.addClass("TestByte", "C:\\Temp\\fernflower\\dec\\smith\\EventProcessor.class", true);
+
+
+// context.addClass("TestByte", "C:\\revjava\\remote\\data\\input\\20090514224046740_rggbqdfe\\rh.class", true); // irreducible CFG
+// context.addClass("TestByte", "C:\\revjava\\remote\\data\\input\\20090514180223996_zxwdatbw\\TryCatchFinallyClass.class", true);
+
+
+// context.addSpace(new File("C:\\Temp\\fernflower\\dec\\temp\\AndroidFileBrowser.class"), true);
+// context.addSpace(new File("C:\\Temp\\fernflower\\dec\\temp\\SnakeView.class"), true);
+// context.addSpace(new File("C:\\Temp\\fernflower\\dec\\ru.zip"), true);
+// context.addSpace(new File("C:\\Temp\\fernflower\\dec\\bt1.class"), true);
+// context.addSpace(new File("C:\\Temp\\fernflower\\dec\\CityGuideJava.jar"), true);
+// context.addSpace(new File("C:\\Temp\\fernflower\\dec\\toschart.jar"), true);
+// context.addSpace(new File("C:\\Temp\\fernflower\\dec\\dostoevski.181223.jar"), true);
+
+
+
+// context.addSpace(new File("C:\\Temp\\fernflower\\dec\\au.class"), true); // highly obfuscated exception handlers - sequence!
+// decompiler.addSpace(new File("C:\\Temp\\fernflower\\dec\\carmobile2.jar"), true); // highly obfuscated exception handlers - sequence!
+
+
+// decompiler.addSpace(new File("C:\\Temp\\fernflower\\dec\\tempjars\\Paris_Nights[sp-c.ru]ygtgJ6.jar"), true); // Heap space
+// decompiler.addSpace(new File("C:\\Temp\\fernflower\\dec\\tempjars\\PlanetN.jar"), true);
+
+// decompiler.addSpace(new File("C:\\Oleg\\dec\\PasswordDefender1.class"), true);
+// decompiler.addSpace(new File("C:\\Oleg\\dec\\PasswordDefender2.class"), true);
+// decompiler.addSpace(new File("C:\\Oleg\\dec\\Emyoolay.class"), true);
+
+// decompiler.addSpace(new File("C:\\Oleg\\dec\\h1.class"), true);
+// decompiler.addSpace(new File("C:\\Oleg\\dec\\ba1.class"), true);
+// decompiler.addSpace(new File("C:\\Oleg\\dec\\bolt_pg_0.jar"), true);
+// decompiler.addSpace(new File("C:\\Oleg\\dec\\masl\\AbstractProgressNotifier.class"), true);
+// decompiler.addSpace(new File("C:\\Oleg\\dec\\f.class"), true);
+// decompiler.addSpace(new File("C:\\Oleg\\dec\\searchTab1_jsp1.class"), true);
+// decompiler.addSpace(new File("C:\\Oleg\\dec\\searchTab1_jsp1_1.class"), true);
+
+ decompiler.addSpace(new File("D:\\temp_c\\workspace\\Fernflower\\bin\\test\\BradTest.class"), true);
+
+// decompiler.addSpace(new File("C:\\Temp\\fernflower\\dec\\cls1209_Object.class"), true);
+// decompiler.addSpace(new File("C:\\Temp\\fernflower\\dec\\cls540_BaseFunction1.class"), true);
+// decompiler.addSpace(new File("C:\\Temp\\fernflower\\dec\\SwitchInTest.class"), true);
+// decompiler.addSpace(new File("C:\\Temp\\fernflower\\dec\\al.class"), true);
+// decompiler.addSpace(new File("C:\\Temp\\fernflower\\dec\\InnerTest.zip"), true);
+// decompiler.addSpace(new File("C:\\Temp\\fernflower\\dec\\InnerTest$1.class"), true);
+// decompiler.addSpace(new File("C:\\Temp\\fernflower\\dec\\InnerTest.class"), true);
+// decompiler.addSpace(new File("C:\\Temp\\fernflower\\dec\\Context.class"), true);
+// decompiler.addSpace(new File("C:\\Temp\\fernflower\\dec\\Class$1.class"), true);
+// decompiler.addSpace(new File("C:\\Temp\\fernflower\\dec\\Class.class"), true);
+// decompiler.addSpace(new File("C:\\Temp\\fernflower\\dec\\SimpleDateFormat1.class"), true);
+// decompiler.addSpace(new File("C:\\Temp\\fernflower\\dec\\z.class"), true);
+// decompiler.addSpace(new File("C:\\Temp\\fernflower\\dec\\client.jar"), true);
+// decompiler.addSpace(new File("C:\\Temp\\fernflower\\dec\\Manifest1.class"), true);
+// decompiler.addSpace(new File("C:\\Temp\\fernflower\\dec\\MemoryMonitor1.class"), true);
+// decompiler.addSpace(new File("C:\\Temp\\fernflower\\dec\\IrreducibleCFGDeobfuscator$1Node.class"), true);
+// decompiler.addSpace(new File("C:\\Temp\\fernflower\\dec\\IrreducibleCFGDeobfuscator1.class"), true);
+// decompiler.addSpace(new File("C:\\Temp\\fernflower\\dec\\PrintStreamLogger1.class"), true);
+// decompiler.addSpace(new File("C:\\Temp\\fernflower\\dec\\b.class"), true);
+// decompiler.addSpace(new File("C:\\Temp\\fernflower\\dec\\toonel_uo-5050.jar"), true);
+// decompiler.addSpace(new File("C:\\Temp\\fernflower\\dec\\toonel_jdo.jar"), true);
+// decompiler.addSpace(new File("C:\\Temp\\fernflower\\dec\\i.class"), true);
+// decompiler.addSpace(new File("C:\\Temp\\fernflower\\dec\\BasicGroupListUI$a_.class"), true);
+// decompiler.addSpace(new File("C:\\Temp\\fernflower\\dec\\p1.class"), true);
+// decompiler.addSpace(new File("C:\\Temp\\fernflower\\dec\\v.class"), true); // invalid class structure
+// decompiler.addSpace(new File("C:\\Temp\\fernflower\\dec\\Game.class"), true);
+// decompiler.addSpace(new File("C:\\Temp\\fernflower\\dec\\out.zip"), true);
+// decompiler.addSpace(new File("C:\\Temp\\fernflower\\dec\\Logic.class"), true); // long processing time
+// decompiler.addSpace(new File("C:\\Temp\\fernflower\\dec\\pupkin\\Support2.class"), true); // irreducible CFG
+// decompiler.addSpace(new File("C:\\Temp\\fernflower\\dec\\CommandExecutor.class"), true); // sophisticated finally
+
+// decompiler.addSpace(new File("C:\\Temp\\fernflower\\dec\\cy1.class"), true);
+// decompiler.addSpace(new File("C:\\Temp\\fernflower\\dec\\gmail-g.jar"), true);
+// decompiler.addSpace(new File("C:\\Temp\\fernflower\\dec\\LDIFImporter1.class"), true);
+// decompiler.addSpace(new File("C:\\Temp\\fernflower\\dec\\d1.class"), true);
+// decompiler.addSpace(new File("C:\\Temp\\fernflower\\dec\\com.sonyericsson.cs_ma3_client_sc_2.9.5.16.jar"), true);
+// decompiler.addSpace(new File("C:\\Temp\\fernflower\\dec\\z1.class"), true);
+// decompiler.addSpace(new File("C:\\Temp\\fernflower\\dec\\FactoryFinder1.class"), true);
+// decompiler.addSpace(new File("C:\\Temp\\fernflower\\dec\\e.class"), true);
+// decompiler.addSpace(new File("C:\\Temp\\fernflower\\dec\\IndexWriter.class"), true);
+// decompiler.addSpace(new File("C:\\Temp\\fernflower\\dec\\ar1.class"), true);
+// decompiler.addSpace(new File("C:\\Temp\\fernflower\\dec\\tcf511.class"), true);
+// decompiler.addSpace(new File("C:\\Temp\\fernflower\\dec\\TryCatchFinallyClass2.class"), true);
+// decompiler.addSpace(new File("C:\\Temp\\fernflower\\dec\\FileUtils.class"), true);
+// decompiler.addSpace(new File("C:\\Temp\\fernflower\\dec\\QuicktimeParser$TrakList1.class"), true);
+// decompiler.addSpace(new File("C:\\Temp\\fernflower\\dec\\DoExternalProcessMinwon.class"), true);
+// decompiler.addSpace(new File("C:\\Temp\\fernflower\\dec\\Main.class"), true);
+// decompiler.addSpace(new File("C:\\Temp\\fernflower\\dec\\TryCatchFinallyClassForTest.class"), true);
+// decompiler.addSpace(new File("C:\\Temp\\fernflower\\dec\\PmrCreatePMR.class"), true);
+// decompiler.addSpace(new File("C:\\Temp\\fernflower\\dec\\RetainSdi(2).zip"), true);
+// decompiler.addSpace(new File("C:\\Temp\\fernflower\\dec\\tcf26x1.class"), true);
+// decompiler.addSpace(new File("C:\\Temp\\fernflower\\dec\\GalleryStorageExtras.class"), true);
+
+// decompiler.addSpace(new File("C:\\Temp\\fernflower\\dec\\ExprProcessor.class"), true);
+// decompiler.addSpace(new File("C:\\Temp\\fernflower\\dec\\Compiler1.class"), true);
+// decompiler.addSpace(new File("C:\\Temp\\fernflower\\dec\\ServerManagerImpl.class"), true);
+// decompiler.addSpace(new File("C:\\Temp\\fernflower\\dec\\RepositoryId1.class"), true);
+// decompiler.addSpace(new File("C:\\Temp\\fernflower\\dec\\ElemApplyTemplates.class"), true);
+// decompiler.addSpace(new File("C:\\Temp\\fernflower\\dec\\ValueHandlerImpl.class"), true);
+// decompiler.addSpace(new File("C:\\Temp\\fernflower\\dec\\RequestProcessor.class"), true);
+// decompiler.addSpace(new File("C:\\Temp\\fernflower\\dec\\PropertyEditorManager.class"), true);
+// decompiler.addSpace(new File("C:\\Temp\\fernflower\\dec\\JdbcOdbcObject.class"), true);
+// decompiler.addSpace(new File("C:\\Temp\\fernflower\\dec\\searchTab1_jsp1.class"), true);
+// decompiler.addSpace(new File("C:\\Temp\\fernflower\\dec\\o_class.class"), true);
+
+// decompiler.addSpace(new File("C:\\Oleg\\dec\\o1_class.class"), true);
+// decompiler.addSpace(new File("C:\\Oleg\\dec\\o_class.class"), true);
+// decompiler.addSpace(new File("C:\\Oleg\\dec\\o_class1.class"), true);
+// decompiler.addSpace(new File("C:\\Oleg\\dec\\FinallyTest.class"), true);
+// decompiler.addSpace(new File("C:\\Oleg\\dec\\J_class.class"), true);
+// decompiler.addSpace(new File("C:\\Oleg\\dec\\icc.class"), true);
+// decompiler.addSpace(new File("C:\\Oleg\\dec\\ca.class"), true);
+
+// decompiler.addSpace(new File("C:\\Oleg\\dec\\e.class"), true);
+// decompiler.addSpace(new File("C:\\Oleg\\dec\\at.class"), true);
+// decompiler.addSpace(new File("C:\\Oleg\\dec\\cab.jar"), true);
+// decompiler.addSpace(new File("C:\\Oleg\\dec\\myotr\\"), true); // temp methods of inner classes
+// decompiler.addSpace(new File("C:\\Temp\\fernflower\\dec\\temp\\google\\"), true); // temp methods of inner classes
+// decompiler.addSpace(new File("C:\\Temp\\fernflower\\dec\\appengine-api-1.0-sdk-1.2.5-rp.jar"), true); // temp methods of inner classes
+// decompiler.addSpace(new File("C:\\Oleg\\appengine-api-1.0-sdk-1.2.5-rp.jar"), true); // temp methods of inner classes
+// decompiler.addSpace(new File("C:\\Oleg\\e.class"), true); // irreducible CFG - general case
+// decompiler.addSpace(new File("C:\\Temp\\fernflower\\dec\\e.class"), true); // irreducible CFG - general case
+
+
+// decompiler.addSpace(new File("C:\\Temp\\fernflower\\dec\\opera\\output\\opera4_2.jar"), true);
+// context.addSpace(new File("C:\\Temp\\fernflower\\dec\\ab.class"), true);
+// context.addSpace(new File("C:\\Temp\\fernflower\\dec\\searchTab1_jsp.class"), true); // full iteration!
+// context.addSpace(new File("C:\\Temp\\fernflower\\dec\\b.class"), true);
+// context.addSpace(new File("C:\\Temp\\fernflower\\dec\\alesa.jar"), true);
+// context.addSpace(new File("C:\\Temp\\fernflower\\dec\\MetaClassRegistryImpl1.class"), true);
+// context.addSpace(new File("C:\\Temp\\fernflower\\dec\\MetaClassRegistryImpl$1.class"), true);
+// context.addSpace(new File("C:\\Temp\\fernflower\\dec\\MetaClassRegistryImpl$2.class"), true);
+// context.addSpace(new File("C:\\Temp\\fernflower\\dec\\CBZip2OutputStream1.class"), true);
+// context.addSpace(new File("C:\\Temp\\fernflower\\dec\\MicroFMEIBDialog$MicroFMEIBMouse.class"), true);
+// context.addSpace(new File("C:\\Temp\\fernflower\\dec\\String.class"), true);
+// context.addSpace(new File("C:\\Temp\\fernflower\\dec\\ArticleBean.class"), true);
+// context.addSpace(new File("C:\\Temp\\fernflower\\dec\\JdbcOdbcObject1.class"), true);
+// context.addSpace(new File("C:\\Temp\\fernflower\\runtime1_4_2_03\\sun\\jdbc\\odbc\\JdbcOdbcObject.class"), true);
+// context.addSpace(new File("C:\\Temp\\fernflower\\dec\\RasterPrinterJob1.class"), true);
+// context.addSpace(new File("C:\\Temp\\fernflower\\runtime1_4_2_03\\sun\\print\\RasterPrinterJob.class"), true);
+// context.addSpace(new File("C:\\Temp\\fernflower\\runtime1_4_2_03\\javax\\print\\MimeType.class"), true);
+// context.addSpace(new File("C:\\Temp\\fernflower\\dec\\Application.class"), true); // self reference var replacement
+// context.addSpace(new File("C:\\Temp\\fernflower\\dec\\JmxBuilderTools.class"), true); // merging blocks!
+
+// context.addSpace(new File("C:\\Temp\\fernflower\\dec\\groovy-all-1.6.3.jar"), true);
+// context.addSpace(new File("C:\\Temp\\fernflower\\dec\\ABSInitializeLoginCtx.class"), true); // comparison instructions double, float, long!
+// context.addSpace(new File("C:\\Temp\\fernflower\\dec\\hm20ipixa.class"), true);
+// context.addSpace(new File("C:\\Temp\\fernflower\\dec\\jmf.jar"), true);
+// context.addSpace(new File("C:\\Temp\\fernflower\\dec\\Asn1PerEncodeBuffer1.class"), true);
+// context.addSpace(new File("C:\\Temp\\fernflower\\dec\\asn1rt.jar"), true);
+// context.addSpace(new File("C:\\Temp\\fernflower\\dec\\LLString.class"), true); // wrong array index!
+// context.addSpace(new File("C:\\Temp\\fernflower\\dec\\lapi.jar"), true);
+// context.addSpace(new File("C:\\revjava\\remote\\data\\input\\20090521062758280_kmxhxsgj\\ab.class"), true);
+// context.addSpace(new File("C:\\revjava\\remote\\data\\input\\20090521023110030_rlkkkxde\\"), true);
+// context.addSpace(new File("C:\\revjava\\remote\\data\\input\\20090515012813271_ktxfuavw\\"), true);
+
+// context.addSpace(new File("C:\\Temp\\fernflower\\dec\\g1.class"), true);
+// context.addSpace(new File("C:\\Temp\\fernflower\\dec\\structure101-java-b428.jar"), true);
+// context.addSpace(new File("C:\\Temp\\fernflower\\dec\\NinjaVideoApplet0.3.9.jar"), true);
+
+// context.addSpace(new File("C:\\Temp\\fernflower\\dec\\DRMConfigClient.class"), true);
+// context.addSpace(new File("C:\\Temp\\fernflower\\dec\\DRMConfigClient$1.class"), true);
+// context.addSpace(new File("C:\\Temp\\fernflower\\dec\\DRMConfigClient$ConfigKeys.class"), true);
+
+// context.addSpace(new File("C:\\Temp\\fernflower\\dec\\ChartQuery.class"), true);
+// context.addSpace(new File("C:\\Temp\\fernflower\\dec\\ChartQuery$1.class"), true);
+// context.addSpace(new File("C:\\Temp\\fernflower\\dec\\ChartQuery$ChartQueryListener.class"), true);
+
+
+// context.addSpace(new File("C:\\Temp\\fernflower\\dec\\innerprivate\\"), true);
+
+// context.addSpace(new File("C:\\Temp\\fernflower\\runtime1_4_2_03\\sun\\awt\\windows\\WScrollPanePeer$Adjustor.class"), true);
+// context.addSpace(new File("C:\\Temp\\fernflower\\runtime1_4_2_03\\sun\\awt\\windows\\WScrollPanePeer$ScrollEvent.class"), true);
+// context.addSpace(new File("C:\\Temp\\fernflower\\runtime1_4_2_03\\sun\\awt\\windows\\WScrollPanePeer.class"), true);
+
+// context.addSpace(new File("C:\\revjava\\remote\\data\\input\\20090520235744982_egloemdo\\"), true);
+
+// context.addSpace(new File("C:\\Temp\\fernflower\\dec\\conversion.zip"), true);
+// context.addSpace(new File("C:\\Temp\\fernflower\\dec\\toonel.jar"), true);
+// context.addSpace(new File("C:\\Temp\\fernflower\\dec\\msmapi.jar"), true);
+// context.addSpace(new File("C:\\Temp\\fernflower\\dec\\skynin\\"), true);
+// context.addClass("TestByte", "C:\\Temp\\fernflower\\dec\\skynin\\MSMAPI.class", true);
+
+// context.addSpace(new File("C:\\Temp\\fernflower\\dec\\experiments\\Experiments.class"), true);
+// context.addSpace(new File("C:\\Temp\\fernflower\\dec\\experiments\\Experiments1.class"), true); // invalid bytecode
+// context.addSpace(new File("C:\\Temp\\fernflower\\dec\\experiments\\Experiments2.class"), true); // invalid bytecode
+// context.addSpace(new File("C:\\Temp\\fernflower\\dec\\experiments\\Experiments3.class"), true); // invalid bytecode
+// context.addSpace(new File("C:\\Temp\\fernflower\\dec\\experiments\\Experiments4.class"), true); // protected range extended!
+// context.addSpace(new File("C:\\Temp\\fernflower\\dec\\experiments\\Experiments5.class"), true);
+// context.addSpace(new File("C:\\Temp\\fernflower\\dec\\experiments\\Experiments6.class"), true); // protected range extended!
+// context.addSpace(new File("C:\\Temp\\fernflower\\dec\\experiments\\Experiments7.class"), true); // highly obfuscated!!
+// context.addSpace(new File("C:\\Temp\\fernflower\\dec\\experiments\\Experiments8.class"), true); // highly obfuscated!!
+// context.addSpace(new File("C:\\Temp\\fernflower\\dec\\experiments\\Experiments9.class"), true);
+// context.addSpace(new File("C:\\Temp\\fernflower\\dec\\experiments\\Experiments10.class"), true);
+// context.addSpace(new File("C:\\Temp\\fernflower\\dec\\experiments\\Experiments11.class"), true);
+// context.addSpace(new File("C:\\Temp\\fernflower\\dec\\experiments\\Experiments12.class"), true);
+// context.addSpace(new File("C:\\Temp\\fernflower\\dec\\experiments\\Experiments13.class"), true); // highly obfuscated!!
+
+// context.addClass("TestByte", "C:\\Temp\\fernflower\\runtime1_4_2_03\\com\\sun\\jndi\\ldap\\Connection.class", true);
+// context.addClass("TestByte", "C:\\Temp\\fernflower\\dec\\Connection.class", true);
+
+// context.addClass("TestByte", "D:\\Nonbku\\workspace_3.4\\Fernflower\\bin\\struct\\attr\\MiscTest.class", true);
+
+// context.addClass("TestByte", "C:\\Temp\\fernflower\\dec\\pupkin\\Support2.class", true); // irreducible CFG
+
+// context.addClass("TestByte", "C:\\Temp\\fernflower\\runtime1_4_2_03\\sun\\security\\jgss\\GSSNameImpl.class", true);
+// context.addClass("TestByte", "C:\\Temp\\fernflower\\runtime1_4_2_03\\sun\\awt\\image\\ImageFetcher.class", true);
+// context.addClass("TestByte", "C:\\Temp\\fernflower\\dec\\HttpURLConnection.class", true);
+// context.addClass("TestByte", "C:\\Temp\\fernflower\\runtime1_4_2_03\\sun\\net\\www\\protocol\\http\\HttpURLConnection.class", true);
+// context.addClass("TestByte", "C:\\Temp\\fernflower\\dec\\SocketChannelImpl.class", true);
+// context.addClass("TestByte", "C:\\Temp\\fernflower\\runtime1_4_2_03\\sun\\nio\\ch\\SocketChannelImpl.class", true);
+
+// context.addSpace(new File("C:\\Temp\\fernflower\\rapc\\"), true);
+// context.addSpace(new File("C:\\Temp\\fernflower\\y\\"), true);
+
+// context.addClass("TestByte", "C:\\Temp\\fernflower\\y\\y\\layout\\router\\OrthogonalEdgeRouter.class", true);
+// context.addClass("TestByte", "C:\\Temp\\fernflower\\runtime1_4_2_03\\java\\util\\prefs\\WindowsPreferences.class", true);
+
+
+
+// context.addClass("TestByte", "C:\\Temp\\fernflower\\dec\\ag1.class", true);
+// context.addClass("TestByte", "C:\\Temp\\fernflower\\dec\\aa1.class", true);
+// context.addClass("TestByte", "C:\\Temp\\fernflower\\dec\\ar.class", true);
+// context.addClass("TestByte", "C:\\Temp\\fernflower\\dec\\aa.class", true);
+
+// context.addSpace(new File("C:\\Temp\\fernflower\\dec\\opera-mini-latest-advanced-int.jar"), true);
+// context.addSpace(new File("C:\\revjava\\remote\\data\\input\\20090522175436366_ewwrrmsm\\"), true);
+// context.addSpace(new File("C:\\Temp\\fernflower\\dec\\f1.class"), true);
+// context.addSpace(new File("C:\\Temp\\fernflower\\dec\\logunov\\"), true);
+// context.addSpace(new File("C:\\Temp\\fernflower\\dec\\logunov\\Lm.class"), true);
+// context.addSpace(new File("C:\\Temp\\fernflower\\dec\\logunov\\Lm1.class"), true);
+
+// context.addSpace(new File("C:\\Temp\\fernflower\\dec\\balmaster\\"), true);
+// context.addClass("TestByte", "C:\\Temp\\fernflower\\dec\\tcf10.class", true);
+// context.addClass("TestByte", "D:\\Nonbku\\workspace_3.4\\autspl\\bin\\ThreadMain.class", true);
+// context.addClass("TestByte", "C:\\Temp\\fernflower\\dec\\SysEnv.class", true);
+// context.addClass("TestByte", "C:\\Temp\\fernflower\\dec\\e$1.class", true);
+
+
+// context.addClass("TestByte", "C:\\Temp\\fernflower\\y\\y\\option\\TableEditorFactory.class", true);
+// context.addClass("TestByte", "C:\\Temp\\fernflower\\y\\y\\option\\TableEditorFactory$InfoPosition.class", true);
+// context.addClass("TestByte", "C:\\Temp\\fernflower\\y\\y\\option\\TableEditorFactory$_j.class", true);
+// context.addClass("TestByte", "C:\\Temp\\fernflower\\y\\y\\option\\TableEditorFactory$_d.class", true);
+// context.addClass("TestByte", "C:\\Temp\\fernflower\\y\\y\\option\\TableEditorFactory$_n.class", true);
+// context.addClass("TestByte", "C:\\Temp\\fernflower\\y\\y\\option\\TableEditorFactory$_g.class", true);
+// context.addClass("TestByte", "C:\\Temp\\fernflower\\y\\y\\option\\TableEditorFactory$5.class", true);
+// context.addClass("TestByte", "C:\\Temp\\fernflower\\y\\y\\option\\TableEditorFactory$6.class", true);
+// context.addClass("TestByte", "C:\\Temp\\fernflower\\y\\y\\option\\TableEditorFactory$_l.class", true);
+// context.addClass("TestByte", "C:\\Temp\\fernflower\\y\\y\\option\\TableEditorFactory$_c.class", true);
+// context.addClass("TestByte", "C:\\Temp\\fernflower\\y\\y\\option\\TableEditorFactory$11.class", true);
+// context.addClass("TestByte", "C:\\Temp\\fernflower\\y\\y\\option\\TableEditorFactory$12.class", true);
+// context.addClass("TestByte", "C:\\Temp\\fernflower\\y\\y\\option\\TableEditorFactory$_k.class", true);
+// context.addClass("TestByte", "C:\\Temp\\fernflower\\y\\y\\option\\TableEditorFactory$9.class", true);
+// context.addClass("TestByte", "C:\\Temp\\fernflower\\y\\y\\option\\TableEditorFactory$8.class", true);
+// context.addClass("TestByte", "C:\\Temp\\fernflower\\y\\y\\option\\TableEditorFactory$10.class", true);
+// context.addClass("TestByte", "C:\\Temp\\fernflower\\y\\y\\option\\TableEditorFactory$7.class", true);
+// context.addClass("TestByte", "C:\\Temp\\fernflower\\y\\y\\option\\TableEditorFactory$_f.class", true);
+// context.addClass("TestByte", "C:\\Temp\\fernflower\\y\\y\\option\\TableEditorFactory$_h.class", true);
+// context.addClass("TestByte", "C:\\Temp\\fernflower\\y\\y\\option\\TableEditorFactory$_m.class", true);
+// context.addClass("TestByte", "C:\\Temp\\fernflower\\y\\y\\option\\TableEditorFactory$3.class", true);
+// context.addClass("TestByte", "C:\\Temp\\fernflower\\y\\y\\option\\TableEditorFactory$2.class", true);
+// context.addClass("TestByte", "C:\\Temp\\fernflower\\y\\y\\option\\TableEditorFactory$4.class", true);
+// context.addClass("TestByte", "C:\\Temp\\fernflower\\y\\y\\option\\TableEditorFactory$ItemEditorOwner.class", true);
+// context.addClass("TestByte", "C:\\Temp\\fernflower\\y\\y\\option\\TableEditorFactory$_b.class", true);
+// context.addClass("TestByte", "C:\\Temp\\fernflower\\y\\y\\option\\TableEditorFactory$_b$_b.class", true);
+// context.addClass("TestByte", "C:\\Temp\\fernflower\\y\\y\\option\\TableEditorFactory$Theme.class", true);
+// context.addClass("TestByte", "C:\\Temp\\fernflower\\y\\y\\option\\TableEditorFactory$_i.class", true);
+// context.addClass("TestByte", "C:\\Temp\\fernflower\\y\\y\\option\\TableEditorFactory$1.class", true);
+// context.addClass("TestByte", "C:\\Temp\\fernflower\\y\\y\\option\\TableEditorFactory$_e.class", true);
+
+
+// context.addClass("TestByte", "C:\\revjava\\remote\\data\\input\\20090514095232398_nuopioet\\a5.class", true);
+// context.addClass("TestByte", "C:\\revjava\\remote\\data\\input\\20090514171647485_mjdkkaci\\Main.class", true);
+
+// context.addClass("TestByte", "C:\\Temp\\fernflower\\dec\\BIDVBankClientAdapter.class", true);
+// context.addClass("TestByte", "C:\\revjava\\remote\\data\\input\\20090518082259353_fkwzbhxj\\Logic.class", true);
+// context.addClass("TestByte", "C:\\revjava\\remote\\data\\input\\20090518114646899_mrahkrxa\\N.class", true);
+// context.addClass("TestByte", "C:\\revjava\\remote\\data\\input\\20090518114718283_pckzzhrp\\M.class", true);
+
+// context.addClass("TestByte", "C:\\Temp\\fernflower\\dec\\DoExternalProcessMinwon.class", true);
+// context.addClass("TestByte", "C:\\revjava\\remote\\data\\input\\20090515053147932_unktnred\\DoExternalProcessMinwon.class", true);
+
+// context.addClass("TestByte", "C:\\Temp\\fernflower\\dec\\TryCatchFinallyClass.class", true);
+// context.addClass("TestByte", "C:\\revjava\\remote\\data\\input\\20090514180437746_raelweyb\\TryCatchFinallyClass.class", true);
+// context.addClass("TestByte", "C:\\revjava\\remote\\data\\input\\20090514193807307_xfbwelrk\\AlertDataManager.class", true);
+// context.addClass("TestByte", "C:\\revjava\\remote\\data\\input\\20090514193807307_xfbwelrk\\AlertDataManager$LensedAlertDataQueryConnector.class", true);
+// context.addClass("TestByte", "C:\\revjava\\remote\\data\\input\\20090514193807307_xfbwelrk\\AlertDataManager$DomainCallback.class", true);
+// context.addClass("TestByte", "C:\\revjava\\remote\\data\\input\\20090514193807307_xfbwelrk\\AlertDataManager$AlertDataQueryConnector.class", true);
+// context.addClass("TestByte", "C:\\revjava\\remote\\data\\input\\20090514193807307_xfbwelrk\\AlertDataManager$AlertDataQueryConnector$1.class", true);
+// context.addClass("TestByte", "C:\\revjava\\remote\\data\\input\\20090517092633378_kmnzqbgb\\RobotsApplet.class", true);
+
+
+// context.addClass("TestByte", "C:\\Temp\\fernflower\\y\\y\\option\\e.class", true);
+// context.addClass("TestByte", "C:\\Temp\\fernflower\\y\\y\\option\\e$1.class", true);
+// context.addClass("TestByte", "C:\\Temp\\fernflower\\y\\y\\option\\e$2.class", true);
+// context.addClass("TestByte", "C:\\Temp\\fernflower\\y\\y\\option\\e$3.class", true);
+// context.addClass("TestByte", "C:\\Temp\\fernflower\\y\\y\\option\\e$4.class", true);
+// context.addClass("TestByte", "C:\\Temp\\fernflower\\y\\y\\option\\e$5.class", true);
+
+// context.addClass("TestByte", "C:\\Temp\\fernflower\\dec\\SunGraphics2D.class", true);
+// context.addClass("TestByte", "C:\\Temp\\fernflower\\runtime1_4_2_03\\sun\\java2d\\SunGraphics2D.class", true);
+// context.addClass("TestByte", "C:\\Temp\\fernflower\\dec\\Channels$ReadableByteChannelImpl.class", true);
+// context.addClass("TestByte", "C:\\Temp\\fernflower\\runtime1_4_2_03\\java\\nio\\channels\\Channels$ReadableByteChannelImpl.class", true);
+// context.addClass("TestByte", "C:\\Temp\\fernflower\\runtime1_4_2_03\\sun\\jdbc\\odbc\\JdbcOdbcObject.class", true);
+// context.addClass("TestByte", "C:\\Temp\\fernflower\\dec\\PKCS7.class", true);
+// context.addClass("TestByte", "C:\\Temp\\fernflower\\runtime1_4_2_03\\sun\\security\\pkcs\\PKCS7.class", true);
+// context.addClass("TestByte", "C:\\Temp\\fernflower\\dec\\StepPattern.class", true);
+// context.addClass("TestByte", "C:\\Temp\\fernflower\\runtime1_4_2_03\\org\\apache\\xpath\\patterns\\StepPattern.class", true);
+// context.addClass("TestByte", "C:\\Temp\\fernflower\\dec\\ContextMatchStepPattern.class", true);
+// context.addClass("TestByte", "C:\\Temp\\fernflower\\runtime1_4_2_03\\org\\apache\\xpath\\patterns\\ContextMatchStepPattern.class", true);
+// context.addClass("TestByte", "C:\\Temp\\fernflower\\runtime1_4_2_03\\org\\apache\\xalan\\transformer\\TransformerImpl.class", true);
+
+
+// context.addClass("TestByte", "C:\\Temp\\fernflower\\dec\\DatagramChannelImpl.class", true);
+// context.addClass("TestByte", "C:\\Temp\\fernflower\\runtime1_4_2_03\\sun\\nio\\ch\\DatagramChannelImpl.class", true);
+// context.addClass("TestByte", "C:\\Temp\\fernflower\\rapc\\net\\rim\\tools\\compiler\\d\\a5.class", true);
+// context.addClass("TestByte", "C:\\Temp\\fernflower\\runtime1_4_2_03\\java\\awt\\font\\TextLayout.class", true);
+// context.addClass("TestByte", "C:\\Temp\\fernflower\\runtime1_4_2_03\\com\\sun\\corba\\se\\internal\\iiop\\CDRInputStream_1_0.class", true);
+// context.addClass("TestByte", "C:\\Temp\\fernflower\\runtime1_4_2_03\\com\\sun\\java\\swing\\plaf\\motif\\MotifLookAndFeel.class", true);
+// context.addClass("TestByte", "C:\\Temp\\fernflower\\runtime1_4_2_03\\com\\sun\\imageio\\plugins\\jpeg\\JPEGMetadata.class", true);
+// context.addClass("TestByte", "C:\\Temp\\fernflower\\runtime1_4_2_03\\sun\\text\\resources\\DateFormatZoneData_sv.class", true);
+// context.addClass("TestByte", "C:\\Temp\\fernflower\\runtime1_4_2_03\\java\\nio\\channels\\FileChannel.class", true);
+// context.addClass("TestByte", "C:\\Temp\\fernflower\\runtime1_4_2_03\\javax\\swing\\tree\\TreePath.class", true);
+
+// context.addClass("TestByte", "C:\\Temp\\fernflower\\dec\\ICC_Transform.class", true);
+ // block inlining!
+// context.addClass("TestByte", "C:\\Temp\\fernflower\\dec\\LdapReferralContext.class", true);
+
+// context.addSpace(new File("C:\\bahn\\fullcode\\lgsrv20batch\\bin\\"), true);
+
+// context.addSpace(new File("C:\\Temp\\tmp\\enum\\struct\\attr\\dest\\struct\\attr\\en\\"), true);
+// context.addSpace(new File("D:\\Nonbku\\workspace\\Fernflower\\bin\\struct\\attr\\en\\"), true);
+
+// context.addSpace(new File("D:\\Nonbku\\workspace\\InnerTest\\bin\\data\\"), true);
+// context.addSpace(new File("D:\\Nonbku\\workspace\\Fernflower\\bin\\struct\\attr\\en\\"), true);
+
+// context.addSpace(new File("D:\\Nonbku\\workspace\\Fernflower\\bin\\"), true);
+// context.addSpace(new File("C:\\bahn\\lfg\\geovis\\GeoVisStandalone\\bin\\"), true);
+// context.addSpace(new File("C:\\bahn\\lfg\\geovis\\GeoVisCommon\\bin\\"), true);
+// context.addSpace(new File("C:\\bahn\\lfg\\geovis\\GeoVisClient\\gvCl30Api\\build\\"), true);
+// context.addSpace(new File("C:\\bahn\\lfg\\geovis\\GeoVisClient\\gvCl40Ext\\build\\"), true);
+
+// context.addSpace(new File("C:\\bahn\\lfg\\geovis\\GeoVisClient\\gvCl30Api\\build\\de\\dbsystems\\geovis\\gui\\view\\"), true);
+
+// fl.structcontext = context;
+
+// fl.decompileContext(context, new File("D:\\Nonbku\\workspace_3.4\\JavaRuntime1_4_2_03\\src\\"));
+// fl.decompileContext(context, new File("C:\\bahn\\fullcode\\LfG\\server\\lgsrv20batch\\src\\java\\"));
+// fl.decompileContext(context, new File("D:\\Nonbku\\workspace\\InnerTest\\src\\struct\\attr\\en\\"));
+// fl.decompileContext(context, new File("D:\\Nonbku\\workspace\\Fernflower_dec\\src\\"));
+// fl.decompileContext(context, new File("C:\\Temp\\fernflower\\rapc_ff\\"));
+// fl.decompileContext(context, new File("C:\\Temp\\fernflower\\y_ff\\"));
+// fl.decompileContext(context, new File("C:\\Temp\\fernflower\\dec\\"));
+// fl.decompileContext(context, new File("C:\\Temp\\fernflower\\dec\\output\\"));
+// decompiler.decompileContext(new File("C:\\Oleg\\dec\\output\\"));
+ decompiler.decompileContext(new File("D:\\temp_c\\workspace\\output\\"));
+// decompiler.decompileContext(new File("C:\\Temp\\fernflower\\dec\\output\\"));
+// decompiler.decompileContext(new File("C:\\Temp\\fernflower\\dec\\opera\\output\\dec\\"));
+// fl.decompileContext(context, new File("C:\\bahn\\lfg\\geovis_dec\\GeoVisStandalone\\starter\\src\\java\\"));
+// fl.decompileContext(context, new File("C:\\bahn\\lfg\\geovis_dec\\GeoVisCommon\\gvCom30Api\\src\\java\\"));
+// fl.decompileContext(context, new File("C:\\bahn\\lfg\\geovis_dec\\GeoVisClient\\gvCl30Api\\src\\java\\"));
+// fl.decompileContext(context, new File("C:\\bahn\\lfg\\geovis_dec\\GeoVisClient\\gvCl40Ext\\src\\java\\"));
+
+// MemoryMonitor.run = false;
+
+
+
+ System.out.println("\n\nTime elapsed " + (new Date().getTime() - start.getTime())/1000);
+
+// System.out.println("1:\t"+Timer.getTime("general"));
+// System.out.println("2:\t"+Timer.getTime("generalnull"));
+// System.out.println("3:\t"+Timer.getTime("general1"));
+
+
+// System.out.println("1:\t"+Timer.getTime(10));
+// System.out.println("> 1:\t"+Timer.getTime(11));
+// System.out.println("=:\t"+Timer.getTime(12));
+
+ } catch(Exception ex) {
+ ex.printStackTrace();
+ }
+
+ }
+
+}
diff --git a/src/test/JetTest.java b/src/test/JetTest.java
new file mode 100644
index 0000000..2bb1d43
--- /dev/null
+++ b/src/test/JetTest.java
@@ -0,0 +1,40 @@
+package test;
+
+import java.io.File;
+import java.util.Date;
+import java.util.HashMap;
+
+import de.fernflower.main.decompiler.ConsoleDecompiler;
+
+public class JetTest {
+
+ public static void main(String[] args) {
+
+ try {
+
+ String current_path = new File(".").getCanonicalPath();
+
+ //TimerFactory.initialize(new File(".").getCanonicalPath()+"/lib/timer/hrtlib.dll");
+
+ Date start = new Date();
+
+ ConsoleDecompiler decompiler = new ConsoleDecompiler(new HashMap<String, Object>(){{put("log", "warn");put("ren", "1");}});
+
+
+ //decompiler.addSpace(new File("D:\\Oleg\\workspace\\input\\BradTest.class"), true);
+ decompiler.addSpace(new File(current_path + "/bin/test/input/TestEclipse7.class"), true);
+ //decompiler.addSpace(new File(current_path + "/src/test/input/TestJavac7.class"), true);
+ //decompiler.addSpace(new File(current_path + "/src/test/input/TestJavac8.class"), true);
+
+ //decompiler.decompileContext(new File("D:\\Oleg\\workspace\\output\\"));
+ decompiler.decompileContext(new File(current_path + "/src/test/output/"));
+
+ System.out.println("\n\nTime elapsed " + (new Date().getTime() - start.getTime())/1000);
+
+ } catch(Exception ex) {
+ ex.printStackTrace();
+ }
+
+ }
+
+}
diff --git a/src/test/JunitTest.java b/src/test/JunitTest.java
new file mode 100644
index 0000000..acfc88f
--- /dev/null
+++ b/src/test/JunitTest.java
@@ -0,0 +1,95 @@
+package test;
+
+import java.io.File;
+import java.util.Date;
+import java.util.HashMap;
+
+import de.fernflower.main.decompiler.ConsoleDecompiler;
+import de.fernflower.main.extern.IFernflowerPreferences;
+
+public class JunitTest {
+
+ /**
+ * @param args
+ */
+ public static void main(String[] args) {
+
+ try {
+
+ String current_path = new File(".").getCanonicalPath();
+
+ //TimerFactory.initialize(new File(".").getCanonicalPath()+"/lib/timer/hrtlib.dll");
+
+ Date start = new Date();
+
+ ConsoleDecompiler decompiler = new ConsoleDecompiler(new HashMap<String, Object>(){{
+ put("log", "warn");
+ put("ren", "1");
+ put(IFernflowerPreferences.HIDE_DEFAULT_CONSTRUCTOR, "0");
+ //put(IFernflowerPreferences.DECOMPILE_GENERIC_SIGNATURES, "1");
+ put(IFernflowerPreferences.DECOMPILE_GENERIC_SIGNATURES, "0");
+ put(IFernflowerPreferences.IDEA_NOT_NULL_ANNOTATION, "1");
+ }});
+
+
+ //decompiler.addSpace(new File("D:\\Oleg\\workspace\\input\\idea-junit.jar"), true);
+ //decompiler.addSpace(new File("D:\\Oleg\\workspace\\input\\svn4idea.jar"), true);
+ //decompiler.addSpace(new File("D:\\Oleg\\workspace\\input\\github.jar"), true);
+ //decompiler.addSpace(new File("D:\\Oleg\\workspace\\input\\copyright.jar"), true);
+ //decompiler.addSpace(new File("D:\\Oleg\\workspace\\input\\rt_1_4_2.jar"), true);
+ //decompiler.addSpace(new File("D:\\Oleg\\workspace\\swingset3_acceptance\\swingset3_original\\lib\\TimingFramework.jar"), true);
+
+// decompiler.decompileContext(new File("D:\\Oleg\\workspace\\output1\\"));
+
+// decompiler.addSpace(new File("D:\\Oleg\\workspace\\input\\JUnitStatusLine$1$1.class"), true);
+// decompiler.addSpace(new File("D:\\Oleg\\workspace\\input\\JUnitStatusLine$1.class"), true);
+// decompiler.addSpace(new File("D:\\Oleg\\workspace\\input\\JUnitStatusLine$2.class"), true);
+// decompiler.addSpace(new File("D:\\Oleg\\workspace\\input\\JUnitStatusLine$StateInfo.class"), true);
+// decompiler.addSpace(new File("D:\\Oleg\\workspace\\input\\JUnitStatusLine$TestProgressListener.class"), true);
+// decompiler.addSpace(new File("D:\\Oleg\\workspace\\input\\JUnitStatusLine.class"), true);
+
+// decompiler.addSpace(new File("D:\\Oleg\\workspace\\input\\JUnitConfiguration$1.class"), true);
+// decompiler.addSpace(new File("D:\\Oleg\\workspace\\input\\JUnitConfiguration$2.class"), true);
+// decompiler.addSpace(new File("D:\\Oleg\\workspace\\input\\JUnitConfiguration$Data.class"), true);
+// decompiler.addSpace(new File("D:\\Oleg\\workspace\\input\\JUnitConfiguration.class"), true);
+
+ //decompiler.addSpace(new File("D:\\Oleg\\workspace\\input\\TestPackage$ResetConfigurationModuleAdapter.class"), true);
+ //decompiler.addSpace(new File("D:\\Oleg\\workspace\\input\\TestPackage$SearchForTestsTask.class"), true);
+ //decompiler.addSpace(new File("D:\\Oleg\\workspace\\input\\TestPackage.class"), true);
+
+ //decompiler.addSpace(new File("D:\\Oleg\\workspace\\input\\TestAnnotations$TestInner.class"), true);
+ //decompiler.addSpace(new File("D:\\Oleg\\workspace\\input\\TestAnnotationsEclipse$TestInner.class"), true);
+
+ //decompiler.addSpace(new File("D:\\Oleg\\workspace\\input\\LoadRecentBranchRevisions.class"), true);
+ //decompiler.addSpace(new File("D:\\Oleg\\workspace\\input\\LoadRecentBranchRevisions$1.class"), true);
+
+ //decompiler.addSpace(new File("D:\\Oleg\\workspace\\Fernflower\\bin\\test\\input\\TestLoop.class"), true);
+
+ //decompiler.addSpace(new File("D:\\Oleg\\workspace\\input\\GithubSelectForkPanel$1.class"), true);
+ //decompiler.addSpace(new File("D:\\Oleg\\workspace\\input\\GithubSelectForkPanel.class"), true);
+
+// decompiler.addSpace(new File("D:\\Oleg\\workspace\\input\\ObjectOutputStream$1.class"), true);
+// decompiler.addSpace(new File("D:\\Oleg\\workspace\\input\\ObjectOutputStream$Caches.class"), true);
+// decompiler.addSpace(new File("D:\\Oleg\\workspace\\input\\ObjectOutputStream$DebugTraceInfoStack.class"), true);
+// decompiler.addSpace(new File("D:\\Oleg\\workspace\\input\\ObjectOutputStream$PutField.class"), true);
+// decompiler.addSpace(new File("D:\\Oleg\\workspace\\input\\ObjectOutputStream$PutFieldImpl.class"), true);
+// decompiler.addSpace(new File("D:\\Oleg\\workspace\\input\\ObjectOutputStream$HandleTable.class"), true);
+// decompiler.addSpace(new File("D:\\Oleg\\workspace\\input\\ObjectOutputStream$ReplaceTable.class"), true);
+// decompiler.addSpace(new File("D:\\Oleg\\workspace\\input\\ObjectOutputStream$BlockDataOutputStream.class"), true);
+ //decompiler.addSpace(new File("D:\\Oleg\\workspace\\input\\ObjectOutputStream.class"), true); // writeArray SSAU endless loop
+
+ //decompiler.addSpace(new File("D:\\Oleg\\workspace\\input\\SvnFormatSelector.class"), true);
+
+ decompiler.addSpace(new File("D:\\Oleg\\workspace\\Fernflower\\src\\test\\input\\TestJavac8.class"), true);
+
+ decompiler.decompileContext(new File("D:\\Oleg\\workspace\\output1\\"));
+
+ System.out.println("\n\nTime elapsed " + (new Date().getTime() - start.getTime())/1000);
+
+ } catch(Exception ex) {
+ ex.printStackTrace();
+ }
+
+ }
+
+}
diff --git a/src/test/SumUpClasses.java b/src/test/SumUpClasses.java
new file mode 100644
index 0000000..6d80385
--- /dev/null
+++ b/src/test/SumUpClasses.java
@@ -0,0 +1,81 @@
+package test;
+
+import java.io.File;
+import java.io.IOException;
+import java.util.Enumeration;
+import java.util.jar.JarFile;
+import java.util.zip.ZipEntry;
+import java.util.zip.ZipFile;
+
+
+public class SumUpClasses {
+
+ public static void main(String[] args) {
+
+ try {
+ File dir = new File("C:\\revjava\\remote\\data\\input\\");
+
+ long[] res = getClasses(dir);
+
+ System.out.println("Count: "+res[0]);
+ System.out.println("Size: "+res[1]/1024/1024);
+
+ } catch(Exception ex) {
+ ex.printStackTrace();
+ }
+ }
+
+ private static long[] getClasses(File file) {
+
+ if(file.isDirectory()) {
+
+ long count = 0, size = 0;
+
+ for(File f : file.listFiles()) {
+ long[] arr = getClasses(f);
+ count+=arr[0];
+ size+=arr[1];
+ }
+
+ return new long[] {count, size};
+
+ } else {
+ String filename = file.getName();
+ if(filename.endsWith(".class")) {
+ return new long[] {1, file.length()};
+ } else if(filename.endsWith(".zip")) {
+ try {
+ return getClassesZip(new ZipFile(file));
+ } catch(IOException ex) {
+ System.out.println("Cannot read file: " + file.getAbsolutePath());
+ }
+ } else if(filename.endsWith(".jar")) {
+ try {
+ return getClassesZip(new JarFile(file));
+ } catch(IOException ex) {
+ System.out.println("Cannot read file: " + file.getAbsolutePath());
+ }
+ }
+ }
+
+ return new long[] {0, 0};
+ }
+
+ private static long[] getClassesZip(ZipFile archive) {
+
+ long count = 0, size = 0;
+
+ Enumeration<? extends ZipEntry> en = archive.entries();
+ while(en.hasMoreElements()) {
+ ZipEntry entr = (ZipEntry)en.nextElement();
+
+ if(!entr.isDirectory() && entr.getName().endsWith(".class")) {
+ count++;
+ size+=entr.getSize();
+ }
+ }
+
+ return new long[] {count, size};
+ }
+
+}
diff --git a/src/test/TestAnnotationsEclipse$MyAnnotation.class b/src/test/TestAnnotationsEclipse$MyAnnotation.class
new file mode 100644
index 0000000..a90e1db
--- /dev/null
+++ b/src/test/TestAnnotationsEclipse$MyAnnotation.class
Binary files differ
diff --git a/src/test/TestAnnotationsEclipse$TestInner.class b/src/test/TestAnnotationsEclipse$TestInner.class
new file mode 100644
index 0000000..7aa6122
--- /dev/null
+++ b/src/test/TestAnnotationsEclipse$TestInner.class
Binary files differ
diff --git a/src/test/TestAnnotationsEclipse.class b/src/test/TestAnnotationsEclipse.class
new file mode 100644
index 0000000..995be45
--- /dev/null
+++ b/src/test/TestAnnotationsEclipse.class
Binary files differ
diff --git a/src/test/TestAnnotationsEclipse.java b/src/test/TestAnnotationsEclipse.java
new file mode 100644
index 0000000..42a06c0
--- /dev/null
+++ b/src/test/TestAnnotationsEclipse.java
@@ -0,0 +1,42 @@
+package test;
+
+import java.lang.annotation.Annotation;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.reflect.Constructor;
+import java.lang.reflect.Method;
+
+public class TestAnnotationsEclipse {
+
+ public String a;
+
+ @Retention(RetentionPolicy.CLASS)
+ @interface MyAnnotation {}
+
+ public static void main(String[] args) {
+
+ TestInner a = new TestAnnotationsEclipse().new TestInner();
+
+ for(Constructor mt : a.getClass().getConstructors()) {
+
+ Annotation[][] ann = mt.getParameterAnnotations();
+
+ System.out.println(ann.length);
+ }
+ }
+
+ protected class TestInner {
+
+ public TestInner() {}
+
+ public TestInner(String param1, Object param2, @MyAnnotation boolean param3) {
+ System.out.println(param1);
+ System.out.println(param2);
+ System.out.println(param3);
+ }
+
+ public void accessField() {
+ System.out.println(TestAnnotationsEclipse.this.a);
+ }
+ }
+}
diff --git a/src/test/TestInput.java b/src/test/TestInput.java
new file mode 100644
index 0000000..2273555
--- /dev/null
+++ b/src/test/TestInput.java
@@ -0,0 +1,54 @@
+package test;
+
+import java.io.File;
+import java.util.Date;
+
+import com.vladium.utils.timing.TimerFactory;
+
+import de.fernflower.main.decompiler.ConsoleDecompiler;
+
+
+public class TestInput {
+
+ public static void main(String[] args) {
+
+ try {
+ TimerFactory.initialize(new File(".").getCanonicalPath()+"/lib/timer/hrtlib.dll");
+ } catch(Exception ex) {
+ ex.printStackTrace();
+ }
+
+ File[] dirs = new File("C:\\revjava\\remote\\data\\input\\").listFiles();
+
+ for(File dir : dirs) {
+ if(dir.isDirectory()) {
+ Date start = new Date();
+ System.out.println("==========================================================================");
+ System.out.println("Processing " + dir.getAbsolutePath());
+ decompileDirectory(dir);
+ System.out.println("Proceeded " + dir.getAbsolutePath());
+ System.out.println("Time elapsed " + (new Date().getTime() - start.getTime())/1000);
+ System.out.println("==========================================================================");
+ }
+ }
+
+ }
+
+ private static void decompileDirectory(File dir) {
+
+ try {
+
+ ConsoleDecompiler decompiler = new ConsoleDecompiler();
+
+ decompiler.addSpace(dir, true);
+
+ decompiler.decompileContext(new File("C:\\Temp\\fernflower\\dec\\output\\", dir.getName()));
+
+
+ } catch(Exception ex) {
+ ex.printStackTrace();
+ }
+
+ }
+
+}
diff --git a/src/test/TestRapc.java b/src/test/TestRapc.java
new file mode 100644
index 0000000..1e5c171
--- /dev/null
+++ b/src/test/TestRapc.java
@@ -0,0 +1,38 @@
+package test;
+
+import java.io.File;
+import java.util.Date;
+import java.util.HashMap;
+
+import com.vladium.utils.timing.TimerFactory;
+
+import de.fernflower.main.decompiler.ConsoleDecompiler;
+
+
+public class TestRapc {
+
+ public static void main(String[] args) {
+
+ try {
+
+ TimerFactory.initialize(new File(".").getCanonicalPath()+"/lib/timer/hrtlib.dll");
+
+ Date start = new Date();
+
+
+ ConsoleDecompiler decompiler = new ConsoleDecompiler(new HashMap<String, Object>(){{put("log", "warn");put("ren", "1");}});
+
+ decompiler.addSpace(new File("C:\\Temp\\fernflower\\rapc\\"), true);
+
+ decompiler.decompileContext(new File("C:\\Temp\\fernflower\\rapc_ff\\"));
+
+
+ System.out.println("\n\nTime elapsed " + (new Date().getTime() - start.getTime())/1000);
+
+ } catch(Exception ex) {
+ ex.printStackTrace();
+ }
+
+ }
+
+}
diff --git a/src/test/TestRuntime1_4_2_03.java b/src/test/TestRuntime1_4_2_03.java
new file mode 100644
index 0000000..366a06a
--- /dev/null
+++ b/src/test/TestRuntime1_4_2_03.java
@@ -0,0 +1,38 @@
+package test;
+
+import java.io.File;
+import java.util.Date;
+import java.util.HashMap;
+
+import com.vladium.utils.timing.TimerFactory;
+
+import de.fernflower.main.decompiler.ConsoleDecompiler;
+
+
+public class TestRuntime1_4_2_03 {
+
+ public static void main(String[] args) {
+
+ try {
+
+ TimerFactory.initialize(new File(".").getCanonicalPath()+"/lib/timer/hrtlib.dll");
+
+ Date start = new Date();
+
+
+ ConsoleDecompiler decompiler = new ConsoleDecompiler(new HashMap<String, Object>(){{put("log", "warn");}});
+
+ decompiler.addSpace(new File("C:\\Temp\\fernflower\\runtime1_4_2_03\\"), true);
+
+ decompiler.decompileContext(new File("D:\\Nonbku\\workspace_3.4\\JavaRuntime1_4_2_03\\src\\"));
+
+
+ System.out.println("\n\nTime elapsed " + (new Date().getTime() - start.getTime())/1000);
+
+ } catch(Exception ex) {
+ ex.printStackTrace();
+ }
+
+ }
+
+}
diff --git a/src/test/TestSelf.java b/src/test/TestSelf.java
new file mode 100644
index 0000000..7f1a339
--- /dev/null
+++ b/src/test/TestSelf.java
@@ -0,0 +1,36 @@
+package test;
+
+import java.io.File;
+import java.util.Date;
+
+import com.vladium.utils.timing.TimerFactory;
+
+import de.fernflower.main.decompiler.ConsoleDecompiler;
+
+
+public class TestSelf {
+
+ public static void main(String[] args) {
+
+ try {
+
+ TimerFactory.initialize(new File(".").getCanonicalPath()+"/lib/timer/hrtlib.dll");
+
+ Date start = new Date();
+
+
+ ConsoleDecompiler decompiler = new ConsoleDecompiler();
+
+ decompiler.addSpace(new File("D:\\Nonbku\\workspace_3.4\\Fernflower\\bin\\"), true);
+
+ decompiler.decompileContext(new File("D:\\Nonbku\\workspace_3.4\\Fernflower_dec\\src\\"));
+
+ System.out.println("\n\nTime elapsed " + (new Date().getTime() - start.getTime())/1000);
+
+ } catch(Exception ex) {
+ ex.printStackTrace();
+ }
+
+ }
+
+}
diff --git a/src/test/TestValidateXml.java b/src/test/TestValidateXml.java
new file mode 100644
index 0000000..a84e428
--- /dev/null
+++ b/src/test/TestValidateXml.java
@@ -0,0 +1,69 @@
+package test;
+
+import java.io.File;
+import java.io.IOException;
+
+import javax.xml.transform.Source;
+import javax.xml.transform.stream.StreamSource;
+import javax.xml.validation.Schema;
+import javax.xml.validation.SchemaFactory;
+import javax.xml.validation.Validator;
+
+import org.xml.sax.ErrorHandler;
+import org.xml.sax.SAXException;
+import org.xml.sax.SAXParseException;
+
+public class TestValidateXml {
+
+ public static void main(String[] args) {
+
+ try {
+ // 1. Lookup a factory for the W3C XML Schema language
+ SchemaFactory factory = SchemaFactory.newInstance("http://www.w3.org/2001/XMLSchema");
+
+ // 2. Compile the schema.
+ // Here the schema is loaded from a java.io.File, but you could use
+ // a java.net.URL or a javax.xml.transform.Source instead.
+ Schema schema = factory.newSchema(new File("/opt/xml/docbook/xsd/docbook.xsd"));
+
+ // 3. Get a validator from the schema.
+ Validator validator = schema.newValidator();
+ validator.setErrorHandler(new ForgivingErrorHandler());
+
+ // 4. Parse the document you want to check.
+ Source source = new StreamSource(args[0]);
+
+ // 5. Check the document
+ try {
+ validator.validate(source);
+ System.out.println(args[0] + " is valid.");
+ } catch (SAXException ex) {
+ System.out.println(args[0] + " is not valid because ");
+ System.out.println(ex.getMessage());
+ }
+ } catch(IOException ex) {
+ System.out.println(args[0] + " is not valid because ");
+ System.out.println(ex.getMessage());
+ } catch(SAXException ex) {
+ System.out.println(args[0] + " is not valid because ");
+ System.out.println(ex.getMessage());
+ }
+ }
+
+}
+
+class ForgivingErrorHandler implements ErrorHandler {
+
+ public void warning(SAXParseException ex) {
+ System.err.println(ex.getMessage());
+ }
+
+ public void error(SAXParseException ex) {
+ System.err.println(ex.getMessage());
+ }
+
+ public void fatalError(SAXParseException ex) throws SAXException {
+ throw ex;
+ }
+
+}
diff --git a/src/test/TestYWorks.java b/src/test/TestYWorks.java
new file mode 100644
index 0000000..4eec73a
--- /dev/null
+++ b/src/test/TestYWorks.java
@@ -0,0 +1,38 @@
+package test;
+
+import java.io.File;
+import java.util.Date;
+import java.util.HashMap;
+
+import com.vladium.utils.timing.TimerFactory;
+
+import de.fernflower.main.decompiler.ConsoleDecompiler;
+
+
+public class TestYWorks {
+
+ public static void main(String[] args) {
+
+ try {
+
+ TimerFactory.initialize(new File(".").getCanonicalPath()+"/lib/timer/hrtlib.dll");
+
+ Date start = new Date();
+
+
+ ConsoleDecompiler decompiler = new ConsoleDecompiler(new HashMap<String, Object>(){{put("log", "warn");put("ren", "1");}});
+
+ decompiler.addSpace(new File("C:\\Temp\\fernflower\\y\\"), true);
+
+ decompiler.decompileContext(new File("C:\\Temp\\fernflower\\y_ff\\"));
+
+
+ System.out.println("\n\nTime elapsed " + (new Date().getTime() - start.getTime())/1000);
+
+ } catch(Exception ex) {
+ ex.printStackTrace();
+ }
+
+ }
+
+}
diff --git a/src/test/VladDebug.java b/src/test/VladDebug.java
new file mode 100644
index 0000000..707e738
--- /dev/null
+++ b/src/test/VladDebug.java
@@ -0,0 +1,67 @@
+package test;
+
+import java.io.File;
+
+import de.fernflower.main.decompiler.ConsoleDecompiler;
+
+
+public class VladDebug {
+
+ public static void main(String[] args) {
+
+ try {
+
+ ConsoleDecompiler decompiler = new ConsoleDecompiler();
+
+ decompiler.addSpace(new File("C:\\Temp\\fernflower\\vladdebug\\"), true);
+
+ decompiler.decompileContext(new File("D:\\Nonbku\\workspace_3.4\\vladdebug\\src\\"));
+
+
+// Fernflower fl = new Fernflower();
+//
+// DecompilerContext.getCurrentContext().setLogger(new PrintStreamLogger(IFernflowerLogger.WARNING, System.out));
+//
+// GlobalOptions.setProperty(GlobalOptions.DECOMPILE_INNER, "1");
+// GlobalOptions.setProperty(GlobalOptions.DECOMPILE_CLASS_1_4, "1");
+// GlobalOptions.setProperty(GlobalOptions.DECOMPILE_ASSERTIONS, "1");
+// GlobalOptions.setProperty(GlobalOptions.REMOVE_BRIDGE, "1");
+// GlobalOptions.setProperty(GlobalOptions.REMOVE_SYNTHETIC, "0");
+// GlobalOptions.setProperty(GlobalOptions.HIDE_EMPTY_SUPER, "1");
+// GlobalOptions.setProperty(GlobalOptions.HIDE_DEFAULT_CONSTRUCTOR, "1");
+// GlobalOptions.setProperty(GlobalOptions.DECOMPILE_GENERIC_SIGNATURES, "0");
+// GlobalOptions.setProperty(GlobalOptions.OUTPUT_COPYRIGHT_COMMENT, "0");
+// GlobalOptions.setProperty(GlobalOptions.NO_EXCEPTIONS_RETURN, "1");
+// GlobalOptions.setProperty(GlobalOptions.DECOMPILE_ENUM, "1");
+// GlobalOptions.setProperty(GlobalOptions.FINALLY_DEINLINE, "1");
+// GlobalOptions.setProperty(GlobalOptions.REMOVE_GETCLASS_NEW, "1");
+//
+// GlobalOptions.setProperty(GlobalOptions.BOOLEAN_TRUE_ONE, "1");
+// GlobalOptions.setProperty(GlobalOptions.SYNTHETIC_NOT_SET, "1");
+// GlobalOptions.setProperty(GlobalOptions.UNDEFINED_PARAM_TYPE_OBJECT, "1");
+//
+//
+// if(args != null && args.length > 1) {
+//
+// for(int i=0;i<args.length-1;i++) {
+// fl.getStructcontext().addSpace(new File(args[i]), true);
+// }
+//
+// fl.decompileContext(new File(args[args.length-1]));
+//
+// return;
+// }
+//
+// StructContext context = fl.getStructcontext();
+//
+// context.addSpace(new File("C:\\Temp\\fernflower\\vladdebug\\"), true);
+//
+// fl.decompileContext(context, new File("D:\\Nonbku\\workspace_3.4\\vladdebug\\src\\"));
+
+ } catch(Exception ex) {
+ ex.printStackTrace();
+ }
+
+ }
+
+}
diff --git a/src/test/input/TestEclipse7.java b/src/test/input/TestEclipse7.java
new file mode 100644
index 0000000..f8bb127
--- /dev/null
+++ b/src/test/input/TestEclipse7.java
@@ -0,0 +1,59 @@
+package test.input;
+
+import java.io.FileReader;
+import java.io.IOException;
+import java.lang.reflect.Method;
+
+public class TestEclipse7 {
+
+
+// public void testTryResources() throws IOException {
+//
+// try (FileReader reader = new FileReader("file"); FileReader reader1 = new FileReader("file")) {
+// System.out.println();
+// }
+//
+// }
+//
+// public void testTryResources1() throws IOException {
+//
+// try (FileReader reader = new FileReader("file")) {
+// System.out.println("block");
+// } catch(RuntimeException ex) {
+// System.out.println(ex.toString());
+// } finally {
+// System.out.println("finally");
+// }
+//
+// }
+
+ public void testMultiCatch() {
+
+ try {
+ Method method = getClass().getDeclaredMethod("foo");
+ } catch (NoSuchMethodException | SecurityException e) {
+ e.printStackTrace();
+ }
+ }
+
+
+// public void testSwitchString() {
+//
+// String s = "";
+// switch(s) {
+// case "Aa": // "xyz":
+// System.out.println("!");
+// break;
+// case "BB": // "abc":
+// System.out.println("?");
+// break;
+// case "__":
+// System.out.println("_");
+// break;
+// default:
+// System.out.println("#");
+// }
+//
+// }
+
+}
diff --git a/src/test/input/TestJavac7.class b/src/test/input/TestJavac7.class
new file mode 100644
index 0000000..ca63c8e
--- /dev/null
+++ b/src/test/input/TestJavac7.class
Binary files differ
diff --git a/src/test/input/TestJavac7.java b/src/test/input/TestJavac7.java
new file mode 100644
index 0000000..fb72d45
--- /dev/null
+++ b/src/test/input/TestJavac7.java
@@ -0,0 +1,59 @@
+package test.input;
+
+import java.io.FileReader;
+import java.io.IOException;
+import java.lang.reflect.Method;
+
+public class TestJavac7 {
+
+
+ public void testTryResources() throws IOException {
+
+ try (FileReader reader = new FileReader("file"); FileReader reader1 = new FileReader("file")) {
+ System.out.println();
+ }
+
+ }
+
+ public void testTryResources1() throws IOException {
+
+ try (FileReader reader = new FileReader("file")) {
+ System.out.println("block");
+ } catch(RuntimeException ex) {
+ System.out.println(ex.toString());
+ } finally {
+ System.out.println("finally");
+ }
+
+ }
+
+ public void testMultiCatch() {
+
+ try {
+ Method method = getClass().getDeclaredMethod("foo");
+ } catch (NoSuchMethodException | SecurityException e) {
+ e.printStackTrace();
+ }
+ }
+
+
+ public void testSwitchString() {
+
+ String s = "";
+ switch(s) {
+ case "Aa": // "xyz":
+ System.out.println("!");
+ break;
+ case "BB": // "abc":
+ System.out.println("?");
+ break;
+ case "__":
+ System.out.println("_");
+ break;
+ default:
+ System.out.println("#");
+ }
+
+ }
+
+}
diff --git a/src/test/input/TestJavac8.class b/src/test/input/TestJavac8.class
new file mode 100644
index 0000000..be9a40c
--- /dev/null
+++ b/src/test/input/TestJavac8.class
Binary files differ
diff --git a/src/test/input/TestJavac8.java b/src/test/input/TestJavac8.java
new file mode 100644
index 0000000..068750c
--- /dev/null
+++ b/src/test/input/TestJavac8.java
@@ -0,0 +1,58 @@
+package test.input;
+
+import java.io.FileReader;
+import java.io.IOException;
+import java.lang.reflect.Method;
+import java.util.Arrays;
+import java.util.List;
+
+public class TestJavac8 {
+
+// public static void main(String args[]) {
+// new TestJavac8().testLambda();
+// }
+//
+// public void testTryResources() throws IOException {
+//
+// try (FileReader reader = new FileReader("file"); FileReader reader1 = new FileReader("file")) {
+// System.out.println();
+// }
+//
+// }
+//
+// public void testMultiCatch() {
+//
+// try {
+// Method method = getClass().getDeclaredMethod("foo");
+// } catch (NoSuchMethodException | SecurityException e) {
+// e.printStackTrace();
+// }
+// }
+//
+//
+// private void testSwitchString() {
+//
+// String s = "";
+// switch(s) {
+// case "Aa": // "xyz":
+// System.out.println("!");
+// break;
+// case "BB": // "abc":
+// System.out.println("?");
+// break;
+// case "__":
+// System.out.println("_");
+// break;
+// default:
+// System.out.println("#");
+// }
+//
+// }
+
+ public void testLambda() {
+
+ List<Integer> list = Arrays.asList(1, 2, 3, 4, 5, 6, 7);
+ list.forEach(n -> {int a = 2 * n; System.out.println(a);});
+ }
+
+}
diff --git a/src/test/input/TestLoop.java b/src/test/input/TestLoop.java
new file mode 100644
index 0000000..4275153
--- /dev/null
+++ b/src/test/input/TestLoop.java
@@ -0,0 +1,20 @@
+package test.input;
+
+public class TestLoop {
+
+ public static void main(String[] args) {
+
+ boolean a = true;
+ while(true) {
+ try {
+ if(!a) {
+ return;
+ }
+ } finally {
+ System.out.println("1");
+ }
+ }
+
+ }
+
+}
diff --git a/src/test/misc/ExtTest.java b/src/test/misc/ExtTest.java
new file mode 100644
index 0000000..ec3d30c
--- /dev/null
+++ b/src/test/misc/ExtTest.java
@@ -0,0 +1,81 @@
+package test.misc;
+
+import java.io.IOException;
+import java.sql.Timestamp;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.Map.Entry;
+
+public class ExtTest<E> extends ArrayList<E> {
+
+ public static void main(String[] args) {
+
+ Date d = new Date(); Timestamp t = new Timestamp(d.getTime());
+ System.out.println(d.after(t));
+
+ System.out.println((int)-1);
+ System.out.println((int)1);
+ System.out.println((Integer)1);
+ System.out.println((Integer)1);
+
+ Class c = String.class;
+
+ Integer Integer = 0;
+ Integer = (Integer)-1;
+
+ int z = 0;
+ z = z+++(++z);
+
+ Entry ent = (Entry)new HashMap().entrySet().iterator().next();
+
+ label1: {
+ System.out.println("1");
+ if(Math.random() > 4) {
+ break label1;
+ }
+ System.out.println("2");
+ }
+ System.out.println("3");
+ }
+
+ public <T extends E> void test(T o) {
+
+ }
+
+ public void testException() throws IOException {
+// if(true) {
+// throw new RuntimeException();
+// } else {
+// throw new IOException();
+// }
+// throw true?new IOException():new IOException();
+// throw true?new ClassCastException():new IOException();
+ }
+
+ public static int ttt() {
+
+ Object obj = new Integer(5);
+ synchronized (new Integer(3)) {
+ System.out.println(obj);
+ obj = null;
+ }
+
+
+ System.out.println("1");
+ if(Math.random() > 1) {
+ System.out.println("2");
+ } else {
+ System.out.println("3");
+ }
+ System.out.println("4");
+
+ int a = 0;
+ try {
+ a = 2;
+ return a;
+ } finally {
+ a = 4;
+ }
+ }
+}
diff --git a/src/test/misc/GenericTest.java b/src/test/misc/GenericTest.java
new file mode 100644
index 0000000..3ff6753
--- /dev/null
+++ b/src/test/misc/GenericTest.java
@@ -0,0 +1,65 @@
+package test.misc;
+
+import java.io.Serializable;
+import java.util.AbstractCollection;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Date;
+import java.util.List;
+
+public class GenericTest<T extends Object & Serializable> {
+
+ @test.misc.ann.RequestForEnhancement(
+ id = 2868724,
+ synopsis = "Enable time-travel",
+ engineer = "Mr. Peabody",
+ date = "4/1/3007",
+ arr = {"1","2","3"},
+ cl = Void.class
+ )
+ @Deprecated
+ public boolean test(@Deprecated Collection c) {
+ return true;
+ }
+
+ public int testparam(boolean t, @Deprecated List lst, double d) {
+ return 0;
+ }
+
+}
+
+class GenericTestChild<E extends Collection> extends GenericTest<GenericTestChild<AbstractCollection>> implements Serializable {
+
+// public <T> void test(Collection<T> c) {
+// T var1 = c.iterator().next();
+// c.add(var1);
+// }
+
+ public List<String>[][] field;
+
+ public <T extends Date & List> void test(List<? super ArrayList> list1, List<?> list) {
+
+// l2: {
+// l1: {
+// if(Math.random() > 2){
+// break l1;
+// }
+//
+// System.out.println("1");
+// break l2;
+// }
+//
+// System.out.println("2");
+// }
+
+ if(Math.random() > 2){
+ System.out.println("2");
+ } else {
+ System.out.println("1");
+ }
+
+
+ }
+
+}
+
diff --git a/src/test/misc/ITest.java b/src/test/misc/ITest.java
new file mode 100644
index 0000000..1924a8d
--- /dev/null
+++ b/src/test/misc/ITest.java
@@ -0,0 +1,9 @@
+package test.misc;
+
+import java.io.Serializable;
+
+public interface ITest extends Serializable, Comparable<Long> {
+
+ public void test();
+
+}
diff --git a/src/test/misc/MainClass.java b/src/test/misc/MainClass.java
new file mode 100644
index 0000000..abb6522
--- /dev/null
+++ b/src/test/misc/MainClass.java
@@ -0,0 +1,115 @@
+package test.misc;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public class MainClass {
+
+ private int intfield;
+
+ private static int stfield;
+
+ private static void statmeth(int t) {
+ System.out.println(t);
+ }
+
+ private String maintest(int v) {
+ System.out.println(v+"test!");
+ return "";
+ }
+
+ public MainClass() {
+ super();
+ }
+
+ public void mainclosure() {
+
+ final int local1 = (int)Math.random();
+
+ List l = new ArrayList(new ArrayList()) {
+
+ {
+ System.out.println(intfield);
+ }
+
+ public void anontest() {
+ System.out.println(local1);
+ }
+ };
+
+ class LocalClass {
+
+ public LocalClass(String s) {
+ System.out.println(s);
+ statmeth(4);
+ }
+
+ public void localtest() {
+ int i = intfield;
+ intfield = 4;
+ maintest(i);
+
+ System.out.println(local1);
+
+ System.out.println(stfield);
+ stfield = 3;
+ }
+
+ class LocalMemberClass {
+
+ }
+
+ }
+
+ boolean t = false;
+ if(t) {
+ LocalClass lc = new LocalClass("1");
+ LocalClass.LocalMemberClass rt = lc.new LocalMemberClass();;
+ } else {
+ if(Math.random() > 1) {
+ LocalClass lc1 = new LocalClass("1");
+ }
+ System.out.println();
+ }
+
+ }
+
+
+ public class MemberClass {
+
+ public MemberClass(String z) {
+ System.out.println(z);
+ }
+
+ public void membertest() {
+ int i = intfield;
+ maintest(i);
+ stfield = 5;
+
+ Member2Class.Member3Class t = (new Member2Class()).new Member3Class();
+ }
+
+ public class Member2Class1 {
+
+ public class Member3Class1 {
+
+ }
+ }
+
+ class Member2Class {
+
+ public void member2test() {
+ int i = intfield;
+ maintest(i);
+ Member2Class1.Member3Class1 t;
+ }
+
+ public class Member3Class {
+
+ }
+
+ }
+
+ }
+
+}
diff --git a/src/test/misc/MiscTest.java b/src/test/misc/MiscTest.java
new file mode 100644
index 0000000..c47b3da
--- /dev/null
+++ b/src/test/misc/MiscTest.java
@@ -0,0 +1,83 @@
+package test.misc;
+
+public class MiscTest {
+
+ public static double test = 1 / 0;
+
+
+ public static void main(String[] args) {
+
+ System.out.println(test);
+
+ String s = "a b";
+ s = s.replaceAll(" ", " &nbsp");
+ System.out.println(s);
+
+ try {
+ throw null;
+ } catch(RuntimeException ex) {
+ System.out.println(ex);
+ }
+
+
+ int a = 3;
+
+ if(a == 1) {
+ System.out.println("1");
+ } else if(a == 2) {
+ System.out.println("2");
+ } else if(a == 3) {
+ System.out.println("3");
+ } else if(a == 4) {
+ System.out.println("4");
+ } else if(a == 5) {
+ System.out.println("5");
+ } else if(a == 6) {
+ System.out.println("6");
+ } else if(a == 7) {
+ System.out.println("7");
+ }
+
+ if(a == 0) {
+ return;
+ } else {
+ System.out.println("0");
+ }
+
+ if(a==4) {
+ System.out.println("assert");
+ assert a==4 && a==5;
+ } else {
+ assert false;
+ }
+
+ assert a==5: Math.random();
+
+ assert false: Math.random();
+
+ assert true;
+
+ assert true: Math.random();
+
+ /*
+ label: {
+ if(a == 0) {
+ System.out.println("0");
+ } else if(a == 1) {
+ System.out.println("01");
+ } else {
+ if(a == -1) {
+ System.out.println("-1");
+ } else {
+ System.out.println("-2");
+ }
+ break label;
+ }
+
+ System.out.println("end");
+ }
+ System.out.println("end1");
+ */
+ }
+
+}
diff --git a/src/test/misc/MultipleClassTest.java b/src/test/misc/MultipleClassTest.java
new file mode 100644
index 0000000..ccd9b97
--- /dev/null
+++ b/src/test/misc/MultipleClassTest.java
@@ -0,0 +1,33 @@
+package test.misc;
+
+public class MultipleClassTest {
+
+ public int field = this.hashCode();
+
+ public void test() {
+
+ class Test1 {
+ public int t1() {
+// System.out.println("1");
+
+ try {
+ return 2;
+ } finally {
+ System.out.println("1");
+ return 3;
+ }
+
+ }
+ }
+
+ class Test2 {
+ public void t2() {
+ System.out.println("2");
+ //new Test1().t1();
+ }
+ }
+
+// new Test1().t1();
+ }
+
+}
diff --git a/src/test/misc/ObfuscatedExceptionDetector.java b/src/test/misc/ObfuscatedExceptionDetector.java
new file mode 100644
index 0000000..c4a22ba
--- /dev/null
+++ b/src/test/misc/ObfuscatedExceptionDetector.java
@@ -0,0 +1,55 @@
+package test.misc;
+
+import java.io.File;
+import java.util.Date;
+
+import com.vladium.utils.timing.TimerFactory;
+
+import de.fernflower.main.decompiler.ConsoleDecompiler;
+
+public class ObfuscatedExceptionDetector {
+
+ public static void main(String[] args) {
+
+ try {
+ TimerFactory.initialize(new File(".").getCanonicalPath()+"/lib/timer/hrtlib.dll");
+ } catch(Exception ex) {
+ ex.printStackTrace();
+ }
+
+ File[] dirs = new File("C:\\revjava\\remote\\data\\input\\").listFiles();
+
+ for(File dir : dirs) {
+ if(dir.isDirectory()) {
+ Date start = new Date();
+ System.out.println("==========================================================================");
+ System.out.println("Processing " + dir.getAbsolutePath());
+ decompileDirectory(dir);
+ System.out.println("Proceeded " + dir.getAbsolutePath());
+ System.out.println("Time elapsed " + (new Date().getTime() - start.getTime())/1000);
+ System.out.println("==========================================================================");
+ }
+ }
+
+ }
+
+ private static void decompileDirectory(File dir) {
+
+ try {
+
+
+
+ ConsoleDecompiler decompiler = new ConsoleDecompiler();
+
+ decompiler.addSpace(dir, true);
+
+ decompiler.decompileContext(new File("C:\\Temp\\fernflower\\dec\\output\\", dir.getName()));
+
+
+ } catch(Exception ex) {
+ ex.printStackTrace();
+ }
+
+ }
+
+}
diff --git a/src/test/misc/ParentFieldTest.java b/src/test/misc/ParentFieldTest.java
new file mode 100644
index 0000000..caccc2a
--- /dev/null
+++ b/src/test/misc/ParentFieldTest.java
@@ -0,0 +1,19 @@
+package test.misc;
+
+public class ParentFieldTest {
+
+ public int test = 0;
+
+ private class Parent extends ParentFieldTest {
+
+ private class Child {
+
+ public void test() {
+ System.out.println(ParentFieldTest.this.test);
+ }
+
+ }
+
+ }
+
+}
diff --git a/src/test/misc/SuperTest.java b/src/test/misc/SuperTest.java
new file mode 100644
index 0000000..01fc990
--- /dev/null
+++ b/src/test/misc/SuperTest.java
@@ -0,0 +1,27 @@
+package test.misc;
+
+import java.util.ArrayList;
+
+public class SuperTest extends ArrayList {
+
+ public SuperTest() {
+ super(3);
+ super.modCount = 2;
+ SuperTest.super.size();
+ }
+
+ public int size() {
+ System.out.println("1");
+ return 0;
+ }
+
+ class SuperTest1 {
+
+ public void test() {
+ SuperTest.super.size();
+ SuperTest.super.modCount = 2;
+ }
+
+ }
+
+}
diff --git a/src/test/misc/ann/RequestForEnhancement.java b/src/test/misc/ann/RequestForEnhancement.java
new file mode 100644
index 0000000..25c612c
--- /dev/null
+++ b/src/test/misc/ann/RequestForEnhancement.java
@@ -0,0 +1,22 @@
+package test.misc.ann;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+/**
+ * Describes the Request-For-Enhancement(RFE) that led
+ * to the presence of the annotated API element.
+ */
+
+@Retention(RetentionPolicy.RUNTIME)
+@Target(ElementType.METHOD)
+public @interface RequestForEnhancement {
+ int id();
+ String synopsis();
+ String engineer() default "[unassigned]";
+ String date() default "[unimplemented]";
+ String[] arr();
+ Class cl();
+}
diff --git a/src/test/misc/en/AutocastTest.java b/src/test/misc/en/AutocastTest.java
new file mode 100644
index 0000000..ea08948
--- /dev/null
+++ b/src/test/misc/en/AutocastTest.java
@@ -0,0 +1,17 @@
+package test.misc.en;
+
+import java.util.HashMap;
+
+public class AutocastTest {
+
+ public static void main(String[] args) {
+
+ HashMap<Integer, Integer> map = new HashMap<Integer, Integer>();
+
+ Integer key = new Integer(1);
+ Integer value = map.containsKey(key)?0:map.get(key);
+
+ System.out.println(value == null);
+ }
+
+}
diff --git a/src/test/misc/en/FastSetTest.java b/src/test/misc/en/FastSetTest.java
new file mode 100644
index 0000000..ab94814
--- /dev/null
+++ b/src/test/misc/en/FastSetTest.java
@@ -0,0 +1,60 @@
+package test.misc.en;
+
+import java.util.Arrays;
+import java.util.HashSet;
+import java.util.Set;
+import java.util.SortedSet;
+import java.util.TreeSet;
+
+import de.fernflower.util.FastSetFactory;
+import de.fernflower.util.FastSetFactory.FastSet;
+
+public class FastSetTest {
+
+ public static void main(String[] args) {
+
+ SortedSet<Integer> set = new TreeSet<Integer>();
+
+ for(int i=0;i<3;i++) {
+ set.add(i);
+ }
+
+// for(Integer s : set) {
+// System.out.println(s);
+// }
+
+ FastSetFactory<Integer> factory = new FastSetFactory<Integer>(set);
+
+// factory.print();
+
+// int index = 1;
+// for(int i=0;i<100;i++) {
+// if(i % 32 == 0) {
+// index = 1;
+// }
+//
+// System.out.println(index);
+// index<<=1;
+//
+// }
+
+
+
+ FastSet<Integer> set1 = factory.spawnEmptySet();
+ set1.addAll(new HashSet<Integer>(Arrays.asList(new Integer[]{0, 1, 2, 3, 4, 5, 6, 7, 8, 9})));
+
+ FastSet<Integer> set2 = set1.getCopy();
+ set2.remove(4);
+ set2.remove(5);
+ set2.add(10);
+
+ set1.symdiff(set2);
+ Set<Integer> set3 = new TreeSet<Integer>(set1.toPlainSet());
+
+ for(Integer s : set3) {
+ System.out.println(s);
+ }
+ }
+
+
+}
diff --git a/src/test/misc/en/FinallyTest.java b/src/test/misc/en/FinallyTest.java
new file mode 100644
index 0000000..2162636
--- /dev/null
+++ b/src/test/misc/en/FinallyTest.java
@@ -0,0 +1,22 @@
+package test.misc.en;
+
+public class FinallyTest {
+
+ public FinallyTest() {
+
+ int i;
+ try {
+ try {
+ i = 0;
+ } finally {
+ i = 1;
+ }
+ i = 2;
+ } finally {
+ i = 3;
+ }
+
+ System.out.println(i);
+ }
+
+}
diff --git a/src/test/misc/en/Foo.java b/src/test/misc/en/Foo.java
new file mode 100644
index 0000000..762dcda
--- /dev/null
+++ b/src/test/misc/en/Foo.java
@@ -0,0 +1,52 @@
+package test.misc.en;
+
+class Foo {
+
+ public Foo() {}
+
+ public Foo(String test) {}
+
+ private void foo() {
+ System.out.println("qwe");
+ }
+
+ static class Bar extends Foo {
+ void bar() {
+ System.out.println("1");
+ //((Foo)this).foo();
+ }
+ }
+
+ static class Bar1 extends Bar {
+ void bar() {
+ super.bar();
+ //System.out.println("2");
+ //((Foo)this).foo();
+ }
+ }
+
+ static class Bar2 extends Bar1 {
+ void bar1() {
+ super.bar();
+ }
+ }
+
+ public static void main(String[] args) {
+ new Bar2().bar();
+ }
+
+ public int testfin() {
+
+ int i;
+
+ try {
+ System.out.println();
+ i = 0;
+ } finally {
+ System.out.println();
+ }
+
+
+ return i;
+ }
+}
diff --git a/src/test/misc/en/InnerTest$1.java b/src/test/misc/en/InnerTest$1.java
new file mode 100644
index 0000000..dd58e8e
--- /dev/null
+++ b/src/test/misc/en/InnerTest$1.java
@@ -0,0 +1,22 @@
+package test.misc.en;
+
+
+class InnerTest$1 extends Foo implements Runnable {
+
+ // $FF: synthetic field
+ final String val$test;
+ // $FF: synthetic field
+ final int val$test1;
+
+
+ InnerTest$1(String var1, int var2) {
+ super();
+ this.val$test = var1;
+ this.val$test1 = var2;
+ }
+
+ public void run() {
+ System.out.println(this.val$test);
+ System.out.println(this.val$test1);
+ }
+}
diff --git a/src/test/misc/en/InnerTest.java b/src/test/misc/en/InnerTest.java
new file mode 100644
index 0000000..44361ff
--- /dev/null
+++ b/src/test/misc/en/InnerTest.java
@@ -0,0 +1,13 @@
+package test.misc.en;
+
+import test.misc.en.InnerTest$1;
+
+public class InnerTest {
+
+ public static void main(String[] args) throws Throwable {
+ String test = args[0];
+ int test1 = Integer.parseInt(args[1]);
+ new InnerTest$1(test, test1);
+ System.out.println("готово");
+ }
+}
diff --git a/src/test/misc/en/InnerTestOld.java b/src/test/misc/en/InnerTestOld.java
new file mode 100644
index 0000000..b3af77c
--- /dev/null
+++ b/src/test/misc/en/InnerTestOld.java
@@ -0,0 +1,20 @@
+package test.misc.en;
+
+public class InnerTestOld {
+
+ public static void main(String[] args) {
+
+ final String test = args[0];
+ final int test1 = Integer.parseInt(args[1]);
+
+ Runnable r = new Runnable() {
+ public void run() {
+ System.out.println(test);
+ System.out.println(test1);
+ }
+ };
+
+ System.out.println("done");
+ }
+
+}
diff --git a/src/test/misc/en/IrredTest.java b/src/test/misc/en/IrredTest.java
new file mode 100644
index 0000000..c1f8de0
--- /dev/null
+++ b/src/test/misc/en/IrredTest.java
@@ -0,0 +1,1373 @@
+package test.misc.en;
+
+public class IrredTest {
+
+ static final boolean a = false;
+ static final boolean b = false;
+ private static final long serialVersionUID = -875163484858750714L;
+ private static final String[] Y;
+
+
+// static {
+// String[] var10000 = new String[84];
+// String[] var10001 = var10000;
+// byte var10002 = 0;
+// String var10003 = "tm9b336";
+// byte var10004 = 83;
+//
+// labelwhile:
+// while(true) {
+// char[] var3;
+// label125: {
+// char[] var8 = var10003.toCharArray();
+// int var10006 = var8.length;
+// int var0 = 0;
+// var3 = var8;
+// int var7 = var10006;
+// if(var10006 > 1) {
+// var3 = var8;
+// var7 = var10006;
+// if(var10006 <= var0) {
+// break label125;
+// }
+// }
+//
+// do {
+// char[] var2 = var3;
+// int var10007 = var0;
+//
+// while(true) {
+// char var10008 = var2[var10007];
+// byte var10009;
+// switch(var0 % 5) {
+// case 0:
+// var10009 = 28;
+// break;
+// case 1:
+// var10009 = 25;
+// break;
+// case 2:
+// var10009 = 77;
+// break;
+// case 3:
+// var10009 = 18;
+// break;
+// default:
+// var10009 = 9;
+// }
+//
+// var2[var10007] = (char)(var10008 ^ var10009);
+// ++var0;
+// if(var7 != 0) {
+// break;
+// }
+//
+// var10007 = var7;
+// var2 = var3;
+// }
+// } while(var7 > var0);
+// }
+//
+// String var1 = (new String(var3)).intern();
+// switch(var10004) {
+// case 0:
+// var10001[var10002] = var1;
+// var10001 = var10000;
+// var10002 = 2;
+// var10003 = "_V\u0018\\]43d";
+// var10004 = 1;
+// break;
+// case 1:
+// var10001[var10002] = var1;
+// var10001 = var10000;
+// var10002 = 3;
+// var10003 = "<e15};e1:ZYU\bQ]<";
+// var10004 = 2;
+// break;
+// case 2:
+// var10001[var10002] = var1;
+// var10001 = var10000;
+// var10002 = 4;
+// var10003 = "O\\\u0001WJH9jQ.`eeALP\\\u000eF)";
+// var10004 = 3;
+// break;
+// case 3:
+// var10001[var10002] = var1;
+// var10001 = var10000;
+// var10002 = 5;
+// var10003 = "<e15K;e1:ZYU\bQ]<";
+// var10004 = 4;
+// break;
+// case 4:
+// var10001[var10002] = var1;
+// var10001 = var10000;
+// var10002 = 6;
+// var10003 = "<_\u001f]D<X\tM]}{!w)KQ\b@L<\\#f`h`\u0019kyy9\u0003]]<P\u00032!;Zj>.X>d;";
+// var10004 = 5;
+// break;
+// case 5:
+// var10001[var10002] = var1;
+// var10001 = var10000;
+// var10002 = 7;
+// var10003 = "<e15Y;e1:ZYU\bQ]<";
+// var10004 = 6;
+// break;
+// case 6:
+// var10001[var10002] = var1;
+// var10001 = var10000;
+// var10002 = 8;
+// var10003 = "<e15D;e1:ZYU\bQ]<";
+// var10004 = 7;
+// break;
+// case 7:
+// var10001[var10002] = var1;
+// var10001 = var10000;
+// var10002 = 9;
+// var10003 = "<_\u001f]D<T\u0012F{}w>sjhp\"|\u0020";
+// var10004 = 8;
+// break;
+// case 8:
+// var10001[var10002] = var1;
+// var10001 = var10000;
+// var10002 = 10;
+// var10003 = "<_\u001f]D<T\u0012B{s}8q}5";
+// var10004 = 9;
+// break;
+// case 9:
+// var10001[var10002] = var1;
+// var10001 = var10000;
+// var10002 = 11;
+// var10003 = "<_\u001f]D<Z\u0012[gjv$ql5";
+// var10004 = 10;
+// break;
+// case 10:
+// var10001[var10002] = var1;
+// var10001 = var10000;
+// var10002 = 12;
+// var10003 = "<_\u001f]D<X\tMJsu8g<N\u0005W[Y9\b|}um4Fpl|m\\FH9\u0004\\)4>\u000e5%;]j;\u0020";
+// var10004 = 11;
+// break;
+// case 11:
+// var10001[var10002] = var1;
+// var10001 = var10000;
+// var10002 = 13;
+// var10003 = "<e15o;e1:ZYU\bQ]<";
+// var10004 = 12;
+// break;
+// case 12:
+// var10001[var10002] = var1;
+// var10001 = var10000;
+// var10002 = 14;
+// var10003 = "op";
+// var10004 = 13;
+// break;
+// case 13:
+// var10001[var10002] = var1;
+// var10001 = var10000;
+// var10002 = 15;
+// var10003 = "<_\u001f]D<X\tM\\o|?;";
+// var10004 = 14;
+// break;
+// case 14:
+// var10001[var10002] = var1;
+// var10001 = var10000;
+// var10002 = 16;
+// var10003 = "<_\u001f]D<Z\u0012PY}k9|ln0";
+// var10004 = 15;
+// break;
+// case 15:
+// var10001[var10002] = var1;
+// var10001 = var10000;
+// var10002 = 17;
+// var10003 = "<_\u001f]D<X\tMJpp(|}5";
+// var10004 = 16;
+// break;
+// case 16:
+// var10001[var10002] = var1;
+// var10001 = var10000;
+// var10002 = 18;
+// var10003 = "<e15E;e1:ZYU\bQ]<";
+// var10004 = 17;
+// break;
+// case 17:
+// var10001[var10002] = var1;
+// var10001 = var10000;
+// var10002 = 19;
+// var10003 = "<_\u001f]D<Z\u0012[gjv$qlPp#w\u0020";
+// var10004 = 18;
+// break;
+// case 18:
+// var10001[var10002] = var1;
+// var10001 = var10000;
+// var10002 = 20;
+// var10003 = "<_\u001f]D<X\tMZej9wd";
+// var10004 = 19;
+// break;
+// case 19:
+// var10001[var10002] = var1;
+// var10001 = var10000;
+// var10002 = 21;
+// var10003 = "<e15j;e1:ZYU\bQ]<";
+// var10004 = 20;
+// break;
+// case 20:
+// var10001[var10002] = var1;
+// var10001 = var10000;
+// var10002 = 22;
+// var10003 = "<e15\\;e1:ZYU\bQ]<";
+// var10004 = 21;
+// break;
+// case 21:
+// var10001[var10002] = var1;
+// var10001 = var10000;
+// var10002 = 23;
+// var10003 = "O|,fz";
+// var10004 = 22;
+// break;
+// case 22:
+// var10001[var10002] = var1;
+// var10001 = var10000;
+// var10002 = 24;
+// var10003 = "Om,f|o";
+// var10004 = 23;
+// break;
+// case 23:
+// var10001[var10002] = var1;
+// var10001 = var10000;
+// var10002 = 25;
+// var10003 = "_v\u0020b`yk(2Zhx#vhn}";
+// var10004 = 24;
+// break;
+// case 24:
+// var10001[var10002] = var1;
+// var10001 = var10000;
+// var10002 = 26;
+// var10003 = "lp";
+// var10004 = 25;
+// break;
+// case 25:
+// var10001[var10002] = var1;
+// var10001 = var10000;
+// var10002 = 27;
+// var10003 = "O\\\u0001WJH9\u001bsei|mT[STmSMCZ!{lrmmEAYK\b2@oX.f`j|p5P;9\u0002@MYKmPP<X\tMJpp(|}CP\t2MYJ\u000e";
+// var10004 = 26;
+// break;
+// case 26:
+// var10001[var10002] = var1;
+// var10001 = var10000;
+// var10002 = 28;
+// var10003 = "Uw+}{qx9{fr98bm}m(v\'";
+// var10004 = 27;
+// break;
+// case 27:
+// var10001[var10002] = var1;
+// var10001 = var10000;
+// var10002 = 29;
+// var10003 = "_x#|fh9.}ghx.f)O|?dln9c<\'";
+// var10004 = 28;
+// break;
+// case 28:
+// var10001[var10002] = var1;
+// var10001 = var10000;
+// var10002 = 30;
+// var10003 = "<P#tfnt,f`swmgyxx9wm2";
+// var10004 = 29;
+// break;
+// case 29:
+// var10001[var10002] = var1;
+// var10001 = var10000;
+// var10002 = 31;
+// var10003 = "&9";
+// var10004 = 30;
+// break;
+// case 30:
+// var10001[var10002] = var1;
+// var10001 = var10000;
+// var10002 = 32;
+// var10003 = "N|!who|m!\'/7}";
+// var10004 = 31;
+// break;
+// case 31:
+// var10001[var10002] = var1;
+// var10001 = var10000;
+// var10002 = 33;
+// var10003 = "&9\b`{skmeauu(2jsw9sjhp#u)hq(2euz(|zy9>w{j|?";
+// var10004 = 32;
+// break;
+// case 32:
+// var10001[var10002] = var1;
+// var10001 = var10000;
+// var10002 = 34;
+// var10003 = "N|!who|m";
+// var10004 = 33;
+// break;
+// case 33:
+// var10001[var10002] = var1;
+// var10001 = var10000;
+// var10002 = 35;
+// var10003 = "J|?a`swm";
+// var10004 = 34;
+// break;
+// case 34:
+// var10001[var10002] = var1;
+// var10001 = var10000;
+// var10002 = 36;
+// var10003 = "Xx9sk}j(2";
+// var10004 = 35;
+// break;
+// case 35:
+// var10001[var10002] = var1;
+// var10001 = var10000;
+// var10002 = 37;
+// var10003 = "{|9Vhhx/szyT(fhXx9s";
+// var10004 = 36;
+// break;
+// case 36:
+// var10001[var10002] = var1;
+// var10001 = var10000;
+// var10002 = 38;
+// var10003 = "Y}$f`swm";
+// var10004 = 37;
+// break;
+// case 37:
+// var10001[var10002] = var1;
+// var10001 = var10000;
+// var10002 = 39;
+// var10003 = "q}";
+// var10004 = 38;
+// break;
+// case 38:
+// var10001[var10002] = var1;
+// var10001 = var10000;
+// var10002 = 40;
+// var10003 = "O`>flqW,l";
+// var10004 = 39;
+// break;
+// case 39:
+// var10001[var10002] = var1;
+// var10001 = var10000;
+// var10002 = 41;
+// var10003 = "_q(qb<U$qlrj(";
+// var10004 = 40;
+// break;
+// case 40:
+// var10001[var10002] = var1;
+// var10001 = var10000;
+// var10002 = 42;
+// var10003 = "O`>flqJ9s}ij";
+// var10004 = 41;
+// break;
+// case 41:
+// var10001[var10002] = var1;
+// var10001 = var10000;
+// var10002 = 43;
+// var10003 = "Om,`}Qp*`hhp\"|";
+// var10004 = 42;
+// break;
+// case 42:
+// var10001[var10002] = var1;
+// var10001 = var10000;
+// var10002 = 44;
+// var10003 = "Rv?fa";
+// var10004 = 43;
+// break;
+// case 43:
+// var10001[var10002] = var1;
+// var10001 = var10000;
+// var10002 = 45;
+// var10003 = "_|#fln";
+// var10004 = 44;
+// break;
+// case 44:
+// var10001[var10002] = var1;
+// var10001 = var10000;
+// var10002 = 46;
+// var10003 = "Ov8fa";
+// var10004 = 45;
+// break;
+// case 45:
+// var10001[var10002] = var1;
+// var10001 = var10000;
+// var10002 = 47;
+// var10003 = "Ol=bfnm\u000e}ghk,q}";
+// var10004 = 46;
+// break;
+// case 46:
+// var10001[var10002] = var1;
+// var10001 = var10000;
+// var10002 = 48;
+// var10003 = "]j>w}<P\t/";
+// var10004 = 47;
+// break;
+// case 47:
+// var10001[var10002] = var1;
+// var10001 = var10000;
+// var10002 = 49;
+// var10003 = "_q(qb<|#f{u|>2hr}mb{yj>2FW99})ol/`h7";
+// var10004 = 48;
+// break;
+// case 48:
+// var10001[var10002] = var1;
+// var10001 = var10000;
+// var10002 = 50;
+// var10003 = "Ol=bfnm\u000e}ghk,q}Iw$fz";
+// var10004 = 49;
+// break;
+// case 49:
+// var10001[var10002] = var1;
+// var10001 = var10000;
+// var10002 = 51;
+// var10003 = "o`>";
+// var10004 = 50;
+// break;
+// case 50:
+// var10001[var10002] = var1;
+// var10001 = var10000;
+// var10002 = 52;
+// var10003 = "./~";
+// var10004 = 51;
+// break;
+// case 51:
+// var10001[var10002] = var1;
+// var10001 = var10000;
+// var10002 = 53;
+// var10003 = "_v#fhm$|n<Z\"yu|?w)Ol=bfnmm<\'2";
+// var10004 = 52;
+// break;
+// case 52:
+// var10001[var10002] = var1;
+// var10001 = var10000;
+// var10002 = 54;
+// var10003 = "_v\u0020b`yk(2Zhx#vhn}m[gzv?hhp\"|)ii)s}y}c";
+// var10004 = 53;
+// break;
+// case 53:
+// var10001[var10002] = var1;
+// var10001 = var10000;
+// var10002 = 55;
+// var10003 = "Ox;w)pp.wgo|mw{nv?3";
+// var10004 = 54;
+// break;
+// case 54:
+// var10001[var10002] = var1;
+// var10001 = var10000;
+// var10002 = 56;
+// var10003 = "v\u0020<jst={ln|c`{k,fl2N\"`byk\u001efhnm";
+// var10004 = 55;
+// break;
+// case 55:
+// var10001[var10002] = var1;
+// var10001 = var10000;
+// var10002 = 57;
+// var10003 = "^|+}{y9#w~Uw>fhrz(";
+// var10004 = 56;
+// break;
+// case 56:
+// var10001[var10002] = var1;
+// var10001 = var10000;
+// var10002 = 58;
+// var10003 = "]9w{<u\"smu,az&9.}d2z\"yu|?w\'qp*`hh|cEfnr(`Zhx?f";
+// var10004 = 57;
+// break;
+// case 57:
+// var10001[var10002] = var1;
+// var10001 = var10000;
+// var10002 = 59;
+// var10003 = "_v8~m<w\"f)om,`}<T$u{}m$}g";
+// var10004 = 58;
+// break;
+// case 58:
+// var10001[var10002] = var1;
+// var10001 = var10000;
+// var10002 = 60;
+// var10003 = "^|+}{y9.}gom?gjhv?";
+// var10004 = 59;
+// break;
+// case 59:
+// var10001[var10002] = var1;
+// var10001 = var10000;
+// var10002 = 61;
+// var10003 = "^|+}{y9!}hxz!szo#mqfq7.}dlp(`l2t$u{}m(<^sk&w{Om,`}";
+// var10004 = 60;
+// break;
+// case 60:
+// var10001[var10002] = var1;
+// var10001 = var10000;
+// var10002 = 62;
+// var10003 = "xx9s";
+// var10004 = 61;
+// break;
+// case 61:
+// var10001[var10002] = var1;
+// var10001 = var10000;
+// var10002 = 63;
+// var10003 = "v\u0020b`yk(<j}k";
+// var10004 = 62;
+// break;
+// case 62:
+// var10001[var10002] = var1;
+// var10001 = var10000;
+// var10002 = 64;
+// var10003 = "_V\u0000B@YK\bMAST\b";
+// var10004 = 63;
+// break;
+// case 63:
+// var10001[var10002] = var1;
+// var10001 = var10000;
+// var10002 = 65;
+// var10003 = "ul";
+// var10004 = 64;
+// break;
+// case 64:
+// var10001[var10002] = var1;
+// var10001 = var10000;
+// var10002 = 66;
+// var10003 = "O\\\u0001WJH9\u000e]\\RMeV@OM\u0004\\JH9eg\']]\u0012Gzyk\u0012[M50mSZ<p82ONV\u00002HXF\u0018aln982@RW\b@)VV\u0004\\)]]\u0012Gzyk\u0012@fp|>2|n9\u0002\\)4lcSMCL>w{CP\t/|n7\fVVIj(`VU]d2^T\\\u001fW)i7\fVV_u$wghF\u0004V5\"(|2HR]mg\']]\u0012Gzyk\u0012[M<W\u0002F)UWm:90(}\"\u0020";
+// var10004 = 65;
+// break;
+// case 65:
+// var10001[var10002] = var1;
+// var10001 = var10000;
+// var10002 = 67;
+// var10003 = "_x#qlp";
+// var10004 = 66;
+// break;
+// case 66:
+// var10001[var10002] = var1;
+// var10001 = var10000;
+// var10002 = 68;
+// var10003 = "Qp>a`r~mafik.w)xx9sk}j(2`r\"`d}m$}g";
+// var10004 = 67;
+// break;
+// case 67:
+// var10001[var10002] = var1;
+// var10001 = var10000;
+// var10002 = 69;
+// var10003 = "Hk,|zqp>a`swmW{nv?2\'27";
+// var10004 = 68;
+// break;
+// case 68:
+// var10001[var10002] = var1;
+// var10001 = var10000;
+// var10002 = 70;
+// var10003 = "Yw9w{<m%w)ov8`jy9)s}}{,al<L\u001f^%<l>w{<x#v)lx>a~sk)<";
+// var10004 = 69;
+// break;
+// case 69:
+// var10001[var10002] = var1;
+// var10001 = var10000;
+// var10002 = 71;
+// var10003 = "Sr";
+// var10004 = 70;
+// break;
+// case 70:
+// var10001[var10002] = var1;
+// var10001 = var10000;
+// var10002 = 72;
+// var10003 = "N|*{zh|?wm<\\\u0000s`p";
+// var10004 = 71;
+// break;
+// case 71:
+// var10001[var10002] = var1;
+// var10001 = var10000;
+// var10002 = 73;
+// var10003 = "Ol=bfnm\u0001wyu";
+// var10004 = 72;
+// break;
+// case 72:
+// var10001[var10002] = var1;
+// var10001 = var10000;
+// var10002 = 74;
+// var10003 = "Ov8`jyI\u001aV";
+// var10004 = 73;
+// break;
+// case 73:
+// var10001[var10002] = var1;
+// var10001 = var10000;
+// var10002 = 75;
+// var10003 = "\u0016W\"2du~?s}uv#2zyu(q}y}G";
+// var10004 = 74;
+// break;
+// case 74:
+// var10001[var10002] = var1;
+// var10001 = var10000;
+// var10002 = 76;
+// var10003 = "Ov8`jyL\u0004V";
+// var10004 = 75;
+// break;
+// case 75:
+// var10001[var10002] = var1;
+// var10001 = var10000;
+// var10002 = 77;
+// var10003 = "Ol=bfnm\u0018|`hj";
+// var10004 = 76;
+// break;
+// case 76:
+// var10001[var10002] = var1;
+// var10001 = var10000;
+// var10002 = 78;
+// var10003 = "Lx>a~sk)";
+// var10004 = 77;
+// break;
+// case 77:
+// var10001[var10002] = var1;
+// var10001 = var10000;
+// var10002 = 79;
+// var10003 = "Ov8`jyL\u001f^";
+// var10004 = 78;
+// break;
+// case 78:
+// var10001[var10002] = var1;
+// var10001 = var10000;
+// var10002 = 80;
+// var10003 = "Hx?ulhL\u001f^";
+// var10004 = 79;
+// break;
+// case 79:
+// var10001[var10002] = var1;
+// var10001 = var10000;
+// var10002 = 81;
+// var10003 = "Ol=bfnm\bjyXx9w";
+// var10004 = 80;
+// break;
+// case 80:
+// var10001[var10002] = var1;
+// var10001 = var10000;
+// var10002 = 82;
+// var10003 = "Ol=bfnm\b_huu";
+// var10004 = 81;
+// break;
+// case 81:
+// var10001[var10002] = var1;
+// var10001 = var10000;
+// var10002 = 83;
+// var10003 = "_J(`yk\u0003sdy";
+// var10004 = 82;
+// break;
+// case 82:
+// var10001[var10002] = var1;
+// Y = var10000;
+// break labelwhile;
+// case 83:
+// var10003 = "kn:<jst={ln|cqfq";
+// var10004 = 84;
+// break;
+// case 84:
+// var10003 = "_v=k{u~%f)4zd2Jst={ln|a2@rzc28%\u0020t?;,)t";
+// var10004 = 85;
+// break;
+// case 85:
+// var10003 = "_v\u0020b`yk(2Zii=}{h9~<:2)";
+// var10004 = 86;
+// break;
+// case 86:
+// var10003 = "3t$u{}m(Syljb_`{k,fl/";
+// var10004 = 87;
+// break;
+// case 87:
+// var10003 = "3t$u{}m(=Du~?s}yZ!{lrm~\u0020;2s,`6/+";
+// var10004 = 88;
+// break;
+// case 88:
+// var10003 = "<e15@;e1:ZYU\bQ]<";
+// var10004 = -1;
+// break;
+// default:
+// var10001[var10002] = var1;
+// var10001 = var10000;
+// var10002 = 1;
+// var10003 = "<_\u001f]D<X\tMOu|!v)KQ\b@L<\\#f`h`\u0019kyy9\u0003]]<P\u00032!;Zj>.X>d;";
+// var10004 = 0;
+// }
+// }
+// }
+
+ static {
+ String[] var10000 = new String[84];
+ String[] var10001 = var10000;
+ byte var10002 = 0;
+ String var10003 = "tm9b336";
+ byte var10004 = 83;
+
+ labelglobal:
+ while(true) {
+ char[] var7;
+ label123: {
+ char[] var2 = var10003.toCharArray();
+ int var10006 = var2.length;
+ int var0 = 0;
+ var7 = var2;
+ int var8 = var10006;
+ if(var10006 > 1) {
+ var7 = var2;
+ if(var8 <= var0) {
+ break label123;
+ }
+ }
+
+ do {
+ char[] var10 = var7;
+ int var10007 = var0;
+
+ while(true) {
+ char var10008 = var10[var10007];
+ byte var10009;
+ switch(var0 % 5) {
+ case 0:
+ var10009 = 28;
+ break;
+ case 1:
+ var10009 = 25;
+ break;
+ case 2:
+ var10009 = 77;
+ break;
+ case 3:
+ var10009 = 18;
+ break;
+ default:
+ var10009 = 9;
+ }
+
+ var10[var10007] = (char)(var10008 ^ var10009);
+ ++var0;
+ if(var8 != 0) {
+ break;
+ }
+
+ var10007 = var8;
+ var10 = var7;
+ }
+ } while(var8 > var0);
+ }
+
+ String var6 = (new String(var7)).intern();
+ switch(var10004) {
+ case 0:
+ var10001[var10002] = var6;
+ var10001 = var10000;
+ var10002 = 2;
+ var10003 = "_V\u0018\\]43d";
+ var10004 = 1;
+ break;
+ case 1:
+ var10001[var10002] = var6;
+ var10001 = var10000;
+ var10002 = 3;
+ var10003 = "<e15};e1:ZYU\bQ]<";
+ var10004 = 2;
+ break;
+ case 2:
+ var10001[var10002] = var6;
+ var10001 = var10000;
+ var10002 = 4;
+ var10003 = "O\\\u0001WJH9jQ.`eeALP\\\u000eF)";
+ var10004 = 3;
+ break;
+ case 3:
+ var10001[var10002] = var6;
+ var10001 = var10000;
+ var10002 = 5;
+ var10003 = "<e15K;e1:ZYU\bQ]<";
+ var10004 = 4;
+ break;
+ case 4:
+ var10001[var10002] = var6;
+ var10001 = var10000;
+ var10002 = 6;
+ var10003 = "<_\u001f]D<X\tM]}{!w)KQ\b@L<\\#f`h`\u0019kyy9\u0003]]<P\u00032!;Zj>.X>d;";
+ var10004 = 5;
+ break;
+ case 5:
+ var10001[var10002] = var6;
+ var10001 = var10000;
+ var10002 = 7;
+ var10003 = "<e15Y;e1:ZYU\bQ]<";
+ var10004 = 6;
+ break;
+ case 6:
+ var10001[var10002] = var6;
+ var10001 = var10000;
+ var10002 = 8;
+ var10003 = "<e15D;e1:ZYU\bQ]<";
+ var10004 = 7;
+ break;
+ case 7:
+ var10001[var10002] = var6;
+ var10001 = var10000;
+ var10002 = 9;
+ var10003 = "<_\u001f]D<T\u0012F{}w>sjhp\"| ";
+ var10004 = 8;
+ break;
+ case 8:
+ var10001[var10002] = var6;
+ var10001 = var10000;
+ var10002 = 10;
+ var10003 = "<_\u001f]D<T\u0012B{s}8q}5";
+ var10004 = 9;
+ break;
+ case 9:
+ var10001[var10002] = var6;
+ var10001 = var10000;
+ var10002 = 11;
+ var10003 = "<_\u001f]D<Z\u0012[gjv$ql5";
+ var10004 = 10;
+ break;
+ case 10:
+ var10001[var10002] = var6;
+ var10001 = var10000;
+ var10002 = 12;
+ var10003 = "<_\u001f]D<X\tMJsu8\u007fg<N\u0005W[Y9\b|}um4Fpl|m\\FH9\u0004\\)4>\u000e5%;]j; ";
+ var10004 = 11;
+ break;
+ case 11:
+ var10001[var10002] = var6;
+ var10001 = var10000;
+ var10002 = 13;
+ var10003 = "<e15o;e1:ZYU\bQ]<";
+ var10004 = 12;
+ break;
+ case 12:
+ var10001[var10002] = var6;
+ var10001 = var10000;
+ var10002 = 14;
+ var10003 = "op";
+ var10004 = 13;
+ break;
+ case 13:
+ var10001[var10002] = var6;
+ var10001 = var10000;
+ var10002 = 15;
+ var10003 = "<_\u001f]D<X\tM\\o|?;";
+ var10004 = 14;
+ break;
+ case 14:
+ var10001[var10002] = var6;
+ var10001 = var10000;
+ var10002 = 16;
+ var10003 = "<_\u001f]D<Z\u0012PY}k9|ln0";
+ var10004 = 15;
+ break;
+ case 15:
+ var10001[var10002] = var6;
+ var10001 = var10000;
+ var10002 = 17;
+ var10003 = "<_\u001f]D<X\tMJpp(|}5";
+ var10004 = 16;
+ break;
+ case 16:
+ var10001[var10002] = var6;
+ var10001 = var10000;
+ var10002 = 18;
+ var10003 = "<e15E;e1:ZYU\bQ]<";
+ var10004 = 17;
+ break;
+ case 17:
+ var10001[var10002] = var6;
+ var10001 = var10000;
+ var10002 = 19;
+ var10003 = "<_\u001f]D<Z\u0012[gjv$qlPp#w ";
+ var10004 = 18;
+ break;
+ case 18:
+ var10001[var10002] = var6;
+ var10001 = var10000;
+ var10002 = 20;
+ var10003 = "<_\u001f]D<X\tMZej9wd";
+ var10004 = 19;
+ break;
+ case 19:
+ var10001[var10002] = var6;
+ var10001 = var10000;
+ var10002 = 21;
+ var10003 = "<e15j;e1:ZYU\bQ]<";
+ var10004 = 20;
+ break;
+ case 20:
+ var10001[var10002] = var6;
+ var10001 = var10000;
+ var10002 = 22;
+ var10003 = "<e15\\;e1:ZYU\bQ]<";
+ var10004 = 21;
+ break;
+ case 21:
+ var10001[var10002] = var6;
+ var10001 = var10000;
+ var10002 = 23;
+ var10003 = "O|,fz";
+ var10004 = 22;
+ break;
+ case 22:
+ var10001[var10002] = var6;
+ var10001 = var10000;
+ var10002 = 24;
+ var10003 = "Om,f|o";
+ var10004 = 23;
+ break;
+ case 23:
+ var10001[var10002] = var6;
+ var10001 = var10000;
+ var10002 = 25;
+ var10003 = "_v b`yk(2Zhx#vhn}";
+ var10004 = 24;
+ break;
+ case 24:
+ var10001[var10002] = var6;
+ var10001 = var10000;
+ var10002 = 26;
+ var10003 = "lp";
+ var10004 = 25;
+ break;
+ case 25:
+ var10001[var10002] = var6;
+ var10001 = var10000;
+ var10002 = 27;
+ var10003 = "O\\\u0001WJH9\u001bsei|mT[STmSMCZ!{lrmmEAYK\b2@oX.f`j|p5P;9\u0002@MYKmPP<X\tMJpp(|}CP\t2MYJ\u000e";
+ var10004 = 26;
+ break;
+ case 26:
+ var10001[var10002] = var6;
+ var10001 = var10000;
+ var10002 = 28;
+ var10003 = "Uw+}{qx9{fr98bm}m(v\'";
+ var10004 = 27;
+ break;
+ case 27:
+ var10001[var10002] = var6;
+ var10001 = var10000;
+ var10002 = 29;
+ var10003 = "_x#|fh9.}ghx.f)O|?dln9c<\'";
+ var10004 = 28;
+ break;
+ case 28:
+ var10001[var10002] = var6;
+ var10001 = var10000;
+ var10002 = 30;
+ var10003 = "<P#tfnt,f`swmgyxx9wm2";
+ var10004 = 29;
+ break;
+ case 29:
+ var10001[var10002] = var6;
+ var10001 = var10000;
+ var10002 = 31;
+ var10003 = "&9";
+ var10004 = 30;
+ break;
+ case 30:
+ var10001[var10002] = var6;
+ var10001 = var10000;
+ var10002 = 32;
+ var10003 = "N|!who|m!\'/7}";
+ var10004 = 31;
+ break;
+ case 31:
+ var10001[var10002] = var6;
+ var10001 = var10000;
+ var10002 = 33;
+ var10003 = "&9\b`{skmeauu(2jsw9sjhp#u)hq(2euz(|zy9>w{j|?";
+ var10004 = 32;
+ break;
+ case 32:
+ var10001[var10002] = var6;
+ var10001 = var10000;
+ var10002 = 34;
+ var10003 = "N|!who|m";
+ var10004 = 33;
+ break;
+ case 33:
+ var10001[var10002] = var6;
+ var10001 = var10000;
+ var10002 = 35;
+ var10003 = "J|?a`swm";
+ var10004 = 34;
+ break;
+ case 34:
+ var10001[var10002] = var6;
+ var10001 = var10000;
+ var10002 = 36;
+ var10003 = "Xx9sk}j(2";
+ var10004 = 35;
+ break;
+ case 35:
+ var10001[var10002] = var6;
+ var10001 = var10000;
+ var10002 = 37;
+ var10003 = "{|9Vhhx/szyT(fhXx9s";
+ var10004 = 36;
+ break;
+ case 36:
+ var10001[var10002] = var6;
+ var10001 = var10000;
+ var10002 = 38;
+ var10003 = "Y}$f`swm";
+ var10004 = 37;
+ break;
+ case 37:
+ var10001[var10002] = var6;
+ var10001 = var10000;
+ var10002 = 39;
+ var10003 = "q}";
+ var10004 = 38;
+ break;
+ case 38:
+ var10001[var10002] = var6;
+ var10001 = var10000;
+ var10002 = 40;
+ var10003 = "O`>flqW,\u007fl";
+ var10004 = 39;
+ break;
+ case 39:
+ var10001[var10002] = var6;
+ var10001 = var10000;
+ var10002 = 41;
+ var10003 = "_q(qb<U$qlrj(";
+ var10004 = 40;
+ break;
+ case 40:
+ var10001[var10002] = var6;
+ var10001 = var10000;
+ var10002 = 42;
+ var10003 = "O`>flqJ9s}ij";
+ var10004 = 41;
+ break;
+ case 41:
+ var10001[var10002] = var6;
+ var10001 = var10000;
+ var10002 = 43;
+ var10003 = "Om,`}Qp*`hhp\"|";
+ var10004 = 42;
+ break;
+ case 42:
+ var10001[var10002] = var6;
+ var10001 = var10000;
+ var10002 = 44;
+ var10003 = "Rv?fa";
+ var10004 = 43;
+ break;
+ case 43:
+ var10001[var10002] = var6;
+ var10001 = var10000;
+ var10002 = 45;
+ var10003 = "_|#fln";
+ var10004 = 44;
+ break;
+ case 44:
+ var10001[var10002] = var6;
+ var10001 = var10000;
+ var10002 = 46;
+ var10003 = "Ov8fa";
+ var10004 = 45;
+ break;
+ case 45:
+ var10001[var10002] = var6;
+ var10001 = var10000;
+ var10002 = 47;
+ var10003 = "Ol=bfnm\u000e}ghk,q}";
+ var10004 = 46;
+ break;
+ case 46:
+ var10001[var10002] = var6;
+ var10001 = var10000;
+ var10002 = 48;
+ var10003 = "]j>w}<P\t/";
+ var10004 = 47;
+ break;
+ case 47:
+ var10001[var10002] = var6;
+ var10001 = var10000;
+ var10002 = 49;
+ var10003 = "_q(qb<|#f{u|>2hr}mb{yj>2FW99})ol/\u007f`h7";
+ var10004 = 48;
+ break;
+ case 48:
+ var10001[var10002] = var6;
+ var10001 = var10000;
+ var10002 = 50;
+ var10003 = "Ol=bfnm\u000e}ghk,q}Iw$fz";
+ var10004 = 49;
+ break;
+ case 49:
+ var10001[var10002] = var6;
+ var10001 = var10000;
+ var10002 = 51;
+ var10003 = "o`>";
+ var10004 = 50;
+ break;
+ case 50:
+ var10001[var10002] = var6;
+ var10001 = var10000;
+ var10002 = 52;
+ var10003 = "./~";
+ var10004 = 51;
+ break;
+ case 51:
+ var10001[var10002] = var6;
+ var10001 = var10000;
+ var10002 = 53;
+ var10003 = "_v#fh\u007fm$|n<Z\"\u007fyu|?w)Ol=bfnmm<\'2";
+ var10004 = 52;
+ break;
+ case 52:
+ var10001[var10002] = var6;
+ var10001 = var10000;
+ var10002 = 54;
+ var10003 = "_v b`yk(2Zhx#vhn}m[gzv?\u007fhhp\"|)ii)s}y}c";
+ var10004 = 53;
+ break;
+ case 53:
+ var10001[var10002] = var6;
+ var10001 = var10000;
+ var10002 = 55;
+ var10003 = "Ox;w)pp.wgo|mw{nv?3";
+ var10004 = 54;
+ break;
+ case 54:
+ var10001[var10002] = var6;
+ var10001 = var10000;
+ var10002 = 56;
+ var10003 = "\u007fv <jst={ln|c\u007f`{k,fl2N\"`byk\u001efhnm";
+ var10004 = 55;
+ break;
+ case 55:
+ var10001[var10002] = var6;
+ var10001 = var10000;
+ var10002 = 57;
+ var10003 = "^|+}{y9#w~Uw>fhrz(";
+ var10004 = 56;
+ break;
+ case 56:
+ var10001[var10002] = var6;
+ var10001 = var10000;
+ var10002 = 58;
+ var10003 = "]\u007f9w{<u\"sm\u007fu,az&9.}d2z\"\u007fyu|?w\'qp*`hh|cEfnr(`Zhx?f";
+ var10004 = 57;
+ break;
+ case 57:
+ var10001[var10002] = var6;
+ var10001 = var10000;
+ var10002 = 59;
+ var10003 = "_v8~m<w\"f)om,`}<T$u{}m$}g";
+ var10004 = 58;
+ break;
+ case 58:
+ var10001[var10002] = var6;
+ var10001 = var10000;
+ var10002 = 60;
+ var10003 = "^|+}{y9.}gom?gjhv?";
+ var10004 = 59;
+ break;
+ case 59:
+ var10001[var10002] = var6;
+ var10001 = var10000;
+ var10002 = 61;
+ var10003 = "^|+}{y9!}hxz!szo#mqfq7.}dlp(`l2t$u{}m(<^sk&w{Om,`}";
+ var10004 = 60;
+ break;
+ case 60:
+ var10001[var10002] = var6;
+ var10001 = var10000;
+ var10002 = 62;
+ var10003 = "xx9s";
+ var10004 = 61;
+ break;
+ case 61:
+ var10001[var10002] = var6;
+ var10001 = var10000;
+ var10002 = 63;
+ var10003 = "\u007fv b`yk(<j}k";
+ var10004 = 62;
+ break;
+ case 62:
+ var10001[var10002] = var6;
+ var10001 = var10000;
+ var10002 = 64;
+ var10003 = "_V\u0000B@YK\bMAST\b";
+ var10004 = 63;
+ break;
+ case 63:
+ var10001[var10002] = var6;
+ var10001 = var10000;
+ var10002 = 65;
+ var10003 = "ul";
+ var10004 = 64;
+ break;
+ case 64:
+ var10001[var10002] = var6;
+ var10001 = var10000;
+ var10002 = 66;
+ var10003 = "O\\\u0001WJH9\u000e]\\RMeV@OM\u0004\\JH9eg\']]\u0012Gzyk\u0012[M50mSZ<p82ONV\u00002HXF\u0018aln982@RW\b@)VV\u0004\\)]]\u0012Gzyk\u0012@fp|>2|n9\u0002\\)4lcSMCL>w{CP\t/|n7\fVVIj(`VU]d2^T\\\u001fW)i7\fVV_u$wghF\u0004V5\"(|2HR]mg\']]\u0012Gzyk\u0012[M<W\u0002F)UWm:90(}\" ";
+ var10004 = 65;
+ break;
+ case 65:
+ var10001[var10002] = var6;
+ var10001 = var10000;
+ var10002 = 67;
+ var10003 = "_x#qlp";
+ var10004 = 66;
+ break;
+ case 66:
+ var10001[var10002] = var6;
+ var10001 = var10000;
+ var10002 = 68;
+ var10003 = "Qp>a`r~mafik.w)xx9sk}j(2`r\u007f\"`d}m$}g";
+ var10004 = 67;
+ break;
+ case 67:
+ var10001[var10002] = var6;
+ var10001 = var10000;
+ var10002 = 69;
+ var10003 = "Hk,|zqp>a`swmW{nv?2\'27";
+ var10004 = 68;
+ break;
+ case 68:
+ var10001[var10002] = var6;
+ var10001 = var10000;
+ var10002 = 70;
+ var10003 = "Yw9w{<m%w)ov8`jy9)s}}{,al<L\u001f^%<l>w{<x#v)lx>a~sk)<";
+ var10004 = 69;
+ break;
+ case 69:
+ var10001[var10002] = var6;
+ var10001 = var10000;
+ var10002 = 71;
+ var10003 = "Sr";
+ var10004 = 70;
+ break;
+ case 70:
+ var10001[var10002] = var6;
+ var10001 = var10000;
+ var10002 = 72;
+ var10003 = "N|*{zh|?wm<\\\u0000s`p";
+ var10004 = 71;
+ break;
+ case 71:
+ var10001[var10002] = var6;
+ var10001 = var10000;
+ var10002 = 73;
+ var10003 = "Ol=bfnm\u0001w\u007fyu";
+ var10004 = 72;
+ break;
+ case 72:
+ var10001[var10002] = var6;
+ var10001 = var10000;
+ var10002 = 74;
+ var10003 = "Ov8`jyI\u001aV";
+ var10004 = 73;
+ break;
+ case 73:
+ var10001[var10002] = var6;
+ var10001 = var10000;
+ var10002 = 75;
+ var10003 = "\u0016W\"2du~?s}uv#2zyu(q}y}G";
+ var10004 = 74;
+ break;
+ case 74:
+ var10001[var10002] = var6;
+ var10001 = var10000;
+ var10002 = 76;
+ var10003 = "Ov8`jyL\u0004V";
+ var10004 = 75;
+ break;
+ case 75:
+ var10001[var10002] = var6;
+ var10001 = var10000;
+ var10002 = 77;
+ var10003 = "Ol=bfnm\u0018|`hj";
+ var10004 = 76;
+ break;
+ case 76:
+ var10001[var10002] = var6;
+ var10001 = var10000;
+ var10002 = 78;
+ var10003 = "Lx>a~sk)";
+ var10004 = 77;
+ break;
+ case 77:
+ var10001[var10002] = var6;
+ var10001 = var10000;
+ var10002 = 79;
+ var10003 = "Ov8`jyL\u001f^";
+ var10004 = 78;
+ break;
+ case 78:
+ var10001[var10002] = var6;
+ var10001 = var10000;
+ var10002 = 80;
+ var10003 = "Hx?ulhL\u001f^";
+ var10004 = 79;
+ break;
+ case 79:
+ var10001[var10002] = var6;
+ var10001 = var10000;
+ var10002 = 81;
+ var10003 = "Ol=bfnm\bjyXx9w";
+ var10004 = 80;
+ break;
+ case 80:
+ var10001[var10002] = var6;
+ var10001 = var10000;
+ var10002 = 82;
+ var10003 = "Ol=bfnm\b_huu";
+ var10004 = 81;
+ break;
+ case 81:
+ var10001[var10002] = var6;
+ var10001 = var10000;
+ var10002 = 83;
+ var10003 = "_J(`\u007fyk\u0003sdy";
+ var10004 = 82;
+ break;
+ case 82:
+ var10001[var10002] = var6;
+ Y = var10000;
+ break labelglobal;
+ case 83:
+ var10003 = "kn:<jst={ln|cqfq";
+ var10004 = 84;
+ break;
+ case 84:
+ var10003 = "_v=k{u~%f)4zd2Jst={ln|a2@rzc28% t?;,)t";
+ var10004 = 85;
+ break;
+ case 85:
+ var10003 = "_v b`yk(2Zii=}{h9~<:2)";
+ var10004 = 86;
+ break;
+ case 86:
+ var10003 = "3t$u{}m(Syljb_`{k,fl/";
+ var10004 = 87;
+ break;
+ case 87:
+ var10003 = "3t$u{}m(=Du~?s}yZ!{lrm~ ;2s,`6/+\u007f";
+ var10004 = 88;
+ break;
+ case 88:
+ var10003 = "<e15@;e1:ZYU\bQ]<";
+ var10004 = -1;
+ break;
+ default:
+ var10001[var10002] = var6;
+ var10001 = var10000;
+ var10002 = 1;
+ var10003 = "<_\u001f]D<X\tMOu|!v)KQ\b@L<\\#f`h`\u0019kyy9\u0003]]<P\u00032!;Zj>.X>d;";
+ var10004 = 0;
+ }
+ }
+ }
+
+ public static void main(String[] args) {
+
+ String[] arr = Y;
+
+ System.out.println("---");
+
+ int a = 0;
+ try {
+ a = a;
+ } catch(Exception ex) {
+ ex.printStackTrace();
+ }
+
+ }
+
+}
diff --git a/src/test/misc/en/ListInsertTest.java b/src/test/misc/en/ListInsertTest.java
new file mode 100644
index 0000000..ceabe83
--- /dev/null
+++ b/src/test/misc/en/ListInsertTest.java
@@ -0,0 +1,34 @@
+package test.misc.en;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Date;
+import java.util.LinkedList;
+import java.util.List;
+
+public class ListInsertTest {
+
+ public static void main(String[] args) {
+
+ List<Integer> lst1 = new ArrayList<Integer>(Arrays.asList(new Integer[]{1, 2, 3}));
+ List<Integer> lst2 = new LinkedList<Integer>(Arrays.asList(new Integer[]{1, 2, 3}));
+
+ Date d = new Date();
+
+ for(int i=0;i<300000;i++) {
+ lst1.add(1, i);
+ }
+
+ System.out.println(new Date().getTime() - d.getTime());
+
+ d = new Date();
+
+ for(int i=0;i<300000;i++) {
+ lst2.add(1, i);
+ }
+
+ System.out.println(new Date().getTime() - d.getTime());
+
+ }
+
+}
diff --git a/src/test/misc/en/Operation.java b/src/test/misc/en/Operation.java
new file mode 100644
index 0000000..3051fb3
--- /dev/null
+++ b/src/test/misc/en/Operation.java
@@ -0,0 +1,51 @@
+package test.misc.en;
+
+public enum Operation {
+
+ PLUS(2) {
+ double eval(double x, double y) { return x + y; }
+ },
+ MINUS(7) {
+ double eval(double x, double y) { return x - y; }
+ },
+ TIMES(8) {
+ double eval(double x, double y) { return x * y; }
+ },
+ DIVIDED_BY(0) {
+ double eval(double x, double y) { return x / y; }
+ };
+
+
+ // Perform the arithmetic operation represented by this constant
+
+ abstract double eval(double x, double y);
+
+ Operation(int t) {
+
+// class LocalClass {
+//
+// }
+//
+// LocalClass e = null;
+
+ System.out.println();
+ }
+
+
+ public static void main(String args[]) {
+ double x = Double.parseDouble(args[0]);
+ double y = Double.parseDouble(args[1]);
+
+ Operation opp = Operation.DIVIDED_BY;
+
+ switch(opp) {
+ case MINUS:
+ System.out.println();
+ case PLUS:
+ }
+
+ for (Operation op : Operation.values()) {
+ System.out.println(x + " " + op + " " + y + " = " + op.eval(x, y));
+ }
+ }
+} \ No newline at end of file
diff --git a/src/test/misc/en/SwitchInTest.java b/src/test/misc/en/SwitchInTest.java
new file mode 100644
index 0000000..8d04665
--- /dev/null
+++ b/src/test/misc/en/SwitchInTest.java
@@ -0,0 +1,19 @@
+package test.misc.en;
+
+public class SwitchInTest {
+
+ public static void main(String[] args) {
+
+ short t = 2;
+ switch(t) {
+ case -56:
+ case 0:
+ case 3:
+ case 129:
+ System.out.println();
+ default:
+ }
+
+ }
+
+}
diff --git a/src/test/misc/en/TestOperation.java b/src/test/misc/en/TestOperation.java
new file mode 100644
index 0000000..c6763b1
--- /dev/null
+++ b/src/test/misc/en/TestOperation.java
@@ -0,0 +1,31 @@
+package test.misc.en;
+
+public class TestOperation {
+
+ public void test() {
+
+ double x = 2;
+ double y = 3;
+
+ Operation opp = Operation.DIVIDED_BY;
+
+ switch(opp) {
+ case MINUS:
+ System.out.println();
+ case PLUS:
+ }
+
+ switch(Operation.MINUS) {
+ case DIVIDED_BY:
+ System.out.println();
+ case PLUS:
+ case TIMES:
+ }
+
+ for (Operation op : Operation.values()) {
+ System.out.println(x + " " + op + " " + y + " = " + op.eval(x, y));
+ }
+
+ }
+
+}
diff --git a/src/test/output/TestEclipse7.java b/src/test/output/TestEclipse7.java
new file mode 100644
index 0000000..a37b582
--- /dev/null
+++ b/src/test/output/TestEclipse7.java
@@ -0,0 +1,15 @@
+package test.output;
+
+import java.lang.reflect.Method;
+
+public class TestEclipse7 {
+
+ public void testMultiCatch() {
+ try {
+ Method e = this.getClass().getDeclaredMethod("foo", new Class[0]);
+ } catch (SecurityException | NoSuchMethodException var2) {
+ var2.printStackTrace();
+ }
+
+ }
+}
diff --git a/src/test/output/TestJavac7.java b/src/test/output/TestJavac7.java
new file mode 100644
index 0000000..9ddb71e
--- /dev/null
+++ b/src/test/output/TestJavac7.java
@@ -0,0 +1,129 @@
+package test.output;
+
+import java.io.FileReader;
+import java.io.IOException;
+import java.lang.reflect.Method;
+
+public class TestJavac7 {
+
+ public void testTryResources() throws IOException {
+ FileReader var1 = new FileReader("file");
+ Throwable var2 = null;
+
+ try {
+ FileReader var3 = new FileReader("file");
+ Throwable var4 = null;
+
+ try {
+ System.out.println();
+ } catch (Throwable var27) {
+ var4 = var27;
+ throw var27;
+ } finally {
+ if(var3 != null) {
+ if(var4 != null) {
+ try {
+ var3.close();
+ } catch (Throwable var26) {
+ var4.addSuppressed(var26);
+ }
+ } else {
+ var3.close();
+ }
+ }
+
+ }
+ } catch (Throwable var29) {
+ var2 = var29;
+ throw var29;
+ } finally {
+ if(var1 != null) {
+ if(var2 != null) {
+ try {
+ var1.close();
+ } catch (Throwable var25) {
+ var2.addSuppressed(var25);
+ }
+ } else {
+ var1.close();
+ }
+ }
+
+ }
+
+ }
+
+ public void testTryResources1() throws IOException {
+ try {
+ FileReader var1 = new FileReader("file");
+ Throwable var2 = null;
+
+ try {
+ System.out.println("block");
+ } catch (Throwable var20) {
+ var2 = var20;
+ throw var20;
+ } finally {
+ if(var1 != null) {
+ if(var2 != null) {
+ try {
+ var1.close();
+ } catch (Throwable var19) {
+ var2.addSuppressed(var19);
+ }
+ } else {
+ var1.close();
+ }
+ }
+
+ }
+ } catch (RuntimeException var22) {
+ System.out.println(var22.toString());
+ } finally {
+ System.out.println("finally");
+ }
+
+ }
+
+ public void testMultiCatch() {
+ try {
+ Method var1 = this.getClass().getDeclaredMethod("foo", new Class[0]);
+ } catch (SecurityException var2) {
+ var2.printStackTrace();
+ }
+
+ }
+
+ public void testSwitchString() {
+ String var1 = "";
+ byte var3 = -1;
+ switch(var1.hashCode()) {
+ case 2112:
+ if(var1.equals("BB")) {
+ var3 = 1;
+ } else if(var1.equals("Aa")) {
+ var3 = 0;
+ }
+ break;
+ case 3040:
+ if(var1.equals("__")) {
+ var3 = 2;
+ }
+ }
+
+ switch(var3) {
+ case 0:
+ System.out.println("!");
+ break;
+ case 1:
+ System.out.println("?");
+ break;
+ case 2:
+ System.out.println("_");
+ break;
+ default:
+ System.out.println("#");
+ }
+
+ }
+}
diff --git a/src/test/output/TestJavac8.java b/src/test/output/TestJavac8.java
new file mode 100644
index 0000000..2b66907
--- /dev/null
+++ b/src/test/output/TestJavac8.java
@@ -0,0 +1,104 @@
+package test.output;
+
+import java.io.FileReader;
+import java.io.IOException;
+import java.lang.reflect.Method;
+
+public class TestJavac8 {
+
+ public static void main(String[] var0) {
+ (new TestJavac8()).testLambda();
+ }
+
+ public void testTryResources() throws IOException {
+ FileReader var1 = new FileReader("file");
+ Throwable var2 = null;
+
+ try {
+ FileReader var3 = new FileReader("file");
+ Throwable var4 = null;
+
+ try {
+ System.out.println();
+ } catch (Throwable var27) {
+ var4 = var27;
+ throw var27;
+ } finally {
+ if(var3 != null) {
+ if(var4 != null) {
+ try {
+ var3.close();
+ } catch (Throwable var26) {
+ var4.addSuppressed(var26);
+ }
+ } else {
+ var3.close();
+ }
+ }
+
+ }
+ } catch (Throwable var29) {
+ var2 = var29;
+ throw var29;
+ } finally {
+ if(var1 != null) {
+ if(var2 != null) {
+ try {
+ var1.close();
+ } catch (Throwable var25) {
+ var2.addSuppressed(var25);
+ }
+ } else {
+ var1.close();
+ }
+ }
+
+ }
+
+ }
+
+ public void testMultiCatch() {
+ try {
+ Method var1 = this.getClass().getDeclaredMethod("foo", new Class[0]);
+ } catch (SecurityException var2) {
+ var2.printStackTrace();
+ }
+
+ }
+
+ private void testSwitchString() {
+ String var1 = "";
+ byte var3 = -1;
+ switch(var1.hashCode()) {
+ case 2112:
+ if(var1.equals("BB")) {
+ var3 = 1;
+ } else if(var1.equals("Aa")) {
+ var3 = 0;
+ }
+ break;
+ case 3040:
+ if(var1.equals("__")) {
+ var3 = 2;
+ }
+ }
+
+ switch(var3) {
+ case 0:
+ System.out.println("!");
+ break;
+ case 1:
+ System.out.println("?");
+ break;
+ case 2:
+ System.out.println("_");
+ break;
+ default:
+ System.out.println("#");
+ }
+
+ }
+
+ public void testLambda() {
+ }
+}
diff --git a/src/test/util/DotExporter.java b/src/test/util/DotExporter.java
new file mode 100644
index 0000000..88b9320
--- /dev/null
+++ b/src/test/util/DotExporter.java
@@ -0,0 +1,183 @@
+package test.util;
+
+import java.io.BufferedOutputStream;
+import java.io.File;
+import java.io.FileNotFoundException;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.util.Collections;
+import java.util.HashSet;
+import java.util.List;
+
+
+import de.fernflower.code.cfg.BasicBlock;
+import de.fernflower.code.cfg.ControlFlowGraph;
+import de.fernflower.modules.decompiler.StatEdge;
+import de.fernflower.modules.decompiler.sforms.DirectGraph;
+import de.fernflower.modules.decompiler.sforms.DirectNode;
+import de.fernflower.modules.decompiler.stats.Statement;
+import de.fernflower.modules.decompiler.vars.VarVersionEdge;
+import de.fernflower.modules.decompiler.vars.VarVersionNode;
+import de.fernflower.modules.decompiler.vars.VarVersionsGraph;
+
+public class DotExporter {
+
+
+ public static String toDotFormat(Statement stat) {
+
+ StringBuffer buffer = new StringBuffer();
+
+ buffer.append("digraph G {\r\n");
+
+ for(Statement st : stat.getStats()) {
+
+ String sourceid = st.id + (st.getSuccessorEdges(StatEdge.TYPE_EXCEPTION).isEmpty()?"":"000000");
+
+ buffer.append(sourceid+" [shape=box,label=\""+sourceid+"\"];\r\n");
+
+ for(StatEdge edge : st.getSuccessorEdges(Statement.STATEDGE_DIRECT_ALL)) {
+ String destid = edge.getDestination().id + (edge.getDestination().getSuccessorEdges(StatEdge.TYPE_EXCEPTION).isEmpty()?"":"000000");
+
+ buffer.append(sourceid+"->"+destid+";\r\n");
+
+ if(!stat.getStats().contains(edge.getDestination())) {
+ buffer.append(destid+" [label=\""+destid+"\"];\r\n");
+ }
+ }
+
+ for(StatEdge edge : st.getSuccessorEdges(StatEdge.TYPE_EXCEPTION)) {
+ String destid = edge.getDestination().id + (edge.getDestination().getSuccessorEdges(StatEdge.TYPE_EXCEPTION).isEmpty()?"":"000000");
+
+ buffer.append(sourceid+" -> "+destid+" [style=dotted];\r\n");
+
+ if(!stat.getStats().contains(edge.getDestination())) {
+ buffer.append(destid+" [label=\""+destid+"\"];\r\n");
+ }
+ }
+ }
+
+ buffer.append("}");
+
+ return buffer.toString();
+ }
+
+
+ public static String toDotFormat(ControlFlowGraph graph, boolean showMultipleEdges) {
+
+ StringBuffer buffer = new StringBuffer();
+
+ buffer.append("digraph G {\r\n");
+
+ List<BasicBlock> blocks = graph.getBlocks();
+ for(int i=0;i<blocks.size();i++) {
+ BasicBlock block = (BasicBlock)blocks.get(i);
+
+ buffer.append(block.id+" [shape=box,label=\""+block.id+"\"];\r\n");
+
+
+ List<BasicBlock> suc = block.getSuccs();
+ if(!showMultipleEdges) {
+ HashSet<BasicBlock> set = new HashSet<BasicBlock>();
+ set.addAll(suc);
+ suc = Collections.list(Collections.enumeration(set));
+ }
+ for(int j=0;j<suc.size();j++) {
+ buffer.append(block.id+"->"+((BasicBlock)suc.get(j)).id+";\r\n");
+ }
+
+
+ suc = block.getSuccExceptions();
+ if(!showMultipleEdges) {
+ HashSet<BasicBlock> set = new HashSet<BasicBlock>();
+ set.addAll(suc);
+ suc = Collections.list(Collections.enumeration(set));
+ }
+ for(int j=0;j<suc.size();j++) {
+ buffer.append(block.id+" -> "+((BasicBlock)suc.get(j)).id+" [style=dotted];\r\n");
+ }
+ }
+
+ buffer.append("}");
+
+ return buffer.toString();
+ }
+
+ public static String toDotFormat(VarVersionsGraph graph) {
+
+ StringBuffer buffer = new StringBuffer();
+
+ buffer.append("digraph G {\r\n");
+
+ List<VarVersionNode> blocks = graph.nodes;
+ for(int i=0;i<blocks.size();i++) {
+ VarVersionNode block = blocks.get(i);
+
+ buffer.append((block.var*1000+block.version)+" [shape=box,label=\""+block.var+"_"+block.version+"\"];\r\n");
+
+ for(VarVersionEdge edge: block.succs) {
+ VarVersionNode dest = edge.dest;
+ buffer.append((block.var*1000+block.version)+"->"+(dest.var*1000+dest.version)+(edge.type==VarVersionEdge.EDGE_PHANTOM?" [style=dotted]":"")+";\r\n");
+ }
+ }
+
+ buffer.append("}");
+
+ return buffer.toString();
+ }
+
+ public static String toDotFormat(DirectGraph graph) {
+
+ StringBuffer buffer = new StringBuffer();
+
+ buffer.append("digraph G {\r\n");
+
+ List<DirectNode> blocks = graph.nodes;
+ for(int i=0;i<blocks.size();i++) {
+ DirectNode block = blocks.get(i);
+
+ buffer.append(directBlockIdToDot(block.id)+" [shape=box,label=\""+directBlockIdToDot(block.id)+"\"];\r\n");
+
+ for(DirectNode dest: block.succs) {
+ buffer.append(directBlockIdToDot(block.id)+"->"+directBlockIdToDot(dest.id)+";\r\n");
+ }
+ }
+
+ buffer.append("}");
+
+ return buffer.toString();
+ }
+
+ private static String directBlockIdToDot(String id) {
+ id = id.replaceAll("_try", "999");
+ id = id.replaceAll("_tail", "888");
+ return id;
+ }
+
+ public static void toDotFile(ControlFlowGraph graph, File file, boolean showMultipleEdges) throws FileNotFoundException, IOException {
+ BufferedOutputStream out = new BufferedOutputStream(new FileOutputStream(file));
+ out.write(toDotFormat(graph, showMultipleEdges).getBytes());
+ out.close();
+ }
+
+ public static void toDotFile(VarVersionsGraph graph, File file) throws FileNotFoundException, IOException {
+
+ BufferedOutputStream out = new BufferedOutputStream(new FileOutputStream(file));
+ out.write(toDotFormat(graph).getBytes());
+ out.close();
+ }
+
+ public static void toDotFile(DirectGraph graph, File file) throws FileNotFoundException, IOException {
+
+ BufferedOutputStream out = new BufferedOutputStream(new FileOutputStream(file));
+ out.write(toDotFormat(graph).getBytes());
+ out.close();
+ }
+
+ public static void toDotFile(Statement stat, File file) throws FileNotFoundException, IOException {
+
+ BufferedOutputStream out = new BufferedOutputStream(new FileOutputStream(file));
+ out.write(toDotFormat(stat).getBytes());
+ out.close();
+ }
+
+}
diff --git a/src/test/util/MemoryMonitor.java b/src/test/util/MemoryMonitor.java
new file mode 100644
index 0000000..4030383
--- /dev/null
+++ b/src/test/util/MemoryMonitor.java
@@ -0,0 +1,25 @@
+package test.util;
+
+public class MemoryMonitor implements Runnable {
+
+ public static boolean run = false;
+
+
+ public void run() {
+
+ while(run) {
+ try {
+ Thread.sleep(500);
+ } catch(InterruptedException ex) {
+ ex.printStackTrace();
+ }
+
+ //Runtime.getRuntime().gc();
+ System.err.println((Runtime.getRuntime().totalMemory() - Runtime.getRuntime().freeMemory())/(1024*1024));
+
+ }
+
+ }
+
+
+}
diff --git a/src/test/util/Timer.java b/src/test/util/Timer.java
new file mode 100644
index 0000000..5a45cc0
--- /dev/null
+++ b/src/test/util/Timer.java
@@ -0,0 +1,31 @@
+package test.util;
+
+import java.util.HashMap;
+
+public class Timer {
+
+ private static HashMap<String, Double> mapValue = new HashMap<String, Double>();
+
+ public static void addTime(int index, long value) {
+ addTime(String.valueOf(index), value);
+ }
+
+ public static double getTime(int index) {
+ return mapValue.get(String.valueOf(index));
+ }
+
+ public static void addTime(String index, double value) {
+ Double val = mapValue.get(index);
+ if(val != null) {
+ value+=val.doubleValue();
+ }
+ mapValue.put(index, value);
+ }
+
+ public static double getTime(String index) {
+ Double value = mapValue.get(index);
+ return value==null?0:value.doubleValue();
+ }
+
+}
+
diff --git a/src/test/util/ZipStripper.java b/src/test/util/ZipStripper.java
new file mode 100644
index 0000000..2eeb2c0
--- /dev/null
+++ b/src/test/util/ZipStripper.java
@@ -0,0 +1,71 @@
+package test.util;
+
+import java.io.File;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.util.Enumeration;
+import java.util.zip.ZipEntry;
+import java.util.zip.ZipFile;
+import java.util.zip.ZipOutputStream;
+
+public class ZipStripper {
+
+ public static void main(String[] args) {
+
+ try {
+ String sourceFileName = args[0];
+ File sourceFile = new File(sourceFileName);
+
+ File tempFile = new File(sourceFile.getParentFile(), "tmp31415926535.zip");
+ tempFile.createNewFile();
+
+ ZipOutputStream outTemp = new ZipOutputStream(new FileOutputStream(tempFile));
+
+ ZipFile archive = new ZipFile(sourceFile);
+
+ Enumeration<? extends ZipEntry> en = archive.entries();
+ while(en.hasMoreElements()) {
+ ZipEntry entr = en.nextElement();
+
+ outTemp.putNextEntry(new ZipEntry(entr.getName()));
+
+ if(!entr.isDirectory()) {
+ InputStream in = archive.getInputStream(entr);
+
+ copyInputStream(in, outTemp);
+ in.close();
+ }
+ }
+
+ outTemp.flush();
+ outTemp.close();
+
+ archive.close();
+
+ String destFileName = args[1];
+
+ if(sourceFileName.equals(destFileName)) {
+ sourceFile.delete();
+ }
+
+ tempFile.renameTo(new File(destFileName));
+
+ } catch(Exception ex) {
+ ex.printStackTrace();
+ }
+
+ }
+
+ public static void copyInputStream(InputStream in, OutputStream out)throws IOException {
+
+ byte[] buffer = new byte[1024];
+ int len;
+
+ while((len = in.read(buffer)) >= 0) {
+ out.write(buffer, 0, len);
+ }
+ }
+
+}