1.1 --- a/launcher/http/src/main/java/org/apidesign/bck2brwsr/launcher/CompileCP.java Thu May 22 12:19:52 2014 +0200
1.2 +++ b/launcher/http/src/main/java/org/apidesign/bck2brwsr/launcher/CompileCP.java Thu May 22 15:29:40 2014 +0200
1.3 @@ -38,6 +38,7 @@
1.4 import java.util.zip.ZipEntry;
1.5 import org.apidesign.bck2brwsr.launcher.BaseHTTPLauncher.Res;
1.6 import org.apidesign.vm4brwsr.Bck2Brwsr;
1.7 +import org.apidesign.vm4brwsr.ObfuscationLevel;
1.8
1.9 /**
1.10 *
1.11 @@ -66,6 +67,7 @@
1.12 .addClasses(classes.toArray(new String[0]))
1.13 .addExported(keep.toArray(new String[0]))
1.14 .addResources(arr.toArray(new String[0]))
1.15 + //.obfuscation(ObfuscationLevel.FULL)
1.16 .library(true)
1.17 .resources(new JarRes())
1.18 .generate(w);
1.19 @@ -101,6 +103,7 @@
1.20 .addRootClasses(classes.toArray(new String[0]))
1.21 .addResources(arr.toArray(new String[0]))
1.22 .library(true)
1.23 + //.obfuscation(ObfuscationLevel.FULL)
1.24 .resources(new EmulationResources() {
1.25 @Override
1.26 public InputStream get(String resource) throws IOException {
1.27 @@ -205,6 +208,7 @@
1.28 }
1.29
1.30 Bck2Brwsr.newCompiler().addRootClasses(classes.toArray(new String[0]))
1.31 + //.obfuscation(ObfuscationLevel.FULL)
1.32 .resources(new Bck2Brwsr.Resources() {
1.33 @Override
1.34 public InputStream get(String resource) throws IOException {
2.1 --- a/rt/emul/mini/src/main/java/java/lang/Class.java Thu May 22 12:19:52 2014 +0200
2.2 +++ b/rt/emul/mini/src/main/java/java/lang/Class.java Thu May 22 15:29:40 2014 +0200
2.3 @@ -34,6 +34,7 @@
2.4 import java.lang.reflect.Method;
2.5 import java.lang.reflect.TypeVariable;
2.6 import java.net.URL;
2.7 +import org.apidesign.bck2brwsr.core.Exported;
2.8 import org.apidesign.bck2brwsr.core.JavaScriptBody;
2.9 import org.apidesign.bck2brwsr.core.JavaScriptOnly;
2.10 import org.apidesign.bck2brwsr.emul.reflect.AnnotationImpl;
2.11 @@ -1743,7 +1744,7 @@
2.12 native static Class getPrimitiveClass(String type);
2.13
2.14 @JavaScriptBody(args = {}, body =
2.15 - "return this.desiredAssertionStatus ? this.desiredAssertionStatus : false;"
2.16 + "return this['desiredAssertionStatus'] ? this['desiredAssertionStatus'] : false;"
2.17 )
2.18 public native boolean desiredAssertionStatus();
2.19
2.20 @@ -1770,10 +1771,11 @@
2.21 )
2.22 static native Class<?> classFor(Object self);
2.23
2.24 + @Exported
2.25 @JavaScriptBody(args = { "self" }, body
2.26 - = "if (self.$hashCode) return self.$hashCode;\n"
2.27 - + "var h = self.computeHashCode__I ? self.computeHashCode__I() : Math.random() * Math.pow(2, 31);\n"
2.28 - + "return self.$hashCode = h & h;"
2.29 + = "if (self['$hashCode']) return self['$hashCode'];\n"
2.30 + + "var h = self['computeHashCode__I'] ? self['computeHashCode__I']() : Math.random() * Math.pow(2, 31);\n"
2.31 + + "return self['$hashCode'] = h & h;"
2.32 )
2.33 static native int defaultHashCode(Object self);
2.34
2.35 @@ -1802,6 +1804,7 @@
2.36 )
2.37 static native int toJS();
2.38
2.39 + @Exported
2.40 @JavaScriptOnly(name = "activate__Ljava_io_Closeable_2Lorg_apidesign_html_boot_spi_Fn$Presenter_2", value = "function() {\n"
2.41 + " return vm.org_apidesign_bck2brwsr_emul_lang_System(false).activate__Ljava_io_Closeable_2();"
2.42 + "}\n"
2.43 @@ -1822,6 +1825,7 @@
2.44 @JavaScriptBody(args = {"o"}, body = "return o ? o.toString() : null;")
2.45 private static native String msg(Object o);
2.46
2.47 + @Exported
2.48 @JavaScriptOnly(name = "bck2BrwsrThrwrbl", value = "c.bck2BrwsrCnvrt__Ljava_lang_Object_2Ljava_lang_Object_2")
2.49 private static void bck2BrwsrCnvrtVM() {
2.50 }
3.1 --- a/rt/emul/mini/src/main/java/java/lang/String.java Thu May 22 12:19:52 2014 +0200
3.2 +++ b/rt/emul/mini/src/main/java/java/lang/String.java Thu May 22 15:29:40 2014 +0200
3.3 @@ -30,6 +30,7 @@
3.4 import java.lang.reflect.Method;
3.5 import java.util.Comparator;
3.6 import java.util.Locale;
3.7 +import org.apidesign.bck2brwsr.core.Exported;
3.8 import org.apidesign.bck2brwsr.core.ExtraJavaScript;
3.9 import org.apidesign.bck2brwsr.core.JavaScriptBody;
3.10 import org.apidesign.bck2brwsr.core.JavaScriptOnly;
3.11 @@ -1457,7 +1458,7 @@
3.12 public int hashCode() {
3.13 return super.hashCode();
3.14 }
3.15 - int computeHashCode() {
3.16 + @Exported int computeHashCode() {
3.17 int h = 0;
3.18 if (h == 0 && length() > 0) {
3.19 int off = offset();
4.1 --- a/rt/emul/mini/src/main/java/org/apidesign/bck2brwsr/emul/reflect/MethodImpl.java Thu May 22 12:19:52 2014 +0200
4.2 +++ b/rt/emul/mini/src/main/java/org/apidesign/bck2brwsr/emul/reflect/MethodImpl.java Thu May 22 15:29:40 2014 +0200
4.3 @@ -21,6 +21,7 @@
4.4 import java.lang.reflect.Constructor;
4.5 import java.lang.reflect.Method;
4.6 import java.util.Enumeration;
4.7 +import org.apidesign.bck2brwsr.core.Exported;
4.8 import org.apidesign.bck2brwsr.core.JavaScriptBody;
4.9
4.10 /** Utilities to work on methods.
4.11 @@ -126,7 +127,7 @@
4.12 }
4.13 return null;
4.14 }
4.15 -
4.16 +
4.17 public static Method[] findMethods(Class<?> clazz, int mask) {
4.18 Object[] namesAndData = findMethodData(clazz, "", false);
4.19 int cnt = 0;
4.20 @@ -137,6 +138,11 @@
4.21 if (middle == -1) {
4.22 continue;
4.23 }
4.24 + if (sig.startsWith("$") && sig.endsWith("$")) {
4.25 + // produced by Closure compiler in debug mode
4.26 + // needs to be ignored
4.27 + continue;
4.28 + }
4.29 String name = sig.substring(0, middle);
4.30 sig = sig.substring(middle + 2);
4.31 Class<?> cls = (Class<?>) namesAndData[i + 2];
4.32 @@ -152,7 +158,8 @@
4.33 }
4.34 return arr;
4.35 }
4.36 - static String toSignature(Method m) {
4.37 +
4.38 + @Exported static String toSignature(Method m) {
4.39 StringBuilder sb = new StringBuilder();
4.40 sb.append(m.getName()).append("__");
4.41 appendType(sb, m.getReturnType());
4.42 @@ -222,9 +229,17 @@
4.43 public static Enumeration<Class> signatureParser(final String sig) {
4.44 class E implements Enumeration<Class> {
4.45 int pos;
4.46 + int len;
4.47 +
4.48 + E() {
4.49 + len = sig.length();
4.50 + while (sig.charAt(len - 1) == '$') {
4.51 + len--;
4.52 + }
4.53 + }
4.54
4.55 public boolean hasMoreElements() {
4.56 - return pos < sig.length();
4.57 + return pos < len;
4.58 }
4.59
4.60 public Class nextElement() {
5.1 --- a/rt/vm/src/main/java/org/apidesign/vm4brwsr/ByteCodeToJavaScript.java Thu May 22 12:19:52 2014 +0200
5.2 +++ b/rt/vm/src/main/java/org/apidesign/vm4brwsr/ByteCodeToJavaScript.java Thu May 22 15:29:40 2014 +0200
5.3 @@ -229,17 +229,7 @@
5.4 }
5.5 for (MethodData m : jc.getMethods()) {
5.6 byte[] onlyArr = m.findAnnotationData(true);
5.7 - String[] only = findAnnotation(onlyArr, jc,
5.8 - "org.apidesign.bck2brwsr.core.JavaScriptOnly",
5.9 - "name", "value"
5.10 - );
5.11 - if (only != null) {
5.12 - if (only[0] != null && only[1] != null) {
5.13 - append("\n p.").append(only[0]).append(" = ")
5.14 - .append(only[1]).append(";");
5.15 - }
5.16 - continue;
5.17 - }
5.18 + if (javaScriptOnly(onlyArr)) continue;
5.19 String destObject;
5.20 String mn;
5.21 append("\n ");
5.22 @@ -301,17 +291,7 @@
5.23 append("\n }");
5.24 for (FieldData v : jc.getFields()) {
5.25 byte[] onlyArr = v.findAnnotationData(true);
5.26 - String[] only = findAnnotation(onlyArr, jc,
5.27 - "org.apidesign.bck2brwsr.core.JavaScriptOnly",
5.28 - "name", "value"
5.29 - );
5.30 - if (only != null) {
5.31 - if (only[0] != null && only[1] != null) {
5.32 - append("\n p.").append(only[0]).append(" = ")
5.33 - .append(only[1]).append(";");
5.34 - }
5.35 - continue;
5.36 - }
5.37 + if (javaScriptOnly(onlyArr)) continue;
5.38 if (!v.isStatic()) {
5.39 append("\n this.fld_").
5.40 append(className).append('_').
5.41 @@ -331,6 +311,25 @@
5.42 // }
5.43 return "";
5.44 }
5.45 +
5.46 + private boolean javaScriptOnly(byte[] anno) throws IOException {
5.47 + String[] only = findAnnotation(anno, jc,
5.48 + "org.apidesign.bck2brwsr.core.JavaScriptOnly",
5.49 + "name", "value"
5.50 + );
5.51 + if (only != null) {
5.52 + if (only[0] != null && only[1] != null) {
5.53 + append("\n p.").append(only[0]).append(" = ")
5.54 + .append(only[1]).append(";");
5.55 + }
5.56 + if (ExportedSymbols.isMarkedAsExported(anno, jc)) {
5.57 + append("\n p['").append(only[0]).append("'] = p.")
5.58 + .append(only[0]).append(";");
5.59 + }
5.60 + return true;
5.61 + }
5.62 + return false;
5.63 + }
5.64 private String generateStaticMethod(String destObject, MethodData m, StringArray toInitilize) throws IOException {
5.65 String jsb = javaScriptBody(destObject, m, true);
5.66 if (jsb != null) {
6.1 --- a/rt/vm/src/main/java/org/apidesign/vm4brwsr/ExportedSymbols.java Thu May 22 12:19:52 2014 +0200
6.2 +++ b/rt/vm/src/main/java/org/apidesign/vm4brwsr/ExportedSymbols.java Thu May 22 15:29:40 2014 +0200
6.3 @@ -138,7 +138,7 @@
6.4 }
6.5 }
6.6
6.7 - private boolean isMarkedAsExported(byte[] arrData, ClassData cd)
6.8 + static boolean isMarkedAsExported(byte[] arrData, ClassData cd)
6.9 throws IOException {
6.10 if (arrData == null) {
6.11 return false;