Turn the callback classes into singletons with VM field
authorJaroslav Tulach <jaroslav.tulach@apidesign.org>
Thu, 11 Jul 2013 16:39:39 +0200
changeset 1879fed4172ad33
parent 186 e5dc51fadf4a
child 188 5f3b1d7fafec
Turn the callback classes into singletons with VM field
boot/src/main/java/org/apidesign/html/boot/impl/JavaScriptProcesor.java
boot/src/test/java/org/apidesign/html/boot/impl/JavaScriptProcesorTest.java
     1.1 --- a/boot/src/main/java/org/apidesign/html/boot/impl/JavaScriptProcesor.java	Thu Jul 11 16:33:40 2013 +0200
     1.2 +++ b/boot/src/main/java/org/apidesign/html/boot/impl/JavaScriptProcesor.java	Thu Jul 11 16:39:39 2013 +0200
     1.3 @@ -220,6 +220,8 @@
     1.4              StringBuilder source = new StringBuilder();
     1.5              source.append("package ").append(pkgName).append(";\n");
     1.6              source.append("final class $JsCallbacks$ {\n");
     1.7 +            source.append("  public static final $JsCallbacks$ VM = new $JsCallbacks$();\n");
     1.8 +            source.append("  private $JsCallbacks$() {}\n");
     1.9              for (Map.Entry<String, ExecutableElement> entry : map.entrySet()) {
    1.10                  final String mangled = entry.getKey();
    1.11                  final ExecutableElement m = entry.getValue();
     2.1 --- a/boot/src/test/java/org/apidesign/html/boot/impl/JavaScriptProcesorTest.java	Thu Jul 11 16:33:40 2013 +0200
     2.2 +++ b/boot/src/test/java/org/apidesign/html/boot/impl/JavaScriptProcesorTest.java	Thu Jul 11 16:39:39 2013 +0200
     2.3 @@ -21,8 +21,10 @@
     2.4  package org.apidesign.html.boot.impl;
     2.5  
     2.6  import java.io.IOException;
     2.7 +import java.lang.reflect.Field;
     2.8  import java.lang.reflect.Method;
     2.9  import static org.testng.Assert.assertEquals;
    2.10 +import static org.testng.Assert.assertTrue;
    2.11  import org.testng.annotations.Test;
    2.12  
    2.13  /**
    2.14 @@ -95,4 +97,11 @@
    2.15          Method m = callbacksForTestPkg.getDeclaredMethod("java_lang_Runnable__run__", Runnable.class);
    2.16          assertEquals(m.getReturnType(), Object.class, "All methods always return object");
    2.17      }
    2.18 +    
    2.19 +    @Test public void hasInstanceField() throws Exception {
    2.20 +        Class<?> callbacksForTestPkg = Class.forName("org.apidesign.html.boot.impl.$JsCallbacks$");
    2.21 +        Field f = callbacksForTestPkg.getDeclaredField("VM");
    2.22 +        f.setAccessible(true);
    2.23 +        assertTrue(callbacksForTestPkg.isInstance(f.get(null)), "Singleton field VM");
    2.24 +    }
    2.25  }