Can call methods of Object in obfuscation mode
authorJaroslav Tulach <jaroslav.tulach@apidesign.org>
Fri, 26 Sep 2014 10:44:54 +0200
changeset 1709ce898bccdbc8
parent 1708 8e627eb9edf1
child 1710 6db177c4f72c
Can call methods of Object in obfuscation mode
rt/vm/src/main/java/org/apidesign/vm4brwsr/VM.java
rt/vm/src/test/java/org/apidesign/vm4brwsr/Resources.java
rt/vm/src/test/java/org/apidesign/vm4brwsr/ResourcesWithExtensionsTest.java
     1.1 --- a/rt/vm/src/main/java/org/apidesign/vm4brwsr/VM.java	Fri Sep 26 10:22:23 2014 +0200
     1.2 +++ b/rt/vm/src/main/java/org/apidesign/vm4brwsr/VM.java	Fri Sep 26 10:44:54 2014 +0200
     1.3 @@ -421,10 +421,18 @@
     1.4      private String accessNonVirtualMember(String object,
     1.5                                            String mangledName,
     1.6                                            ClassData declaringClass) {
     1.7 -        return ((declaringClass != null)
     1.8 -                    && !isExternalClass(declaringClass.getClassName()))
     1.9 -                            ? object + "." + mangledName
    1.10 -                            : object + "['" + mangledName + "']";
    1.11 +        if (declaringClass == null) {
    1.12 +            return object + "['" + mangledName + "']";
    1.13 +        }
    1.14 +        final String className = declaringClass.getClassName();
    1.15 +        if (
    1.16 +            "java/lang/Object".equals(className) ||
    1.17 +            "java/lang/reflect/Array".equals(className) ||
    1.18 +            isExternalClass(className)
    1.19 +        ) {
    1.20 +            return object + "['" + mangledName + "']";
    1.21 +        }
    1.22 +        return object + "." + mangledName;
    1.23      }
    1.24  
    1.25      private final class ExportedMethodFinder
     2.1 --- a/rt/vm/src/test/java/org/apidesign/vm4brwsr/Resources.java	Fri Sep 26 10:22:23 2014 +0200
     2.2 +++ b/rt/vm/src/test/java/org/apidesign/vm4brwsr/Resources.java	Fri Sep 26 10:44:54 2014 +0200
     2.3 @@ -92,7 +92,9 @@
     2.4              URL url = en.nextElement();
     2.5              sb.append(readIS(url.openStream(), true));
     2.6          }
     2.7 -        return sb.toString().toString();
     2.8 +        String s = sb.toString();
     2.9 +        s = s + s.hashCode();
    2.10 +        return s.toString();
    2.11      }
    2.12      public static String loadJustHello() throws IOException {
    2.13          URL url = Resources.class.getResource("/META-INF/ahoj");
     3.1 --- a/rt/vm/src/test/java/org/apidesign/vm4brwsr/ResourcesWithExtensionsTest.java	Fri Sep 26 10:22:23 2014 +0200
     3.2 +++ b/rt/vm/src/test/java/org/apidesign/vm4brwsr/ResourcesWithExtensionsTest.java	Fri Sep 26 10:44:54 2014 +0200
     3.3 @@ -39,6 +39,7 @@
     3.4  
     3.5      @Test public void checkHelloWorld() throws Exception {
     3.6          String exp = "Hello World!";
     3.7 +        exp = exp + exp.hashCode();
     3.8          
     3.9          assertExec("Loading precompiled resources:",
    3.10              Resources.class, "loadHello__Ljava_lang_String_2",