From 792e6e6db4a87ffaf2cd15e8a97be323ac305c5e Mon Sep 17 00:00:00 2001 From: Victor Date: Sat, 23 Jul 2016 23:52:30 +0300 Subject: [PATCH] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB=D0=B5?= =?UTF-8?q?=D0=BD=20=D0=BC=D0=B5=D1=82=D0=BE=D0=B4=20=D0=B4=D0=BB=D1=8F=20?= =?UTF-8?q?=D0=B8=D0=BD=D0=B8=D1=86=D0=B8=D0=B0=D0=BB=D0=B8=D0=B7=D0=B0?= =?UTF-8?q?=D1=86=D0=B8=D0=B8=20=D0=BA=D0=BE=D0=BD=D1=81=D1=82=D0=B0=D0=BD?= =?UTF-8?q?=D1=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../annotations/ConstantInitializer.java | 12 +++++++++ .../annimon/ownlang/lib/modules/Module.java | 2 +- .../annimon/ownlang/lib/modules/canvas.java | 22 ++++++++------- .../annimon/ownlang/lib/modules/canvasfx.java | 6 +++++ src/com/annimon/ownlang/lib/modules/date.java | 9 +++++-- .../annimon/ownlang/lib/modules/files.java | 8 +++++- .../ownlang/lib/modules/functional.java | 9 +++++-- src/com/annimon/ownlang/lib/modules/http.java | 6 +++++ src/com/annimon/ownlang/lib/modules/java.java | 6 +++++ src/com/annimon/ownlang/lib/modules/jdbc.java | 9 +++++-- src/com/annimon/ownlang/lib/modules/json.java | 4 +++ src/com/annimon/ownlang/lib/modules/math.java | 11 +++++--- .../annimon/ownlang/lib/modules/ounit.java | 4 +++ .../annimon/ownlang/lib/modules/robot.java | 27 +++++++++++-------- src/com/annimon/ownlang/lib/modules/std.java | 9 +++++-- .../annimon/ownlang/lib/modules/types.java | 11 +++++--- 16 files changed, 119 insertions(+), 36 deletions(-) create mode 100644 src/com/annimon/ownlang/annotations/ConstantInitializer.java diff --git a/src/com/annimon/ownlang/annotations/ConstantInitializer.java b/src/com/annimon/ownlang/annotations/ConstantInitializer.java new file mode 100644 index 0000000..fd1c781 --- /dev/null +++ b/src/com/annimon/ownlang/annotations/ConstantInitializer.java @@ -0,0 +1,12 @@ +package com.annimon.ownlang.annotations; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +@Retention(RetentionPolicy.SOURCE) +@Target(ElementType.TYPE) +public @interface ConstantInitializer { + +} diff --git a/src/com/annimon/ownlang/lib/modules/Module.java b/src/com/annimon/ownlang/lib/modules/Module.java index b2cd826..d022d1f 100644 --- a/src/com/annimon/ownlang/lib/modules/Module.java +++ b/src/com/annimon/ownlang/lib/modules/Module.java @@ -5,6 +5,6 @@ package com.annimon.ownlang.lib.modules; * @author aNNiMON */ public interface Module { - + void init(); } diff --git a/src/com/annimon/ownlang/lib/modules/canvas.java b/src/com/annimon/ownlang/lib/modules/canvas.java index fbe2950..7a9fc05 100644 --- a/src/com/annimon/ownlang/lib/modules/canvas.java +++ b/src/com/annimon/ownlang/lib/modules/canvas.java @@ -1,6 +1,6 @@ package com.annimon.ownlang.lib.modules; -import com.annimon.ownlang.exceptions.ArgumentsMismatchException; +import com.annimon.ownlang.annotations.ConstantInitializer; import com.annimon.ownlang.lib.*; import java.awt.Color; import java.awt.Dimension; @@ -20,6 +20,7 @@ import javax.swing.JPanel; * * @author aNNiMON */ +@ConstantInitializer public final class canvas implements Module { private static JFrame frame; @@ -30,8 +31,18 @@ public final class canvas implements Module { private static NumberValue lastKey; private static ArrayValue mouseHover; + public static void initConstants() { + Variables.set("VK_UP", NumberValue.of(KeyEvent.VK_UP)); + Variables.set("VK_DOWN", NumberValue.of(KeyEvent.VK_DOWN)); + Variables.set("VK_LEFT", NumberValue.of(KeyEvent.VK_LEFT)); + Variables.set("VK_RIGHT", NumberValue.of(KeyEvent.VK_RIGHT)); + Variables.set("VK_FIRE", NumberValue.of(KeyEvent.VK_ENTER)); + Variables.set("VK_ESCAPE", NumberValue.of(KeyEvent.VK_ESCAPE)); + } + @Override public void init() { + initConstants(); Functions.set("window", new CreateWindow()); Functions.set("prompt", new Prompt()); Functions.set("keypressed", new KeyPressed()); @@ -45,14 +56,7 @@ public final class canvas implements Module { Functions.set("drawstring", new DrawString()); Functions.set("color", new SetColor()); Functions.set("repaint", new Repaint()); - - Variables.set("VK_UP", NumberValue.of(KeyEvent.VK_UP)); - Variables.set("VK_DOWN", NumberValue.of(KeyEvent.VK_DOWN)); - Variables.set("VK_LEFT", NumberValue.of(KeyEvent.VK_LEFT)); - Variables.set("VK_RIGHT", NumberValue.of(KeyEvent.VK_RIGHT)); - Variables.set("VK_FIRE", NumberValue.of(KeyEvent.VK_ENTER)); - Variables.set("VK_ESCAPE", NumberValue.of(KeyEvent.VK_ESCAPE)); - + lastKey = NumberValue.MINUS_ONE; mouseHover = new ArrayValue(new Value[] { NumberValue.ZERO, NumberValue.ZERO }); } diff --git a/src/com/annimon/ownlang/lib/modules/canvasfx.java b/src/com/annimon/ownlang/lib/modules/canvasfx.java index d4cc2f4..7f74aac 100644 --- a/src/com/annimon/ownlang/lib/modules/canvasfx.java +++ b/src/com/annimon/ownlang/lib/modules/canvasfx.java @@ -1,5 +1,6 @@ package com.annimon.ownlang.lib.modules; +import com.annimon.ownlang.annotations.ConstantInitializer; import com.annimon.ownlang.exceptions.TypeException; import com.annimon.ownlang.lib.*; import java.awt.Dimension; @@ -42,6 +43,7 @@ import javax.swing.JFrame; * * @author aNNiMON */ +@ConstantInitializer public final class canvasfx implements Module { private static final int FX_EFFECT_TYPE = 5301; @@ -84,8 +86,12 @@ public final class canvasfx implements Module { } } + public static void initConstants() { + } + @Override public void init() { + initConstants(); Functions.set("window", new CreateWindow()); Functions.set("repaint", new Repaint()); diff --git a/src/com/annimon/ownlang/lib/modules/date.java b/src/com/annimon/ownlang/lib/modules/date.java index 0ab1f72..73376aa 100644 --- a/src/com/annimon/ownlang/lib/modules/date.java +++ b/src/com/annimon/ownlang/lib/modules/date.java @@ -1,5 +1,6 @@ package com.annimon.ownlang.lib.modules; +import com.annimon.ownlang.annotations.ConstantInitializer; import com.annimon.ownlang.exceptions.TypeException; import com.annimon.ownlang.lib.*; import java.text.DateFormat; @@ -13,6 +14,7 @@ import java.util.Locale; * * @author aNNiMON */ +@ConstantInitializer public final class date implements Module { private static final int DATE_DATE_FORMAT = 9829; @@ -26,13 +28,16 @@ public final class date implements Module { SECOND = new StringValue("second"), MILLISECOND = new StringValue("millisecond"); - @Override - public void init() { + public static void initConstants() { Variables.set("STYLE_FULL", NumberValue.of(DateFormat.FULL)); Variables.set("STYLE_LONG", NumberValue.of(DateFormat.LONG)); Variables.set("STYLE_MEDIUM", NumberValue.of(DateFormat.MEDIUM)); Variables.set("STYLE_SHORT", NumberValue.of(DateFormat.SHORT)); + } + @Override + public void init() { + initConstants(); Functions.set("newDate", new date_newDate()); Functions.set("newFormat", new date_newFormat()); Functions.set("formatDate", new date_format()); diff --git a/src/com/annimon/ownlang/lib/modules/files.java b/src/com/annimon/ownlang/lib/modules/files.java index 3ae2b2b..04c1010 100644 --- a/src/com/annimon/ownlang/lib/modules/files.java +++ b/src/com/annimon/ownlang/lib/modules/files.java @@ -1,5 +1,6 @@ package com.annimon.ownlang.lib.modules; +import com.annimon.ownlang.annotations.ConstantInitializer; import com.annimon.ownlang.exceptions.ArgumentsMismatchException; import com.annimon.ownlang.lib.*; import java.io.BufferedReader; @@ -20,13 +21,18 @@ import java.util.Map; * * @author aNNiMON */ +@ConstantInitializer public final class files implements Module { private static Map files; - + + public static void initConstants() { + } + @Override public void init() { files = new HashMap<>(); + initConstants(); Variables.set("FILES_COMPARATOR", new FunctionValue(new filesComparatorFunction())); Functions.set("fopen", new fopen()); diff --git a/src/com/annimon/ownlang/lib/modules/functional.java b/src/com/annimon/ownlang/lib/modules/functional.java index c0aeb05..f3db9c8 100644 --- a/src/com/annimon/ownlang/lib/modules/functional.java +++ b/src/com/annimon/ownlang/lib/modules/functional.java @@ -1,5 +1,6 @@ package com.annimon.ownlang.lib.modules; +import com.annimon.ownlang.annotations.ConstantInitializer; import com.annimon.ownlang.lib.*; import com.annimon.ownlang.lib.modules.functions.*; @@ -7,10 +8,16 @@ import com.annimon.ownlang.lib.modules.functions.*; * * @author aNNiMON */ +@ConstantInitializer public final class functional implements Module { + public static void initConstants() { + Variables.set("IDENTITY", new FunctionValue(args -> args[0])); + } + @Override public void init() { + initConstants(); Functions.set("foreach", new functional_foreach()); Functions.set("map", new functional_map()); Functions.set("flatmap", new functional_flatmap()); @@ -20,7 +27,5 @@ public final class functional implements Module { Functions.set("chain", new functional_chain()); Functions.set("combine", new functional_combine()); - - Variables.set("IDENTITY", new FunctionValue(args -> args[0])); } } diff --git a/src/com/annimon/ownlang/lib/modules/http.java b/src/com/annimon/ownlang/lib/modules/http.java index ceaa193..a8ffe17 100644 --- a/src/com/annimon/ownlang/lib/modules/http.java +++ b/src/com/annimon/ownlang/lib/modules/http.java @@ -1,5 +1,6 @@ package com.annimon.ownlang.lib.modules; +import com.annimon.ownlang.annotations.ConstantInitializer; import com.annimon.ownlang.lib.*; import com.annimon.ownlang.lib.modules.functions.*; @@ -7,10 +8,15 @@ import com.annimon.ownlang.lib.modules.functions.*; * * @author aNNiMON */ +@ConstantInitializer public final class http implements Module { + public static void initConstants() { + } + @Override public void init() { + initConstants(); Functions.set("urlencode", new http_urlencode()); Functions.set("http", new http_http()); Functions.set("download", new http_download()); diff --git a/src/com/annimon/ownlang/lib/modules/java.java b/src/com/annimon/ownlang/lib/modules/java.java index feb4147..4b31570 100644 --- a/src/com/annimon/ownlang/lib/modules/java.java +++ b/src/com/annimon/ownlang/lib/modules/java.java @@ -1,5 +1,6 @@ package com.annimon.ownlang.lib.modules; +import com.annimon.ownlang.annotations.ConstantInitializer; import com.annimon.ownlang.lib.*; import java.lang.reflect.Array; import java.lang.reflect.Field; @@ -13,12 +14,17 @@ import java.util.List; * * @author aNNiMON */ +@ConstantInitializer public final class java implements Module { private static final Value NULL = new NullValue(); + public static void initConstants() { + } + @Override public void init() { + initConstants(); Variables.define("null", NULL); Variables.define("boolean.class", new ClassValue(boolean.class)); Variables.define("boolean[].class", new ClassValue(boolean[].class)); diff --git a/src/com/annimon/ownlang/lib/modules/jdbc.java b/src/com/annimon/ownlang/lib/modules/jdbc.java index dcf4b81..aa7f487 100644 --- a/src/com/annimon/ownlang/lib/modules/jdbc.java +++ b/src/com/annimon/ownlang/lib/modules/jdbc.java @@ -1,5 +1,6 @@ package com.annimon.ownlang.lib.modules; +import com.annimon.ownlang.annotations.ConstantInitializer; import com.annimon.ownlang.exceptions.ArgumentsMismatchException; import com.annimon.ownlang.lib.Arguments; import com.annimon.ownlang.lib.ArrayValue; @@ -31,10 +32,10 @@ import java.util.function.Function; * * @author aNNiMON */ +@ConstantInitializer public final class jdbc implements Module { - @Override - public void init() { + public static void initConstants() { Variables.define("TRANSACTION_NONE", NumberValue.of(Connection.TRANSACTION_NONE)); Variables.define("TRANSACTION_READ_COMMITTED", NumberValue.of(Connection.TRANSACTION_READ_COMMITTED)); Variables.define("TRANSACTION_READ_UNCOMMITTED", NumberValue.of(Connection.TRANSACTION_READ_UNCOMMITTED)); @@ -59,7 +60,11 @@ public final class jdbc implements Module { Variables.define("TYPE_FORWARD_ONLY", NumberValue.of(ResultSet.TYPE_FORWARD_ONLY)); Variables.define("TYPE_SCROLL_INSENSITIVE", NumberValue.of(ResultSet.TYPE_SCROLL_INSENSITIVE)); Variables.define("TYPE_SCROLL_SENSITIVE", NumberValue.of(ResultSet.TYPE_SCROLL_SENSITIVE)); + } + @Override + public void init() { + initConstants(); Functions.set("getConnection", getConnectionFunction()); Functions.set("sqlite", getConnectionFunction("jdbc:sqlite:")); Functions.set("mysql", getConnectionFunction("jdbc:", () -> Class.forName("com.mysql.jdbc.Driver"))); diff --git a/src/com/annimon/ownlang/lib/modules/json.java b/src/com/annimon/ownlang/lib/modules/json.java index 6af5997..6b5abb6 100644 --- a/src/com/annimon/ownlang/lib/modules/json.java +++ b/src/com/annimon/ownlang/lib/modules/json.java @@ -9,8 +9,12 @@ import com.annimon.ownlang.lib.modules.functions.*; */ public final class json implements Module { + public static void initConstants() { + } + @Override public void init() { + initConstants(); Functions.set("jsonencode", new json_encode()); Functions.set("jsondecode", new json_decode()); } diff --git a/src/com/annimon/ownlang/lib/modules/math.java b/src/com/annimon/ownlang/lib/modules/math.java index b549ea7..33b48cb 100644 --- a/src/com/annimon/ownlang/lib/modules/math.java +++ b/src/com/annimon/ownlang/lib/modules/math.java @@ -1,5 +1,6 @@ package com.annimon.ownlang.lib.modules; +import com.annimon.ownlang.annotations.ConstantInitializer; import com.annimon.ownlang.lib.*; import java.util.function.DoubleBinaryOperator; import java.util.function.DoubleFunction; @@ -10,12 +11,19 @@ import java.util.function.UnaryOperator; * * @author aNNiMON */ +@ConstantInitializer public final class math implements Module { private static final DoubleFunction doubleToNumber = NumberValue::of; + public static void initConstants() { + Variables.set("PI", NumberValue.of(Math.PI)); + Variables.set("E", NumberValue.of(Math.E)); + } + @Override public void init() { + initConstants(); Functions.set("abs", math::abs); Functions.set("acos", functionConvert(Math::acos)); Functions.set("asin", functionConvert(Math::asin)); @@ -52,9 +60,6 @@ public final class math implements Module { Functions.set("toDegrees", functionConvert(Math::toDegrees)); Functions.set("toRadians", functionConvert(Math::toRadians)); Functions.set("ulp", functionConvert(Math::ulp, Math::ulp)); - - Variables.set("PI", NumberValue.of(Math.PI)); - Variables.set("E", NumberValue.of(Math.E)); } private static Value abs(Value... args) { diff --git a/src/com/annimon/ownlang/lib/modules/ounit.java b/src/com/annimon/ownlang/lib/modules/ounit.java index 45e33f9..3fa0cae 100644 --- a/src/com/annimon/ownlang/lib/modules/ounit.java +++ b/src/com/annimon/ownlang/lib/modules/ounit.java @@ -11,8 +11,12 @@ import java.util.stream.Collectors; */ public final class ounit implements Module { + public static void initConstants() { + } + @Override public void init() { + initConstants(); Functions.set("assertEquals", new assertEquals()); Functions.set("assertNotEquals", new assertNotEquals()); Functions.set("assertSameType", new assertSameType()); diff --git a/src/com/annimon/ownlang/lib/modules/robot.java b/src/com/annimon/ownlang/lib/modules/robot.java index b870ba2..7e33bbc 100644 --- a/src/com/annimon/ownlang/lib/modules/robot.java +++ b/src/com/annimon/ownlang/lib/modules/robot.java @@ -1,5 +1,6 @@ package com.annimon.ownlang.lib.modules; +import com.annimon.ownlang.annotations.ConstantInitializer; import com.annimon.ownlang.lib.*; import com.annimon.ownlang.lib.modules.functions.robot_exec; import com.annimon.ownlang.lib.modules.functions.robot_fromclipboard; @@ -15,6 +16,7 @@ import java.util.Map; * * @author aNNiMON */ +@ConstantInitializer public final class robot implements Module { private static final int CLICK_DELAY = 200; @@ -28,9 +30,22 @@ public final class robot implements Module { } private static Robot awtRobot; - + + public static void initConstants() { + Variables.set("VK_DOWN", NumberValue.of(KeyEvent.VK_DOWN)); + Variables.set("VK_LEFT", NumberValue.of(KeyEvent.VK_LEFT)); + Variables.set("VK_RIGHT", NumberValue.of(KeyEvent.VK_RIGHT)); + Variables.set("VK_FIRE", NumberValue.of(KeyEvent.VK_ENTER)); + Variables.set("VK_ESCAPE", NumberValue.of(KeyEvent.VK_ESCAPE)); + + Variables.set("BUTTON1", NumberValue.of(InputEvent.BUTTON1_MASK)); + Variables.set("BUTTON2", NumberValue.of(InputEvent.BUTTON2_MASK)); + Variables.set("BUTTON3", NumberValue.of(InputEvent.BUTTON3_MASK)); + } + @Override public void init() { + initConstants(); initialize(); Functions.set("click", convertFunction(robot::click)); @@ -59,16 +74,6 @@ public final class robot implements Module { Functions.set("fromClipboard", new robot_fromclipboard()); Functions.set("execProcess", new robot_exec(robot_exec.Mode.EXEC)); Functions.set("execProcessAndWait", new robot_exec(robot_exec.Mode.EXEC_AND_WAIT)); - - Variables.set("VK_DOWN", NumberValue.of(KeyEvent.VK_DOWN)); - Variables.set("VK_LEFT", NumberValue.of(KeyEvent.VK_LEFT)); - Variables.set("VK_RIGHT", NumberValue.of(KeyEvent.VK_RIGHT)); - Variables.set("VK_FIRE", NumberValue.of(KeyEvent.VK_ENTER)); - Variables.set("VK_ESCAPE", NumberValue.of(KeyEvent.VK_ESCAPE)); - - Variables.set("BUTTON1", NumberValue.of(InputEvent.BUTTON1_MASK)); - Variables.set("BUTTON2", NumberValue.of(InputEvent.BUTTON2_MASK)); - Variables.set("BUTTON3", NumberValue.of(InputEvent.BUTTON3_MASK)); } private static void initialize() { diff --git a/src/com/annimon/ownlang/lib/modules/std.java b/src/com/annimon/ownlang/lib/modules/std.java index ed4b046..21cb0df 100644 --- a/src/com/annimon/ownlang/lib/modules/std.java +++ b/src/com/annimon/ownlang/lib/modules/std.java @@ -1,6 +1,7 @@ package com.annimon.ownlang.lib.modules; import com.annimon.ownlang.Main; +import com.annimon.ownlang.annotations.ConstantInitializer; import com.annimon.ownlang.lib.*; import com.annimon.ownlang.lib.modules.functions.*; @@ -8,12 +9,16 @@ import com.annimon.ownlang.lib.modules.functions.*; * * @author aNNiMON */ +@ConstantInitializer public final class std implements Module { + public static void initConstants() { + Variables.set("ARGS", ArrayValue.of(Main.getOwnlangArgs())); + } + @Override public void init() { - Variables.set("ARGS", ArrayValue.of(Main.getOwnlangArgs())); - + initConstants(); Functions.set("echo", new std_echo()); Functions.set("readln", new std_readln()); Functions.set("length", new std_length()); diff --git a/src/com/annimon/ownlang/lib/modules/types.java b/src/com/annimon/ownlang/lib/modules/types.java index e399d03..17c3ec7 100644 --- a/src/com/annimon/ownlang/lib/modules/types.java +++ b/src/com/annimon/ownlang/lib/modules/types.java @@ -1,22 +1,27 @@ package com.annimon.ownlang.lib.modules; +import com.annimon.ownlang.annotations.ConstantInitializer; import com.annimon.ownlang.lib.*; /** * * @author aNNiMON */ +@ConstantInitializer public final class types implements Module { - @Override - public void init() { + public static void initConstants() { Variables.set("OBJECT", NumberValue.of(Types.OBJECT)); Variables.set("NUMBER", NumberValue.of(Types.NUMBER)); Variables.set("STRING", NumberValue.of(Types.STRING)); Variables.set("ARRAY", NumberValue.of(Types.ARRAY)); Variables.set("MAP", NumberValue.of(Types.MAP)); Variables.set("FUNCTION", NumberValue.of(Types.FUNCTION)); - + } + + @Override + public void init() { + initConstants(); Functions.set("typeof", args -> NumberValue.of(args[0].type())); Functions.set("string", args -> new StringValue(args[0].asString())); Functions.set("number", args -> NumberValue.of(args[0].asNumber()));