Добавлен метод для инициализации констант

This commit is contained in:
Victor 2016-07-23 23:52:30 +03:00
parent a484df12e3
commit 792e6e6db4
16 changed files with 119 additions and 36 deletions

View File

@ -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 {
}

View File

@ -5,6 +5,6 @@ package com.annimon.ownlang.lib.modules;
* @author aNNiMON * @author aNNiMON
*/ */
public interface Module { public interface Module {
void init(); void init();
} }

View File

@ -1,6 +1,6 @@
package com.annimon.ownlang.lib.modules; package com.annimon.ownlang.lib.modules;
import com.annimon.ownlang.exceptions.ArgumentsMismatchException; import com.annimon.ownlang.annotations.ConstantInitializer;
import com.annimon.ownlang.lib.*; import com.annimon.ownlang.lib.*;
import java.awt.Color; import java.awt.Color;
import java.awt.Dimension; import java.awt.Dimension;
@ -20,6 +20,7 @@ import javax.swing.JPanel;
* *
* @author aNNiMON * @author aNNiMON
*/ */
@ConstantInitializer
public final class canvas implements Module { public final class canvas implements Module {
private static JFrame frame; private static JFrame frame;
@ -30,8 +31,18 @@ public final class canvas implements Module {
private static NumberValue lastKey; private static NumberValue lastKey;
private static ArrayValue mouseHover; 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 @Override
public void init() { public void init() {
initConstants();
Functions.set("window", new CreateWindow()); Functions.set("window", new CreateWindow());
Functions.set("prompt", new Prompt()); Functions.set("prompt", new Prompt());
Functions.set("keypressed", new KeyPressed()); Functions.set("keypressed", new KeyPressed());
@ -45,14 +56,7 @@ public final class canvas implements Module {
Functions.set("drawstring", new DrawString()); Functions.set("drawstring", new DrawString());
Functions.set("color", new SetColor()); Functions.set("color", new SetColor());
Functions.set("repaint", new Repaint()); 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; lastKey = NumberValue.MINUS_ONE;
mouseHover = new ArrayValue(new Value[] { NumberValue.ZERO, NumberValue.ZERO }); mouseHover = new ArrayValue(new Value[] { NumberValue.ZERO, NumberValue.ZERO });
} }

View File

@ -1,5 +1,6 @@
package com.annimon.ownlang.lib.modules; package com.annimon.ownlang.lib.modules;
import com.annimon.ownlang.annotations.ConstantInitializer;
import com.annimon.ownlang.exceptions.TypeException; import com.annimon.ownlang.exceptions.TypeException;
import com.annimon.ownlang.lib.*; import com.annimon.ownlang.lib.*;
import java.awt.Dimension; import java.awt.Dimension;
@ -42,6 +43,7 @@ import javax.swing.JFrame;
* *
* @author aNNiMON * @author aNNiMON
*/ */
@ConstantInitializer
public final class canvasfx implements Module { public final class canvasfx implements Module {
private static final int FX_EFFECT_TYPE = 5301; private static final int FX_EFFECT_TYPE = 5301;
@ -84,8 +86,12 @@ public final class canvasfx implements Module {
} }
} }
public static void initConstants() {
}
@Override @Override
public void init() { public void init() {
initConstants();
Functions.set("window", new CreateWindow()); Functions.set("window", new CreateWindow());
Functions.set("repaint", new Repaint()); Functions.set("repaint", new Repaint());

View File

@ -1,5 +1,6 @@
package com.annimon.ownlang.lib.modules; package com.annimon.ownlang.lib.modules;
import com.annimon.ownlang.annotations.ConstantInitializer;
import com.annimon.ownlang.exceptions.TypeException; import com.annimon.ownlang.exceptions.TypeException;
import com.annimon.ownlang.lib.*; import com.annimon.ownlang.lib.*;
import java.text.DateFormat; import java.text.DateFormat;
@ -13,6 +14,7 @@ import java.util.Locale;
* *
* @author aNNiMON * @author aNNiMON
*/ */
@ConstantInitializer
public final class date implements Module { public final class date implements Module {
private static final int DATE_DATE_FORMAT = 9829; private static final int DATE_DATE_FORMAT = 9829;
@ -26,13 +28,16 @@ public final class date implements Module {
SECOND = new StringValue("second"), SECOND = new StringValue("second"),
MILLISECOND = new StringValue("millisecond"); MILLISECOND = new StringValue("millisecond");
@Override public static void initConstants() {
public void init() {
Variables.set("STYLE_FULL", NumberValue.of(DateFormat.FULL)); Variables.set("STYLE_FULL", NumberValue.of(DateFormat.FULL));
Variables.set("STYLE_LONG", NumberValue.of(DateFormat.LONG)); Variables.set("STYLE_LONG", NumberValue.of(DateFormat.LONG));
Variables.set("STYLE_MEDIUM", NumberValue.of(DateFormat.MEDIUM)); Variables.set("STYLE_MEDIUM", NumberValue.of(DateFormat.MEDIUM));
Variables.set("STYLE_SHORT", NumberValue.of(DateFormat.SHORT)); Variables.set("STYLE_SHORT", NumberValue.of(DateFormat.SHORT));
}
@Override
public void init() {
initConstants();
Functions.set("newDate", new date_newDate()); Functions.set("newDate", new date_newDate());
Functions.set("newFormat", new date_newFormat()); Functions.set("newFormat", new date_newFormat());
Functions.set("formatDate", new date_format()); Functions.set("formatDate", new date_format());

View File

@ -1,5 +1,6 @@
package com.annimon.ownlang.lib.modules; package com.annimon.ownlang.lib.modules;
import com.annimon.ownlang.annotations.ConstantInitializer;
import com.annimon.ownlang.exceptions.ArgumentsMismatchException; import com.annimon.ownlang.exceptions.ArgumentsMismatchException;
import com.annimon.ownlang.lib.*; import com.annimon.ownlang.lib.*;
import java.io.BufferedReader; import java.io.BufferedReader;
@ -20,13 +21,18 @@ import java.util.Map;
* *
* @author aNNiMON * @author aNNiMON
*/ */
@ConstantInitializer
public final class files implements Module { public final class files implements Module {
private static Map<Integer, FileInfo> files; private static Map<Integer, FileInfo> files;
public static void initConstants() {
}
@Override @Override
public void init() { public void init() {
files = new HashMap<>(); files = new HashMap<>();
initConstants();
Variables.set("FILES_COMPARATOR", new FunctionValue(new filesComparatorFunction())); Variables.set("FILES_COMPARATOR", new FunctionValue(new filesComparatorFunction()));
Functions.set("fopen", new fopen()); Functions.set("fopen", new fopen());

View File

@ -1,5 +1,6 @@
package com.annimon.ownlang.lib.modules; package com.annimon.ownlang.lib.modules;
import com.annimon.ownlang.annotations.ConstantInitializer;
import com.annimon.ownlang.lib.*; import com.annimon.ownlang.lib.*;
import com.annimon.ownlang.lib.modules.functions.*; import com.annimon.ownlang.lib.modules.functions.*;
@ -7,10 +8,16 @@ import com.annimon.ownlang.lib.modules.functions.*;
* *
* @author aNNiMON * @author aNNiMON
*/ */
@ConstantInitializer
public final class functional implements Module { public final class functional implements Module {
public static void initConstants() {
Variables.set("IDENTITY", new FunctionValue(args -> args[0]));
}
@Override @Override
public void init() { public void init() {
initConstants();
Functions.set("foreach", new functional_foreach()); Functions.set("foreach", new functional_foreach());
Functions.set("map", new functional_map()); Functions.set("map", new functional_map());
Functions.set("flatmap", new functional_flatmap()); Functions.set("flatmap", new functional_flatmap());
@ -20,7 +27,5 @@ public final class functional implements Module {
Functions.set("chain", new functional_chain()); Functions.set("chain", new functional_chain());
Functions.set("combine", new functional_combine()); Functions.set("combine", new functional_combine());
Variables.set("IDENTITY", new FunctionValue(args -> args[0]));
} }
} }

View File

@ -1,5 +1,6 @@
package com.annimon.ownlang.lib.modules; package com.annimon.ownlang.lib.modules;
import com.annimon.ownlang.annotations.ConstantInitializer;
import com.annimon.ownlang.lib.*; import com.annimon.ownlang.lib.*;
import com.annimon.ownlang.lib.modules.functions.*; import com.annimon.ownlang.lib.modules.functions.*;
@ -7,10 +8,15 @@ import com.annimon.ownlang.lib.modules.functions.*;
* *
* @author aNNiMON * @author aNNiMON
*/ */
@ConstantInitializer
public final class http implements Module { public final class http implements Module {
public static void initConstants() {
}
@Override @Override
public void init() { public void init() {
initConstants();
Functions.set("urlencode", new http_urlencode()); Functions.set("urlencode", new http_urlencode());
Functions.set("http", new http_http()); Functions.set("http", new http_http());
Functions.set("download", new http_download()); Functions.set("download", new http_download());

View File

@ -1,5 +1,6 @@
package com.annimon.ownlang.lib.modules; package com.annimon.ownlang.lib.modules;
import com.annimon.ownlang.annotations.ConstantInitializer;
import com.annimon.ownlang.lib.*; import com.annimon.ownlang.lib.*;
import java.lang.reflect.Array; import java.lang.reflect.Array;
import java.lang.reflect.Field; import java.lang.reflect.Field;
@ -13,12 +14,17 @@ import java.util.List;
* *
* @author aNNiMON * @author aNNiMON
*/ */
@ConstantInitializer
public final class java implements Module { public final class java implements Module {
private static final Value NULL = new NullValue(); private static final Value NULL = new NullValue();
public static void initConstants() {
}
@Override @Override
public void init() { public void init() {
initConstants();
Variables.define("null", NULL); Variables.define("null", NULL);
Variables.define("boolean.class", new ClassValue(boolean.class)); Variables.define("boolean.class", new ClassValue(boolean.class));
Variables.define("boolean[].class", new ClassValue(boolean[].class)); Variables.define("boolean[].class", new ClassValue(boolean[].class));

View File

@ -1,5 +1,6 @@
package com.annimon.ownlang.lib.modules; package com.annimon.ownlang.lib.modules;
import com.annimon.ownlang.annotations.ConstantInitializer;
import com.annimon.ownlang.exceptions.ArgumentsMismatchException; import com.annimon.ownlang.exceptions.ArgumentsMismatchException;
import com.annimon.ownlang.lib.Arguments; import com.annimon.ownlang.lib.Arguments;
import com.annimon.ownlang.lib.ArrayValue; import com.annimon.ownlang.lib.ArrayValue;
@ -31,10 +32,10 @@ import java.util.function.Function;
* *
* @author aNNiMON * @author aNNiMON
*/ */
@ConstantInitializer
public final class jdbc implements Module { public final class jdbc implements Module {
@Override public static void initConstants() {
public void init() {
Variables.define("TRANSACTION_NONE", NumberValue.of(Connection.TRANSACTION_NONE)); Variables.define("TRANSACTION_NONE", NumberValue.of(Connection.TRANSACTION_NONE));
Variables.define("TRANSACTION_READ_COMMITTED", NumberValue.of(Connection.TRANSACTION_READ_COMMITTED)); Variables.define("TRANSACTION_READ_COMMITTED", NumberValue.of(Connection.TRANSACTION_READ_COMMITTED));
Variables.define("TRANSACTION_READ_UNCOMMITTED", NumberValue.of(Connection.TRANSACTION_READ_UNCOMMITTED)); 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_FORWARD_ONLY", NumberValue.of(ResultSet.TYPE_FORWARD_ONLY));
Variables.define("TYPE_SCROLL_INSENSITIVE", NumberValue.of(ResultSet.TYPE_SCROLL_INSENSITIVE)); Variables.define("TYPE_SCROLL_INSENSITIVE", NumberValue.of(ResultSet.TYPE_SCROLL_INSENSITIVE));
Variables.define("TYPE_SCROLL_SENSITIVE", NumberValue.of(ResultSet.TYPE_SCROLL_SENSITIVE)); Variables.define("TYPE_SCROLL_SENSITIVE", NumberValue.of(ResultSet.TYPE_SCROLL_SENSITIVE));
}
@Override
public void init() {
initConstants();
Functions.set("getConnection", getConnectionFunction()); Functions.set("getConnection", getConnectionFunction());
Functions.set("sqlite", getConnectionFunction("jdbc:sqlite:")); Functions.set("sqlite", getConnectionFunction("jdbc:sqlite:"));
Functions.set("mysql", getConnectionFunction("jdbc:", () -> Class.forName("com.mysql.jdbc.Driver"))); Functions.set("mysql", getConnectionFunction("jdbc:", () -> Class.forName("com.mysql.jdbc.Driver")));

View File

@ -9,8 +9,12 @@ import com.annimon.ownlang.lib.modules.functions.*;
*/ */
public final class json implements Module { public final class json implements Module {
public static void initConstants() {
}
@Override @Override
public void init() { public void init() {
initConstants();
Functions.set("jsonencode", new json_encode()); Functions.set("jsonencode", new json_encode());
Functions.set("jsondecode", new json_decode()); Functions.set("jsondecode", new json_decode());
} }

View File

@ -1,5 +1,6 @@
package com.annimon.ownlang.lib.modules; package com.annimon.ownlang.lib.modules;
import com.annimon.ownlang.annotations.ConstantInitializer;
import com.annimon.ownlang.lib.*; import com.annimon.ownlang.lib.*;
import java.util.function.DoubleBinaryOperator; import java.util.function.DoubleBinaryOperator;
import java.util.function.DoubleFunction; import java.util.function.DoubleFunction;
@ -10,12 +11,19 @@ import java.util.function.UnaryOperator;
* *
* @author aNNiMON * @author aNNiMON
*/ */
@ConstantInitializer
public final class math implements Module { public final class math implements Module {
private static final DoubleFunction<NumberValue> doubleToNumber = NumberValue::of; private static final DoubleFunction<NumberValue> doubleToNumber = NumberValue::of;
public static void initConstants() {
Variables.set("PI", NumberValue.of(Math.PI));
Variables.set("E", NumberValue.of(Math.E));
}
@Override @Override
public void init() { public void init() {
initConstants();
Functions.set("abs", math::abs); Functions.set("abs", math::abs);
Functions.set("acos", functionConvert(Math::acos)); Functions.set("acos", functionConvert(Math::acos));
Functions.set("asin", functionConvert(Math::asin)); Functions.set("asin", functionConvert(Math::asin));
@ -52,9 +60,6 @@ public final class math implements Module {
Functions.set("toDegrees", functionConvert(Math::toDegrees)); Functions.set("toDegrees", functionConvert(Math::toDegrees));
Functions.set("toRadians", functionConvert(Math::toRadians)); Functions.set("toRadians", functionConvert(Math::toRadians));
Functions.set("ulp", functionConvert(Math::ulp, Math::ulp)); 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) { private static Value abs(Value... args) {

View File

@ -11,8 +11,12 @@ import java.util.stream.Collectors;
*/ */
public final class ounit implements Module { public final class ounit implements Module {
public static void initConstants() {
}
@Override @Override
public void init() { public void init() {
initConstants();
Functions.set("assertEquals", new assertEquals()); Functions.set("assertEquals", new assertEquals());
Functions.set("assertNotEquals", new assertNotEquals()); Functions.set("assertNotEquals", new assertNotEquals());
Functions.set("assertSameType", new assertSameType()); Functions.set("assertSameType", new assertSameType());

View File

@ -1,5 +1,6 @@
package com.annimon.ownlang.lib.modules; package com.annimon.ownlang.lib.modules;
import com.annimon.ownlang.annotations.ConstantInitializer;
import com.annimon.ownlang.lib.*; import com.annimon.ownlang.lib.*;
import com.annimon.ownlang.lib.modules.functions.robot_exec; import com.annimon.ownlang.lib.modules.functions.robot_exec;
import com.annimon.ownlang.lib.modules.functions.robot_fromclipboard; import com.annimon.ownlang.lib.modules.functions.robot_fromclipboard;
@ -15,6 +16,7 @@ import java.util.Map;
* *
* @author aNNiMON * @author aNNiMON
*/ */
@ConstantInitializer
public final class robot implements Module { public final class robot implements Module {
private static final int CLICK_DELAY = 200; private static final int CLICK_DELAY = 200;
@ -28,9 +30,22 @@ public final class robot implements Module {
} }
private static Robot awtRobot; 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 @Override
public void init() { public void init() {
initConstants();
initialize(); initialize();
Functions.set("click", convertFunction(robot::click)); Functions.set("click", convertFunction(robot::click));
@ -59,16 +74,6 @@ public final class robot implements Module {
Functions.set("fromClipboard", new robot_fromclipboard()); Functions.set("fromClipboard", new robot_fromclipboard());
Functions.set("execProcess", new robot_exec(robot_exec.Mode.EXEC)); Functions.set("execProcess", new robot_exec(robot_exec.Mode.EXEC));
Functions.set("execProcessAndWait", new robot_exec(robot_exec.Mode.EXEC_AND_WAIT)); 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() { private static void initialize() {

View File

@ -1,6 +1,7 @@
package com.annimon.ownlang.lib.modules; package com.annimon.ownlang.lib.modules;
import com.annimon.ownlang.Main; import com.annimon.ownlang.Main;
import com.annimon.ownlang.annotations.ConstantInitializer;
import com.annimon.ownlang.lib.*; import com.annimon.ownlang.lib.*;
import com.annimon.ownlang.lib.modules.functions.*; import com.annimon.ownlang.lib.modules.functions.*;
@ -8,12 +9,16 @@ import com.annimon.ownlang.lib.modules.functions.*;
* *
* @author aNNiMON * @author aNNiMON
*/ */
@ConstantInitializer
public final class std implements Module { public final class std implements Module {
public static void initConstants() {
Variables.set("ARGS", ArrayValue.of(Main.getOwnlangArgs()));
}
@Override @Override
public void init() { public void init() {
Variables.set("ARGS", ArrayValue.of(Main.getOwnlangArgs())); initConstants();
Functions.set("echo", new std_echo()); Functions.set("echo", new std_echo());
Functions.set("readln", new std_readln()); Functions.set("readln", new std_readln());
Functions.set("length", new std_length()); Functions.set("length", new std_length());

View File

@ -1,22 +1,27 @@
package com.annimon.ownlang.lib.modules; package com.annimon.ownlang.lib.modules;
import com.annimon.ownlang.annotations.ConstantInitializer;
import com.annimon.ownlang.lib.*; import com.annimon.ownlang.lib.*;
/** /**
* *
* @author aNNiMON * @author aNNiMON
*/ */
@ConstantInitializer
public final class types implements Module { public final class types implements Module {
@Override public static void initConstants() {
public void init() {
Variables.set("OBJECT", NumberValue.of(Types.OBJECT)); Variables.set("OBJECT", NumberValue.of(Types.OBJECT));
Variables.set("NUMBER", NumberValue.of(Types.NUMBER)); Variables.set("NUMBER", NumberValue.of(Types.NUMBER));
Variables.set("STRING", NumberValue.of(Types.STRING)); Variables.set("STRING", NumberValue.of(Types.STRING));
Variables.set("ARRAY", NumberValue.of(Types.ARRAY)); Variables.set("ARRAY", NumberValue.of(Types.ARRAY));
Variables.set("MAP", NumberValue.of(Types.MAP)); Variables.set("MAP", NumberValue.of(Types.MAP));
Variables.set("FUNCTION", NumberValue.of(Types.FUNCTION)); Variables.set("FUNCTION", NumberValue.of(Types.FUNCTION));
}
@Override
public void init() {
initConstants();
Functions.set("typeof", args -> NumberValue.of(args[0].type())); Functions.set("typeof", args -> NumberValue.of(args[0].type()));
Functions.set("string", args -> new StringValue(args[0].asString())); Functions.set("string", args -> new StringValue(args[0].asString()));
Functions.set("number", args -> NumberValue.of(args[0].asNumber())); Functions.set("number", args -> NumberValue.of(args[0].asNumber()));