mirror of
https://github.com/Eaglercraft-TeaVM-Fork/eagler-teavm.git
synced 2024-12-22 08:14:09 -08:00
Replace old code samples with new ones
This commit is contained in:
parent
4f668d4d43
commit
9e09c247e6
|
@ -44,7 +44,6 @@
|
|||
</module>
|
||||
<module name="UpperEll"/>
|
||||
<module name="ArrayTypeStyle"/>
|
||||
<module name="TrailingComment"/>
|
||||
<module name="RedundantModifier"/>
|
||||
<module name="ClassTypeParameterName"/>
|
||||
<module name="LocalFinalVariableName"/>
|
||||
|
|
12
pom.xml
12
pom.xml
|
@ -222,8 +222,6 @@
|
|||
<id>validate</id>
|
||||
<phase>validate</phase>
|
||||
<configuration>
|
||||
<propertyExpansion>config_loc=${basedir}/..</propertyExpansion>
|
||||
<configLocation>../checkstyle.xml</configLocation>
|
||||
<encoding>UTF-8</encoding>
|
||||
<consoleOutput>true</consoleOutput>
|
||||
<failsOnError>true</failsOnError>
|
||||
|
@ -234,6 +232,10 @@
|
|||
</goals>
|
||||
</execution>
|
||||
</executions>
|
||||
<configuration>
|
||||
<propertyExpansion>config_loc=${basedir}/..</propertyExpansion>
|
||||
<configLocation>../checkstyle.xml</configLocation>
|
||||
</configuration>
|
||||
</plugin>
|
||||
<plugin>
|
||||
<groupId>org.apache.felix</groupId>
|
||||
|
@ -266,12 +268,6 @@
|
|||
</plugins>
|
||||
</build>
|
||||
</profile>
|
||||
<profile>
|
||||
<id>enable-scala</id>
|
||||
<modules>
|
||||
<module>teavm-scala-samples</module>
|
||||
</modules>
|
||||
</profile>
|
||||
<profile>
|
||||
<id>enable-samples</id>
|
||||
<modules>
|
||||
|
|
|
@ -26,6 +26,9 @@
|
|||
|
||||
<packaging>bundle</packaging>
|
||||
|
||||
<name>TeaVM Java class library</name>
|
||||
<description>TeaVM Java class library emulation</description>
|
||||
|
||||
<dependencies>
|
||||
<dependency>
|
||||
<groupId>junit</groupId>
|
||||
|
@ -49,9 +52,6 @@
|
|||
</dependency>
|
||||
</dependencies>
|
||||
|
||||
<name>TeaVM JCL</name>
|
||||
<description>TeaVM Java class library emulation</description>
|
||||
|
||||
<build>
|
||||
<plugins>
|
||||
<plugin>
|
||||
|
|
|
@ -17,9 +17,9 @@
|
|||
* Represents a class model that is alternative to {@link java.lang.reflection} package.
|
||||
* Model is suitable for representing classes that are not in class path. Also
|
||||
* it allows to disassemble method bodies into three-address code that is very
|
||||
* close to JVM bytecode (see {@link org.teavm.instructions}.
|
||||
* close to JVM bytecode (see {@link org.teavm.model.instructions}.
|
||||
*
|
||||
* <p>The entry point is some implementation of {@link ClassHolderSource} interface.
|
||||
* <p>The entry point is some implementation of {@link org.teavm.model.ClassHolderSource} interface.
|
||||
*
|
||||
*/
|
||||
package org.teavm.model;
|
|
@ -16,6 +16,7 @@
|
|||
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
|
||||
<parent>
|
||||
<groupId>org.teavm</groupId>
|
||||
<artifactId>teavm</artifactId>
|
||||
|
@ -23,108 +24,13 @@
|
|||
</parent>
|
||||
<artifactId>teavm-samples</artifactId>
|
||||
|
||||
<dependencies>
|
||||
<dependency>
|
||||
<groupId>org.teavm</groupId>
|
||||
<artifactId>teavm-core</artifactId>
|
||||
<version>${project.version}</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.teavm</groupId>
|
||||
<artifactId>teavm-dom</artifactId>
|
||||
<version>${project.version}</version>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
<packaging>pom</packaging>
|
||||
|
||||
<build>
|
||||
<plugins>
|
||||
<plugin>
|
||||
<groupId>org.apache.maven.plugins</groupId>
|
||||
<artifactId>maven-checkstyle-plugin</artifactId>
|
||||
<configuration>
|
||||
<configLocation>../checkstyle.xml</configLocation>
|
||||
</configuration>
|
||||
</plugin>
|
||||
<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-hello</id>
|
||||
<goals>
|
||||
<goal>build-javascript</goal>
|
||||
</goals>
|
||||
<phase>process-classes</phase>
|
||||
<configuration>
|
||||
<minifying>false</minifying>
|
||||
<mainClass>org.teavm.samples.HelloWorld</mainClass>
|
||||
<mainPageIncluded>true</mainPageIncluded>
|
||||
<debugInformationGenerated>true</debugInformationGenerated>
|
||||
<sourceMapsGenerated>true</sourceMapsGenerated>
|
||||
<sourceFilesCopied>true</sourceFilesCopied>
|
||||
<targetDirectory>${project.build.directory}/javascript/hello</targetDirectory>
|
||||
</configuration>
|
||||
</execution>
|
||||
<execution>
|
||||
<id>generate-matrix</id>
|
||||
<goals>
|
||||
<goal>build-javascript</goal>
|
||||
</goals>
|
||||
<phase>process-classes</phase>
|
||||
<configuration>
|
||||
<minifying>false</minifying>
|
||||
<mainClass>org.teavm.samples.MatrixMultiplication</mainClass>
|
||||
<mainPageIncluded>true</mainPageIncluded>
|
||||
<debugInformationGenerated>true</debugInformationGenerated>
|
||||
<sourceMapsGenerated>true</sourceMapsGenerated>
|
||||
<targetDirectory>${project.build.directory}/javascript/matrix</targetDirectory>
|
||||
</configuration>
|
||||
</execution>
|
||||
<execution>
|
||||
<id>generate-datetime</id>
|
||||
<goals>
|
||||
<goal>build-javascript</goal>
|
||||
</goals>
|
||||
<phase>process-classes</phase>
|
||||
<configuration>
|
||||
<minifying>false</minifying>
|
||||
<mainClass>org.teavm.samples.DateTime</mainClass>
|
||||
<targetDirectory>${project.build.directory}/javascript/datetime</targetDirectory>
|
||||
<debugInformationGenerated>true</debugInformationGenerated>
|
||||
<sourceMapsGenerated>true</sourceMapsGenerated>
|
||||
<properties>
|
||||
<java.util.Locale.available>en_US,en_GB,ru_RU,ru_UA,nl_NL,nl_BE</java.util.Locale.available>
|
||||
</properties>
|
||||
</configuration>
|
||||
</execution>
|
||||
</executions>
|
||||
</plugin>
|
||||
<plugin>
|
||||
<artifactId>maven-assembly-plugin</artifactId>
|
||||
<version>2.4</version>
|
||||
<configuration>
|
||||
<descriptors>
|
||||
<descriptor>src/main/assembly/teavm-demos.xml</descriptor>
|
||||
</descriptors>
|
||||
</configuration>
|
||||
<executions>
|
||||
<execution>
|
||||
<id>make-assembly</id>
|
||||
<phase>package</phase>
|
||||
<goals>
|
||||
<goal>single</goal>
|
||||
</goals>
|
||||
</execution>
|
||||
</executions>
|
||||
</plugin>
|
||||
</plugins>
|
||||
</build>
|
||||
<name>TeaVM samples</name>
|
||||
<description>TeaVM code samples</description>
|
||||
|
||||
<modules>
|
||||
<module>teavm-samples-hello</module>
|
||||
<module>teavm-samples-benchmark</module>
|
||||
</modules>
|
||||
</project>
|
|
@ -1,24 +0,0 @@
|
|||
<assembly xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.2"
|
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.2
|
||||
http://maven.apache.org/xsd/assembly-1.1.2.xsd">
|
||||
<id>teavm-demos</id>
|
||||
<formats>
|
||||
<format>zip</format>
|
||||
</formats>
|
||||
<files>
|
||||
<file>
|
||||
<source>src/main/resources/datetime.html</source>
|
||||
<outputDirectory>/</outputDirectory>
|
||||
</file>
|
||||
<file>
|
||||
<source>${project.build.directory}/javascript/datetime/classes.js</source>
|
||||
<outputDirectory>/</outputDirectory>
|
||||
<destName>datetime.js</destName>
|
||||
</file>
|
||||
<file>
|
||||
<source>${project.build.directory}/javascript/datetime/runtime.js</source>
|
||||
<outputDirectory>/</outputDirectory>
|
||||
</file>
|
||||
</files>
|
||||
</assembly>
|
|
@ -1,167 +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.samples;
|
||||
|
||||
import java.text.DateFormat;
|
||||
import java.text.SimpleDateFormat;
|
||||
import java.util.Date;
|
||||
import java.util.GregorianCalendar;
|
||||
import java.util.Locale;
|
||||
import org.teavm.dom.browser.TimerHandler;
|
||||
import org.teavm.dom.browser.Window;
|
||||
import org.teavm.dom.events.Event;
|
||||
import org.teavm.dom.events.EventListener;
|
||||
import org.teavm.dom.html.HTMLDocument;
|
||||
import org.teavm.dom.html.HTMLInputElement;
|
||||
import org.teavm.dom.html.HTMLOptionElement;
|
||||
import org.teavm.dom.html.HTMLSelectElement;
|
||||
import org.teavm.jso.JS;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author Alexey Andreev <konsoletyper@gmail.com>
|
||||
*/
|
||||
public final class DateTime {
|
||||
private DateTime() {
|
||||
}
|
||||
|
||||
private static Window window = (Window)JS.getGlobal();
|
||||
private static HTMLDocument document = window.getDocument();
|
||||
private static HTMLSelectElement localeElem = (HTMLSelectElement)document.getElementById("locale");
|
||||
private static HTMLSelectElement formatElem = (HTMLSelectElement)document.getElementById("format");
|
||||
private static HTMLSelectElement customFormatElem = (HTMLSelectElement)document.getElementById("custom-format");
|
||||
private static Date currentDate = new Date();
|
||||
private static Locale[] locales;
|
||||
private static Locale currentLocale;
|
||||
private static DateFormat dateFormat;
|
||||
|
||||
public static void main(String[] args) {
|
||||
fillLocales();
|
||||
window.setInterval(new TimerHandler() {
|
||||
@Override public void onTimer() {
|
||||
updateCurrentTime();
|
||||
}
|
||||
}, 250);
|
||||
updateCurrentLocale();
|
||||
updateFormat();
|
||||
formatElem.addEventListener("change", new EventListener() {
|
||||
@Override public void handleEvent(Event evt) {
|
||||
updateFormat();
|
||||
updateCurrentTimeText();
|
||||
}
|
||||
});
|
||||
customFormatElem.addEventListener("change", new EventListener() {
|
||||
@Override public void handleEvent(Event evt) {
|
||||
updateFormat();
|
||||
updateCurrentTimeText();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
private static void fillLocales() {
|
||||
locales = Locale.getAvailableLocales();
|
||||
for (Locale locale : locales) {
|
||||
HTMLOptionElement option = (HTMLOptionElement)document.createElement("option");
|
||||
option.setValue(locale.toString());
|
||||
option.setLabel(locale.getDisplayName(Locale.getDefault()));
|
||||
localeElem.getOptions().add(option);
|
||||
}
|
||||
localeElem.addEventListener("change", new EventListener() {
|
||||
@Override public void handleEvent(Event evt) {
|
||||
updateCurrentLocale();
|
||||
updateFormat();
|
||||
updateCurrentTimeText();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
private static void updateCurrentLocale() {
|
||||
currentLocale = locales[localeElem.getSelectedIndex()];
|
||||
GregorianCalendar calendar = new GregorianCalendar(currentLocale);
|
||||
HTMLInputElement weekStartElem = (HTMLInputElement)document.getElementById("week-start");
|
||||
weekStartElem.setValue(String.valueOf(calendar.getFirstDayOfWeek()));
|
||||
HTMLInputElement weekLengthElem = (HTMLInputElement)document.getElementById("week-length");
|
||||
weekLengthElem.setValue(String.valueOf(calendar.getMinimalDaysInFirstWeek()));
|
||||
}
|
||||
|
||||
private static void updateCurrentTime() {
|
||||
setCurrentTime(new Date());
|
||||
}
|
||||
|
||||
private static void setCurrentTime(Date date) {
|
||||
currentDate = date;
|
||||
updateCurrentTimeText();
|
||||
}
|
||||
|
||||
private static void updateCurrentTimeText() {
|
||||
HTMLInputElement timeElem = (HTMLInputElement)document.getElementById("current-time");
|
||||
try {
|
||||
timeElem.setValue(dateFormat.format(currentDate));
|
||||
} catch (RuntimeException e) {
|
||||
timeElem.setValue("Error formatting date");
|
||||
}
|
||||
}
|
||||
|
||||
private static void updateFormat() {
|
||||
customFormatElem.setDisabled(true);
|
||||
switch (formatElem.getValue()) {
|
||||
case "short-date":
|
||||
dateFormat = DateFormat.getDateInstance(DateFormat.SHORT, currentLocale);
|
||||
break;
|
||||
case "medium-date":
|
||||
dateFormat = DateFormat.getDateInstance(DateFormat.MEDIUM, currentLocale);
|
||||
break;
|
||||
case "long-date":
|
||||
dateFormat = DateFormat.getDateInstance(DateFormat.LONG, currentLocale);
|
||||
break;
|
||||
case "full-date":
|
||||
dateFormat = DateFormat.getDateInstance(DateFormat.FULL, currentLocale);
|
||||
break;
|
||||
case "short-time":
|
||||
dateFormat = DateFormat.getTimeInstance(DateFormat.SHORT, currentLocale);
|
||||
break;
|
||||
case "medium-time":
|
||||
dateFormat = DateFormat.getTimeInstance(DateFormat.MEDIUM, currentLocale);
|
||||
break;
|
||||
case "long-time":
|
||||
dateFormat = DateFormat.getTimeInstance(DateFormat.LONG, currentLocale);
|
||||
break;
|
||||
case "full-time":
|
||||
dateFormat = DateFormat.getTimeInstance(DateFormat.FULL, currentLocale);
|
||||
break;
|
||||
case "short-datetime":
|
||||
dateFormat = DateFormat.getDateTimeInstance(DateFormat.SHORT, DateFormat.SHORT, currentLocale);
|
||||
break;
|
||||
case "medium-datetime":
|
||||
dateFormat = DateFormat.getDateTimeInstance(DateFormat.MEDIUM, DateFormat.MEDIUM, currentLocale);
|
||||
break;
|
||||
case "long-datetime":
|
||||
dateFormat = DateFormat.getDateTimeInstance(DateFormat.LONG, DateFormat.LONG, currentLocale);
|
||||
break;
|
||||
case "full-datetime":
|
||||
dateFormat = DateFormat.getDateTimeInstance(DateFormat.FULL, DateFormat.FULL, currentLocale);
|
||||
break;
|
||||
case "custom":
|
||||
customFormatElem.setDisabled(false);
|
||||
try {
|
||||
dateFormat = new SimpleDateFormat(customFormatElem.getValue(), currentLocale);
|
||||
} catch (IllegalArgumentException e) {
|
||||
dateFormat = new SimpleDateFormat("'Invalid pattern'");
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
|
@ -1,84 +0,0 @@
|
|||
/*
|
||||
* Copyright 2013 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.samples;
|
||||
|
||||
import org.teavm.dom.browser.Window;
|
||||
import org.teavm.dom.core.Document;
|
||||
import org.teavm.dom.core.Element;
|
||||
import org.teavm.dom.events.Event;
|
||||
import org.teavm.dom.events.EventListener;
|
||||
import org.teavm.dom.events.EventTarget;
|
||||
import org.teavm.jso.JS;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author Alexey Andreev
|
||||
*/
|
||||
public final class HelloWorld {
|
||||
private HelloWorld() {
|
||||
}
|
||||
|
||||
private static Window window;
|
||||
private static Document document;
|
||||
private static Element body;
|
||||
|
||||
public static void main(String[] args) {
|
||||
window = (Window)JS.getGlobal();
|
||||
document = window.getDocument();
|
||||
body = document.getDocumentElement().getElementsByTagName("body").item(0);
|
||||
createButton();
|
||||
}
|
||||
|
||||
private static void createButton() {
|
||||
Element elem = document.createElement("div");
|
||||
body.appendChild(elem);
|
||||
final Element button = document.createElement("button");
|
||||
button.appendChild(document.createTextNode("Click me!"));
|
||||
elem.appendChild(button);
|
||||
((EventTarget)button).addEventListener("click", new EventListener() {
|
||||
@Override public void handleEvent(Event evt) {
|
||||
button.getParentNode().removeChild(button);
|
||||
printHelloWorld();
|
||||
}
|
||||
}, false);
|
||||
}
|
||||
|
||||
private static void printHelloWorld() {
|
||||
println("Hello, world!");
|
||||
println("Here is the Fibonacci sequence:");
|
||||
long a = 0;
|
||||
long b = 1;
|
||||
for (int i = 0; i < 70; ++i) {
|
||||
println(a);
|
||||
long c = a + b;
|
||||
a = b;
|
||||
b = c;
|
||||
}
|
||||
println("And so on...");
|
||||
}
|
||||
|
||||
private static void println(Object obj) {
|
||||
Element elem = document.createElement("div");
|
||||
elem.appendChild(document.createTextNode(String.valueOf(obj)));
|
||||
body.appendChild(elem);
|
||||
}
|
||||
|
||||
private static void println(long val) {
|
||||
Element elem = document.createElement("div");
|
||||
elem.appendChild(document.createTextNode(String.valueOf(val)));
|
||||
body.appendChild(elem);
|
||||
}
|
||||
}
|
|
@ -1,128 +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.
|
||||
*/
|
||||
// This file is based on the original source code from Bck2Brwsr
|
||||
/**
|
||||
* Back 2 Browser Bytecode Translator
|
||||
* Copyright (C) 2012 Jaroslav Tulach <jaroslav.tulach@apidesign.org>
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, version 2 of the License.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. Look for COPYING file in the top folder.
|
||||
* If not, see http://opensource.org/licenses/GPL-2.0.
|
||||
*/
|
||||
package org.teavm.samples;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.util.Arrays;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author Alexey Andreev
|
||||
*/
|
||||
public class Matrix {
|
||||
private final int rank;
|
||||
private final float[][] data;
|
||||
|
||||
public Matrix(int r) {
|
||||
this(r, new float[r][r]);
|
||||
}
|
||||
|
||||
private Matrix(int r, float[][] data) {
|
||||
this.rank = r;
|
||||
this.data = data;
|
||||
}
|
||||
|
||||
public void setElement(int i, int j, float value) {
|
||||
data[i][j] = value;
|
||||
}
|
||||
public float getElement(int i, int j) {
|
||||
return data[i][j];
|
||||
}
|
||||
|
||||
public void generateData() {
|
||||
//final Random rand = new Random();
|
||||
//final int x = 10;
|
||||
for (int i = 0; i < rank; i++) {
|
||||
for (int j = 0; j < rank; j++) {
|
||||
data[i][j] = 1 / (1 + i + j);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public Matrix multiply(Matrix m) {
|
||||
if (rank != m.rank) {
|
||||
throw new IllegalArgumentException("Rank doesn't match");
|
||||
}
|
||||
|
||||
final float[][] res = new float[rank][rank];
|
||||
for (int i = 0; i < rank; i++) {
|
||||
for (int j = 0; j < rank; j++) {
|
||||
float ij = 0;
|
||||
for (int q = 0; q < rank; q++) {
|
||||
ij += data[i][q] * m.data[q][j];
|
||||
}
|
||||
res[i][j] = ij;
|
||||
}
|
||||
}
|
||||
return new Matrix(rank, res);
|
||||
}
|
||||
|
||||
public void printOn(Appendable s) throws IOException {
|
||||
for (int i = 0; i < rank; i++) {
|
||||
String sep = "";
|
||||
for (int j = 0; j < rank; j++) {
|
||||
s.append(sep + data[i][j]);
|
||||
sep = " ";
|
||||
}
|
||||
s.append("\n");
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean equals(Object obj) {
|
||||
if (obj instanceof Matrix) {
|
||||
Matrix snd = (Matrix)obj;
|
||||
if (snd.rank != rank) {
|
||||
return false;
|
||||
}
|
||||
for (int i = 0; i < rank; i++) {
|
||||
for (int j = 0; j < rank; j++) {
|
||||
if (data[i][j] != snd.data[i][j]) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int hashCode() {
|
||||
int hash = 3;
|
||||
hash = 97 * hash + this.rank;
|
||||
hash = 97 * hash + Arrays.deepHashCode(this.data);
|
||||
return hash;
|
||||
}
|
||||
}
|
|
@ -1,50 +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.samples;
|
||||
|
||||
import java.io.IOException;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author Alexey Andreev
|
||||
*/
|
||||
public final class MatrixMultiplication {
|
||||
private MatrixMultiplication() {
|
||||
}
|
||||
|
||||
public static void main(String[] args) throws IOException {
|
||||
for (int k = 0; k < 20; ++k) {
|
||||
long startTime = System.currentTimeMillis();
|
||||
|
||||
Matrix m1 = new Matrix(5);
|
||||
Matrix m2 = new Matrix(5);
|
||||
|
||||
m1.generateData();
|
||||
m2.generateData();
|
||||
|
||||
Matrix res = null;
|
||||
for (int i = 0; i < 10000; i++) {
|
||||
res = m1.multiply(m2);
|
||||
m1 = res;
|
||||
}
|
||||
StringBuilder sb = new StringBuilder();
|
||||
res.printOn(sb);
|
||||
long timeSpent = System.currentTimeMillis() - startTime;
|
||||
System.out.println(sb.toString());
|
||||
System.out.println("Time spent: " + timeSpent);
|
||||
}
|
||||
}
|
||||
}
|
|
@ -1,44 +0,0 @@
|
|||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<title>Localized date & time demo application</title>
|
||||
<meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
|
||||
<script src="runtime.js" type="text/javascript"></script>
|
||||
<script src="datetime.js" type="text/javascript"></script>
|
||||
</head>
|
||||
<body onload="main()">
|
||||
<div>
|
||||
<label for="locale">Pick a locale:</label>
|
||||
<select id="locale" size="1"></select>
|
||||
</div>
|
||||
<div>
|
||||
<label for="current-time">Current time is:</label>
|
||||
<input type="text" id="current-time" readonly size="50">
|
||||
</div>
|
||||
<div>
|
||||
<label for="week-start">Week starts at:</label>
|
||||
<input type="text" id="week-start" readonly size="5">
|
||||
<label for="week-length">, first week length is:</label>
|
||||
<input type="text" id="week-length" readonly size="5">
|
||||
</div>
|
||||
<div>
|
||||
<label for="format">Format:</label>
|
||||
<select id="format" size="1">
|
||||
<option value="short-date">Date (short)</option>
|
||||
<option value="medium-date">Date (medium)</option>
|
||||
<option value="long-date">Date (long)</option>
|
||||
<option value="full-date">Date (full)</option>
|
||||
<option value="short-time">Time (short)</option>
|
||||
<option value="medium-time">Time (medium)</option>
|
||||
<option value="long-time">Time (long)</option>
|
||||
<option value="full-time">Time (full)</option>
|
||||
<option value="short-datetime">Date and time (short)</option>
|
||||
<option value="medium-datetime">Date and (medium)</option>
|
||||
<option value="long-datetime">Date and time (long)</option>
|
||||
<option value="full-datetime">Date and time (full)</option>
|
||||
<option value="custom">Custom</option>
|
||||
</select>
|
||||
<input type="text" id="custom-format" disabled value="yyyy-MM-dd HH:mm:ss">
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
0
teavm-samples/src/test/java/.gitignore
vendored
0
teavm-samples/src/test/java/.gitignore
vendored
|
@ -2,4 +2,3 @@
|
|||
/.settings
|
||||
/.classpath
|
||||
/.project
|
||||
/.cache
|
136
teavm-samples/teavm-samples-benchmark/pom.xml
Normal file
136
teavm-samples/teavm-samples-benchmark/pom.xml
Normal file
|
@ -0,0 +1,136 @@
|
|||
<!--
|
||||
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.
|
||||
-->
|
||||
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
|
||||
<parent>
|
||||
<groupId>org.teavm</groupId>
|
||||
<artifactId>teavm-samples</artifactId>
|
||||
<version>0.2-SNAPSHOT</version>
|
||||
</parent>
|
||||
<artifactId>teavm-samples-benchmark</artifactId>
|
||||
<packaging>war</packaging>
|
||||
|
||||
<name>TeaVM performance benchmark</name>
|
||||
<description>Compares performance of the JavaScript code produced by TeaVM and GWT</description>
|
||||
|
||||
<dependencies>
|
||||
<dependency>
|
||||
<groupId>org.teavm</groupId>
|
||||
<artifactId>teavm-classlib</artifactId>
|
||||
<version>${project.version}</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.teavm</groupId>
|
||||
<artifactId>teavm-jso</artifactId>
|
||||
<version>${project.version}</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.teavm</groupId>
|
||||
<artifactId>teavm-dom</artifactId>
|
||||
<version>${project.version}</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.jbox2d</groupId>
|
||||
<artifactId>jbox2d-library</artifactId>
|
||||
<version>2.2.1.1</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.jbox2d</groupId>
|
||||
<artifactId>jbox2d-library</artifactId>
|
||||
<version>2.2.1.1</version>
|
||||
<classifier>sources</classifier>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>com.google.gwt</groupId>
|
||||
<artifactId>gwt-user</artifactId>
|
||||
<version>2.6.1</version>
|
||||
<scope>provided</scope>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
|
||||
<build>
|
||||
<plugins>
|
||||
<plugin>
|
||||
<artifactId>maven-war-plugin</artifactId>
|
||||
<version>2.4</version>
|
||||
<configuration>
|
||||
<webResources>
|
||||
<resource>
|
||||
<directory>${project.build.directory}/generated/js</directory>
|
||||
</resource>
|
||||
</webResources>
|
||||
</configuration>
|
||||
</plugin>
|
||||
<plugin>
|
||||
<groupId>org.teavm</groupId>
|
||||
<artifactId>teavm-maven-plugin</artifactId>
|
||||
<version>${project.version}</version>
|
||||
<executions>
|
||||
<execution>
|
||||
<id>web-client</id>
|
||||
<phase>prepare-package</phase>
|
||||
<goals>
|
||||
<goal>build-javascript</goal>
|
||||
</goals>
|
||||
<configuration>
|
||||
<targetDirectory>${project.build.directory}/generated/js/teavm</targetDirectory>
|
||||
<mainClass>org.teavm.samples.benchmark.teavm.BenchmarkStarter</mainClass>
|
||||
<runtime>SEPARATE</runtime>
|
||||
<minifying>true</minifying>
|
||||
<debugInformationGenerated>true</debugInformationGenerated>
|
||||
</configuration>
|
||||
</execution>
|
||||
</executions>
|
||||
</plugin>
|
||||
<plugin>
|
||||
<groupId>org.codehaus.mojo</groupId>
|
||||
<artifactId>gwt-maven-plugin</artifactId>
|
||||
<version>2.6.1</version>
|
||||
<executions>
|
||||
<execution>
|
||||
<goals>
|
||||
<goal>compile</goal>
|
||||
</goals>
|
||||
<configuration>
|
||||
<optimizationLevel>9</optimizationLevel>
|
||||
<compileSourcesArtifacts>
|
||||
<item>org.jbox2d:jbox2d-library</item>
|
||||
</compileSourcesArtifacts>
|
||||
</configuration>
|
||||
</execution>
|
||||
</executions>
|
||||
</plugin>
|
||||
<plugin>
|
||||
<groupId>org.apache.maven.plugins</groupId>
|
||||
<artifactId>maven-checkstyle-plugin</artifactId>
|
||||
<configuration>
|
||||
<configLocation>../../checkstyle.xml</configLocation>
|
||||
<propertyExpansion>config_loc=${basedir}/../..</propertyExpansion>
|
||||
</configuration>
|
||||
</plugin>
|
||||
<plugin>
|
||||
<groupId>org.apache.maven.plugins</groupId>
|
||||
<artifactId>maven-source-plugin</artifactId>
|
||||
</plugin>
|
||||
<plugin>
|
||||
<groupId>org.apache.maven.plugins</groupId>
|
||||
<artifactId>maven-javadoc-plugin</artifactId>
|
||||
</plugin>
|
||||
</plugins>
|
||||
</build>
|
||||
</project>
|
|
@ -0,0 +1,158 @@
|
|||
/*
|
||||
* 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.samples.benchmark;
|
||||
|
||||
import org.jbox2d.collision.shapes.CircleShape;
|
||||
import org.jbox2d.collision.shapes.PolygonShape;
|
||||
import org.jbox2d.common.Vec2;
|
||||
import org.jbox2d.dynamics.*;
|
||||
import org.jbox2d.dynamics.joints.RevoluteJointDef;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author Alexey Andreev <konsoletyper@gmail.com>
|
||||
*/
|
||||
public class Scene {
|
||||
private World world;
|
||||
private Body axis;
|
||||
private Body reel;
|
||||
private long lastCalculated;
|
||||
private long startTime;
|
||||
|
||||
public Scene() {
|
||||
world = new World(new Vec2(0, -9.8f));
|
||||
initAxis();
|
||||
initReel();
|
||||
joinReelToAxis();
|
||||
initBalls();
|
||||
lastCalculated = System.currentTimeMillis();
|
||||
startTime = lastCalculated;
|
||||
}
|
||||
|
||||
private void initAxis() {
|
||||
BodyDef axisDef = new BodyDef();
|
||||
axisDef.type = BodyType.STATIC;
|
||||
axisDef.position = new Vec2(3, 3);
|
||||
axis = world.createBody(axisDef);
|
||||
|
||||
CircleShape axisShape = new CircleShape();
|
||||
axisShape.setRadius(0.02f);
|
||||
axisShape.m_p.set(0, 0);
|
||||
|
||||
FixtureDef axisFixture = new FixtureDef();
|
||||
axisFixture.shape = axisShape;
|
||||
axis.createFixture(axisFixture);
|
||||
}
|
||||
|
||||
private void initReel() {
|
||||
BodyDef reelDef = new BodyDef();
|
||||
reelDef.type = BodyType.DYNAMIC;
|
||||
reelDef.position = new Vec2(3, 3);
|
||||
reel = world.createBody(reelDef);
|
||||
|
||||
FixtureDef fixture = new FixtureDef();
|
||||
fixture.friction = 0.5f;
|
||||
fixture.restitution = 0.4f;
|
||||
fixture.density = 1;
|
||||
|
||||
int parts = 30;
|
||||
for (int i = 0; i < parts; ++i) {
|
||||
PolygonShape shape = new PolygonShape();
|
||||
double angle1 = i / (double)parts * 2 * Math.PI;
|
||||
double x1 = 2.7 * Math.cos(angle1);
|
||||
double y1 = 2.7 * Math.sin(angle1);
|
||||
double angle2 = (i + 1) / (double)parts * 2 * Math.PI;
|
||||
double x2 = 2.7 * Math.cos(angle2);
|
||||
double y2 = 2.7 * Math.sin(angle2);
|
||||
double angle = (angle1 + angle2) / 2;
|
||||
double x = 0.01 * Math.cos(angle);
|
||||
double y = 0.01 * Math.sin(angle);
|
||||
|
||||
shape.set(new Vec2[] { new Vec2((float)x1, (float)y1), new Vec2((float)x2, (float)y2),
|
||||
new Vec2((float)(x2 - x), (float)(y2 - y)), new Vec2((float)(x1 - x), (float)(y1 - y)) }, 4);
|
||||
fixture.shape = shape;
|
||||
reel.createFixture(fixture);
|
||||
}
|
||||
}
|
||||
|
||||
private void initBalls() {
|
||||
float ballRadius = 0.15f;
|
||||
|
||||
BodyDef ballDef = new BodyDef();
|
||||
ballDef.type = BodyType.DYNAMIC;
|
||||
FixtureDef fixtureDef = new FixtureDef();
|
||||
fixtureDef.friction = 0.3f;
|
||||
fixtureDef.restitution = 0.3f;
|
||||
fixtureDef.density = 0.2f;
|
||||
CircleShape shape = new CircleShape();
|
||||
shape.m_radius = ballRadius;
|
||||
fixtureDef.shape = shape;
|
||||
|
||||
for (int i = 0; i < 5; ++i) {
|
||||
for (int j = 0; j < 5; ++j) {
|
||||
float x = (j + 0.5f) * (ballRadius * 2 + 0.01f);
|
||||
float y = (i + 0.5f) * (ballRadius * 2 + 0.01f);
|
||||
ballDef.position.x = 3 + x;
|
||||
ballDef.position.y = 3 + y;
|
||||
Body body = world.createBody(ballDef);
|
||||
body.createFixture(fixtureDef);
|
||||
|
||||
ballDef.position.x = 3 - x;
|
||||
ballDef.position.y = 3 + y;
|
||||
body = world.createBody(ballDef);
|
||||
body.createFixture(fixtureDef);
|
||||
|
||||
ballDef.position.x = 3 + x;
|
||||
ballDef.position.y = 3 - y;
|
||||
body = world.createBody(ballDef);
|
||||
body.createFixture(fixtureDef);
|
||||
|
||||
ballDef.position.x = 3 - x;
|
||||
ballDef.position.y = 3 - y;
|
||||
body = world.createBody(ballDef);
|
||||
body.createFixture(fixtureDef);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void joinReelToAxis() {
|
||||
RevoluteJointDef jointDef = new RevoluteJointDef();
|
||||
jointDef.bodyA = axis;
|
||||
jointDef.bodyB = reel;
|
||||
world.createJoint(jointDef);
|
||||
}
|
||||
|
||||
public void calculate() {
|
||||
long currentTime = System.currentTimeMillis();
|
||||
int timeToCalculate = (int)(currentTime - lastCalculated);
|
||||
long relativeTime = currentTime - startTime;
|
||||
while (timeToCalculate > 10) {
|
||||
int period = (int)((relativeTime + 5000) / 10000);
|
||||
reel.applyTorque(period % 2 == 0 ? 8f : -8f);
|
||||
world.step(0.01f, 20, 40);
|
||||
lastCalculated += 10;
|
||||
timeToCalculate -= 10;
|
||||
}
|
||||
}
|
||||
|
||||
public int timeUntilNextStep() {
|
||||
return (int)Math.max(0, lastCalculated + 10 - System.currentTimeMillis());
|
||||
}
|
||||
|
||||
public World getWorld() {
|
||||
return world;
|
||||
}
|
||||
}
|
|
@ -0,0 +1,118 @@
|
|||
/*
|
||||
* 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.samples.benchmark.gwt;
|
||||
|
||||
import com.google.gwt.canvas.dom.client.Context2d;
|
||||
import com.google.gwt.core.client.EntryPoint;
|
||||
import com.google.gwt.dom.client.CanvasElement;
|
||||
import com.google.gwt.dom.client.Document;
|
||||
import com.google.gwt.dom.client.Element;
|
||||
import com.google.gwt.user.client.Timer;
|
||||
import com.google.gwt.user.client.ui.RootPanel;
|
||||
import org.jbox2d.collision.shapes.CircleShape;
|
||||
import org.jbox2d.collision.shapes.PolygonShape;
|
||||
import org.jbox2d.collision.shapes.Shape;
|
||||
import org.jbox2d.collision.shapes.ShapeType;
|
||||
import org.jbox2d.common.Vec2;
|
||||
import org.jbox2d.dynamics.Body;
|
||||
import org.jbox2d.dynamics.Fixture;
|
||||
import org.teavm.samples.benchmark.Scene;
|
||||
|
||||
public class BenchmarkStarter implements EntryPoint {
|
||||
private Document document;
|
||||
private CanvasElement canvas;
|
||||
private Element resultTableBody;
|
||||
private Scene scene = new Scene();
|
||||
private static int currentSecond;
|
||||
private static long startMillisecond;
|
||||
private static double timeSpentCalculating;
|
||||
|
||||
@Override
|
||||
public void onModuleLoad() {
|
||||
document = RootPanel.getBodyElement().getOwnerDocument();
|
||||
canvas = (CanvasElement)document.getElementById("benchmark-canvas");
|
||||
resultTableBody = document.getElementById("result-table-body");
|
||||
startMillisecond = System.currentTimeMillis();
|
||||
makeStep();
|
||||
}
|
||||
|
||||
private void makeStep() {
|
||||
double start = Performance.now();
|
||||
scene.calculate();
|
||||
double end = Performance.now();
|
||||
int second = (int)((System.currentTimeMillis() - startMillisecond) / 1000);
|
||||
if (second > currentSecond) {
|
||||
Element row = document.createElement("tr");
|
||||
resultTableBody.appendChild(row);
|
||||
Element secondCell = document.createElement("td");
|
||||
row.appendChild(secondCell);
|
||||
secondCell.appendChild(document.createTextNode(String.valueOf(second)));
|
||||
Element timeCell = document.createElement("td");
|
||||
row.appendChild(timeCell);
|
||||
timeCell.appendChild(document.createTextNode(String.valueOf(timeSpentCalculating)));
|
||||
|
||||
timeSpentCalculating = 0;
|
||||
currentSecond = second;
|
||||
}
|
||||
timeSpentCalculating += end - start;
|
||||
render();
|
||||
new Timer() {
|
||||
@Override public void run() {
|
||||
makeStep();
|
||||
}
|
||||
}.schedule(scene.timeUntilNextStep());
|
||||
}
|
||||
|
||||
private void render() {
|
||||
Context2d context = canvas.getContext2d();
|
||||
context.setFillStyle("white");
|
||||
context.setStrokeStyle("grey");
|
||||
context.fillRect(0, 0, 600, 600);
|
||||
context.save();
|
||||
context.translate(0, 600);
|
||||
context.scale(1, -1);
|
||||
context.scale(100, 100);
|
||||
context.setLineWidth(0.01);
|
||||
for (Body body = scene.getWorld().getBodyList(); body != null; body = body.getNext()) {
|
||||
Vec2 center = body.getPosition();
|
||||
context.save();
|
||||
context.translate(center.x, center.y);
|
||||
context.rotate(body.getAngle());
|
||||
for (Fixture fixture = body.getFixtureList(); fixture != null; fixture = fixture.getNext()) {
|
||||
Shape shape = fixture.getShape();
|
||||
if (shape.getType() == ShapeType.CIRCLE) {
|
||||
CircleShape circle = (CircleShape)shape;
|
||||
context.beginPath();
|
||||
context.arc(circle.m_p.x, circle.m_p.y, circle.getRadius(), 0, Math.PI * 2, true);
|
||||
context.closePath();
|
||||
context.stroke();
|
||||
} else if (shape.getType() == ShapeType.POLYGON) {
|
||||
PolygonShape poly = (PolygonShape)shape;
|
||||
Vec2[] vertices = poly.getVertices();
|
||||
context.beginPath();
|
||||
context.moveTo(vertices[0].x, vertices[0].y);
|
||||
for (int i = 1; i < poly.getVertexCount(); ++i) {
|
||||
context.lineTo(vertices[i].x, vertices[i].y);
|
||||
}
|
||||
context.closePath();
|
||||
context.stroke();
|
||||
}
|
||||
}
|
||||
context.restore();
|
||||
}
|
||||
context.restore();
|
||||
}
|
||||
}
|
|
@ -0,0 +1,25 @@
|
|||
/*
|
||||
* 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.samples.benchmark.gwt;
|
||||
|
||||
public final class Performance {
|
||||
private Performance() {
|
||||
}
|
||||
|
||||
public static native double now() /*-{
|
||||
return $wnd.performance.now();
|
||||
}-*/;
|
||||
}
|
|
@ -0,0 +1,123 @@
|
|||
/*
|
||||
* 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.samples.benchmark.teavm;
|
||||
|
||||
import org.jbox2d.collision.shapes.CircleShape;
|
||||
import org.jbox2d.collision.shapes.PolygonShape;
|
||||
import org.jbox2d.collision.shapes.Shape;
|
||||
import org.jbox2d.collision.shapes.ShapeType;
|
||||
import org.jbox2d.common.Vec2;
|
||||
import org.jbox2d.dynamics.Body;
|
||||
import org.jbox2d.dynamics.Fixture;
|
||||
import org.teavm.dom.browser.TimerHandler;
|
||||
import org.teavm.dom.browser.Window;
|
||||
import org.teavm.dom.canvas.CanvasRenderingContext2D;
|
||||
import org.teavm.dom.html.HTMLCanvasElement;
|
||||
import org.teavm.dom.html.HTMLDocument;
|
||||
import org.teavm.dom.html.HTMLElement;
|
||||
import org.teavm.jso.JS;
|
||||
import org.teavm.samples.benchmark.Scene;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author Alexey Andreev <konsoletyper@gmail.com>
|
||||
*/
|
||||
public final class BenchmarkStarter {
|
||||
private static Window window = (Window)JS.getGlobal();
|
||||
private static HTMLDocument document = window.getDocument();
|
||||
private static HTMLCanvasElement canvas = (HTMLCanvasElement)document.getElementById("benchmark-canvas");
|
||||
private static HTMLElement resultTableBody = document.getElementById("result-table-body");
|
||||
private static Performance performance = (Performance)JS.get(window, JS.wrap("performance"));
|
||||
private static Scene scene = new Scene();
|
||||
private static int currentSecond;
|
||||
private static long startMillisecond;
|
||||
private static double timeSpentCalculating;
|
||||
|
||||
private BenchmarkStarter() {
|
||||
}
|
||||
|
||||
public static void main(String[] args) {
|
||||
startMillisecond = System.currentTimeMillis();
|
||||
makeStep();
|
||||
}
|
||||
|
||||
private static void makeStep() {
|
||||
double start = performance.now();
|
||||
scene.calculate();
|
||||
double end = performance.now();
|
||||
int second = (int)((System.currentTimeMillis() - startMillisecond) / 1000);
|
||||
if (second > currentSecond) {
|
||||
HTMLElement row = document.createElement("tr");
|
||||
resultTableBody.appendChild(row);
|
||||
HTMLElement secondCell = document.createElement("td");
|
||||
row.appendChild(secondCell);
|
||||
secondCell.appendChild(document.createTextNode(String.valueOf(second)));
|
||||
HTMLElement timeCell = document.createElement("td");
|
||||
row.appendChild(timeCell);
|
||||
timeCell.appendChild(document.createTextNode(String.valueOf(timeSpentCalculating)));
|
||||
|
||||
timeSpentCalculating = 0;
|
||||
currentSecond = second;
|
||||
}
|
||||
timeSpentCalculating += end - start;
|
||||
render();
|
||||
window.setTimeout(new TimerHandler() {
|
||||
@Override public void onTimer() {
|
||||
makeStep();
|
||||
}
|
||||
}, scene.timeUntilNextStep());
|
||||
}
|
||||
|
||||
private static void render() {
|
||||
CanvasRenderingContext2D context = (CanvasRenderingContext2D)canvas.getContext("2d");
|
||||
context.setFillStyle("white");
|
||||
context.setStrokeStyle("grey");
|
||||
context.fillRect(0, 0, 600, 600);
|
||||
context.save();
|
||||
context.translate(0, 600);
|
||||
context.scale(1, -1);
|
||||
context.scale(100, 100);
|
||||
context.setLineWidth(0.01);
|
||||
for (Body body = scene.getWorld().getBodyList(); body != null; body = body.getNext()) {
|
||||
Vec2 center = body.getPosition();
|
||||
context.save();
|
||||
context.translate(center.x, center.y);
|
||||
context.rotate(body.getAngle());
|
||||
for (Fixture fixture = body.getFixtureList(); fixture != null; fixture = fixture.getNext()) {
|
||||
Shape shape = fixture.getShape();
|
||||
if (shape.getType() == ShapeType.CIRCLE) {
|
||||
CircleShape circle = (CircleShape)shape;
|
||||
context.beginPath();
|
||||
context.arc(circle.m_p.x, circle.m_p.y, circle.getRadius(), 0, Math.PI * 2, true);
|
||||
context.closePath();
|
||||
context.stroke();
|
||||
} else if (shape.getType() == ShapeType.POLYGON) {
|
||||
PolygonShape poly = (PolygonShape)shape;
|
||||
Vec2[] vertices = poly.getVertices();
|
||||
context.beginPath();
|
||||
context.moveTo(vertices[0].x, vertices[0].y);
|
||||
for (int i = 1; i < poly.getVertexCount(); ++i) {
|
||||
context.lineTo(vertices[i].x, vertices[i].y);
|
||||
}
|
||||
context.closePath();
|
||||
context.stroke();
|
||||
}
|
||||
}
|
||||
context.restore();
|
||||
}
|
||||
context.restore();
|
||||
}
|
||||
}
|
|
@ -0,0 +1,22 @@
|
|||
/*
|
||||
* 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.samples.benchmark.teavm;
|
||||
|
||||
import org.teavm.jso.JSObject;
|
||||
|
||||
public interface Performance extends JSObject {
|
||||
double now();
|
||||
}
|
|
@ -0,0 +1,23 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!--
|
||||
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.
|
||||
-->
|
||||
<module rename-to="benchmark">
|
||||
<inherits name="com.google.gwt.user.User" />
|
||||
<inherits name="org.jbox2d.JBox2D"/>
|
||||
<source path=""/>
|
||||
<source path="gwt"/>
|
||||
<entry-point class="org.teavm.samples.benchmark.gwt.BenchmarkStarter"/>
|
||||
</module>
|
|
@ -0,0 +1,21 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!--
|
||||
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.
|
||||
-->
|
||||
<web-app xmlns="http://java.sun.com/xml/ns/javaee"
|
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
|
||||
version="3.0">
|
||||
</web-app>
|
|
@ -0,0 +1,40 @@
|
|||
<!--
|
||||
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.
|
||||
-->
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/html;charset=utf-8">
|
||||
<title>GWT jbox2d benchmark</title>
|
||||
</head>
|
||||
<body>
|
||||
<script type="text/javascript" src="benchmark/benchmark.nocache.js"></script>
|
||||
<iframe src="javascript:''" id="__gwt_historyFrame" style="width:0;height:0;border:0"></iframe>
|
||||
<h1>GWT performance</h1>
|
||||
<div>
|
||||
<canvas id="benchmark-canvas" width="600" height="600"></canvas>
|
||||
</div>
|
||||
<table>
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Second</th>
|
||||
<th>Time spent computing, ms</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody id="result-table-body">
|
||||
</tbody>
|
||||
</table>
|
||||
</body>
|
||||
</html>
|
|
@ -0,0 +1,29 @@
|
|||
<!--
|
||||
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.
|
||||
-->
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/html;charset=utf-8">
|
||||
<title>TeaVM vs. GWT performance comparison</title>
|
||||
</head>
|
||||
<body onload="main()">
|
||||
<h1>TeaVM vs. GWT performance</h1>
|
||||
<ul>
|
||||
<li><a href="teavm.html">TeaVM</a></li>
|
||||
<li><a href="gwt.html">GWT</a></li>
|
||||
</ul>
|
||||
</body>
|
||||
</html>
|
|
@ -0,0 +1,40 @@
|
|||
<!--
|
||||
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.
|
||||
-->
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/html;charset=utf-8">
|
||||
<title>TeaVM jbox2d benchmark</title>
|
||||
<script type="text/javascript" charset="utf-8" src="teavm/runtime.js"></script>
|
||||
<script type="text/javascript" charset="utf-8" src="teavm/classes.js"></script>
|
||||
</head>
|
||||
<body onload="main()">
|
||||
<h1>TeaVM performance</h1>
|
||||
<div>
|
||||
<canvas id="benchmark-canvas" width="600" height="600"></canvas>
|
||||
</div>
|
||||
<table>
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Second</th>
|
||||
<th>Time spent computing, ms</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody id="result-table-body">
|
||||
</tbody>
|
||||
</table>
|
||||
</body>
|
||||
</html>
|
4
teavm-samples/teavm-samples-hello/.gitignore
vendored
Normal file
4
teavm-samples/teavm-samples-hello/.gitignore
vendored
Normal file
|
@ -0,0 +1,4 @@
|
|||
/target
|
||||
/.settings
|
||||
/.classpath
|
||||
/.project
|
110
teavm-samples/teavm-samples-hello/pom.xml
Normal file
110
teavm-samples/teavm-samples-hello/pom.xml
Normal file
|
@ -0,0 +1,110 @@
|
|||
<!--
|
||||
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.
|
||||
-->
|
||||
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
|
||||
<parent>
|
||||
<groupId>org.teavm</groupId>
|
||||
<artifactId>teavm-samples</artifactId>
|
||||
<version>0.2-SNAPSHOT</version>
|
||||
</parent>
|
||||
<artifactId>teavm-samples-hello</artifactId>
|
||||
|
||||
<packaging>war</packaging>
|
||||
|
||||
<name>TeaVM Hello world web application</name>
|
||||
<description>A sample application that shows how TeaVM can communicate with the server</description>
|
||||
|
||||
<dependencies>
|
||||
<dependency>
|
||||
<groupId>org.teavm</groupId>
|
||||
<artifactId>teavm-classlib</artifactId>
|
||||
<version>${project.version}</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.teavm</groupId>
|
||||
<artifactId>teavm-jso</artifactId>
|
||||
<version>${project.version}</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.teavm</groupId>
|
||||
<artifactId>teavm-dom</artifactId>
|
||||
<version>${project.version}</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>javax.servlet</groupId>
|
||||
<artifactId>javax.servlet-api</artifactId>
|
||||
<version>3.1.0</version>
|
||||
<scope>provided</scope>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
|
||||
<build>
|
||||
<plugins>
|
||||
<plugin>
|
||||
<artifactId>maven-war-plugin</artifactId>
|
||||
<version>2.4</version>
|
||||
<configuration>
|
||||
<webResources>
|
||||
<resource>
|
||||
<directory>${project.build.directory}/generated/js</directory>
|
||||
</resource>
|
||||
</webResources>
|
||||
</configuration>
|
||||
</plugin>
|
||||
<plugin>
|
||||
<groupId>org.teavm</groupId>
|
||||
<artifactId>teavm-maven-plugin</artifactId>
|
||||
<version>${project.version}</version>
|
||||
<executions>
|
||||
<execution>
|
||||
<id>web-client</id>
|
||||
<phase>prepare-package</phase>
|
||||
<goals>
|
||||
<goal>build-javascript</goal>
|
||||
</goals>
|
||||
<configuration>
|
||||
<targetDirectory>${project.build.directory}/generated/js/teavm</targetDirectory>
|
||||
<mainClass>org.teavm.samples.hello.Client</mainClass>
|
||||
<runtime>SEPARATE</runtime>
|
||||
<minifying>true</minifying>
|
||||
<debugInformationGenerated>true</debugInformationGenerated>
|
||||
<sourceMapsGenerated>true</sourceMapsGenerated>
|
||||
<sourceFilesCopied>true</sourceFilesCopied>
|
||||
</configuration>
|
||||
</execution>
|
||||
</executions>
|
||||
</plugin>
|
||||
<plugin>
|
||||
<groupId>org.apache.maven.plugins</groupId>
|
||||
<artifactId>maven-checkstyle-plugin</artifactId>
|
||||
<configuration>
|
||||
<configLocation>../../checkstyle.xml</configLocation>
|
||||
<propertyExpansion>config_loc=${basedir}/../..</propertyExpansion>
|
||||
</configuration>
|
||||
</plugin>
|
||||
<plugin>
|
||||
<groupId>org.apache.maven.plugins</groupId>
|
||||
<artifactId>maven-source-plugin</artifactId>
|
||||
</plugin>
|
||||
<plugin>
|
||||
<groupId>org.apache.maven.plugins</groupId>
|
||||
<artifactId>maven-javadoc-plugin</artifactId>
|
||||
</plugin>
|
||||
</plugins>
|
||||
</build>
|
||||
</project>
|
|
@ -0,0 +1,68 @@
|
|||
/*
|
||||
* 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.samples.hello;
|
||||
|
||||
import org.teavm.dom.ajax.ReadyStateChangeHandler;
|
||||
import org.teavm.dom.ajax.XMLHttpRequest;
|
||||
import org.teavm.dom.browser.Window;
|
||||
import org.teavm.dom.events.Event;
|
||||
import org.teavm.dom.events.EventListener;
|
||||
import org.teavm.dom.html.HTMLButtonElement;
|
||||
import org.teavm.dom.html.HTMLDocument;
|
||||
import org.teavm.dom.html.HTMLElement;
|
||||
import org.teavm.jso.JS;
|
||||
|
||||
public final class Client {
|
||||
private static Window window = (Window)JS.getGlobal();
|
||||
private static HTMLDocument document = window.getDocument();
|
||||
private static HTMLButtonElement helloButton = (HTMLButtonElement)document.getElementById("hello-button");
|
||||
private static HTMLElement responsePanel = document.getElementById("response-panel");
|
||||
private static HTMLElement thinkingPanel = document.getElementById("thinking-panel");
|
||||
|
||||
private Client() {
|
||||
}
|
||||
|
||||
public static void main(String[] args) {
|
||||
helloButton.addEventListener("click", new EventListener() {
|
||||
@Override public void handleEvent(Event evt) {
|
||||
sayHello();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
private static void sayHello() {
|
||||
helloButton.setDisabled(true);
|
||||
thinkingPanel.getStyle().setProperty("display", "");
|
||||
final XMLHttpRequest xhr = window.createXMLHttpRequest();
|
||||
xhr.setOnReadyStateChange(new ReadyStateChangeHandler() {
|
||||
@Override public void stateChanged() {
|
||||
if (xhr.getReadyState() == XMLHttpRequest.DONE) {
|
||||
receiveResponse(xhr.getResponseText());
|
||||
}
|
||||
}
|
||||
});
|
||||
xhr.open("GET", "hello");
|
||||
xhr.send();
|
||||
}
|
||||
|
||||
private static void receiveResponse(String text) {
|
||||
HTMLElement responseElem = document.createElement("div");
|
||||
responseElem.appendChild(document.createTextNode(text));
|
||||
responsePanel.appendChild(responseElem);
|
||||
helloButton.setDisabled(false);
|
||||
thinkingPanel.getStyle().setProperty("display", "none");
|
||||
}
|
||||
}
|
|
@ -0,0 +1,39 @@
|
|||
/*
|
||||
* 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.samples.hello;
|
||||
|
||||
import java.io.IOException;
|
||||
import javax.servlet.ServletException;
|
||||
import javax.servlet.annotation.WebServlet;
|
||||
import javax.servlet.http.HttpServlet;
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
|
||||
@WebServlet("/hello")
|
||||
public class Server extends HttpServlet {
|
||||
private static final long serialVersionUID = -5014505771271825585L;
|
||||
|
||||
@Override
|
||||
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
|
||||
try {
|
||||
Thread.sleep(500);
|
||||
} catch (InterruptedException e) {
|
||||
return;
|
||||
}
|
||||
String userAgent = req.getHeader("User-Agent");
|
||||
resp.getWriter().println("Hello, " + userAgent);
|
||||
}
|
||||
}
|
|
@ -0,0 +1,21 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!--
|
||||
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.
|
||||
-->
|
||||
<web-app xmlns="http://java.sun.com/xml/ns/javaee"
|
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
|
||||
version="3.0">
|
||||
</web-app>
|
31
teavm-samples/teavm-samples-hello/src/main/webapp/index.html
Normal file
31
teavm-samples/teavm-samples-hello/src/main/webapp/index.html
Normal file
|
@ -0,0 +1,31 @@
|
|||
<!--
|
||||
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.
|
||||
-->
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<title>Hello web application</title>
|
||||
<meta http-equiv="Content-Type" content="text/html;charset=utf-8">
|
||||
<script type="text/javascript" charset="utf-8" src="teavm/runtime.js"></script>
|
||||
<script type="text/javascript" charset="utf-8" src="teavm/classes.js"></script>
|
||||
</head>
|
||||
<body onload="main()">
|
||||
<h1>Hello web application</h1>
|
||||
<button id="hello-button">Hello, server!</button>
|
||||
<div id="response-panel">
|
||||
</div>
|
||||
<div style="display:none" id="thinking-panel"><i>Server is thinking...</i></div>
|
||||
</body>
|
||||
</html>
|
|
@ -1,79 +0,0 @@
|
|||
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
|
||||
<parent>
|
||||
<groupId>org.teavm</groupId>
|
||||
<artifactId>teavm</artifactId>
|
||||
<version>0.2-SNAPSHOT</version>
|
||||
</parent>
|
||||
<artifactId>teavm-scala-samples</artifactId>
|
||||
|
||||
<dependencies>
|
||||
<dependency>
|
||||
<groupId>org.teavm</groupId>
|
||||
<artifactId>teavm-core</artifactId>
|
||||
<version>${project.version}</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.teavm</groupId>
|
||||
<artifactId>teavm-dom</artifactId>
|
||||
<version>${project.version}</version>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
|
||||
<build>
|
||||
<sourceDirectory>src/main/scala</sourceDirectory>
|
||||
<testSourceDirectory>src/test/scala</testSourceDirectory>
|
||||
<plugins>
|
||||
<plugin>
|
||||
<groupId>net.alchim31.maven</groupId>
|
||||
<artifactId>scala-maven-plugin</artifactId>
|
||||
<version>3.1.6</version>
|
||||
<executions>
|
||||
<execution>
|
||||
<goals>
|
||||
<goal>compile</goal>
|
||||
<goal>testCompile</goal>
|
||||
</goals>
|
||||
</execution>
|
||||
</executions>
|
||||
<configuration>
|
||||
<scalaVersion>2.10.0</scalaVersion>
|
||||
</configuration>
|
||||
</plugin>
|
||||
<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>
|
||||
<dependency>
|
||||
<groupId>org.scala-lang</groupId>
|
||||
<artifactId>scala-library</artifactId>
|
||||
<version>2.10.0</version>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
<executions>
|
||||
<execution>
|
||||
<id>generate-hello</id>
|
||||
<goals>
|
||||
<goal>build-javascript</goal>
|
||||
</goals>
|
||||
<phase>process-classes</phase>
|
||||
<configuration>
|
||||
<minifying>false</minifying>
|
||||
<mainClass>org.teavm.scala.samples.HelloWorld</mainClass>
|
||||
<mainPageIncluded>true</mainPageIncluded>
|
||||
<targetDirectory>${project.build.directory}/javascript</targetDirectory>
|
||||
</configuration>
|
||||
</execution>
|
||||
</executions>
|
||||
</plugin>
|
||||
</plugins>
|
||||
</build>
|
||||
</project>
|
|
@ -1,11 +0,0 @@
|
|||
package org.teavm.scala.samples
|
||||
|
||||
/**
|
||||
*
|
||||
* @author Alexey Andreev <konsoletyper@gmail.com>
|
||||
*/
|
||||
object HelloWorld {
|
||||
def main(args : Array[String]) {
|
||||
print("Hello")
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user