nashorn/buildtools/nasgen/README
changeset 16147 e63b63819133
equal deleted inserted replaced
16146:7b62478ee76c 16147:e63b63819133
       
     1 Nasgen is a tool for processing Java classes that implement native
       
     2 JavaScript objects. It does so by looking for the
       
     3 com.oracle.nashorn.objects.annotations.ScriptClass annotation and other
       
     4 annotations in that package.
       
     5 
       
     6 For each  class "C", nasgen instruments the original class and generates
       
     7 two additional classes: a "C$Prototype" class for the JavaScript
       
     8 prototype object, and a "C$Constructor" class for the JavaScript
       
     9 constructor function.
       
    10 
       
    11 Each class instrumented or generated by nasgen contains a private static
       
    12 "$nasgenmap$" field of type com.oracle.nashorn.runtime.PropertyMap and
       
    13 static initializer block to initialize the field to the object's
       
    14 JavaScript properties.
       
    15 
       
    16 Members annotated with @Function, @Property, @Getter, and @Setter are
       
    17 mapped to the $Constructor, $Prototype, or main class, depending on the
       
    18 value of the annotation's 'where' field. By default, @Property, @Getter,
       
    19 and @Setter belong to the main class while @Function methods without
       
    20 explicit 'where' field belong to the $Prototype class. The @Constructor
       
    21 annotation marks a method to be invoked as JavaScript constructor.
       
    22 
       
    23 Nasgen enforces all @Function/@Getter/@Setter/@Constructor annotated
       
    24 methods to be declared as static. Static final @Property fields remain
       
    25 in the main class while other @Property fields are moved to respective
       
    26 classes depending on the annotation's 'where' value. For functions
       
    27 mapped to the $Prototype or $Constructor class, nasgen also generates
       
    28 getters and setters prefixed by G$ and S$, respectively.
       
    29 
       
    30 Nasgen-generated classes are hidden from normal ClassLoaders by giving
       
    31 them a ".clazz" file name extension instead of the standard ".class"
       
    32 extension. This allows script classes to be loaded independently by each
       
    33 Nashorn context through the com.oracle.nashorn.runtime.StructureLoader
       
    34 class loader.