Starting to refactor JSO

This commit is contained in:
Alexey Andreev 2015-09-07 18:24:30 +03:00
parent b4ba3719d0
commit ac5d53ef08
21 changed files with 217 additions and 749 deletions

View File

@ -19,9 +19,8 @@ import org.teavm.dom.ajax.XMLHttpRequest;
import org.teavm.dom.events.EventTarget;
import org.teavm.dom.html.HTMLDocument;
import org.teavm.dom.json.JSON;
import org.teavm.dom.typedarrays.*;
import org.teavm.dom.typedarrays.TypedArrayFactory;
import org.teavm.jso.JSConstructor;
import org.teavm.jso.JSGlobal;
import org.teavm.jso.JSObject;
import org.teavm.jso.JSProperty;
@ -29,7 +28,7 @@ import org.teavm.jso.JSProperty;
*
* @author Alexey Andreev
*/
public interface Window extends JSGlobal, EventTarget, StorageProvider, TypedArrayFactory {
public interface Window extends JSObject, EventTarget, StorageProvider, TypedArrayFactory {
@JSProperty
HTMLDocument getDocument();

View File

@ -16,9 +16,9 @@
package org.teavm.dom.indexeddb;
import org.teavm.jso.JS;
import org.teavm.jso.JSBody;
import org.teavm.jso.JSObject;
import org.teavm.jso.JSProperty;
import org.teavm.jso.JSStringArray;
import org.teavm.jso.JSType;
/**
@ -37,10 +37,13 @@ public abstract class IDBIndex implements JSObject, IDBCursorSource {
if (JS.getType(result) == JSType.STRING) {
return new String[] { JS.unwrapString(result) };
} else {
return JS.unwrapStringArray((JSStringArray) result);
return unwrapStringArray(result);
}
}
@JSBody(params = {}, script = "return this;")
private native String[] unwrapStringArray(JSObject obj);
@JSProperty
public abstract boolean isMultiEntry();

View File

@ -33,10 +33,13 @@ public abstract class IDBObjectStore implements JSObject, IDBCursorSource {
if (JS.getType(result) == JSType.STRING) {
return new String[] { JS.unwrapString(result) };
} else {
return JS.unwrapStringArray((JSStringArray) result);
return unwrapStringArray(result);
}
}
@JSBody(params = {}, script = "return this;")
private native String[] unwrapStringArray(JSObject obj);
@JSProperty
public abstract String[] getIndexNames();

View File

@ -49,34 +49,14 @@ public final class JS {
throw new AssertionError("Unexpected type");
}
public static <T extends JSObject> JSArray<T> createArray(int size) {
return ((JSGlobal) JS.getGlobal()).newArray(size);
}
public static JSIntArray createIntArray(int size) {
return ((JSGlobal) JS.getGlobal()).newIntArray(size);
}
public static JSStringArray createStringArray(int size) {
return ((JSGlobal) JS.getGlobal()).newStringArray(size);
}
public static JSBooleanArray createBooleanArray(int size) {
return ((JSGlobal) JS.getGlobal()).newBooleanArray(size);
}
public static JSDoubleArray createDoubleArray(int size) {
return ((JSGlobal) JS.getGlobal()).newDoubleArray(size);
}
@InjectedBy(JSNativeGenerator.class)
public static native JSObject getTypeName(JSObject obj);
@JSExpression(params = "obj", expr = "typeof(obj)")
private static native JSObject getTypeName(JSObject obj);
/**
* Gets global JavaScript object, that is similar to the <code>window</code> object in the browser.
* @return global object.
*/
@InjectedBy(JSNativeGenerator.class)
@JSExpression(params = "obj", expr = "window")
public static native JSObject getGlobal();
@InjectedBy(JSNativeGenerator.class)
@ -85,29 +65,11 @@ public final class JS {
@InjectedBy(JSNativeGenerator.class)
public static native JSObject wrap(char c);
@InjectedBy(JSNativeGenerator.class)
public static native JSObject wrap(int num);
@InjectedBy(JSNativeGenerator.class)
public static native JSObject wrap(float num);
@InjectedBy(JSNativeGenerator.class)
public static native JSObject wrap(double num);
@InjectedBy(JSNativeGenerator.class)
public static native JSObject wrap(boolean num);
@InjectedBy(JSNativeGenerator.class)
public static native JSObject wrap(byte num);
@InjectedBy(JSNativeGenerator.class)
public static native JSObject wrap(short num);
@InjectedBy(JSNativeGenerator.class)
public static native JSObject marshall(Object obj);
public static <T extends JSObject> JSArray<T> wrap(T[] array) {
JSArray<T> result = createArray(array.length);
JSArray<T> result = JSArray.create(array.length);
for (int i = 0; i < array.length; ++i) {
result.set(i, array[i]);
}
@ -115,7 +77,7 @@ public final class JS {
}
public static <T extends JSObject> JSArray<JSArray<T>> wrap(T[][] array) {
JSArray<JSArray<T>> result = createArray(array.length);
JSArray<JSArray<T>> result = JSArray.create(array.length);
for (int i = 0; i < array.length; ++i) {
result.set(i, wrap(array[i]));
}
@ -123,71 +85,71 @@ public final class JS {
}
public static <T extends JSObject> JSArray<JSArray<JSArray<T>>> wrap(T[][][] array) {
JSArray<JSArray<JSArray<T>>> result = createArray(array.length);
JSArray<JSArray<JSArray<T>>> result = JSArray.create(array.length);
for (int i = 0; i < array.length; ++i) {
result.set(i, wrap(array[i]));
}
return result;
}
public static JSBooleanArray wrap(boolean[] array) {
JSBooleanArray result = createBooleanArray(array.length);
public static JSArray<JSBoolean> wrap(boolean[] array) {
JSArray<JSBoolean> result = JSArray.create(array.length);
for (int i = 0; i < array.length; ++i) {
result.set(i, array[i]);
result.set(i, JSBoolean.valueOf(array[i]));
}
return result;
}
public static JSArray<JSBooleanArray> wrap(boolean[][] array) {
JSArray<JSBooleanArray> result = createArray(array.length);
public static JSArray<JSArray<JSBoolean>> wrap(boolean[][] array) {
JSArray<JSArray<JSBoolean>> result = JSArray.create(array.length);
for (int i = 0; i < array.length; ++i) {
result.set(i, wrap(array[i]));
}
return result;
}
public static JSArray<JSArray<JSBooleanArray>> wrap(boolean[][][] array) {
JSArray<JSArray<JSBooleanArray>> result = createArray(array.length);
public static JSArray<JSArray<JSArray<JSBoolean>>> wrap(boolean[][][] array) {
JSArray<JSArray<JSArray<JSBoolean>>> result = JSArray.create(array.length);
for (int i = 0; i < array.length; ++i) {
result.set(i, wrap(array[i]));
}
return result;
}
public static JSIntArray wrap(byte[] array) {
JSIntArray result = createIntArray(array.length);
public static JSArray<JSNumber> wrap(byte[] array) {
JSArray<JSNumber> result = JSArray.create(array.length);
for (int i = 0; i < array.length; ++i) {
result.set(i, array[i]);
result.set(i, JSNumber.valueOf(array[i]));
}
return result;
}
public static JSArray<JSIntArray> wrap(byte[][] array) {
JSArray<JSIntArray> result = createArray(array.length);
public static JSArray<JSArray<JSNumber>> wrap(byte[][] array) {
JSArray<JSArray<JSNumber>> result = JSArray.create(array.length);
for (int i = 0; i < array.length; ++i) {
result.set(i, wrap(array[i]));
}
return result;
}
public static JSArray<JSArray<JSIntArray>> wrap(byte[][][] array) {
JSArray<JSArray<JSIntArray>> result = createArray(array.length);
public static JSArray<JSArray<JSArray<JSNumber>>> wrap(byte[][][] array) {
JSArray<JSArray<JSArray<JSNumber>>> result = JSArray.create(array.length);
for (int i = 0; i < array.length; ++i) {
result.set(i, wrap(array[i]));
}
return result;
}
public static JSIntArray wrap(short[] array) {
JSIntArray result = createIntArray(array.length);
public static JSArray<JSNumber> wrap(short[] array) {
JSArray<JSNumber> result = JSArray.create(array.length);
for (int i = 0; i < array.length; ++i) {
result.set(i, array[i]);
result.set(i, JSNumber.valueOf(array[i]));
}
return result;
}
public static JSArray<JSIntArray> wrap(short[][] array) {
JSArray<JSIntArray> result = createArray(array.length);
JSArray<JSIntArray> result = JSArray.create(array.length);
for (int i = 0; i < array.length; ++i) {
result.set(i, wrap(array[i]));
}
@ -195,7 +157,7 @@ public final class JS {
}
public static JSArray<JSArray<JSIntArray>> wrap(short[][][] array) {
JSArray<JSArray<JSIntArray>> result = createArray(array.length);
JSArray<JSArray<JSIntArray>> result = JSArray.create(array.length);
for (int i = 0; i < array.length; ++i) {
result.set(i, wrap(array[i]));
}
@ -211,7 +173,7 @@ public final class JS {
}
public static JSArray<JSIntArray> wrap(char[][] array) {
JSArray<JSIntArray> result = createArray(array.length);
JSArray<JSIntArray> result = JSArray.create(array.length);
for (int i = 0; i < array.length; ++i) {
result.set(i, wrap(array[i]));
}
@ -219,7 +181,7 @@ public final class JS {
}
public static JSArray<JSArray<JSIntArray>> wrap(char[][][] array) {
JSArray<JSArray<JSIntArray>> result = createArray(array.length);
JSArray<JSArray<JSIntArray>> result = JSArray.create(array.length);
for (int i = 0; i < array.length; ++i) {
result.set(i, wrap(array[i]));
}
@ -235,7 +197,7 @@ public final class JS {
}
public static JSArray<JSIntArray> wrap(int[][] array) {
JSArray<JSIntArray> result = createArray(array.length);
JSArray<JSIntArray> result = JSArray.create(array.length);
for (int i = 0; i < array.length; ++i) {
result.set(i, wrap(array[i]));
}
@ -243,7 +205,7 @@ public final class JS {
}
public static JSArray<JSArray<JSIntArray>> wrap(int[][][] array) {
JSArray<JSArray<JSIntArray>> result = createArray(array.length);
JSArray<JSArray<JSIntArray>> result = JSArray.create(array.length);
for (int i = 0; i < array.length; ++i) {
result.set(i, wrap(array[i]));
}
@ -251,7 +213,7 @@ public final class JS {
}
public static JSStringArray wrap(String[] array) {
JSStringArray result = createStringArray(array.length);
JSStringArray result = JSStringArray.create(array.length);
for (int i = 0; i < array.length; ++i) {
result.set(i, array[i]);
}
@ -259,7 +221,7 @@ public final class JS {
}
public static JSArray<JSStringArray> wrap(String[][] array) {
JSArray<JSStringArray> result = createArray(array.length);
JSArray<JSStringArray> result = JSArray.create(array.length);
for (int i = 0; i < array.length; ++i) {
result.set(i, wrap(array[i]));
}
@ -267,7 +229,7 @@ public final class JS {
}
public static JSArray<JSArray<JSStringArray>> wrap(String[][][] array) {
JSArray<JSArray<JSStringArray>> result = createArray(array.length);
JSArray<JSArray<JSStringArray>> result = JSArray.create(array.length);
for (int i = 0; i < array.length; ++i) {
result.set(i, wrap(array[i]));
}
@ -283,7 +245,7 @@ public final class JS {
}
public static JSArray<JSDoubleArray> wrap(float[][] array) {
JSArray<JSDoubleArray> result = createArray(array.length);
JSArray<JSDoubleArray> result = JSArray.create(array.length);
for (int i = 0; i < array.length; ++i) {
result.set(i, wrap(array[i]));
}
@ -291,7 +253,7 @@ public final class JS {
}
public static JSArray<JSArray<JSDoubleArray>> wrap(float[][][] array) {
JSArray<JSArray<JSDoubleArray>> result = createArray(array.length);
JSArray<JSArray<JSDoubleArray>> result = JSArray.create(array.length);
for (int i = 0; i < array.length; ++i) {
result.set(i, wrap(array[i]));
}
@ -307,7 +269,7 @@ public final class JS {
}
public static JSArray<JSDoubleArray> wrap(double[][] array) {
JSArray<JSDoubleArray> result = createArray(array.length);
JSArray<JSDoubleArray> result = JSArray.create(array.length);
for (int i = 0; i < array.length; ++i) {
result.set(i, wrap(array[i]));
}
@ -315,33 +277,13 @@ public final class JS {
}
public static JSArray<JSArray<JSDoubleArray>> wrap(double[][][] array) {
JSArray<JSArray<JSDoubleArray>> result = createArray(array.length);
JSArray<JSArray<JSDoubleArray>> result = JSArray.create(array.length);
for (int i = 0; i < array.length; ++i) {
result.set(i, wrap(array[i]));
}
return result;
}
@InjectedBy(JSNativeGenerator.class)
public static native boolean unwrapBoolean(JSObject obj);
public static byte unwrapByte(JSObject obj) {
return (byte) unwrapInt(obj);
}
public static short unwrapShort(JSObject obj) {
return (short) unwrapInt(obj);
}
@InjectedBy(JSNativeGenerator.class)
public static native int unwrapInt(JSObject obj);
@InjectedBy(JSNativeGenerator.class)
public static native float unwrapFloat(JSObject obj);
@InjectedBy(JSNativeGenerator.class)
public static native double unwrapDouble(JSObject obj);
@InjectedBy(JSNativeGenerator.class)
@PluggableDependency(JSNativeGenerator.class)
public static native String unwrapString(JSObject obj);
@ -377,101 +319,101 @@ public final class JS {
return result;
}
public static String[] unwrapStringArray(JSStringArray array) {
String[] result = new String[array.getLength()];
for (int i = 0; i < result.length; ++i) {
result[i] = array.get(i);
}
return result;
}
public static String[][] unwrapStringArray2(JSArray<JSStringArray> array) {
String[][] result = new String[array.getLength()][];
for (int i = 0; i < result.length; ++i) {
result[i] = unwrapStringArray(array.get(i));
}
return result;
}
public static String[][][] unwrapStringArray3(JSArray<JSArray<JSStringArray>> array) {
String[][][] result = new String[array.getLength()][][];
for (int i = 0; i < result.length; ++i) {
result[i] = unwrapStringArray2(array.get(i));
}
return result;
}
@InjectedBy(JSNativeGenerator.class)
@JSExpression(params = "obj", expr = "typeof(obj) === 'undefined'")
public static native boolean isUndefined(JSObject obj);
@JSExpression(params = { "instance", "method" }, expr = "instance[method]()")
@InjectedBy(JSNativeGenerator.class)
@PluggableDependency(JSNativeGenerator.class)
public static native JSObject invoke(JSObject instance, JSObject method);
@JSExpression(params = { "instance", "method", "a" }, expr = "instance[method](a)")
@InjectedBy(JSNativeGenerator.class)
@PluggableDependency(JSNativeGenerator.class)
public static native JSObject invoke(JSObject instance, JSObject method, JSObject a);
@JSExpression(params = { "instance", "method", "a", "b" }, expr = "instance[method](a, b)")
@InjectedBy(JSNativeGenerator.class)
@PluggableDependency(JSNativeGenerator.class)
public static native JSObject invoke(JSObject instance, JSObject method, JSObject a, JSObject b);
@JSExpression(params = { "instance", "method", "a", "b", "c" }, expr = "instance[method](a, b, c)")
@InjectedBy(JSNativeGenerator.class)
@PluggableDependency(JSNativeGenerator.class)
public static native JSObject invoke(JSObject instance, JSObject method, JSObject a, JSObject b, JSObject c);
@JSExpression(params = { "instance", "method", "a", "b", "c", "d" }, expr = "instance[method](a, b, c, d)")
@InjectedBy(JSNativeGenerator.class)
@PluggableDependency(JSNativeGenerator.class)
public static native JSObject invoke(JSObject instance, JSObject method, JSObject a, JSObject b, JSObject c,
JSObject d);
@JSExpression(params = { "instance", "method", "a", "b", "c", "d", "e" }, expr = "instance[method](a, b, c, d, e)")
@InjectedBy(JSNativeGenerator.class)
@PluggableDependency(JSNativeGenerator.class)
public static native JSObject invoke(JSObject instance, JSObject method, JSObject a, JSObject b, JSObject c,
JSObject d, JSObject e);
@JSExpression(params = { "instance", "method", "a", "b", "c", "d", "e", "f" },
expr = "instance[method](a, b, c, d, e, f)")
@InjectedBy(JSNativeGenerator.class)
@PluggableDependency(JSNativeGenerator.class)
public static native JSObject invoke(JSObject instance, JSObject method, JSObject a, JSObject b, JSObject c,
JSObject d, JSObject e, JSObject f);
@JSExpression(params = { "instance", "method", "a", "b", "c", "d", "e", "f", "g" },
expr = "instance[method](a, b, c, d, e, f, g)")
@InjectedBy(JSNativeGenerator.class)
@PluggableDependency(JSNativeGenerator.class)
public static native JSObject invoke(JSObject instance, JSObject method, JSObject a, JSObject b, JSObject c,
JSObject d, JSObject e, JSObject f, JSObject g);
@JSExpression(params = { "instance", "method", "a", "b", "c", "d", "e", "f", "g", "h" },
expr = "instance[method](a, b, c, d, e, f, g, h)")
@InjectedBy(JSNativeGenerator.class)
@PluggableDependency(JSNativeGenerator.class)
public static native JSObject invoke(JSObject instance, JSObject method, JSObject a, JSObject b, JSObject c,
JSObject d, JSObject e, JSObject f, JSObject g, JSObject h);
@JSExpression(params = { "instance", "method", "a", "b", "c", "d", "e", "f", "g", "h", "i" },
expr = "instance[method](a, b, c, d, e, f, g, h, i)")
@InjectedBy(JSNativeGenerator.class)
@PluggableDependency(JSNativeGenerator.class)
public static native JSObject invoke(JSObject instance, JSObject method, JSObject a, JSObject b, JSObject c,
JSObject d, JSObject e, JSObject f, JSObject g, JSObject h, JSObject i);
@JSExpression(params = { "instance", "method", "a", "b", "c", "d", "e", "f", "g", "h", "i", "j" },
expr = "instance[method](a, b, c, d, e, f, g, h, i, j)")
@InjectedBy(JSNativeGenerator.class)
@PluggableDependency(JSNativeGenerator.class)
public static native JSObject invoke(JSObject instance, JSObject method, JSObject a, JSObject b, JSObject c,
JSObject d, JSObject e, JSObject f, JSObject g, JSObject h, JSObject i, JSObject j);
@JSExpression(params = { "instance", "method", "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k" },
expr = "instance[method](a, b, c, d, e, f, g, h, i, j, k)")
@InjectedBy(JSNativeGenerator.class)
@PluggableDependency(JSNativeGenerator.class)
public static native JSObject invoke(JSObject instance, JSObject method, JSObject a, JSObject b, JSObject c,
JSObject d, JSObject e, JSObject f, JSObject g, JSObject h, JSObject i, JSObject j, JSObject k);
@JSExpression(params = { "instance", "method", "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l" },
expr = "instance[method](a, b, c, d, e, f, g, h, i, j, k, l)")
@InjectedBy(JSNativeGenerator.class)
@PluggableDependency(JSNativeGenerator.class)
public static native JSObject invoke(JSObject instance, JSObject method, JSObject a, JSObject b, JSObject c,
JSObject d, JSObject e, JSObject f, JSObject g, JSObject h, JSObject i, JSObject j, JSObject k,
JSObject l);
@JSExpression(params = { "instance", "method", "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m" },
expr = "instance[method](a, b, c, d, e, f, g, h, i, j, k, l, m)")
@InjectedBy(JSNativeGenerator.class)
@PluggableDependency(JSNativeGenerator.class)
public static native JSObject invoke(JSObject instance, JSObject method, JSObject a, JSObject b, JSObject c,
JSObject d, JSObject e, JSObject f, JSObject g, JSObject h, JSObject i, JSObject j, JSObject k,
JSObject l, JSObject m);
@JSExpression(params = { "instance", "method" },
expr = "new instance[method]()")
@InjectedBy(JSNativeGenerator.class)
@PluggableDependency(JSNativeGenerator.class)
public static native JSObject instantiate(JSObject instance, JSObject constructor);
@ -529,25 +471,11 @@ public final class JS {
};
}
public static Iterable<String> iterate(final JSStringArrayReader array) {
return () -> new Iterator<String>() {
int index;
@Override public boolean hasNext() {
return index < array.getLength();
}
@Override public String next() {
return array.get(index++);
}
@Override public void remove() {
throw new UnsupportedOperationException();
}
};
}
@InjectedBy(JSNativeGenerator.class)
@JSExpression(params = { "instance", "index" }, expr = "instance[index]")
public static native JSObject get(JSObject instance, JSObject index);
@InjectedBy(JSNativeGenerator.class)
@JSExpression(params = { "instance", "index", "obj" }, expr = "instance[index] = obj")
public static native void set(JSObject instance, JSObject index, JSObject obj);
@GeneratedBy(JSNativeGenerator.class)

View File

@ -20,59 +20,68 @@ package org.teavm.jso;
* @author Alexey Andreev
* @param <T>
*/
public interface JSArray<T extends JSObject> extends JSArrayReader<T> {
public abstract class JSArray<T extends JSObject> implements JSArrayReader<T> {
private JSArray() {
}
@JSIndexer
void set(int index, T value);
public abstract void set(int index, T value);
int push(T a);
public abstract int push(T a);
int push(T a, T b);
public abstract int push(T a, T b);
int push(T a, T b, T c);
public abstract int push(T a, T b, T c);
int push(T a, T b, T c, T d);
public abstract int push(T a, T b, T c, T d);
T shift();
public abstract T shift();
String join(String separator);
public abstract String join(String separator);
String join();
public abstract String join();
JSArray<T> concat(JSArrayReader<T> a);
public abstract JSArray<T> concat(JSArrayReader<T> a);
JSArray<T> concat(JSArrayReader<T> a, JSArrayReader<T> b);
public abstract JSArray<T> concat(JSArrayReader<T> a, JSArrayReader<T> b);
JSArray<T> concat(JSArrayReader<T> a, JSArrayReader<T> b, JSArrayReader<T> c);
public abstract JSArray<T> concat(JSArrayReader<T> a, JSArrayReader<T> b, JSArrayReader<T> c);
JSArray<T> concat(JSArrayReader<T> a, JSArrayReader<T> b, JSArrayReader<T> c, JSArrayReader<T> d);
public abstract JSArray<T> concat(JSArrayReader<T> a, JSArrayReader<T> b, JSArrayReader<T> c, JSArrayReader<T> d);
T pop();
public abstract T pop();
int unshift(T a);
public abstract int unshift(T a);
int unshift(T a, T b);
public abstract int unshift(T a, T b);
int unshift(T a, T b, T c);
public abstract int unshift(T a, T b, T c);
int unshift(T a, T b, T c, T d);
public abstract int unshift(T a, T b, T c, T d);
JSArray<T> slice(int start);
public abstract JSArray<T> slice(int start);
JSArray<T> slice(int start, int end);
public abstract JSArray<T> slice(int start, int end);
JSArray<T> reverse();
public abstract JSArray<T> reverse();
JSArray<T> sort(JSSortFunction<T> function);
public abstract JSArray<T> sort(JSSortFunction<T> function);
JSArray<T> sort();
public abstract JSArray<T> sort();
JSArray<T> splice(int start, int count);
public abstract JSArray<T> splice(int start, int count);
JSArray<T> splice(int start, int count, T a);
public abstract JSArray<T> splice(int start, int count, T a);
JSArray<T> splice(int start, int count, T a, T b);
public abstract JSArray<T> splice(int start, int count, T a, T b);
JSArray<T> splice(int start, int count, T a, T b, T c);
public abstract JSArray<T> splice(int start, int count, T a, T b, T c);
JSArray<T> splice(int start, int count, T a, T b, T c, T d);
public abstract JSArray<T> splice(int start, int count, T a, T b, T c, T d);
@JSExpression(params = {}, expr = "new Array()")
public static native <T extends JSObject> JSArray<T> create();
@JSExpression(params = "size", expr = "new Array(size)")
public static native <T extends JSObject> JSArray<T> create(int size);
}

View File

@ -19,10 +19,17 @@ package org.teavm.jso;
*
* @author Alexey Andreev
*/
public interface JSIntArrayReader extends JSObject {
@JSProperty
int getLength();
public abstract class JSBoolean implements JSObject {
private JSBoolean() {
}
@JSIndexer
int get(int index);
public final boolean booleanValue() {
return booleanValue(this);
}
@JSExpression(params = "value", expr = "value")
private static native boolean booleanValue(JSBoolean value);
@JSExpression(params = "value", expr = "value")
public static native JSBoolean valueOf(boolean value);
}

View File

@ -1,73 +0,0 @@
/*
* Copyright 2015 Alexey Andreev.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.teavm.jso;
/**
*
* @author Alexey Andreev
*/
public interface JSBooleanArray extends JSBooleanArrayReader {
@JSIndexer
void set(int index, boolean value);
int push(boolean a);
int push(boolean a, boolean b);
int push(boolean a, boolean b, boolean c);
int push(boolean a, boolean b, boolean c, boolean d);
boolean shift();
String join(String separator);
String join();
JSBooleanArray concat(JSBooleanArrayReader a);
JSBooleanArray concat(JSBooleanArray a, JSBooleanArray b);
JSBooleanArray concat(JSBooleanArray a, JSBooleanArray b, JSBooleanArray c);
JSBooleanArray concat(JSBooleanArray a, JSBooleanArray b, JSBooleanArray c, JSBooleanArray d);
boolean pop();
int unshift(boolean a);
int unshift(boolean a, boolean b);
int unshift(boolean a, boolean b, boolean c);
int unshift(boolean a, boolean b, boolean c, boolean d);
JSBooleanArray slice(int start);
JSBooleanArray slice(int start, int end);
JSBooleanArray reverse();
JSBooleanArray splice(int start, int count);
JSBooleanArray splice(int start, int count, boolean a);
JSBooleanArray splice(int start, int count, boolean a, boolean b);
JSBooleanArray splice(int start, int count, boolean a, boolean b, boolean c);
JSBooleanArray splice(int start, int count, boolean a, boolean b, boolean c, boolean d);
}

View File

@ -1,28 +0,0 @@
/*
* Copyright 2015 Alexey Andreev.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.teavm.jso;
/**
*
* @author Alexey Andreev
*/
public interface JSBooleanArrayReader extends JSObject {
@JSProperty
int getLength();
@JSIndexer
boolean get(int index);
}

View File

@ -1,28 +0,0 @@
/*
* Copyright 2015 Alexey Andreev.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.teavm.jso;
/**
*
* @author Alexey Andreev
*/
public interface JSByteArrayReader extends JSObject {
@JSProperty
int getLength();
@JSIndexer
byte get(int index);
}

View File

@ -1,77 +0,0 @@
/*
* Copyright 2015 Alexey Andreev.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.teavm.jso;
/**
*
* @author Alexey Andreev
*/
public interface JSDoubleArray extends JSDoubleArrayReader {
@JSIndexer
void set(int index, double value);
int push(double a);
int push(double a, double b);
int push(double a, double b, double c);
int push(double a, double b, double c, double d);
double shift();
String join(String separator);
String join();
JSDoubleArray concat(JSDoubleArrayReader a);
JSDoubleArray concat(JSDoubleArray a, JSDoubleArray b);
JSDoubleArray concat(JSDoubleArray a, JSDoubleArray b, JSDoubleArray c);
JSDoubleArray concat(JSDoubleArray a, JSDoubleArray b, JSDoubleArray c, JSDoubleArray d);
double pop();
int unshift(double a);
int unshift(double a, double b);
int unshift(double a, double b, double c);
int unshift(double a, double b, double c, double d);
JSDoubleArray slice(int start);
JSDoubleArray slice(int start, int end);
JSDoubleArray reverse();
JSDoubleArray sort(JSDoubleSortFunction function);
JSDoubleArray sort();
JSDoubleArray splice(int start, int count);
JSDoubleArray splice(int start, int count, double a);
JSDoubleArray splice(int start, int count, double a, double b);
JSDoubleArray splice(int start, int count, double a, double b, double c);
JSDoubleArray splice(int start, int count, double a, double b, double c, double d);
}

View File

@ -1,28 +0,0 @@
/*
* Copyright 2015 Alexey Andreev.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.teavm.jso;
/**
*
* @author Alexey Andreev
*/
public interface JSDoubleArrayReader extends JSObject {
@JSProperty
int getLength();
@JSIndexer
double get(int index);
}

View File

@ -1,25 +0,0 @@
/*
* Copyright 2015 Alexey Andreev.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.teavm.jso;
/**
*
* @author Alexey Andreev
*/
@JSFunctor
public interface JSDoubleSortFunction {
int compare(double a, double b);
}

View File

@ -0,0 +1,41 @@
/*
* Copyright 2015 Alexey Andreev.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.teavm.jso;
/**
* <p>Indicates that method is to have native JavaScript implementation, which can be written as a
* single JavaScript expression.
* Method only can take and return primitive values and {@link JSObject}s.
* JSExpression script can't call Java methods, but you can pass callbacks wrapped into {@link JSFunctor}.
* Note that unless method is static, it must belong to class that implements {@link JSObject}.
* If applied to non-native method, original Java body will be overwritten by JavaScript.</p>
*
* <p>Use this annotation instead of JSBody when possible, since this can increase performance and
* reduce generated JavaScript size.</p>
*
* @author Alexey Andreev
*/
public @interface JSExpression {
/**
* <p>How method parameters are named inside JavaScript implementation.</p>
*/
String[] params();
/**
* <p>JavaScript expression.</p>
*/
String expr();
}

View File

@ -1,55 +0,0 @@
/*
* Copyright 2014 Alexey Andreev.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.teavm.jso;
/**
*
* @author Alexey Andreev
*/
public interface JSGlobal extends JSObject {
@JSConstructor
JSObject newObject();
@JSConstructor
<T extends JSObject> JSArray<T> newArray();
@JSConstructor
<T extends JSObject> JSArray<T> newArray(int sz);
@JSConstructor("Array")
JSStringArray newStringArray();
@JSConstructor("Array")
JSStringArray newStringArray(int sz);
@JSConstructor("Array")
JSBooleanArray newBooleanArray();
@JSConstructor("Array")
JSBooleanArray newBooleanArray(int sz);
@JSConstructor("Array")
JSIntArray newIntArray();
@JSConstructor("Array")
JSIntArray newIntArray(int sz);
@JSConstructor("Array")
JSDoubleArray newDoubleArray();
@JSConstructor("Array")
JSDoubleArray newDoubleArray(int sz);
}

View File

@ -1,77 +0,0 @@
/*
* Copyright 2015 Alexey Andreev.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.teavm.jso;
/**
*
* @author Alexey Andreev
*/
public interface JSIntArray extends JSIntArrayReader {
@JSIndexer
void set(int index, int value);
int push(int a);
int push(int a, int b);
int push(int a, int b, int c);
int push(int a, int b, int c, int d);
int shift();
int join(int separator);
int join();
JSIntArray concat(JSIntArrayReader a);
JSIntArray concat(JSIntArrayReader a, JSIntArrayReader b);
JSIntArray concat(JSIntArrayReader a, JSIntArrayReader b, JSIntArrayReader c);
JSIntArray concat(JSIntArrayReader a, JSIntArrayReader b, JSIntArrayReader c, JSIntArrayReader d);
int pop();
int unshift(int a);
int unshift(int a, int b);
int unshift(int a, int b, int c);
int unshift(int a, int b, int c, int d);
JSIntArray slice(int start);
JSIntArray slice(int start, int end);
JSIntArray reverse();
JSIntArray sort(JSIntSortFunction function);
JSIntArray sort();
JSIntArray splice(int start, int count);
JSIntArray splice(int start, int count, int a);
JSIntArray splice(int start, int count, int a, int b);
JSIntArray splice(int start, int count, int a, int b, int c);
JSIntArray splice(int start, int count, int a, int b, int c, int d);
}

View File

@ -1,25 +0,0 @@
/*
* Copyright 2015 Alexey Andreev.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.teavm.jso;
/**
*
* @author Alexey Andreev
*/
@JSFunctor
public interface JSIntSortFunction extends JSObject {
int compare(int a, int b);
}

View File

@ -19,5 +19,57 @@ package org.teavm.jso;
*
* @author Alexey Andreev
*/
public interface JSNumber extends JSObject {
public abstract class JSNumber implements JSObject {
private JSNumber() {
}
public final double doubleValue() {
return doubleValue(this);
}
@JSExpression(params = "number", expr = "number")
private static native double doubleValue(JSNumber number);
public final int intValue() {
return intValue(this);
}
@JSExpression(params = "number", expr = "number")
private static native int intValue(JSNumber number);
public final byte byteValue() {
return byteValue(this);
}
@JSExpression(params = "number", expr = "number")
private static native byte byteValue(JSNumber number);
public final short shortValue() {
return shortValue(this);
}
@JSExpression(params = "number", expr = "number")
private static native short shortValue(JSNumber number);
public final float floatValue() {
return floatValue(this);
}
@JSExpression(params = "number", expr = "number")
private static native float floatValue(JSNumber number);
@JSExpression(params = "value", expr = "value")
public static native JSNumber valueOf(byte value);
@JSExpression(params = "value", expr = "value")
public static native JSNumber valueOf(short value);
@JSExpression(params = "value", expr = "value")
public static native JSNumber valueOf(int value);
@JSExpression(params = "value", expr = "value")
public static native JSNumber valueOf(float value);
@JSExpression(params = "value", expr = "value")
public static native JSNumber valueOf(double value);
}

View File

@ -1,28 +0,0 @@
/*
* Copyright 2015 Alexey Andreev.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.teavm.jso;
/**
*
* @author Alexey Andreev
*/
public interface JSShortArrayReader extends JSObject {
@JSProperty
int getLength();
@JSIndexer
short get(int index);
}

View File

@ -1,77 +0,0 @@
/*
* Copyright 2015 Alexey Andreev.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.teavm.jso;
/**
*
* @author Alexey Andreev
*/
public interface JSStringArray extends JSStringArrayReader {
@JSIndexer
void set(int index, String value);
int push(String a);
int push(String a, String b);
int push(String a, String b, String c);
int push(String a, String b, String c, String d);
String shift();
String join(String separator);
String join();
JSStringArray concat(JSStringArrayReader a);
JSStringArray concat(JSStringArrayReader a, JSStringArrayReader b);
JSStringArray concat(JSStringArrayReader a, JSStringArrayReader b, JSStringArrayReader c);
JSStringArray concat(JSStringArrayReader a, JSStringArrayReader b, JSStringArrayReader c, JSStringArrayReader d);
String pop();
int unshift(String a);
int unshift(String a, String b);
int unshift(String a, String b, String c);
int unshift(String a, String b, String c, String d);
JSStringArray slice(int start);
JSStringArray slice(int start, int end);
JSStringArray reverse();
JSStringArray sort(JSStringSortFunction function);
JSStringArray sort();
JSStringArray splice(int start, int count);
JSStringArray splice(int start, int count, String a);
JSStringArray splice(int start, int count, String a, String b);
JSStringArray splice(int start, int count, String a, String b, String c);
JSStringArray splice(int start, int count, String a, String b, String c, String d);
}

View File

@ -1,28 +0,0 @@
/*
* Copyright 2015 Alexey Andreev.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.teavm.jso;
/**
*
* @author Alexey Andreev
*/
public interface JSStringArrayReader extends JSObject {
@JSProperty
int getLength();
@JSIndexer
String get(int index);
}

View File

@ -1,25 +0,0 @@
/*
* Copyright 2015 Alexey Andreev.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.teavm.jso;
/**
*
* @author Alexey Andreev
*/
@JSFunctor
public interface JSStringSortFunction extends JSObject {
int compare(String a, String b);
}