mirror of
https://github.com/moparisthebest/fernflower
synced 2024-12-23 16:18:50 -05:00
java-decompiler: post-import cleanup (unneeded files dropped)
This commit is contained in:
parent
b3705cf400
commit
270a3f6e22
@ -1,9 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<classpath>
|
||||
<classpathentry kind="src" path="src"/>
|
||||
<classpathentry kind="src" path="timer"/>
|
||||
<classpathentry kind="src" path="test"/>
|
||||
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
|
||||
<classpathentry kind="lib" path="lib/timer/timer.jar"/>
|
||||
<classpathentry kind="output" path="bin"/>
|
||||
</classpath>
|
3
.gitignore
vendored
3
.gitignore
vendored
@ -1,3 +0,0 @@
|
||||
bin/
|
||||
dist/full/
|
||||
dist/obfuscated/
|
17
.project
17
.project
@ -1,17 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<projectDescription>
|
||||
<name>Fernflower</name>
|
||||
<comment></comment>
|
||||
<projects>
|
||||
</projects>
|
||||
<buildSpec>
|
||||
<buildCommand>
|
||||
<name>org.eclipse.jdt.core.javabuilder</name>
|
||||
<arguments>
|
||||
</arguments>
|
||||
</buildCommand>
|
||||
</buildSpec>
|
||||
<natures>
|
||||
<nature>org.eclipse.jdt.core.javanature</nature>
|
||||
</natures>
|
||||
</projectDescription>
|
@ -1,2 +0,0 @@
|
||||
eclipse.preferences.version=1
|
||||
encoding//test/test/misc/en/InnerTest.java=UTF-8
|
@ -1,11 +0,0 @@
|
||||
eclipse.preferences.version=1
|
||||
org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
|
||||
org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.7
|
||||
org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
|
||||
org.eclipse.jdt.core.compiler.compliance=1.7
|
||||
org.eclipse.jdt.core.compiler.debug.lineNumber=generate
|
||||
org.eclipse.jdt.core.compiler.debug.localVariable=generate
|
||||
org.eclipse.jdt.core.compiler.debug.sourceFile=generate
|
||||
org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
|
||||
org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
|
||||
org.eclipse.jdt.core.compiler.source=1.7
|
51
dist/docs/license_en.txt
vendored
51
dist/docs/license_en.txt
vendored
@ -1,51 +0,0 @@
|
||||
Fernflower Freeware License 1.0
|
||||
|
||||
This license applies to the Fernflower decompiler (hereafter “Software")
|
||||
including any associated files, information and examples.
|
||||
|
||||
You are hereby granted a non-exclusive and non-transferable license to
|
||||
use and distribute the Software in binary form according to the following
|
||||
terms and conditions.
|
||||
|
||||
|
||||
1) Copies and Redistribution
|
||||
|
||||
You may copy and distribute unmodified binary copies of the Software
|
||||
provided that you keep this license intact. You must NOT charge money
|
||||
or fees for the Software except to cover the absolutely necessary
|
||||
distribution costs.
|
||||
|
||||
Any other form of redistribution is prohibited. Especially you are not
|
||||
allowed to redistribute the Software as part of any other software
|
||||
collection or other product.
|
||||
|
||||
|
||||
2) Use
|
||||
|
||||
You may use the Software "as is" in any commercial or non-commercial environment
|
||||
for any purpose.
|
||||
|
||||
|
||||
3) Contact Information
|
||||
|
||||
The sole author and owner of Fernflower is Stiver. Address all correspondence regarding
|
||||
this license to:
|
||||
|
||||
fernflower.decompiler@gmail.com
|
||||
|
||||
http://www.reversed-java.com
|
||||
|
||||
|
||||
4) Disclaimer of Warranty
|
||||
|
||||
THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
|
||||
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
|
||||
FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
||||
OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||
HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||
LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
||||
OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
SUCH DAMAGE.
|
62
dist/docs/lizenz_de.txt
vendored
62
dist/docs/lizenz_de.txt
vendored
@ -1,62 +0,0 @@
|
||||
Fernflower Freeware Lizenz 1.0
|
||||
|
||||
Gegenstand der vorliegenden Lizenz ist der Fernflower Decompiler (im Folgenden "Software" genannt)
|
||||
einschließlich aller dazu gehörenden Dateien, Informationen und Beispiele.
|
||||
|
||||
Hiermit erhalten Sie eine nicht-ausschließliche und nicht-übertragbare Lizenz
|
||||
für die Nutzung und Weitergabe der Software gemäß den nachfolgenden
|
||||
Bedingungen.
|
||||
|
||||
|
||||
1) Kopieren und Weitergeben
|
||||
|
||||
Sie dürfen die Software kopieren und exakte Binärkopien unverändert
|
||||
weitergeben, vorausgesetzt, diese Lizenz bleibt in der ursprünglichen Form
|
||||
erhalten. Sie dürfen KEINE wie auch immer geartete Bezahlung oder Gebühren
|
||||
für die Software verlangen, außer um die absolut unvermeidbaren Selbstkosten
|
||||
der Weitergabe zu decken.
|
||||
|
||||
Jede andere Form der Weitergabe ist untersagt. Insbesondere ist es nicht gestattet,
|
||||
die Software als Teil einer anderen Softwaresammlung oder eines anderen Produktes
|
||||
weiterzugeben.
|
||||
|
||||
|
||||
2) Nutzung
|
||||
|
||||
Sie können die Software beliebig in jeder kommerziellen oder nicht-kommerziellen Umgebung
|
||||
zu jedem Zweck einsetzen.
|
||||
|
||||
|
||||
3) Kontaktinformation
|
||||
|
||||
Der einzige Autor und Eigentümer von Fernflower ist Stiver. Alle Rückfragen bezüglich dieser Lizenz
|
||||
sind an
|
||||
|
||||
fernflower.decompiler@gmail.com
|
||||
|
||||
http://www.reversed-java.com
|
||||
|
||||
zu richten.
|
||||
|
||||
|
||||
4) GARANTIE- UND HAFTUNGSBESCHRÄNKUNGEN
|
||||
|
||||
DIESE SOFTWARE WIRD IHNEN AUF DER GRUNDLAGE DES GEGENWÄRTIGEN ZUSTANDS ZUR
|
||||
VERFÜGUNG GESTELLT. ES GIBT KEINE GARANTIE, WEDER AUSDRÜCKLICH NOCH IMPLIZIT.
|
||||
DIES SCHLIEßT AUCH GARANTIEANSPRÜCHE BEZÜGLICH DER VERKAUFSQUALITÄT,
|
||||
VERKÄUFLICHKEIT ODER EIGNUNG FÜR EINEN BESTIMMTEN ZWECk AUS, ODER SOLCHE, DIE
|
||||
DURCH GELTENDES RECHT, GESETZLICHE VORSCHRIFTEN, GESCHÄFTSGEBRAUCH ODER
|
||||
HANDELSVERKEHR VERURSACHT WERDEN. DAS GESAMTE RISIKO IN BEZUG AUF DIE ERGEBNISSE
|
||||
UND DIE LEISTUNG DES PROGRAMMS LIEGT BEI IHNEN. WEDER DER AUTOR NOCH IRGENDEIN
|
||||
AN DEM PROJEKT BETEILIGTER HAT IRGENDEINE HAFTUNGSVERPFLICHTUNG IHNEN ODER
|
||||
IRGENDEINER ANDEREN PERSON ODER INSTITUTION GEGENÜBER FÜR JEDWEDE INDIREKTE,
|
||||
ZUFÄLLIGE, BESONDERE SCHÄDEN ODER IRGENDWELCHE FOLGESCHÄDEN. DIES GILT AUCH FÜR
|
||||
SCHÄDEN AUS ENTGANGENEM GEWINN, VERLORENEN ODER BESCHÄDIGTEN DATEN ODER FÜR
|
||||
ANDERE KOMMERZIELLE ODER WIRTSCHAFTLICHE VERLUSTE, SELBST DANN, WENN DER AUTOR
|
||||
ODER IRGENDEIN AN DEM PROJEKT BETEILIGTER AUF DIE MÖGLICHKEIT DERARTIGER SCHÄDEN
|
||||
HINGEWIESEN WURDE ODER DIESE VORHERSEHBAR WAREN, ODER FÜR ANSPRÜCHE DRITTER. DIE
|
||||
HIER FESTGELEGTEN HAFTUNGSBESCHRÄNKUNGEN GELTEN UNABHÄNGUG DAVON, OB DER VERMEINTLICHE
|
||||
ODER TATSÄCHLICHE VERTRAGSBRUCH EINE GRUNDSÄTZLICHE BEDINGUNG ODER
|
||||
VERTRAGSVEREINBARUNG BERÜHRT, ODER EIN GRUNDSÄTZLICHER VERTRAGSBRUCH IST. DIESER
|
||||
ABSATZ IST EIN ESSENZIELLER TEIL DIESER LIZENZ. ES IST VERBOTEN DAS PROGRAMM ZU
|
||||
BENUTZEN OHNE DASS DIESEM ABSATZ ZUGESTIMMT WIRD.
|
BIN
lib/ncss/ccl.jar
BIN
lib/ncss/ccl.jar
Binary file not shown.
Binary file not shown.
Binary file not shown.
BIN
lib/proguard.jar
BIN
lib/proguard.jar
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@ -1,57 +0,0 @@
|
||||
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);
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
}
|
@ -1,42 +0,0 @@
|
||||
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);
|
||||
}
|
||||
}
|
||||
}
|
@ -1,59 +0,0 @@
|
||||
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("#");
|
||||
// }
|
||||
//
|
||||
// }
|
||||
|
||||
}
|
@ -1,59 +0,0 @@
|
||||
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("#");
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
@ -1,58 +0,0 @@
|
||||
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);});
|
||||
}
|
||||
|
||||
}
|
@ -1,81 +0,0 @@
|
||||
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;
|
||||
}
|
||||
}
|
||||
}
|
@ -1,65 +0,0 @@
|
||||
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");
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -1,9 +0,0 @@
|
||||
package test.misc;
|
||||
|
||||
import java.io.Serializable;
|
||||
|
||||
public interface ITest extends Serializable, Comparable<Long> {
|
||||
|
||||
public void test();
|
||||
|
||||
}
|
@ -1,115 +0,0 @@
|
||||
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 {
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
@ -1,83 +0,0 @@
|
||||
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(" ", "  ");
|
||||
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");
|
||||
*/
|
||||
}
|
||||
|
||||
}
|
@ -1,33 +0,0 @@
|
||||
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();
|
||||
}
|
||||
|
||||
}
|
@ -1,19 +0,0 @@
|
||||
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);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
@ -1,27 +0,0 @@
|
||||
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;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
@ -1,22 +0,0 @@
|
||||
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();
|
||||
}
|
@ -1,17 +0,0 @@
|
||||
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);
|
||||
}
|
||||
|
||||
}
|
@ -1,60 +0,0 @@
|
||||
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);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
@ -1,22 +0,0 @@
|
||||
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);
|
||||
}
|
||||
|
||||
}
|
@ -1,52 +0,0 @@
|
||||
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;
|
||||
}
|
||||
}
|
@ -1,22 +0,0 @@
|
||||
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);
|
||||
}
|
||||
}
|
@ -1,13 +0,0 @@
|
||||
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("готово");
|
||||
}
|
||||
}
|
@ -1,20 +0,0 @@
|
||||
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");
|
||||
}
|
||||
|
||||
}
|
@ -1,34 +0,0 @@
|
||||
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());
|
||||
|
||||
}
|
||||
|
||||
}
|
@ -1,51 +0,0 @@
|
||||
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));
|
||||
}
|
||||
}
|
||||
}
|
@ -1,19 +0,0 @@
|
||||
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:
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
@ -1,31 +0,0 @@
|
||||
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));
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
@ -1,15 +0,0 @@
|
||||
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();
|
||||
}
|
||||
|
||||
}
|
||||
}
|
@ -1,129 +0,0 @@
|
||||
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("#");
|
||||
}
|
||||
|
||||
}
|
||||
}
|
@ -1,104 +0,0 @@
|
||||
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() {
|
||||
}
|
||||
}
|
@ -1,187 +0,0 @@
|
||||
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");
|
||||
|
||||
id = id.replaceAll("_init", "111");
|
||||
id = id.replaceAll("_cond", "222");
|
||||
id = id.replaceAll("_inc", "333");
|
||||
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();
|
||||
}
|
||||
|
||||
}
|
@ -1,25 +0,0 @@
|
||||
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));
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
}
|
@ -1,31 +0,0 @@
|
||||
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();
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -1,71 +0,0 @@
|
||||
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);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
@ -1,68 +0,0 @@
|
||||
import java.text.DecimalFormat;
|
||||
|
||||
import com.vladium.utils.timing.ITimer;
|
||||
import com.vladium.utils.timing.TimerFactory;
|
||||
|
||||
// ----------------------------------------------------------------------------
|
||||
/**
|
||||
* A demo class to show off the higher resolution available from HRTimer class
|
||||
* and to investigate the resolution offered by Java "time-related"
|
||||
* methods other than System.currentTimeMillis().<P>
|
||||
*
|
||||
* Make sure that hrtlib.dll JNI lib is in java.library.path or TimerFactory
|
||||
* will fall back to the Java system timer:
|
||||
* <PRE>
|
||||
* >java -Djava.library.path=(dir containing hrtlib.dll) HRTimerResolution
|
||||
* </PRE>
|
||||
*
|
||||
* @author (C) <a href="mailto:vroubtsov@illinoisalumni.org">Vlad Roubtsov</a>, 2002
|
||||
*/
|
||||
public class HRTimerResolution
|
||||
{
|
||||
// public: ................................................................
|
||||
|
||||
public static void main (final String [] args) throws Exception
|
||||
{
|
||||
final DecimalFormat format = new DecimalFormat ();
|
||||
format.setMinimumFractionDigits (3);
|
||||
format.setMaximumFractionDigits (3);
|
||||
|
||||
// create an ITimer using the Factory class:
|
||||
final ITimer timer = TimerFactory.newTimer ();
|
||||
|
||||
// JIT/hotspot warmup:
|
||||
for (int i = 0; i < 3000; ++ i)
|
||||
{
|
||||
timer.start ();
|
||||
timer.stop ();
|
||||
timer.getDuration ();
|
||||
timer.reset ();
|
||||
}
|
||||
|
||||
final Object lock = new Object (); // this is used by monitor.wait() below
|
||||
|
||||
for (int i = 0; i < 5; ++ i)
|
||||
{
|
||||
timer.start ();
|
||||
|
||||
// uncomment various lines below to see the resolution
|
||||
// offered by other Java time-related methods; with all
|
||||
// lines commented out this loop reports time elapsed
|
||||
// between successive calls to t.start() and t.stop(), thus
|
||||
// providing an estimate for timer's raw resolution
|
||||
|
||||
synchronized (lock) { lock.wait (1); }
|
||||
//Thread.currentThread ().sleep (1);
|
||||
//Thread.currentThread ().sleep (0, 500);
|
||||
//Thread.currentThread ().join (1);
|
||||
|
||||
timer.stop ();
|
||||
|
||||
System.out.println ("duration = "
|
||||
+ format.format (timer.getDuration ()) + " ms");
|
||||
timer.reset ();
|
||||
}
|
||||
}
|
||||
|
||||
} // end of class
|
||||
// ----------------------------------------------------------------------------
|
@ -1,31 +0,0 @@
|
||||
// ----------------------------------------------------------------------------
|
||||
/**
|
||||
* A simple class to see what the Java system timer resolution is on your
|
||||
* system.
|
||||
*
|
||||
* @author (C) <a href="mailto:vroubtsov@illinoisalumni.org">Vlad Roubtsov</a>, 2002
|
||||
*/
|
||||
public class SystemTimerResolution
|
||||
{
|
||||
// public: ................................................................
|
||||
|
||||
public static void main (final String [] args)
|
||||
{
|
||||
// JIT/hotspot warmup:
|
||||
for (int r = 0; r < 3000; ++ r) System.currentTimeMillis ();
|
||||
|
||||
long time = System.currentTimeMillis (), time_prev = time;
|
||||
|
||||
for (int i = 0; i < 5; ++ i)
|
||||
{
|
||||
// busy wait until system time changes:
|
||||
while (time == time_prev)
|
||||
time = System.currentTimeMillis ();
|
||||
|
||||
System.out.println ("delta = " + (time - time_prev) + " ms");
|
||||
time_prev = time;
|
||||
}
|
||||
}
|
||||
|
||||
} // end of class
|
||||
// ----------------------------------------------------------------------------
|
@ -1,86 +0,0 @@
|
||||
|
||||
package com.vladium.utils.timing;
|
||||
|
||||
// ----------------------------------------------------------------------------
|
||||
/**
|
||||
* A package-private implementation of {@link ITimer} based around native
|
||||
* <code>getTime</code> method. It will work on any platform for which a JNI
|
||||
* implementation of "hrtlib" library is available.<P>
|
||||
*
|
||||
* {@link TimerFactory} acts as the Factory for this class.<P>
|
||||
*
|
||||
* MT-safety: an instance of this class is safe to be used within the same
|
||||
* thread only.
|
||||
*
|
||||
* @author (C) <a href="mailto:vroubtsov@illinoisalumni.org">Vlad Roubtsov</a>, 2002
|
||||
*/
|
||||
final class HRTimer implements ITimer, ITimerConstants
|
||||
{
|
||||
// public: ................................................................
|
||||
|
||||
public void start ()
|
||||
{
|
||||
if (DO_STATE_CHECKS)
|
||||
{
|
||||
if (m_state != STATE_READY)
|
||||
throw new IllegalStateException (this + ": start() must be called from READY state, current state is " + STATE_NAMES [m_state]);
|
||||
}
|
||||
|
||||
if (DO_STATE_CHECKS) m_state = STATE_STARTED;
|
||||
m_data = getTime ();
|
||||
}
|
||||
|
||||
public void stop ()
|
||||
{
|
||||
// latch stop time in a local var before doing anything else:
|
||||
final double data = getTime ();
|
||||
|
||||
if (DO_STATE_CHECKS)
|
||||
{
|
||||
if (m_state != STATE_STARTED)
|
||||
throw new IllegalStateException (this + ": stop() must be called from STARTED state, current state is " + STATE_NAMES [m_state]);
|
||||
}
|
||||
|
||||
m_data = data - m_data;
|
||||
if (DO_STATE_CHECKS) m_state = STATE_STOPPED;
|
||||
}
|
||||
|
||||
public double getDuration ()
|
||||
{
|
||||
if (DO_STATE_CHECKS)
|
||||
{
|
||||
if (m_state != STATE_STOPPED)
|
||||
throw new IllegalStateException (this + ": getDuration() must be called from STOPPED state, current state is " + STATE_NAMES [m_state]);
|
||||
}
|
||||
|
||||
return m_data;
|
||||
}
|
||||
|
||||
public void reset ()
|
||||
{
|
||||
if (DO_STATE_CHECKS) m_state = STATE_READY;
|
||||
}
|
||||
|
||||
// protected: .............................................................
|
||||
|
||||
// package: ...............................................................
|
||||
|
||||
// private: ...............................................................
|
||||
|
||||
/*
|
||||
* This is supposed to return a fractional count of milliseconds elapsed
|
||||
* since some indeterminate moment in the past. The exact starting point
|
||||
* is not relevant because this timer class reports time differences only.
|
||||
*
|
||||
* JNI code in HRTIMER_LIB library is supposed to implement this.
*/
|
||||
private static native double getTime ();
|
||||
|
||||
|
||||
private int m_state; // used to keep track of timer state
|
||||
private double m_data; // timing data
|
||||
|
||||
private static final String HRTIMER_LIB = "hrtlib";
|
||||
|
||||
|
||||
} // end of class
|
||||
// ----------------------------------------------------------------------------
|
@ -1,54 +0,0 @@
|
||||
|
||||
package com.vladium.utils.timing;
|
||||
|
||||
// ----------------------------------------------------------------------------
|
||||
/**
|
||||
* A simple interface for measuring time intervals. An instance of this goes
|
||||
* through the following lifecycle states:
|
||||
* <DL>
|
||||
* <DT> <EM>ready</EM>
|
||||
* <DD> timer is ready to start a new measurement
|
||||
* <DT> <EM>started</EM>
|
||||
* <DD> timer has recorded the starting time interval point
|
||||
* <DT> <EM>stopped</EM>
|
||||
* <DD> timer has recorded the ending time interval point
|
||||
* </DL>
|
||||
* See individual methods for details.<P>
|
||||
*
|
||||
* If this library has been compiled with {@link ITimerConstants#DO_STATE_CHECKS}
|
||||
* set to 'true' the implementation will enforce this lifecycle model and throw
|
||||
* IllegalStateException when it is violated.
|
||||
*
|
||||
* @author (C) <a href="mailto:vroubtsov@illinoisalumni.org">Vlad Roubtsov</a>, 2002
|
||||
*/
|
||||
public interface ITimer
|
||||
{
|
||||
// public: ................................................................
|
||||
|
||||
/**
|
||||
* Starts a new time interval and advances this timer instance to 'started'
|
||||
* state. This method can be called from 'ready' state only.
*/
|
||||
void start ();
|
||||
|
||||
/**
|
||||
* Terminates the current time interval and advances this timer instance to
|
||||
* 'stopped' state. Interval duration will be available via
|
||||
* {@link #getDuration()} method. This method can be called from 'started'
|
||||
* state only.
*/
|
||||
void stop ();
|
||||
|
||||
/**
|
||||
* Returns the duration of the time interval that elapsed between the last
|
||||
* calls to {@link #start()} and {@link #stop()}. This method can be called
|
||||
* any number of times from 'stopped' state and will return the same value
|
||||
* each time.<P>
|
||||
*
* @return interval duration in milliseconds
*/
|
||||
double getDuration ();
|
||||
|
||||
/**
|
||||
* This method can be called from any state and will reset this timer
|
||||
* instance back to 'ready' state.
*/
|
||||
void reset ();
|
||||
|
||||
} // end of interface
|
||||
// ----------------------------------------------------------------------------
|
@ -1,31 +0,0 @@
|
||||
|
||||
package com.vladium.utils.timing;
|
||||
|
||||
// ----------------------------------------------------------------------------
|
||||
/**
|
||||
* A package-private collection of constants used by {@link ITimer} implementations
|
||||
* in <code>HRTimer</code> and <code>JavaSystemTimer</code> classes.
|
||||
*
|
||||
* @author (C) <a href="mailto:vroubtsov@illinoisalumni.org">Vlad Roubtsov</a>, 2002
|
||||
*/
|
||||
interface ITimerConstants
|
||||
{
|
||||
// public: ................................................................
|
||||
|
||||
/**
|
||||
* Conditional compilation flag to enable/disable state checking in timer
|
||||
* implementations. Just about the only reason you might want to disable
|
||||
* this is to reduce the timer overhead, but in practice the gain is very
|
||||
* small.
*/
|
||||
static final boolean DO_STATE_CHECKS = true;
|
||||
|
||||
/**
|
||||
* Timer state enumeration.
*/
|
||||
static final int STATE_READY = 0, STATE_STARTED = 1, STATE_STOPPED = 2;
|
||||
|
||||
/**
|
||||
* User-friendly timer state names indexed by their state values.
*/
|
||||
static final String [] STATE_NAMES = {"READY", "STARTED", "STOPPED"};
|
||||
|
||||
} // end of interface
|
||||
// ----------------------------------------------------------------------------
|
@ -1,74 +0,0 @@
|
||||
|
||||
package com.vladium.utils.timing;
|
||||
|
||||
// ----------------------------------------------------------------------------
|
||||
/**
|
||||
* A package-private implementation of {@link ITimer} based around Java system
|
||||
* timer [<code>System.currentTimeMillis()</code> method]. It is used when
|
||||
* <code>HRTimer</code> implementation is unavailable.<P>
|
||||
*
|
||||
* {@link TimerFactory} acts as the Factory for this class.<P>
|
||||
*
|
||||
* MT-safety: an instance of this class is safe to be used within the same
|
||||
* thread only.
|
||||
*
|
||||
* @author (C) <a href="mailto:vroubtsov@illinoisalumni.org">Vlad Roubtsov</a>, 2002
|
||||
*/
|
||||
final class JavaSystemTimer implements ITimer, ITimerConstants
|
||||
{
|
||||
// public: ................................................................
|
||||
|
||||
public void start ()
|
||||
{
|
||||
if (DO_STATE_CHECKS)
|
||||
{
|
||||
if (m_state != STATE_READY)
|
||||
throw new IllegalStateException (this + ": start() must be called from READY state, current state is " + STATE_NAMES [m_state]);
|
||||
}
|
||||
|
||||
if (DO_STATE_CHECKS) m_state = STATE_STARTED;
|
||||
m_data = System.currentTimeMillis ();
|
||||
}
|
||||
|
||||
public void stop ()
|
||||
{
|
||||
// latch stop time in a local var before doing anything else:
|
||||
final long data = System.currentTimeMillis ();
|
||||
|
||||
if (DO_STATE_CHECKS)
|
||||
{
|
||||
if (m_state != STATE_STARTED)
|
||||
throw new IllegalStateException (this + ": stop() must be called from STARTED state, current state is " + STATE_NAMES [m_state]);
|
||||
}
|
||||
|
||||
m_data = data - m_data;
|
||||
if (DO_STATE_CHECKS) m_state = STATE_STOPPED;
|
||||
}
|
||||
|
||||
public double getDuration ()
|
||||
{
|
||||
if (DO_STATE_CHECKS)
|
||||
{
|
||||
if (m_state != STATE_STOPPED)
|
||||
throw new IllegalStateException (this + ": getDuration() must be called from STOPPED state, current state is " + STATE_NAMES [m_state]);
|
||||
}
|
||||
|
||||
return m_data;
|
||||
}
|
||||
|
||||
public void reset ()
|
||||
{
|
||||
if (DO_STATE_CHECKS) m_state = STATE_READY;
|
||||
}
|
||||
|
||||
// protected: .............................................................
|
||||
|
||||
// package: ...............................................................
|
||||
|
||||
// private: ...............................................................
|
||||
|
||||
private int m_state; // used to keep track of timer state
|
||||
private long m_data; // timing data
|
||||
|
||||
} // end of class
|
||||
// ----------------------------------------------------------------------------
|
@ -1,74 +0,0 @@
|
||||
|
||||
package com.vladium.utils.timing;
|
||||
|
||||
// ----------------------------------------------------------------------------
|
||||
/**
|
||||
* This non-instantiable non-extendible class acts as a Factory for {@link ITimer}
|
||||
* implementations.
|
||||
*
|
||||
* @author (C) <a href="mailto:vroubtsov@illinoisalumni.org">Vlad Roubtsov</a>, 2002
|
||||
*/
|
||||
public abstract class TimerFactory
|
||||
{
|
||||
// public: ................................................................
|
||||
|
||||
private static final String HRTIMER_LIB = "hrtlib";
|
||||
|
||||
/**
|
||||
* Creates a new instance of {@link ITimer} which is returned in 'ready'
|
||||
* state. If the JNI-based/high-resolution implementation is not available
|
||||
* this will return an instance of <code>JavaSystemTimer</code>, so this
|
||||
* method is guaranteed not to fail.
|
||||
*
|
||||
* @return ITimer a new timer instance in 'ready' state [never null]
*/
|
||||
|
||||
public static void initialize(String path) {
|
||||
|
||||
UnsatisfiedLinkError exception = null;
|
||||
|
||||
try {
|
||||
System.loadLibrary (HRTIMER_LIB);
|
||||
} catch (UnsatisfiedLinkError e) {
|
||||
if(path != null) {
|
||||
try {
|
||||
System.load(path);
|
||||
} catch (UnsatisfiedLinkError ex) {
|
||||
exception = ex;
|
||||
}
|
||||
} else {
|
||||
exception = e;
|
||||
}
|
||||
}
|
||||
|
||||
if(exception != null) {
|
||||
System.out.println ("native lib '" + HRTIMER_LIB
|
||||
+ "' not found in 'java.library.path': "
|
||||
+ System.getProperty ("java.library.path")
|
||||
+path==null?"":(" or in "+path));
|
||||
|
||||
throw exception; // re-throw
|
||||
}
|
||||
}
|
||||
|
||||
public static ITimer newTimer ()
|
||||
{
|
||||
// try
|
||||
// {
|
||||
return new HRTimer ();
|
||||
// }
|
||||
// catch (Throwable t)
|
||||
// {
|
||||
// return new JavaSystemTimer ();
|
||||
// }
|
||||
}
|
||||
|
||||
// protected: .............................................................
|
||||
|
||||
// package: ...............................................................
|
||||
|
||||
// private: ...............................................................
|
||||
|
||||
private TimerFactory () {} // prevent subclassing
|
||||
|
||||
} // end of class
|
||||
// ----------------------------------------------------------------------------
|
@ -1,71 +0,0 @@
|
||||
/* ------------------------------------------------------------------------- */
|
||||
/*
|
||||
* A win32 implementation of JNI methods in com.vladium.utils.timing.HRTimer
|
||||
* class. The author compiled it using Microsoft Visual C++ but the code
|
||||
* should be easy to use with any compiler for win32 platform.
|
||||
*
|
||||
* For simplicity, this implementaion assumes JNI 1.2+ and omits error handling.
|
||||
*
|
||||
* (C) 2002, Vladimir Roubtsov [vroubtsov@illinoisalumni.org]
|
||||
*/
|
||||
/* ------------------------------------------------------------------------- */
|
||||
|
||||
#if !defined NDEBUG
|
||||
#include <stdio.h>
|
||||
#endif // NDEBUG
|
||||
|
||||
#include <windows.h>
|
||||
|
||||
#include "com_vladium_utils_timing_HRTimer.h"
|
||||
|
||||
// scale factor for converting a performancce counter reading into milliseconds:
|
||||
static jdouble s_scaleFactor;
|
||||
|
||||
/* ------------------------------------------------------------------------- */
|
||||
|
||||
/*
|
||||
* This method was added in JNI 1.2. It is executed once before any other
|
||||
* methods are called and is ostensibly for negotiating JNI spec versions, but
|
||||
* can also be conveniently used for initializing variables that will not
|
||||
* change throughout the lifetime of this process.
|
||||
*/
|
||||
JNIEXPORT jint JNICALL
|
||||
JNI_OnLoad (JavaVM * vm, void * reserved)
|
||||
{
|
||||
LARGE_INTEGER counterFrequency;
|
||||
|
||||
QueryPerformanceFrequency (& counterFrequency);
|
||||
|
||||
// NOTE: counterFrequency will be zero for a machine that does not have
|
||||
// support for a high-resolution counter. This is only likely for very
|
||||
// old hardware but for a robust implementation you should handle this
|
||||
// case.
|
||||
|
||||
#if !defined NDEBUG
|
||||
printf ("PCFrequency called: %I64d\n", counterFrequency.QuadPart);
|
||||
#endif
|
||||
|
||||
s_scaleFactor = counterFrequency.QuadPart / 1000.0;
|
||||
|
||||
|
||||
return JNI_VERSION_1_2;
|
||||
}
|
||||
/* ......................................................................... */
|
||||
|
||||
/*
|
||||
* Class: com_vladium_utils_timing_HRTimer
|
||||
* Method: getTime
|
||||
* Signature: ()D
|
||||
*/
|
||||
JNIEXPORT jdouble JNICALL
|
||||
Java_com_vladium_utils_timing_HRTimer_getTime (JNIEnv * e, jclass cls)
|
||||
{
|
||||
LARGE_INTEGER counterReading;
|
||||
|
||||
QueryPerformanceCounter (& counterReading);
|
||||
|
||||
return counterReading.QuadPart / s_scaleFactor;
|
||||
}
|
||||
|
||||
/* ------------------------------------------------------------------------- */
|
||||
/* end of file */
|
@ -1,22 +0,0 @@
|
||||
/* DO NOT EDIT THIS FILE - it is machine generated */
|
||||
#include <jni.h>
|
||||
/* Header for class com_vladium_utils_timing_HRTimer */
|
||||
|
||||
#ifndef _Included_com_vladium_utils_timing_HRTimer
|
||||
#define _Included_com_vladium_utils_timing_HRTimer
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Class: com_vladium_utils_timing_HRTimer
|
||||
* Method: getTime
|
||||
* Signature: ()D
|
||||
*/
|
||||
JNIEXPORT jdouble JNICALL
|
||||
Java_com_vladium_utils_timing_HRTimer_getTime (JNIEnv *, jclass);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
#endif
|
Loading…
Reference in New Issue
Block a user