Full obfuscation of libraries works OK closure
authorJaroslav Tulach <jaroslav.tulach@apidesign.org>
Sun, 11 May 2014 23:06:45 +0200
branchclosure
changeset 15580c5a8b83182a
parent 1556 a936cbe90474
child 1559 69fb5d5d734a
Full obfuscation of libraries works OK
rt/vm/src/main/java/org/apidesign/vm4brwsr/ByteCodeToJavaScript.java
rt/vm/src/main/java/org/apidesign/vm4brwsr/VM.java
rt/vm/src/test/java/org/apidesign/vm4brwsr/Numbers.java
rt/vm/src/test/java/org/apidesign/vm4brwsr/Resources.java
rt/vm/src/test/java/org/apidesign/vm4brwsr/TestVM.java
     1.1 --- a/rt/vm/src/main/java/org/apidesign/vm4brwsr/ByteCodeToJavaScript.java	Sun May 11 12:24:19 2014 +0200
     1.2 +++ b/rt/vm/src/main/java/org/apidesign/vm4brwsr/ByteCodeToJavaScript.java	Sun May 11 23:06:45 2014 +0200
     1.3 @@ -1313,7 +1313,8 @@
     1.4                      String[] fi = jc.getFieldInfoName(indx);
     1.5                      final int type = VarType.fromFieldType(fi[2].charAt(0));
     1.6                      String ac = accessClass(mangleClassName(fi[0]));
     1.7 -                    smapper.assign(this, type, ac + "(false)._" + fi[1] + "()");
     1.8 +                    String af = accessField(ac + "(false)", "_" + fi[1], fi);
     1.9 +                    smapper.assign(this, type, af + "()");
    1.10                      i += 2;
    1.11                      addReference(fi[0]);
    1.12                      break;
     2.1 --- a/rt/vm/src/main/java/org/apidesign/vm4brwsr/VM.java	Sun May 11 12:24:19 2014 +0200
     2.2 +++ b/rt/vm/src/main/java/org/apidesign/vm4brwsr/VM.java	Sun May 11 23:06:45 2014 +0200
     2.3 @@ -98,7 +98,7 @@
     2.4          }
     2.5          
     2.6          for (String r : asBinary.toArray()) {
     2.7 -            append("\n  ").append(getExportsObject()).append(".registerResource('");
     2.8 +            append("\n  ").append(getExportsObject()).append("['registerResource']('");
     2.9              append(r).append("', '");
    2.10              InputStream is = this.resources.get(r);
    2.11              byte[] arr = new byte[is.available()];
    2.12 @@ -522,7 +522,7 @@
    2.13                  + "    for (var i = 0; i < extensions.length; ++i) {\n"
    2.14                  + "      extensions[i](vm);\n"
    2.15                  + "    }\n"
    2.16 -                + "    vm.registerResource = null;\n"
    2.17 +                + "    vm['registerResource'] = null;\n"
    2.18                  + "    var knownExtensions = extensions.length;\n"
    2.19                  + "    var loader = {};\n"
    2.20                  + "    loader.vm = vm;\n"
    2.21 @@ -535,9 +535,9 @@
    2.22                  + "          load__Ljava_lang_Object_2Ljava_lang_Object_2Ljava_lang_String_2_3Ljava_lang_Object_2(loader, name, args);\n"
    2.23                  + "      } catch (err) {\n"
    2.24                  + "        while (knownExtensions < extensions.length) {\n"
    2.25 -                + "          vm.registerResource = registerResource;\n"
    2.26 +                + "          vm['registerResource'] = registerResource;\n"
    2.27                  + "          extensions[knownExtensions++](vm);\n"
    2.28 -                + "          vm.registerResource = null;\n"
    2.29 +                + "          vm['registerResource'] = null;\n"
    2.30                  + "        }\n"
    2.31                  + "        fn = vm[attr];\n"
    2.32                  + "        if (fn) return fn(false);\n"
    2.33 @@ -568,9 +568,9 @@
    2.34                  + "        loadBytes___3BLjava_lang_Object_2Ljava_lang_String_2_3Ljava_lang_Object_2I(loader, name, args, skip);\n"
    2.35                  + "      if (ret !== null) return ret;\n"
    2.36                  + "      while (knownExtensions < extensions.length) {\n"
    2.37 -                + "        vm.registerResource = registerResource;\n"
    2.38 +                + "        vm['registerResource'] = registerResource;\n"
    2.39                  + "        extensions[knownExtensions++](vm);\n"
    2.40 -                + "        vm.registerResource = null;\n"
    2.41 +                + "        vm['registerResource'] = null;\n"
    2.42                  + "      }\n"
    2.43                  + "      var arr = resources[name];\n"
    2.44                  + "      return (arr && arr.length > arrSize) ? arr[arrSize] : null;\n"
     3.1 --- a/rt/vm/src/test/java/org/apidesign/vm4brwsr/Numbers.java	Sun May 11 12:24:19 2014 +0200
     3.2 +++ b/rt/vm/src/test/java/org/apidesign/vm4brwsr/Numbers.java	Sun May 11 23:06:45 2014 +0200
     3.3 @@ -37,46 +37,46 @@
     3.4          return a % b;
     3.5      }
     3.6  
     3.7 -    static float deserFloat() throws IOException {
     3.8 +    public static float deserFloat() throws IOException {
     3.9          byte[] arr = {(byte) 71, (byte) 84, (byte) 52, (byte) 83};
    3.10          ByteArrayInputStream is = new ByteArrayInputStream(arr);
    3.11          DataInputStream dis = new DataInputStream(is);
    3.12          float r = dis.readFloat();
    3.13          return r;
    3.14      }
    3.15 -    static double deserDouble() throws IOException {
    3.16 +    public static double deserDouble() throws IOException {
    3.17          byte[] arr = {(byte)64, (byte)8, (byte)0, (byte)0, (byte)0, (byte)0, (byte)0, (byte)0};
    3.18          ByteArrayInputStream is = new ByteArrayInputStream(arr);
    3.19          DataInputStream dis = new DataInputStream(is);
    3.20          return dis.readDouble();
    3.21      }
    3.22 -    static long deserLong(byte[] arr) throws IOException {
    3.23 +    public static long deserLong(byte[] arr) throws IOException {
    3.24          ByteArrayInputStream is = new ByteArrayInputStream(arr);
    3.25          DataInputStream dis = new DataInputStream(is);
    3.26          return dis.readLong();
    3.27      }
    3.28 -    static long deserLong(byte[] arr, int shift) throws IOException {
    3.29 +    public static long deserLong(byte[] arr, int shift) throws IOException {
    3.30          return deserLong(arr) >> shift;
    3.31      }
    3.32 -    static int deserInt() throws IOException {
    3.33 +    public static int deserInt() throws IOException {
    3.34          byte[] arr = {(byte) 71, (byte) 84, (byte) 52, (byte) 83};
    3.35          ByteArrayInputStream is = new ByteArrayInputStream(arr);
    3.36          DataInputStream dis = new DataInputStream(is);
    3.37          return dis.readInt();
    3.38      }
    3.39 -    static long bytesToLong(byte b1, byte b2, int shift) {
    3.40 +    public static long bytesToLong(byte b1, byte b2, int shift) {
    3.41          return (((long)b1 << 56) +
    3.42                  ((long)b2 & 255) << 48) >> shift;
    3.43      }
    3.44  
    3.45 -    static String intToString() {
    3.46 +    public static String intToString() {
    3.47          return new Integer(5).toString().toString();
    3.48      }
    3.49 -    static String floatToString() {
    3.50 +    public static String floatToString() {
    3.51          return new Float(7.0).toString().toString();
    3.52      }
    3.53      
    3.54 -    static double seven(int todo) {
    3.55 +    public static double seven(int todo) {
    3.56          switch (todo) {
    3.57              case 0: return sevenNew().doubleValue();
    3.58              case 1: return sevenNew().intValue();
    3.59 @@ -91,7 +91,7 @@
    3.60              default: throw new IllegalStateException();
    3.61          }
    3.62      }
    3.63 -    static boolean bseven(int todo) {
    3.64 +    public static boolean bseven(int todo) {
    3.65          switch (todo) {
    3.66              case 30: return bvalueOf(Boolean.FALSE);
    3.67              case 31: return bvalueOf(Boolean.TRUE);
     4.1 --- a/rt/vm/src/test/java/org/apidesign/vm4brwsr/Resources.java	Sun May 11 12:24:19 2014 +0200
     4.2 +++ b/rt/vm/src/test/java/org/apidesign/vm4brwsr/Resources.java	Sun May 11 23:06:45 2014 +0200
     4.3 @@ -64,7 +64,7 @@
     4.4                  ((long)b2 & 255) << 48) >> shift;
     4.5      }
     4.6  
     4.7 -    static String loadHello() throws IOException {
     4.8 +    public static String loadHello() throws IOException {
     4.9          Enumeration<URL> en;
    4.10          try {
    4.11              en = Resources.class.getClassLoader().getResources("META-INF/ahoj");
    4.12 @@ -78,7 +78,7 @@
    4.13          }
    4.14          return sb.toString().toString();
    4.15      }
    4.16 -    static String loadJustHello() throws IOException {
    4.17 +    public static String loadJustHello() throws IOException {
    4.18          URL url = Resources.class.getResource("/META-INF/ahoj");
    4.19          StringBuilder sb = new StringBuilder();
    4.20          sb.append(readIS(url.openStream(), true));
     5.1 --- a/rt/vm/src/test/java/org/apidesign/vm4brwsr/TestVM.java	Sun May 11 12:24:19 2014 +0200
     5.2 +++ b/rt/vm/src/test/java/org/apidesign/vm4brwsr/TestVM.java	Sun May 11 23:06:45 2014 +0200
     5.3 @@ -160,7 +160,9 @@
     5.4                      return super.get(name);
     5.5                  }
     5.6              }).
     5.7 -            addRootClasses(name).library(true);
     5.8 +            addRootClasses(name).
     5.9 +            obfuscation(ObfuscationLevel.FULL).
    5.10 +            library(true);
    5.11          if (resourceName != null) {
    5.12              b2b = b2b.addResources(resourceName);
    5.13          }