All Classes and Interfaces
Class
Description
A base class and wrapper for
that implements all redundant API methods.
invalid reference
Compiler
Base class for a simple
ICompilerFactory
.A
ClassLoader
that, unlike usual ClassLoader
s, does not load byte code, but reads Java source
code and then scans, parses, compiles and loads it into the virtual machine.A basic implementation of
Traverser
; each traverse*(s)
method invokes the
traverse*()
methods of all Java elements subordinate to x
.Return value for
IClass.IMember.getAccess()
.An object in a Java class file which can have annotations (classes, methods and fields).
A simple
CompilerAdapter
for the "ant" tool that silently ignores
most of the configuration parameters and attempts to compile all given source files into class files.Simple logging of method invocations.
A
FilterWriter
that indents lines by processing some control characters in the character stream.Implements a scheme for benchmarking, i.e.
Interface used to report messages.
This
ClassLoader
allows for the loading of a set of Java classes provided in class file format.A
JavaSourceClassLoader
that uses a resource storage provided by the application to
cache compiled classes and thus saving unnecessary recompilations.This interface produces a sequence of
char
s.A test program that allows you to play with the
IClassBodyEvaluator
API.To set up a
ClassBodyEvaluator
object, proceed as described for IClassBodyEvaluator
.Utility methods related to
Class
.An object that implements the Java "class file" format.
The structure of the
annotations
array as described in JVMS8 4.7.16.Representation of an
AnnotationDefault
attribute (see JVMS8 4.7.22).Representation of a
Runtime[In]visibleAnnotations
attribute (see JVMS8 4.7.16/17).Representation of the "array_value" structure.
Representation of a class file attribute (see JVMS7 4.7).
Unchecked exception that represents an error condition that could occur during processing of class files, e.g.
Representation of an unmodifiable
Code
attribute, as read from a class file.Representation of an entry in the "exception_table" of a "Code" attribute (see JVMS 4.7.3).
See JVMS7 4.4.1.
See JVMS7 4.4.5.
Convenience class for element values that are constants (as opposed to annotations, enum constants and
arrays).
The visitor interface for the implementation of the "visitor" pattern.
See JVMS7 4.4.2.
See JVMS7 4.4.4.
See JVMS7 4.4.4.
See JVMS7 4.4.2.
See JVMS7 4.4.10.
See JVMS7 4.4.5.
See JVMS7 4.4.8.
See JVMS7 4.4.2.
See JVMS7 4.4.9.
See JVMS7 4.4.6.
Base for various the constant pool table entry types.
See JVMS7 4.4.3.
See JVMS7 4.4.7.
Representation of a
ConstantValue
attribute (see JVMS 4.7.2).Intermediate base class for constant pool table entry types that have 'value' semantics: Double, Float,
Integer, Long, String
Representation of a
Deprecated
attribute (see JVMS 4.7.10).Representation of the "element_value" structure (see JVMS8 4.7.16.1).
The visitor interface for the implementation of the "visitor" pattern.
Representation of the "enum_const_value" element in the "element_value" structure.
Representation of an
Exceptions
attribute (see JVMS 4.7.4).Representation of an
InnerClasses
attribute (see JVMS 4.7.5).The structure of the
classes
array as described in JVMS7 4.7.6.Representation of a
LineNumberTable
attribute (see JVMS 4.7.8).The structure of the entries in the
line_number_table
, as described in JVMS7 4.7.12.Representation of a
LocalVariableTable
attribute (see JVMS 4.7.9).The structure of the entries in the
local_variable_table
, as described in JVMS7 4.7.13.Representation of a
Signature
attribute (see JVMS 4.7.9).Representation of a
SourceFile
attribute (see JVMS 4.7.7).Representation of an unmodifiable
StackMapTable
attribute, as read from a class file.Representation of the
append_frame
structure; see JVMS8 4.7.4.Representation of the
chop_frame
structure; see JVMS8 4.7.4.Representation of the
full_frame
structure; see JVMS8 4.7.4.Representation of the
object_variable_info
structure; see JVMS8 4.7.4.Representation of the
same_frame
structure; see JVMS8 4.7.4.Representation of the
same_frame_extended
structure; see JVMS8 4.7.4.Representation of the
same_locals_1_stack_item_frame
structure; see JVMS8 4.7.4.Representation of the
same_locals_1_stack_item_frame_extended
structure; see JVMS8 4.7.4.Representation of an entry in the
ClassFile.StackMapTableAttribute
.Representation of the
uninitialized_variable_info
structure; see JVMS8 4.7.4.Representation of the
verification_type_info
union; see JVMS8 4.7.4.Representation of a
Synthetic
attribute (see JVMS 4.7.6).Utility methods around the
ClassLoader
.The context of the compilation of a function (constructor or method).
Representation of an entry in the "exception_table" of a "Code" attribute (see JVMS 4.7.3).
A throw-in interface that marks
CodeContext.Offset
s as "fix-ups": During the execution of CodeContext.fixUp()
, all "fix-ups" are invoked and can do last touches to the code attribute.Representation of an error condition during compilation.
javax.tools
-based implementation of the ICompiler
.JANINO implementation of
ICompiler
.A drop-in replacement for the JDK's
JAVAC
tool.The
CompilerFactory
implementation for org.codehaus.commons.compiler.jdk
.The JANINO implementation of
ICompilerFactory
.Utility class that finds implementations of
ICompilerFactory
s.Facade for Java 8's
java.util.reflect.Consumer
interface.Helper methods for the
Consumer
facade.Base class for a simple
ICookable
.An example application for the
Traverser
: Reads, scans and parses the files named
on the command line and counts several kinds of declarations.Creates deep copies of AST elements.
Common base class for the "...Demo" classes that demostrate Janino.
Helper class that defines useful methods for handling "field descriptors"
(JVMS 4.3.2) and "method descriptors" (JVMS 4.3.3).
An
Iterator<File>
that finds regular files who's names are accepted
by the fileNameFilter and
exist in the given rootDirectory, or
exist in any subdirectory of the rootDirectory that is accepted
by the directoryNameFilter.Indicates that
File.listFiles()
returned null
for a particular directory.Creates a resource in a given directory:
A
FileResourceFinder
that finds file resources in a directory.Generates human-readable Java assembler code from Java bytecode.
An
Iterator
that iterates over the elements of an Enumeration
.Processes an error issued by the compiler.
A test program that allows you to play around with the
IExpressionEvaluator
class.This
IExpressionEvaluator
is implemented by creating and compiling a temporary compilation unit defining one
class with one static method with one RETURN statement.This
IExpressionEvaluator
is implemented by creating and compiling a temporary compilation unit defining one
class with one static method with one RETURN statement.Representation of a resource that is a
File
.Stores a stream of bytes in a named resource.
This class specializes the
ResourceFinder
for finding resources
in File
s.An
ListIterator
that retrieves its elements from a delegate ListIterator
.Invokes a delegate iff the handle of the warning matches one or more of a set of
StringPattern
s.Example for object allocation statistics:
A simplified equivalent to "java.lang.reflect".
Representation of a Java "annotation".
Base for the members of an
IClass
.Parses a class body and returns it as a
Class
object ready for use with
java.lang.reflect.Loads an
IClass
by type name.A simplified substitute for the javac tool.
An entity that produces implementations of
IExpressionEvaluator
, IScriptEvaluator
, IClassBodyEvaluator
, ISimpleCompiler
or AbstractJavaSourceClassLoader
.An entity that processes a sequence of characters (a "document").
An engine that evaluates expressions in JVM bytecode.
Indicates an event that is probably related to a bug in JANINO.
An engine that executes a script in JVM bytecode.
A simplified Java compiler that can compile only a single compilation unit.
A
Collection
that lazily reads its elements from an Iterator
.Type bounds can either be a class or interface type, or a type variable.
The compilation of
Compiler
, JavaSourceIClassLoader
, SimpleCompiler
and their subclasses
can be configured with these options.Finds resources in any of the "*.jar" files that exist in a given set of directories.
This wrapper class defines classes that represent the elements of the Java programming language.
Convenience class.
Base for the various class declaration kinds.
Holds the result of
Parser.parseAbstractCompilationUnit()
.Base class for the various IMPORT declarations.
Represents a single static import declaration like
Represents a "single-type import declaration" like "
import java.util.Map;
".Represents a static-import-on-demand declaration like
Represents a type-import-on-demand declaration like
import java.util.*;
.Abstract implementation of
Java.TypeBodyDeclaration
.Abstract implementation of
Java.TypeDeclaration
.Representation of the modifier flags and annotations that are associated with a declaration.
Representation of a JLS7 8.8.7.1.
Representation of a JLS7 6.5.2 "ambiguous name".
Representation of Java elements that can be annotated: Fields, constructors, methods, type declarations.
Representation of a Java annotation.
Base for package member ("top-level") and member ("nested") annotation type declarations.
Representation of a JLS7 15.9.5 "anonymous class declaration".
Representation of a JLS7 15.13 (JLS8: 15.10.3) "array access expression".
Representation of a "method reference expression", as described in JLS9 15.13, with the form "
<var>arrayType</var>::new
".Representation of a JLS7 10.6 "array initializer".
The union of
Java.ArrayInitializer
and Java.Rvalue
.Representation of the JLS7 10.7 array type "length" pseudo-member.
Representation of a JLS7 10.1 "array type".
Representation of the JLS7 14.10 ASSERT statement.
Representation of all JLS7 15.26 assignments.
Representation of all non-operand-modifying binary operations.
Representation of a Java "block" (JLS7 14.2).
Representation of a "lambda body" that is a block; see JLS9 15.27.2.
Everything that can be compiled to code, e.g.
Representation of a "boolean literal" (JLS7 3.10.3) (type
boolean
).Base class for
Java.Rvalue
s that compile better as conditional branches.Base class for statements that can be terminated abnormally with a
break
statement.Representation of the JLS7 14.15 BREAK statement.
Representation of a JLS7 15.16 "cast expression".
Representation of a JLS7 14.20.1 CATCH clause.
Representation of a "catch" parameter.
Representation of a "character literal" (JLS7 3.10.4) (type
char
).Base for the various class declarations (top-level class, local class, anonymous class, nested class, top-level
enum, nested enum).
Representation of a "method reference expression", as described in JLS9 15.13, with the form "
<var>classType</var>::new
".Representation of a JLS7 15.8.2 "class literal".
Representation of an "ordinary compilation unit" as explained in JLS9 7.3 (before Java 9 known as "compilation
unit" and described in JLS8 7.3).
Representation of a JLS7 15.25 "conditional operation".
Representation of a constructor declarator.
Abstract bas class for
Java.SuperConstructorInvocation
and Java.AlternateConstructorInvocation
.Base class for statements that support the "continue" statement.
Representation of the JLS7 14.16 CONTINUE statement.
Representation of a JLS7 15.14.2 "postfix increment operation", a JLS7 15.14.3 "postfix decrement operation", a
JLS7 15.15.1 "prefix increment operation" or a JLS7 15.15.2 "prefix decrement operation".
Representation of a Java element that can be annotated with a DOC comment ("
/** ...
Representation of a JLS7 14.13 DO statement.
Base of the possible element values in a
Java.NormalAnnotation
.An element value in the form of an array initializer, e.g.
Representation of a "name = value" element in a
Java.NormalAnnotation
.Representation of the "empty statement", i.e.
Lazily determines and returns the enclosing
Java.Scope
of the given Java.TypeDeclaration
.Representation of an "enum constant", see JLS7 8.9.1.
Base for package member (a.k.a.
Representation of a (Java 9+) "exports directive", as explained in JLS9 7.7.2.
Representation of a "lambda body" that is an expression; see JLS9 15.27.2.
Representation of the JLS7 14.8 "expression statement".
Representation of an access to a field of a class or an interface.
Representation of a JLS7 15.11 "field access expression", including the "array length" pseudo field access.
This class is derived from "Statement", because it provides for the initialization of the field.
Representation of a "floating-point literal" (JLS7 3.10.2) (types
float
and double
).Representation of a JLS7 14.14.2 "enhanced FOR statement".
Representation of "lamba parameters" that include a formal parameter list; see JLS9 15.27.1.
Representation of a JLS7 14.14.1 "basic FOR statement".
Abstract base class for
Java.ConstructorDeclarator
and Java.MethodDeclarator
.Representation of a (formal) function parameter.
Representation of the (formal) function parameters.
Representation of "lamba parameters" that consist of a single identifier; see JLS9 15.27.1
Representation of a JLS7 14.9 IF statement.
Representation of "lamba parameters" that include an inferred formal parameter list; see JLS9 15.27.1.
Representation of an "instance initializer" (JLS7 8.6) or "static initializer" (JLS7 8.7).
Represents the declaration of an inner class, i.e.
Representation of a JLS7 15.20.2 "type comparison operation".
Representation of an "integer literal" (JLS7 3.10.1) (types
int
and long
).Base for the various interface declaration kinds.
Abstract base class for
Java.MethodInvocation
and Java.SuperclassMethodInvocation
.Representation of a JLS7 14.7 "labeled statement".
Representation of a "lambda body", see JLS9 15.27.2.
Representation of a (Java 8+) "lambda expression", see JLS9 15.27.
Base for the various "lambda parameters" styles, see JLS9 15.27.1.
Abstract base class for the various Java literals; see JLS7 3.10.
Representation of a "local class declaration" i.e.
Representation of the JLS7 14.3 "local class declaration statement".
Representation of a local variable while it is in scope during compilation.
Representation of a local variable access -- used during compilation.
Representation of a JLS7 14.4 "local variable declaration statement".
All local variables have a slot number; local variables that get written into the "local variable table"
also have a start and end offset that defines the variable's extent in the bytecode.
This interface is implemented by objects which are associated with a location in the source code.
Abstract implementation of
Java.Locatable
.Representation of an "lvalue", i.e.
Representation of a "marker annotation", i.e.
Representation of a member annotation type declaration, a.k.a.
Representation of a "member class declaration", i.e.
Representation of a "member enum declaration", i.e.
Representation of a "member interface declaration", i.e.
Represents a class or interface declaration where the immediately enclosing scope is another class or interface
declaration.
Representation of a method declarator.
Representation of a JLS7 15.12 "method invocation expression".
Representation of a "method reference expression", as described in JLS9 15.13, with the form "
<var>referenceType</var>::identifier
.Base for the various modifiers (access modifiers, annotations).
Deprecated.
Represents a
ModularCompilationUnit
as specified in JLS11 7.3.Representation of a "module declaration", as described in JLS9 7.7.
Representation of a (Java 9+) "module directive", as explained in JLS9 7.7.
Base for the various named class declarations.
Represents the declaration of a class or an interface that has a name.
Representation of a JLS7 15.9 "anonymous class instance creation expression".
Representation of a JLS7 15.10 "array creation expression".
Representation of a JLS7 "class instance creation expression".
Representation of a JLS7 15.10 "array creation expression".
A "normal annotation", i.e.
Representation of a "null literal" (JLS7 3.10.7).
Representation of a (Java 9+) "opens directive", as explained in JLS9 7.7.2.
Representation of a JLS7 6.5.2.1.5 "package name".
Representation of a package declaration like
package com.acme.tools;
.Representation of a package member annotation type declaration, a.k.a.
Implementation of a "package member class declaration", a.k.a.
Implementation of a "package member enum declaration", a.k.a.
Representation of a "package member interface declaration", a.k.a.
Represents a class or interface declaration on compilation unit level.
"Artificial" operation for accessing the parameters of the synthetic constructor of an anonymous class.
Representation of a JLS7 15.8.5 "parenthesized expression".
Java's primitive types.
Representation of a JLS7 4.2 "primitive type", i.e a primitive type "usage", which has a location.
Representation of a (Java 9+) "provides directive", as explained in JLS9 7.7.4.
Representation of an JLS7 15.8.4 access to the current object or an enclosing instance.
Representation of a JLS7 4.3 reference type.
Representation of a (Java 9+) "requires directive", as explained in JLS9 7.7.1.
Representation of the JLS7 14.17 RETURN statement.
Representation of an "rvalue", i.e.
Representation of the first part of a JLS7 15.9 "Qualified class instance creation expression": The "
a.new MyClass
" part of "a.new MyClass(...)
" expression.Representation of a Java "scope", e.g.
This class is not used when code is parsed; it is intended for "programmatic" literals.
This class is not used when code is parsed; it is intended for "programmatic" types.
Representation of a "single-element annotation", i.e.
Everything that can occur in the body of a method or in a block.
Representation of a "string literal" (JLS7 3.10.5) (type
String
).Representation of an JLS7 "superclass field access expression", e.g.
Representation of a JLS7 15.12.1.1.3 "superclass method invocation".
Representation of a JLS7 8.8.7.1.
The JLS7 14.10
switch
Statement.Representation of a "switch block statement group" as defined in JLS7 14.11.
Representation of a JLS7 14.9 SYNCHRONIZED statement.
Representation of an JLS7 15.8.3 access to the innermost enclosing instance.
Representation of a JLS7 14.18 THROW statement.
Representation of a JLS7 14.20 TRY statement.
Representation of a JLS9 14.20.2 "local-variable-declarator resource" in a TRY-with-resources statement.
Representation of a JLS9 14.20.2 "resource" in a TRY-with-resources statement.
Representation of a JLS9 14.20.2 "variable-access resource" in a TRY-with-resources statement.
Representation of a Java type.
Representation of a JLS7 4.5.1 type argument.
Representation of a "ClassBodyDeclaration" or an "InterfaceMemberDeclaration".
Base for the various kinds of type declarations, e.g.
Representation of a type parameter (which declares a type variable).
Representation of a JLS7 15.15.3 "unary plus operator", a JLS7 15.15.4 "unary minus operator", a JLS7 15.15.5
"bitwise complement operator" or a JLS7 15.15.6 "logical complement operator".
Representation of a (Java 9+) "uses directive", as explained in JLS9 7.7.3.
Used by FieldDeclaration and LocalVariableDeclarationStatement.
Representation of the JLS7 14.2 WHILE statement.
Representation of a JLS7 4.5.1 "wildcard".
Utility methods related to
JavaFileManager
s.Utility methods related to
JavaFileObject
s.Byte array-based implementation of
JavaFileObject
.Byte array-based implementation of
JavaFileObject
.A
ClassLoader
that loads classes by looking for their source files through a "source path" and compiling
them on-the-fly.A
ClassLoader
that, unlike usual ClassLoader
s, does not load byte code, but reads Java source code
and then scans, parses, compiles and loads it into the virtual machine.Container for a
Diagnostic
object.This
IClassLoader
finds, scans and parses compilation units.A
ResourceFinder
that examines a set of ResourceFinder
s lazily as it searches for resources.Keeps track of "line numbers" and "column numbers" while a char stream is being processed.
Extends the
ResourceFinder
class with a ListableResourceFinder.list(String, boolean)
method.A
Resource
that can be addressed by a URL.Immutable representation of the location of a character in a document, as defined by an (optional) file name, a
line number and a column number.
Creates resources as byte arrays in a delegate
Map
.A
ResourceFinder
that provides access to resource stored as
byte arrays in a Map
.Representation of a "method descriptor" (JVMS 4.3.3).
Utility methods related to
Method
.This class defines constants and convenience methods for the handling of modifiers as defined by the JVM.
Pre-Java-9-compatible facade for Java 9's
java.lang.module.ModuleFinder
class.Pre-Java-9-compatible facade for Java 9's
java.lang.module.ModuleReader
class.Pre-Java-9-compatible facade for Java 9's
java.lang.module.ModuleReference
interface.Implements all methods of
IMultiCookable
, except for IMultiCookable.cook(String[], Reader[])
.An
Iterator
that iterates over a delegate, which produces arrays, Collection
s,
Enumeration
s or Iterator
s.A
ResourceFinder
that finds its resources through a collection of
other ResourceFinder
s.An exception that is never instantiated, and is useful for declaration of methods that throw a parameterized
Throwable
.Designates that a field, return value, argument, or variable is guaranteed to be non-null.
By default, types in method signatures that lack a null annotation are regarded as nullable.
Designates that a field, return value, argument, or variable may be
null
.Utility methods related to
Number
.Definitions of JVM bytecode opcodes.
Pre-Java-9-compatible facade for Java 9's
java.util.Optional
class.A parser for the Java programming language.
The kinds of context where a class declaration can occur.
The kinds of context where an interface declaration can occur.
The kinds of context where a method declaration can occur.
A
ResourceFinder
that finds its resources along a "path"
consisting of JAR file names, ZIP file names, and directory names.An object that produces some
Object
each time the Producer.produce()
method is invoked.Utiltity methods related to
Reader
.A sequence of bytes that is identified by a "name", is typically found by a
ResourceFinder
, can be Resource.open()
ed for reading, and optionally
has a Resource.lastModified()
property.Opens a resource, characterized by a name, for writing.
Finds a resource by name.
A
ClassLoader
that uses a ResourceFinder
to find
".class" files.Utility methods around the
ResourceFinder
.A
ListIterator
that reverses the direction of all operations of a delegate ListIterator
.Executes a
PrivilegedAction
or PrivilegedExceptionAction
in a context with restricted permissions.Splits up a character stream into tokens and returns them as
String
objects.A test program that allows you to play around with the
IScriptEvaluator
class.To set up a
ScriptEvaluator
object, proceed as described for IScriptEvaluator
.An implementation of
IScriptEvaluator
that utilizes the JANINO Java compiler.Sample application which demonstrates how to use the
IExpressionEvaluator
class.Helper class for parsing signatures and descriptors.
Representation of the "ArrayTypeSignature" clause.
Representation of the "ClassSignature" clause.
Representation of the "ClassTypeSignature" clause, e.g.
Representation of the "FieldTypeSignature" clause.
Representation of the "FormalTypeParameter" clause, e.g.
Representation of the "MethodTypeSignature" clause.
Representation of the "PrimitiveTypeSignature" clause, i.e.
Signalizes am malformed signature.
Representation of the "SimpleClassTypeSignature" clause, e.g.
Representation of the "ThrowsSignature" clause.
Representation of the "TypeArgument" clause.
Representation of the "TypeSignature" clause.
Representation of the "TypeVariableSignature" clause, e.g.
javax.tools
-based implementation of ISimpleCompiler
.To set up a
SimpleCompiler
object, proceed as described for ISimpleCompiler
.Pre-Java-8-compatible facade for Java 8's
java.util.stream.Stream
class.Reads from a
String
.Implementation of a UNIX shell-like string pattern algorithm.
A resource who's content is a
String
.Utility methods related to
String
.Immutable representation of a Java token.
An interface that allows for peeking and consuming a stream of
Token
s.Standard implementation for the
TokenStream
.An
Iterator
that transforms its elements on-the-fly.Implementations of this interface promise to traverses the subnodes of an AST.
An
Iterator
that iterates over a delegate, and while it encounters an array, a Collection
, an Enumeration
or a Iterator
element, it iterates over it
recursively.Indicates that
CharStream.read()
did not find the character(s) it expected.Represents a problem that occurred while unescaping a unicode escape sequence through a
UnicodeUnescapeReader
.A
FilterReader
that unescapes the "Unicode Escapes" as described in JLS7 3.10.6.This class actually implements the Java compiler.
Helper interface for string conversion.
Interface for delayed code generation.
Short-hand implementation of
IClass.IField
that implements a non-constant, non-static,
package-accessible field.Thrown by
MultiDimensionalIterator
to indicate that it has encountered an element that cannot be iterated.Unparses (un-compiles) an AST to a
Writer
.The basis for the "visitor" pattern as described in "Gamma, Helm, Johnson, Vlissides: Design Patterns".
The visitor for the different kinds of
Java.AbstractCompilationUnit
s.The visitor for all kinds of
Java.Annotation
s.The visitor for
Java.ArrayInitializerOrRvalue
.The visitor for all kinds of
Java.Atom
s.The visitor for all kinds of
Java.BlockStatement
s (statements that may appear with a block).The visitor for all kinds of
Java.ConstructorInvocation
s.The visitor for all kinds of
Java.BlockStatement
s (statements that may appear with a block).The visitor for all kinds of
Java.FunctionDeclarator
s.The visitor for all kinds of
Java.AbstractCompilationUnit.ImportDeclaration
s.The visitor for the different kinds of
Java.LambdaBody
s.The visitor for the different kinds of
Java.LambdaParameters
styles.The visitor for all kinds of
Java.Lvalue
s.The visitor for the different kinds of
Java.Modifier
s.The visitor for the different kinds of
Java.ModuleDirective
s.The visitor for all kinds of
Java.Rvalue
s.The visitor for all kinds of
Java.TryStatement.Resource
s.The visitor for all kinds of
Java.TypeArgument
s.The visitor for all kinds of
Java.TypeBodyDeclaration
s (declarations that may appear in the body of a
type declaration).The visitor for all kinds of
Java.TypeDeclaration
s.The visitor for all kinds of
Java.Type
s.Processes a warning issued by the compiler.
A
ResourceFinder
that finds resources in a ZIP file.
Java.Modifier
[]
(incompatible API change in JANINO version 3.0.13)