Painless uses a Java-style syntax that is similar to Groovy. In fact, most Painless scripts are also valid Groovy, and simple Groovy scripts are typically valid Painless. This specification assumes you have at least a passing familiarity with Java and related languages.
Painless is essentially a subset of Java with some additional scripting language features that make scripts easier to write. However, there are some important differences, particularly with the casting model. For more detailed conceptual information about the basic constructs that Java and Painless share, refer to the corresponding topics in the Java Language Specification.
Painless scripts are parsed and compiled using the ANTLR4 and ASM libraries. Painless scripts are compiled directly into Java byte code and executed against a standard Java Virtual Machine. This specification uses ANTLR4 grammar notation to describe the allowed syntax. However, the actual Painless grammar is more compact than what is shown here.
Painless supports both single-line and multi-line comments. You can include comments anywhere within a script.
Single-line comments are preceded by two slashes:
// comment. They can be
placed anywhere on a line. All characters from the two slashes to the end of
the line are ignored.
Multi-line comments are preceded by a slash-star
/* and closed by
*/. Multi-line comments can start anywhere on a line. All
characters from the opening
/* to the closing
*/ are ignored.
// single-line comment <code> // single-line comment /* multi- line comment */ <code> /* multi-line comment */ <code> <code> /* multi-line comment */ <code>
Painless reserves the following keywords for built-in language features. These keywords cannot be used in other contexts, such as identifiers.