mirror of
https://github.com/Eaglercraft-TeaVM-Fork/eagler-teavm.git
synced 2024-12-22 16:14:10 -08:00
Merge branch 'master' into diagnostics
This commit is contained in:
commit
316850bbb5
|
@ -4,7 +4,7 @@ TeaVM
|
||||||
What is TeaVM?
|
What is TeaVM?
|
||||||
--------------
|
--------------
|
||||||
|
|
||||||
TeaVM is an ahead-of-time translator from Java bytecode to JVM.
|
TeaVM is an ahead-of-time translator from Java bytecode to JavaScript.
|
||||||
It can be compared with GWT, however TeaVM does not require source code of your application and
|
It can be compared with GWT, however TeaVM does not require source code of your application and
|
||||||
all required libraries.
|
all required libraries.
|
||||||
You can use TeaVM for building applications for the browser, due to the following features:
|
You can use TeaVM for building applications for the browser, due to the following features:
|
||||||
|
|
|
@ -693,7 +693,7 @@ class TAbstractStringBuilder extends TObject implements TSerializable, TCharSequ
|
||||||
}
|
}
|
||||||
|
|
||||||
public TAbstractStringBuilder delete(int start, int end) {
|
public TAbstractStringBuilder delete(int start, int end) {
|
||||||
if (start > end || start >= length) {
|
if (start > end || start > length) {
|
||||||
throw new TStringIndexOutOfBoundsException();
|
throw new TStringIndexOutOfBoundsException();
|
||||||
}
|
}
|
||||||
if (start == end) {
|
if (start == end) {
|
||||||
|
|
|
@ -80,7 +80,6 @@ public class TObject {
|
||||||
public final void wait0(long timeout, int nanos) throws TInterruptedException {
|
public final void wait0(long timeout, int nanos) throws TInterruptedException {
|
||||||
}
|
}
|
||||||
|
|
||||||
@SuppressWarnings("unused")
|
|
||||||
@Rename("wait")
|
@Rename("wait")
|
||||||
public final void wait0() throws TInterruptedException {
|
public final void wait0() throws TInterruptedException {
|
||||||
}
|
}
|
||||||
|
|
|
@ -432,7 +432,6 @@ abstract class TAbstractCharClass extends TSpecialToken {
|
||||||
chCl.lowHighSurrogates.set(0, SURROGATE_CARDINALITY);
|
chCl.lowHighSurrogates.set(0, SURROGATE_CARDINALITY);
|
||||||
}
|
}
|
||||||
chCl.mayContainSupplCodepoints = mayContainSupplCodepoints;
|
chCl.mayContainSupplCodepoints = mayContainSupplCodepoints;
|
||||||
;
|
|
||||||
return chCl;
|
return chCl;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -310,6 +310,13 @@ public class StringBuilderTest {
|
||||||
assertEquals('9', sb.charAt(7));
|
assertEquals('9', sb.charAt(7));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void deletesNothing() {
|
||||||
|
StringBuilder sb = new StringBuilder();
|
||||||
|
sb.delete(0, 0);
|
||||||
|
assertEquals(0, sb.length());
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void replacesRangeWithSequenceOfSameLength() {
|
public void replacesRangeWithSequenceOfSameLength() {
|
||||||
StringBuilder sb = new StringBuilder();
|
StringBuilder sb = new StringBuilder();
|
||||||
|
|
|
@ -52,7 +52,6 @@ public class JarFileResourceProvider implements ResourceProvider {
|
||||||
@Override
|
@Override
|
||||||
public InputStream openResource(String name) {
|
public InputStream openResource(String name) {
|
||||||
try {
|
try {
|
||||||
@SuppressWarnings("resource")
|
|
||||||
JarInputStream input = new JarInputStream(new FileInputStream(file));
|
JarInputStream input = new JarInputStream(new FileInputStream(file));
|
||||||
while (true) {
|
while (true) {
|
||||||
ZipEntry entry = input.getNextEntry();
|
ZipEntry entry = input.getNextEntry();
|
||||||
|
|
|
@ -40,7 +40,6 @@ public class DirectorySourceFileProvider implements SourceFileProvider {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@SuppressWarnings("resource")
|
|
||||||
public InputStream openSourceFile(String fullPath) throws IOException {
|
public InputStream openSourceFile(String fullPath) throws IOException {
|
||||||
File file = new File(baseDirectory, fullPath);
|
File file = new File(baseDirectory, fullPath);
|
||||||
return file.exists() ? new FileInputStream(file) : null;
|
return file.exists() ? new FileInputStream(file) : null;
|
||||||
|
|
|
@ -6,10 +6,7 @@ Bundle-Version: 0.3.0.qualifer
|
||||||
Bundle-Vendor: Alexey Andreev <konsoletyper@gmail.com>
|
Bundle-Vendor: Alexey Andreev <konsoletyper@gmail.com>
|
||||||
Bundle-RequiredExecutionEnvironment: JavaSE-1.7
|
Bundle-RequiredExecutionEnvironment: JavaSE-1.7
|
||||||
Bundle-ClassPath: .,
|
Bundle-ClassPath: .,
|
||||||
lib/asm-5.0.1.jar,
|
lib/asm-debug-all-4.0.3.jar,
|
||||||
lib/asm-commons-5.0.1.jar,
|
|
||||||
lib/asm-debug-all-4.2.jar,
|
|
||||||
lib/asm-tree-5.0.1.jar,
|
|
||||||
lib/cdi-api-1.2.jar,
|
lib/cdi-api-1.2.jar,
|
||||||
lib/commons-io-2.4.jar,
|
lib/commons-io-2.4.jar,
|
||||||
lib/jackson-core-asl-1.9.13.jar,
|
lib/jackson-core-asl-1.9.13.jar,
|
||||||
|
|
|
@ -3,10 +3,7 @@ output.. = target/
|
||||||
bin.includes = META-INF/,\
|
bin.includes = META-INF/,\
|
||||||
.,\
|
.,\
|
||||||
lib/,\
|
lib/,\
|
||||||
lib/asm-5.0.1.jar,\
|
lib/asm-debug-all-5.0.3.jar,\
|
||||||
lib/asm-commons-5.0.1.jar,\
|
|
||||||
lib/asm-debug-all-4.2.jar,\
|
|
||||||
lib/asm-tree-5.0.1.jar,\
|
|
||||||
lib/cdi-api-1.2.jar,\
|
lib/cdi-api-1.2.jar,\
|
||||||
lib/commons-io-2.4.jar,\
|
lib/commons-io-2.4.jar,\
|
||||||
lib/jackson-core-asl-1.9.13.jar,\
|
lib/jackson-core-asl-1.9.13.jar,\
|
||||||
|
|
|
@ -58,6 +58,16 @@
|
||||||
<groupId>org.eclipse.jetty.websocket</groupId>
|
<groupId>org.eclipse.jetty.websocket</groupId>
|
||||||
<artifactId>javax-websocket-server-impl</artifactId>
|
<artifactId>javax-websocket-server-impl</artifactId>
|
||||||
<version>${jetty.version}</version>
|
<version>${jetty.version}</version>
|
||||||
|
<exclusions>
|
||||||
|
<exclusion>
|
||||||
|
<groupId>org.ow2.asm</groupId>
|
||||||
|
<artifactId>asm</artifactId>
|
||||||
|
</exclusion>
|
||||||
|
<exclusion>
|
||||||
|
<groupId>org.ow2.asm</groupId>
|
||||||
|
<artifactId>asm-common</artifactId>
|
||||||
|
</exclusion>
|
||||||
|
</exclusions>
|
||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>ch.qos.logback</groupId>
|
<groupId>ch.qos.logback</groupId>
|
||||||
|
|
|
@ -1,8 +1,6 @@
|
||||||
package org.teavm.eclipse.m2e;
|
package org.teavm.eclipse.m2e;
|
||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.net.URI;
|
|
||||||
import java.net.URISyntaxException;
|
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
import org.apache.maven.execution.MavenSession;
|
import org.apache.maven.execution.MavenSession;
|
||||||
import org.apache.maven.plugin.MojoExecution;
|
import org.apache.maven.plugin.MojoExecution;
|
||||||
|
|
|
@ -101,6 +101,9 @@
|
||||||
<debugInformationGenerated>true</debugInformationGenerated>
|
<debugInformationGenerated>true</debugInformationGenerated>
|
||||||
<sourceMapsGenerated>true</sourceMapsGenerated>
|
<sourceMapsGenerated>true</sourceMapsGenerated>
|
||||||
<sourceFilesCopied>true</sourceFilesCopied>
|
<sourceFilesCopied>true</sourceFilesCopied>
|
||||||
|
<additionalScripts>
|
||||||
|
|
||||||
|
</additionalScripts>
|
||||||
</configuration>
|
</configuration>
|
||||||
</execution>
|
</execution>
|
||||||
</executions>
|
</executions>
|
||||||
|
|
|
@ -106,9 +106,10 @@ public class JavaScriptBodyGenerator implements Generator {
|
||||||
if (i > 0) {
|
if (i > 0) {
|
||||||
sb.append(", ");
|
sb.append(", ");
|
||||||
}
|
}
|
||||||
|
ValueType paramType = simplifyParamType(reader.parameterType(i));
|
||||||
sb.append(naming.getFullNameFor(JavaScriptConvGenerator.fromJsMethod)).append("(p").append(i)
|
sb.append(naming.getFullNameFor(JavaScriptConvGenerator.fromJsMethod)).append("(p").append(i)
|
||||||
.append(", ")
|
.append(", ")
|
||||||
.append(Renderer.typeToClsString(naming, reader.parameterType(i))).append(")");
|
.append(Renderer.typeToClsString(naming, paramType)).append(")");
|
||||||
}
|
}
|
||||||
sb.append(")); })(");
|
sb.append(")); })(");
|
||||||
if (ident != null) {
|
if (ident != null) {
|
||||||
|
@ -116,6 +117,16 @@ public class JavaScriptBodyGenerator implements Generator {
|
||||||
}
|
}
|
||||||
return sb.toString();
|
return sb.toString();
|
||||||
}
|
}
|
||||||
|
private ValueType simplifyParamType(ValueType type) {
|
||||||
|
if (type instanceof ValueType.Object) {
|
||||||
|
return ValueType.object("java.lang.Object");
|
||||||
|
} else if (type instanceof ValueType.Array) {
|
||||||
|
ValueType.Array array = (ValueType.Array)type;
|
||||||
|
return ValueType.arrayOf(simplifyParamType(array.getItemType()));
|
||||||
|
} else {
|
||||||
|
return type;
|
||||||
|
}
|
||||||
|
}
|
||||||
private MethodReader findMethod(String clsName, MethodDescriptor desc) {
|
private MethodReader findMethod(String clsName, MethodDescriptor desc) {
|
||||||
while (clsName != null) {
|
while (clsName != null) {
|
||||||
ClassReader cls = classSource.get(clsName);
|
ClassReader cls = classSource.get(clsName);
|
||||||
|
|
|
@ -49,7 +49,6 @@ public class JavaScriptResourceInterceptor extends AbstractRendererListener {
|
||||||
throw new RenderingException("Error processing JavaScriptResource annotation on class " +
|
throw new RenderingException("Error processing JavaScriptResource annotation on class " +
|
||||||
className + ". Resource not found: " + resourceName);
|
className + ". Resource not found: " + resourceName);
|
||||||
}
|
}
|
||||||
@SuppressWarnings("resource")
|
|
||||||
StringWriter writer = new StringWriter();
|
StringWriter writer = new StringWriter();
|
||||||
IOUtils.copy(input, writer);
|
IOUtils.copy(input, writer);
|
||||||
writer.close();
|
writer.close();
|
||||||
|
|
|
@ -0,0 +1,11 @@
|
||||||
|
package org.teavm.html4j.test;
|
||||||
|
|
||||||
|
import java.util.Calendar;
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @author Alexey Andreev
|
||||||
|
*/
|
||||||
|
public interface Callback {
|
||||||
|
void exec(Calendar input);
|
||||||
|
}
|
|
@ -16,6 +16,7 @@
|
||||||
package org.teavm.html4j.test;
|
package org.teavm.html4j.test;
|
||||||
|
|
||||||
import static org.junit.Assert.assertEquals;
|
import static org.junit.Assert.assertEquals;
|
||||||
|
import java.util.Calendar;
|
||||||
import net.java.html.js.JavaScriptBody;
|
import net.java.html.js.JavaScriptBody;
|
||||||
import org.junit.Test;
|
import org.junit.Test;
|
||||||
|
|
||||||
|
@ -60,6 +61,18 @@ public class JavaScriptBodyTest {
|
||||||
assertEquals(23, invokeStaticCallback(new AImpl()));
|
assertEquals(23, invokeStaticCallback(new AImpl()));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void unusedArgumentIgnored() {
|
||||||
|
final int[] array = new int[1];
|
||||||
|
invokeCallback(new Callback() {
|
||||||
|
@Override
|
||||||
|
public void exec(Calendar input) {
|
||||||
|
array[0] = 23;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
assertEquals(23, array[0]);
|
||||||
|
}
|
||||||
|
|
||||||
private static class AImpl implements A {
|
private static class AImpl implements A {
|
||||||
@Override public int foo() {
|
@Override public int foo() {
|
||||||
return 23;
|
return 23;
|
||||||
|
@ -95,4 +108,8 @@ public class JavaScriptBodyTest {
|
||||||
"@org.teavm.html4j.test.JavaScriptBodyTest::staticCallback(" +
|
"@org.teavm.html4j.test.JavaScriptBodyTest::staticCallback(" +
|
||||||
"Lorg/teavm/html4j/test/A;)(a)", javacall = true)
|
"Lorg/teavm/html4j/test/A;)(a)", javacall = true)
|
||||||
private native int invokeStaticCallback(A a);
|
private native int invokeStaticCallback(A a);
|
||||||
|
|
||||||
|
@JavaScriptBody(args = "callback", body = "callback.@org.teavm.html4j.test.Callback::exec(" +
|
||||||
|
"Ljava/util/Calendar;)(null)", javacall = true)
|
||||||
|
private native void invokeCallback(Callback callback);
|
||||||
}
|
}
|
||||||
|
|
|
@ -34,10 +34,51 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xs
|
||||||
<version>${project.version}</version>
|
<version>${project.version}</version>
|
||||||
<optional>true</optional>
|
<optional>true</optional>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>junit</groupId>
|
||||||
|
<artifactId>junit</artifactId>
|
||||||
|
<scope>test</scope>
|
||||||
|
</dependency>
|
||||||
</dependencies>
|
</dependencies>
|
||||||
|
|
||||||
<build>
|
<build>
|
||||||
<plugins>
|
<plugins>
|
||||||
|
<plugin>
|
||||||
|
<groupId>org.teavm</groupId>
|
||||||
|
<artifactId>teavm-maven-plugin</artifactId>
|
||||||
|
<version>${project.version}</version>
|
||||||
|
<dependencies>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.teavm</groupId>
|
||||||
|
<artifactId>teavm-classlib</artifactId>
|
||||||
|
<version>${project.version}</version>
|
||||||
|
</dependency>
|
||||||
|
</dependencies>
|
||||||
|
<executions>
|
||||||
|
<execution>
|
||||||
|
<id>generate-javascript-tests</id>
|
||||||
|
<goals>
|
||||||
|
<goal>build-test-javascript</goal>
|
||||||
|
</goals>
|
||||||
|
<phase>process-test-classes</phase>
|
||||||
|
<configuration>
|
||||||
|
<minifying>false</minifying>
|
||||||
|
<properties>
|
||||||
|
<java.util.Locale.available>en, en_US, en_GB, ru, ru_RU</java.util.Locale.available>
|
||||||
|
</properties>
|
||||||
|
</configuration>
|
||||||
|
</execution>
|
||||||
|
</executions>
|
||||||
|
</plugin>
|
||||||
|
<plugin>
|
||||||
|
<groupId>org.apache.maven.plugins</groupId>
|
||||||
|
<artifactId>maven-surefire-plugin</artifactId>
|
||||||
|
<configuration>
|
||||||
|
<excludes>
|
||||||
|
<exclude>**</exclude>
|
||||||
|
</excludes>
|
||||||
|
</configuration>
|
||||||
|
</plugin>
|
||||||
<plugin>
|
<plugin>
|
||||||
<groupId>org.apache.maven.plugins</groupId>
|
<groupId>org.apache.maven.plugins</groupId>
|
||||||
<artifactId>maven-checkstyle-plugin</artifactId>
|
<artifactId>maven-checkstyle-plugin</artifactId>
|
||||||
|
|
|
@ -74,10 +74,10 @@ public class JSNativeGenerator implements Injector, DependencyPlugin {
|
||||||
writer.append(')');
|
writer.append(')');
|
||||||
break;
|
break;
|
||||||
case "instantiate":
|
case "instantiate":
|
||||||
writer.append("(new ");
|
writer.append("(new (");
|
||||||
context.writeExpr(context.getArgument(0));
|
context.writeExpr(context.getArgument(0));
|
||||||
renderProperty(context.getArgument(1), context);
|
renderProperty(context.getArgument(1), context);
|
||||||
writer.append('(');
|
writer.append(")(");
|
||||||
for (int i = 2; i < context.argumentCount(); ++i) {
|
for (int i = 2; i < context.argumentCount(); ++i) {
|
||||||
if (i > 2) {
|
if (i > 2) {
|
||||||
writer.append(',').ws();
|
writer.append(',').ws();
|
||||||
|
|
21
teavm-jso/src/test/java/org/teavm/jso/test/JSOTest.java
Normal file
21
teavm-jso/src/test/java/org/teavm/jso/test/JSOTest.java
Normal file
|
@ -0,0 +1,21 @@
|
||||||
|
package org.teavm.jso.test;
|
||||||
|
|
||||||
|
import static org.junit.Assert.*;
|
||||||
|
import org.junit.Test;
|
||||||
|
import org.teavm.jso.JS;
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @author Alexey Andreev
|
||||||
|
*/
|
||||||
|
public class JSOTest {
|
||||||
|
@Test
|
||||||
|
public void complexConstructorParenthesized() {
|
||||||
|
RegExp regexp = getWindow().createRegExp(".");
|
||||||
|
assertEquals(".", regexp.getSource());
|
||||||
|
}
|
||||||
|
|
||||||
|
private static Window getWindow() {
|
||||||
|
return (Window)JS.getGlobal();
|
||||||
|
}
|
||||||
|
}
|
13
teavm-jso/src/test/java/org/teavm/jso/test/RegExp.java
Normal file
13
teavm-jso/src/test/java/org/teavm/jso/test/RegExp.java
Normal file
|
@ -0,0 +1,13 @@
|
||||||
|
package org.teavm.jso.test;
|
||||||
|
|
||||||
|
import org.teavm.jso.JSObject;
|
||||||
|
import org.teavm.jso.JSProperty;
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @author Alexey Andreev
|
||||||
|
*/
|
||||||
|
public interface RegExp extends JSObject {
|
||||||
|
@JSProperty
|
||||||
|
String getSource();
|
||||||
|
}
|
13
teavm-jso/src/test/java/org/teavm/jso/test/Window.java
Normal file
13
teavm-jso/src/test/java/org/teavm/jso/test/Window.java
Normal file
|
@ -0,0 +1,13 @@
|
||||||
|
package org.teavm.jso.test;
|
||||||
|
|
||||||
|
import org.teavm.jso.JSConstructor;
|
||||||
|
import org.teavm.jso.JSObject;
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @author Alexey Andreev
|
||||||
|
*/
|
||||||
|
public interface Window extends JSObject {
|
||||||
|
@JSConstructor("RegExp")
|
||||||
|
RegExp createRegExp(String regex);
|
||||||
|
}
|
|
@ -58,7 +58,7 @@
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>com.google.gwt</groupId>
|
<groupId>com.google.gwt</groupId>
|
||||||
<artifactId>gwt-user</artifactId>
|
<artifactId>gwt-user</artifactId>
|
||||||
<version>2.6.1</version>
|
<version>2.7.0</version>
|
||||||
<scope>provided</scope>
|
<scope>provided</scope>
|
||||||
</dependency>
|
</dependency>
|
||||||
</dependencies>
|
</dependencies>
|
||||||
|
@ -100,7 +100,7 @@
|
||||||
<plugin>
|
<plugin>
|
||||||
<groupId>org.codehaus.mojo</groupId>
|
<groupId>org.codehaus.mojo</groupId>
|
||||||
<artifactId>gwt-maven-plugin</artifactId>
|
<artifactId>gwt-maven-plugin</artifactId>
|
||||||
<version>2.6.1</version>
|
<version>2.7.0</version>
|
||||||
<executions>
|
<executions>
|
||||||
<execution>
|
<execution>
|
||||||
<goals>
|
<goals>
|
||||||
|
|
Loading…
Reference in New Issue
Block a user