jdk-24/nashorn/buildtools/nasgen
Athijegannathan Sundararajan dfcb34c132 8157241: Remove javac warnings of Nashorn "ant clean test"
Reviewed-by: mhaupt, hannesw
2016-05-18 20:17:48 +05:30
..
src 8157241: Remove javac warnings of Nashorn "ant clean test" 2016-05-18 20:17:48 +05:30
build.xml 8155944: ant build/test of nashorn is broken with the latest jdk9-dev build 2016-05-03 21:27:00 +05:30
nasgen.iml 8005663: Update copyright year to 2013 2013-01-04 09:58:33 -04:00
project.properties 8155944: ant build/test of nashorn is broken with the latest jdk9-dev build 2016-05-03 21:27:00 +05:30
README 8005403: Open-source Nashorn 2012-12-21 16:36:24 -04:00

Nasgen is a tool for processing Java classes that implement native
JavaScript objects. It does so by looking for the
com.oracle.nashorn.objects.annotations.ScriptClass annotation and other
annotations in that package.

For each  class "C", nasgen instruments the original class and generates
two additional classes: a "C$Prototype" class for the JavaScript
prototype object, and a "C$Constructor" class for the JavaScript
constructor function.

Each class instrumented or generated by nasgen contains a private static
"$nasgenmap$" field of type com.oracle.nashorn.runtime.PropertyMap and
static initializer block to initialize the field to the object's
JavaScript properties.

Members annotated with @Function, @Property, @Getter, and @Setter are
mapped to the $Constructor, $Prototype, or main class, depending on the
value of the annotation's 'where' field. By default, @Property, @Getter,
and @Setter belong to the main class while @Function methods without
explicit 'where' field belong to the $Prototype class. The @Constructor
annotation marks a method to be invoked as JavaScript constructor.

Nasgen enforces all @Function/@Getter/@Setter/@Constructor annotated
methods to be declared as static. Static final @Property fields remain
in the main class while other @Property fields are moved to respective
classes depending on the annotation's 'where' value. For functions
mapped to the $Prototype or $Constructor class, nasgen also generates
getters and setters prefixed by G$ and S$, respectively.

Nasgen-generated classes are hidden from normal ClassLoaders by giving
them a ".clazz" file name extension instead of the standard ".class"
extension. This allows script classes to be loaded independently by each
Nashorn context through the com.oracle.nashorn.runtime.StructureLoader
class loader.