Don't redefine already exported classes
authorJaroslav Tulach <jaroslav.tulach@apidesign.org>
Sun, 20 Mar 2016 15:26:19 +0100
changeset 1902c3dee54ecc15
parent 1901 e9be21ce2291
child 1903 0267fb5bc8d5
Don't redefine already exported classes
rt/emul/compact/src/main/java/org/apidesign/bck2brwsr/emul/reflect/ProxyImpl.java
rt/emul/compacttest/src/test/java/org/apidesign/bck2brwsr/tck/ReflectionTest.java
rt/vm/src/main/java/org/apidesign/vm4brwsr/ByteCodeToJavaScript.java
rt/vm/src/main/java/org/apidesign/vm4brwsr/VM.java
     1.1 --- a/rt/emul/compact/src/main/java/org/apidesign/bck2brwsr/emul/reflect/ProxyImpl.java	Sun Mar 20 11:01:12 2016 +0100
     1.2 +++ b/rt/emul/compact/src/main/java/org/apidesign/bck2brwsr/emul/reflect/ProxyImpl.java	Sun Mar 20 15:26:19 2016 +0100
     1.3 @@ -48,9 +48,9 @@
     1.4  import java.util.List;
     1.5  import java.util.ListIterator;
     1.6  import java.util.WeakHashMap;
     1.7 +import org.apidesign.bck2brwsr.core.Exported;
     1.8  import org.apidesign.bck2brwsr.core.JavaScriptBody;
     1.9  import org.apidesign.bck2brwsr.emul.reflect.MethodImpl;
    1.10 -import org.apidesign.vm4brwsr.api.VM;
    1.11  
    1.12  /**
    1.13   * {@code Proxy} provides static methods for creating dynamic proxy
    1.14 @@ -234,6 +234,7 @@
    1.15   * @see         InvocationHandler
    1.16   * @since       1.3
    1.17   */
    1.18 +@Exported
    1.19  public final class ProxyImpl implements java.io.Serializable {
    1.20  
    1.21      private static final long serialVersionUID = -2222568056686623797L;
     2.1 --- a/rt/emul/compacttest/src/test/java/org/apidesign/bck2brwsr/tck/ReflectionTest.java	Sun Mar 20 11:01:12 2016 +0100
     2.2 +++ b/rt/emul/compacttest/src/test/java/org/apidesign/bck2brwsr/tck/ReflectionTest.java	Sun Mar 20 15:26:19 2016 +0100
     2.3 @@ -75,6 +75,10 @@
     2.4          return Runnable.class.getMethod("run").getName();
     2.5      }
     2.6  
     2.7 +    @Compare public boolean RunnableRunReturnsVoid() throws NoSuchMethodException {
     2.8 +        return Runnable.class.getMethod("run").getReturnType() == Void.TYPE;
     2.9 +    }
    2.10 +
    2.11      @Compare public String isRunnableDeclaresRunMethod() throws NoSuchMethodException {
    2.12          return Runnable.class.getDeclaredMethod("run").getName();
    2.13      }
     3.1 --- a/rt/vm/src/main/java/org/apidesign/vm4brwsr/ByteCodeToJavaScript.java	Sun Mar 20 11:01:12 2016 +0100
     3.2 +++ b/rt/vm/src/main/java/org/apidesign/vm4brwsr/ByteCodeToJavaScript.java	Sun Mar 20 15:26:19 2016 +0100
     3.3 @@ -130,8 +130,9 @@
     3.4          return object + "." + mangledName + '(';
     3.5      }
     3.6  
     3.7 -    protected void declaredClass(ClassData classData, String mangledName)
     3.8 -            throws IOException {
     3.9 +    protected void declareClass(ClassData classData, String mangledName)
    3.10 +    throws IOException {
    3.11 +        append(mangledName);
    3.12      }
    3.13  
    3.14      protected void declaredField(FieldData fieldData,
    3.15 @@ -223,7 +224,7 @@
    3.16          );
    3.17          StringArray toInitilize = new StringArray();
    3.18          final String className = className(jc);
    3.19 -        append("\n\n").append(assignClass(className));
    3.20 +        append("\n\n");
    3.21          append("function ").append(className).append("() {");
    3.22          append("\n  var m;");
    3.23          append("\n  var CLS = ").append(className).append(';');
    3.24 @@ -383,7 +384,9 @@
    3.25          append("\n  return arguments[0] ? new CLS() : CLS.prototype;");
    3.26          append("\n};");
    3.27  
    3.28 -        declaredClass(jc, className);
    3.29 +        append("\n").append(assignClass(className));
    3.30 +        declareClass(jc, className);
    3.31 +        append(";\n");
    3.32  
    3.33  //        StringBuilder sb = new StringBuilder();
    3.34  //        for (String init : toInitilize.toArray()) {
     4.1 --- a/rt/vm/src/main/java/org/apidesign/vm4brwsr/VM.java	Sun Mar 20 11:01:12 2016 +0100
     4.2 +++ b/rt/vm/src/main/java/org/apidesign/vm4brwsr/VM.java	Sun Mar 20 15:26:19 2016 +0100
     4.3 @@ -95,8 +95,11 @@
     4.4  
     4.5      private void doCompile(StringArray names) throws IOException {
     4.6          generatePrologue();
     4.7 -        append(
     4.8 -                "\n  var invoker = {};");
     4.9 +        append("\n  var invoker = {};");
    4.10 +        append("\n  function registerClass(vm, name, fn) {");
    4.11 +        append("\n    if (!vm[name]) vm[name] = fn;");
    4.12 +        append("\n    return vm[name];");
    4.13 +        append("\n  }");
    4.14          generateBody(names);
    4.15          append(invokerMethods);
    4.16          
    4.17 @@ -147,15 +150,17 @@
    4.18      protected abstract void lazyReference(Appendable out, String n) throws IOException;
    4.19      
    4.20      @Override
    4.21 -    protected final void declaredClass(ClassData classData, String mangledName)
    4.22 +    protected final void declareClass(ClassData classData, String mangledName)
    4.23              throws IOException {
    4.24          if (exportedSymbols.isExported(classData)) {
    4.25 -            append("\n").append(getExportsObject()).append("['")
    4.26 +            append("registerClass(").append(getExportsObject()).append(",'")
    4.27                                                 .append(mangledName)
    4.28 -                                               .append("'] = ")
    4.29 -                            .append(accessClass(mangledName))
    4.30 -               .append(";\n");
    4.31 +                                               .append("',")
    4.32 +                            .append(mangledName)
    4.33 +               .append(")");
    4.34              exportedCount++;
    4.35 +        } else {
    4.36 +            append(mangledName);
    4.37          }
    4.38      }
    4.39