mirror of
https://github.com/Eaglercraft-TeaVM-Fork/eagler-teavm.git
synced 2024-12-22 08:14:09 -08:00
Implementing class library emulation
This commit is contained in:
parent
18e35b80e6
commit
1355e211e3
|
@ -0,0 +1,68 @@
|
|||
package org.teavm.classlib.java.lang;
|
||||
|
||||
import org.teavm.classlib.java.lang.io.TSerializable;
|
||||
import org.teavm.classlib.java.util.TArrays;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author Alexey Andreev
|
||||
*/
|
||||
class AbstractStringBuilder extends TObject implements TSerializable {
|
||||
private char[] buffer;
|
||||
private int length;
|
||||
|
||||
public AbstractStringBuilder() {
|
||||
this(16);
|
||||
}
|
||||
|
||||
public AbstractStringBuilder(int capacity) {
|
||||
buffer = new char[capacity];
|
||||
}
|
||||
|
||||
protected AbstractStringBuilder append(TString string) {
|
||||
ensureCapacity(length + string.length());
|
||||
int j = length;
|
||||
for (int i = 0; i < string.length(); ++i) {
|
||||
buffer[j++] = string.charAt(i);
|
||||
}
|
||||
length = j;
|
||||
return this;
|
||||
}
|
||||
|
||||
protected AbstractStringBuilder append(int value) {
|
||||
if (value < 0) {
|
||||
append('-');
|
||||
value = -value;
|
||||
}
|
||||
if (value < 10) {
|
||||
append((char)('0' + value));
|
||||
} else {
|
||||
int pos = 10;
|
||||
int sz = 1;
|
||||
while (pos <= 1000000000 && pos <= value) {
|
||||
pos *= 10;
|
||||
++sz;
|
||||
}
|
||||
ensureCapacity(length + sz);
|
||||
while (pos > 0) {
|
||||
buffer[length++] = (char)('0' + value / pos);
|
||||
value %= pos;
|
||||
pos /= 10;
|
||||
}
|
||||
}
|
||||
return this;
|
||||
}
|
||||
|
||||
protected AbstractStringBuilder append(char c) {
|
||||
ensureCapacity(length + 1);
|
||||
buffer[length++] = c;
|
||||
return this;
|
||||
}
|
||||
|
||||
private void ensureCapacity(int capacity) {
|
||||
if (buffer.length >= capacity) {
|
||||
return;
|
||||
}
|
||||
buffer = TArrays.copyOf(buffer, capacity * 2 + 1);
|
||||
}
|
||||
}
|
|
@ -6,4 +6,20 @@ package org.teavm.classlib.java.lang;
|
|||
*/
|
||||
public class TException extends TThrowable {
|
||||
private static final long serialVersionUID = -2188339106250208952L;
|
||||
|
||||
public TException() {
|
||||
super();
|
||||
}
|
||||
|
||||
public TException(TString message, TThrowable cause) {
|
||||
super(message, cause);
|
||||
}
|
||||
|
||||
public TException(TString message) {
|
||||
super(message);
|
||||
}
|
||||
|
||||
public TException(TThrowable cause) {
|
||||
super(cause);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -0,0 +1,25 @@
|
|||
package org.teavm.classlib.java.lang;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author Alexey Andreev
|
||||
*/
|
||||
public class TIllegalArgumentException extends TRuntimeException {
|
||||
private static final long serialVersionUID = -1225768288500984373L;
|
||||
|
||||
public TIllegalArgumentException() {
|
||||
super();
|
||||
}
|
||||
|
||||
public TIllegalArgumentException(TString message, TThrowable cause) {
|
||||
super(message, cause);
|
||||
}
|
||||
|
||||
public TIllegalArgumentException(TString message) {
|
||||
super(message);
|
||||
}
|
||||
|
||||
public TIllegalArgumentException(TThrowable cause) {
|
||||
super(cause);
|
||||
}
|
||||
}
|
|
@ -0,0 +1,25 @@
|
|||
package org.teavm.classlib.java.lang;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author Alexey Andreev
|
||||
*/
|
||||
public class TIllegalStateException extends TException {
|
||||
private static final long serialVersionUID = 218741044430713159L;
|
||||
|
||||
public TIllegalStateException() {
|
||||
super();
|
||||
}
|
||||
|
||||
public TIllegalStateException(TString message, TThrowable cause) {
|
||||
super(message, cause);
|
||||
}
|
||||
|
||||
public TIllegalStateException(TString message) {
|
||||
super(message);
|
||||
}
|
||||
|
||||
public TIllegalStateException(TThrowable cause) {
|
||||
super(cause);
|
||||
}
|
||||
}
|
|
@ -0,0 +1,17 @@
|
|||
package org.teavm.classlib.java.lang;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author Alexey Andreev
|
||||
*/
|
||||
public class TIndexOutOfBoundsException extends TRuntimeException {
|
||||
private static final long serialVersionUID = -7329782331640782287L;
|
||||
|
||||
public TIndexOutOfBoundsException() {
|
||||
super();
|
||||
}
|
||||
|
||||
public TIndexOutOfBoundsException(TString message) {
|
||||
super(message);
|
||||
}
|
||||
}
|
|
@ -0,0 +1,28 @@
|
|||
package org.teavm.classlib.java.lang;
|
||||
|
||||
import org.teavm.javascript.ni.Superclass;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author Alexey Andreev
|
||||
*/
|
||||
@Superclass("java.lang.Exception")
|
||||
public class TRuntimeException extends TException {
|
||||
private static final long serialVersionUID = 3506083061304642891L;
|
||||
|
||||
public TRuntimeException() {
|
||||
super();
|
||||
}
|
||||
|
||||
public TRuntimeException(TString message, TThrowable cause) {
|
||||
super(message, cause);
|
||||
}
|
||||
|
||||
public TRuntimeException(TString message) {
|
||||
super(message);
|
||||
}
|
||||
|
||||
public TRuntimeException(TThrowable cause) {
|
||||
super(cause);
|
||||
}
|
||||
}
|
|
@ -1,12 +1,13 @@
|
|||
package org.teavm.classlib.java.lang;
|
||||
|
||||
import org.teavm.classlib.java.lang.io.TSerializable;
|
||||
import org.teavm.javascript.ni.GeneratedBy;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author Alexey Andreev <konsoletyper@gmail.com>
|
||||
*/
|
||||
public class TString extends TObject {
|
||||
public class TString extends TObject implements TSerializable {
|
||||
private char[] characters;
|
||||
|
||||
public TString() {
|
||||
|
@ -31,6 +32,21 @@ public class TString extends TObject {
|
|||
}
|
||||
}
|
||||
|
||||
public char charAt(int index) {
|
||||
if (index < 0 || index >= characters.length) {
|
||||
throw new StringIndexOutOfBoundsException(null);
|
||||
}
|
||||
return characters[index];
|
||||
}
|
||||
|
||||
public int length() {
|
||||
return characters.length;
|
||||
}
|
||||
|
||||
public static TString valueOf(int index) {
|
||||
return new TStringBuilder().append(index).toString0();
|
||||
}
|
||||
|
||||
@GeneratedBy(StringNativeGenerator.class)
|
||||
public static native TString wrap(String str);
|
||||
}
|
||||
|
|
|
@ -0,0 +1,19 @@
|
|||
package org.teavm.classlib.java.lang;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author Alexey Andreev
|
||||
*/
|
||||
public class TStringBuilder extends AbstractStringBuilder {
|
||||
@Override
|
||||
public TStringBuilder append(TString string) {
|
||||
super.append(string);
|
||||
return this;
|
||||
}
|
||||
|
||||
@Override
|
||||
public TStringBuilder append(int value) {
|
||||
super.append(value);
|
||||
return this;
|
||||
}
|
||||
}
|
|
@ -0,0 +1,21 @@
|
|||
package org.teavm.classlib.java.lang;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author Alexey Andreev
|
||||
*/
|
||||
public class TStringIndexOutOfBoundsException extends TIndexOutOfBoundsException {
|
||||
private static final long serialVersionUID = 6706349858694463085L;
|
||||
|
||||
public TStringIndexOutOfBoundsException() {
|
||||
super();
|
||||
}
|
||||
|
||||
public TStringIndexOutOfBoundsException(TString message) {
|
||||
super(message);
|
||||
}
|
||||
|
||||
public TStringIndexOutOfBoundsException(int index) {
|
||||
super(new TStringBuilder().append(TString.wrap("String index out of bounds: ")).append(index).toString0());
|
||||
}
|
||||
}
|
|
@ -1,11 +1,72 @@
|
|||
package org.teavm.classlib.java.lang;
|
||||
|
||||
import org.teavm.javascript.ni.Remove;
|
||||
import org.teavm.javascript.ni.Rename;
|
||||
import org.teavm.javascript.ni.Superclass;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author Alexey Andreev <konsoletyper@gmail.com>
|
||||
*/
|
||||
public class TThrowable extends Throwable {
|
||||
@Superclass("java.lang.Object")
|
||||
public class TThrowable extends RuntimeException {
|
||||
private static final long serialVersionUID = 2026791432677149320L;
|
||||
private TString message;
|
||||
private TThrowable cause;
|
||||
|
||||
public TThrowable() {
|
||||
fillInStackTrace();
|
||||
}
|
||||
|
||||
public TThrowable(TString message) {
|
||||
fillInStackTrace();
|
||||
this.message = message;
|
||||
}
|
||||
|
||||
public TThrowable(TString message, TThrowable cause) {
|
||||
fillInStackTrace();
|
||||
this.message = message;
|
||||
this.cause = cause;
|
||||
}
|
||||
|
||||
public TThrowable(TThrowable cause) {
|
||||
this.cause = cause;
|
||||
}
|
||||
|
||||
@Override
|
||||
public synchronized Throwable fillInStackTrace() {
|
||||
return this;
|
||||
}
|
||||
|
||||
@Rename("getMessage")
|
||||
public TString getMessage0() {
|
||||
return message;
|
||||
}
|
||||
|
||||
@Rename("getLocalizedMessage")
|
||||
public TString getLocalizedMessage0() {
|
||||
return getMessage0();
|
||||
}
|
||||
|
||||
@Override
|
||||
public synchronized TThrowable getCause() {
|
||||
return cause != this ? cause : null;
|
||||
}
|
||||
|
||||
@Remove
|
||||
public native TClass<?> getClass0();
|
||||
|
||||
@Remove
|
||||
public native TString toString0();
|
||||
|
||||
public synchronized TThrowable initCause(TThrowable cause) {
|
||||
if (this.cause != this && this.cause != null) {
|
||||
throw new TIllegalStateException(TString.wrap("Cause already set"));
|
||||
}
|
||||
if (cause == this) {
|
||||
throw new TIllegalArgumentException(TString.wrap("Circular causation relation"));
|
||||
}
|
||||
this.cause = cause;
|
||||
return this;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -0,0 +1,8 @@
|
|||
package org.teavm.classlib.java.lang.io;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author Alexey Andreev
|
||||
*/
|
||||
public interface TSerializable {
|
||||
}
|
|
@ -0,0 +1,18 @@
|
|||
package org.teavm.classlib.java.util;
|
||||
|
||||
import org.teavm.classlib.java.lang.TObject;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author Alexey Andreev
|
||||
*/
|
||||
public class TArrays extends TObject {
|
||||
public static char[] copyOf(char[] array, int length) {
|
||||
char[] result = new char[length];
|
||||
int sz = Math.min(length, array.length);
|
||||
for (int i = 0; i < sz; ++i) {
|
||||
result[i] = array[i];
|
||||
}
|
||||
return result;
|
||||
}
|
||||
}
|
15
teavm-core/src/main/java/org/teavm/javascript/ni/Remove.java
Normal file
15
teavm-core/src/main/java/org/teavm/javascript/ni/Remove.java
Normal file
|
@ -0,0 +1,15 @@
|
|||
package org.teavm.javascript.ni;
|
||||
|
||||
import java.lang.annotation.ElementType;
|
||||
import java.lang.annotation.Retention;
|
||||
import java.lang.annotation.RetentionPolicy;
|
||||
import java.lang.annotation.Target;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author Alexey Andreev
|
||||
*/
|
||||
@Retention(RetentionPolicy.RUNTIME)
|
||||
@Target(ElementType.METHOD)
|
||||
public @interface Remove {
|
||||
}
|
Loading…
Reference in New Issue
Block a user