Quick Search
Browse
Pages
Blog
Labels
Attachments
Mail
Advanced
What’s New
Space Directory
Feed Builder
Keyboard Shortcuts
Confluence Gadgets
Log In
Sign Up
Dashboard
Janino
Copy Page
You are not logged in. Any changes you make will be marked as
anonymous
. You may want to
Log In
if you already have an account. You can also
Sign Up
for a new account.
This page is being edited by
.
Paragraph
Paragraph
Heading 1
Heading 2
Heading 3
Heading 4
Heading 5
Heading 6
Preformatted
Quote
Bold
Italic
Underline
More colours
Strikethrough
Subscript
Superscript
Monospace
Clear Formatting
Bullet list
Numbered list
Outdent
Indent
Align left
Align center
Align right
Link
Table
Insert
Insert Content
Image
Link
Attachment
Symbol
Emoticon
Wiki Markup
Horizontal rule
tinymce.confluence.insert_menu.macro_desc
Info
JIRA Issue
Status
Gallery
Tasklist
Table of Contents
Other Macros
Page Layout
No Layout
Two column (simple)
Two column (simple, left sidebar)
Two column (simple, right sidebar)
Three column (simple)
Two column
Two column (left sidebar)
Two column (right sidebar)
Three column
Three column (left and right sidebars)
Undo
Redo
Find/Replace
Keyboard Shortcuts Help
<table class="wysiwyg-macro" data-macro-name="section" style="background-image: url(/plugins/servlet/confluence/placeholder/macro-heading?definition=e3NlY3Rpb259&locale=en_GB&version=2); background-repeat: no-repeat;" data-macro-body-type="RICH_TEXT"><tr><td class="wysiwyg-macro-body"> <table class="wysiwyg-macro" data-macro-name="column" data-macro-parameters="width=49%" style="background-image: url(/plugins/servlet/confluence/placeholder/macro-heading?definition=e2NvbHVtbjp3aWR0aD00OSV9&locale=en_GB&version=2); background-repeat: no-repeat;" data-macro-body-type="RICH_TEXT"><tr><td class="wysiwyg-macro-body"> <p><img class="editor-inline-macro" src="/plugins/servlet/confluence/placeholder/macro?definition=e2FuY2hvcjp3aGF0fQ&locale=en_GB&version=2" data-macro-name="anchor" data-macro-default-parameter="what"></p> <h4>What is Janino?</h4> <p>Janino is a super-small, super-fast Java™ compiler. Not only can it <a class="confluence-link" href="/display/JANINO/Advanced#Advanced-compiler" data-anchor="compiler" data-linked-resource-id="138773103" data-linked-resource-type="page" data-linked-resource-default-alias="Advanced#compiler" data-base-url="http://docs.codehaus.org">compile a set of source files to a set of class files</a> like the JAVAC tool, but also can it compile a Java™ <a class="confluence-link" href="/display/JANINO/Basic#Basic-expressionevaluator" data-anchor="expression_evaluator" data-linked-resource-id="138773101" data-linked-resource-type="page" data-linked-resource-default-alias="Basic#expression_evaluator" data-base-url="http://docs.codehaus.org">expression</a>, <a class="confluence-link" href="/display/JANINO/Basic#Basic-scriptevaluator" data-anchor="script_evaluator" data-linked-resource-id="138773101" data-linked-resource-type="page" data-linked-resource-default-alias="Basic#script_evaluator" data-base-url="http://docs.codehaus.org">block</a>, <a class="confluence-link" href="/display/JANINO/Basic#Basic-classbodyevaluator" data-anchor="class_body_evaluator" data-linked-resource-id="138773101" data-linked-resource-type="page" data-linked-resource-default-alias="Basic#class_body_evaluator" data-base-url="http://docs.codehaus.org">class body</a> or <a class="confluence-link" href="/display/JANINO/Basic#Basic-simplecompiler" data-anchor="simple_compiler" data-linked-resource-id="138773101" data-linked-resource-type="page" data-linked-resource-default-alias="Basic#simple_compiler" data-base-url="http://docs.codehaus.org">source file</a> <em>in memory</em>, load the bytecode and execute it directly in the same JVM. Janino is not intended to be a development tool, but an embedded compiler for run-time compilation purposes, e.g. expression evaluators or "server pages" engines like JSP.</p> <p>JANINO is integrated with <a href="http://commons.apache.org/jci/">Apache Commons JCI ("Java Compiler Interface")</a> and <a href="http://www.jboss.org/products/rules">JBoss Rules</a> / <a href="http://drools.org/">Drools</a>.</p> <p>JANINO can also be used for <a class="confluence-link" href="/display/JANINO/Advanced#Advanced-codeanalyser" data-anchor="code_analyser" data-linked-resource-id="138773103" data-linked-resource-type="page" data-linked-resource-default-alias="Advanced#code_analyser" data-base-url="http://docs.codehaus.org">static code analysis</a> or <a class="confluence-link" href="/display/JANINO/Advanced#Advanced-codemanipulator" data-anchor="code_manipulator" data-linked-resource-id="138773103" data-linked-resource-type="page" data-linked-resource-default-alias="Advanced#code_manipulator" data-base-url="http://docs.codehaus.org">code manipulation</a>.</p> <p>JANINO can be configured to use the <a href="http://java.sun.com/javase/6/docs/api/javax/tools/package-summary.html">javax.tools.JavaCompiler</a> API (available since JDK 1.6), which removes the Java 5-related <a class="confluence-link" href="#limitations" data-anchor="limitations" data-linked-resource-default-alias="limitations" data-base-url="http://docs.codehaus.org">limitations</a>.</p> <p><img class="editor-inline-macro" src="/plugins/servlet/confluence/placeholder/macro?definition=e2FuY2hvcjpwcm9wZXJ0aWVzfQ&locale=en_GB&version=2" data-macro-name="anchor" data-macro-default-parameter="properties"></p> <h4>Properties</h4> <p>The major design goal was to keep the compiler small and simple, while providing an (almost) JAVAC 1.4 compatible compiler. I don't like the idea of carrying around huge libraries for simple applications.</p> <p>The following elements of the Java programming language are implemented:</p> <ul> <li><code>package</code> declaration, <code>import</code> declaration</li> <li><code>class</code> declaration, <code>interface</code> declaration</li> <li>Inheritance (<code>extends</code> and <code>implements</code>)</li> <li>Static member type declaration</li> <li>Inner classes (member classes, local classes, anonymous classes)</li> <li>Class initializer, Instance initializer</li> <li>Field declaration, Method declaration</li> <li>Local variable declaration</li> <li>Class variable initializer, Instance variable initializer</li> <li>Block statement ({<code>...</code>})</li> <li><code>if ... else</code> statement</li> <li><code>for</code> statement</li> <li><code>while</code> statement</li> <li><code>do ... while</code> statement</li> <li><code>try ... catch ... finally</code> statement</li> <li><code>throw</code> statement</li> <li><code>return</code> statement</li> <li><code>break</code> statement</li> <li><code>continue</code> statement</li> <li><code>switch</code> statement</li> <li><code>synchronized</code> statement</li> <li>All primitive types (<code>boolean, char, byte, short, int, long, float, double</code>)</li> <li>Assignment operator <code>=</code></li> <li>Assignment operators <code>+=, -=, *=, /=, &=, |=, ^=, %=, <<=, >>=, >>>=</code></li> <li>Conditional operators <code>?...:, &&, ||</code></li> <li>Boolean logical operators <code>&, ^, |</code></li> <li>Integer bitwise operators <code>&, ^, |</code></li> <li>Numeric operators <code>*, /, %, +, -, <<, >>, >>></code></li> <li>String concatenation operator +</li> <li>Operators <code>++</code> and <code>--</code></li> <li>Type comparison operator <code>instanceof</code></li> <li>Unary operators <code>+, -, ~, !</code></li> <li>Parenthesized expression</li> <li>Field access (like <code>System.out</code>)</li> <li>Superclass member access (<code>super.meth();</code>, <code>super.field = x;</code>)</li> </ul> </td></tr></table> <table class="wysiwyg-macro" data-macro-name="column" data-macro-parameters="width=10px" style="background-image: url(/plugins/servlet/confluence/placeholder/macro-heading?definition=e2NvbHVtbjp3aWR0aD0xMHB4fQ&locale=en_GB&version=2); background-repeat: no-repeat;" data-macro-body-type="RICH_TEXT"><tr><td class="wysiwyg-macro-body"><p /></td></tr></table> <table class="wysiwyg-macro" data-macro-name="column" data-macro-parameters="width=49%" style="background-image: url(/plugins/servlet/confluence/placeholder/macro-heading?definition=e2NvbHVtbjp3aWR0aD00OSV9&locale=en_GB&version=2); background-repeat: no-repeat;" data-macro-body-type="RICH_TEXT"><tr><td class="wysiwyg-macro-body"> <h4>Properties (cont'd.)</h4> <ul> <li><code>this</code> (reference to current instance)</li> <li>Alternate constructor invocation (like <code>this(a, b, c)</code>)</li> <li>Superclass constructor invocation (like <code>super(a, b, c)</code>)</li> <li>Method invocation (like <code>System.out.println("Hello")</code>)</li> <li>Class instance creation (like <code>new Foo()</code>)</li> <li>Primitive array creation (like <code>new int[10][5][]</code>)</li> <li>Class or interface array creation (like <code>new Foo[10][5][]</code>)</li> <li>Array access (like <code>args[0]</code>)</li> <li>Local variable access</li> <li>Integer, floating-point, boolean, character, string literal</li> <li><code>null</code> literal</li> <li>Unary numeric conversion, binary numeric conversion, widening numeric conversion, narrowing numeric conversion</li> <li>Widening reference conversion, narrowing reference conversion</li> <li>Cast</li> <li>Assignment conversion</li> <li>String conversion (for string concatenation)</li> <li>Constant expression</li> <li>Block scope, method scope, class scope, global scope</li> <li><code>throws</code> clause</li> <li>Array initializer (like <code>String[] a = { "x", "y", "z" </code>})</li> <li>Primitive class literals, e.g. "int.class"</li> <li>Non-primitive class literals, e.g. "String.class"</li> <li>References between uncompiled compilation units</li> <li>Line number tables a la "-g:lines"</li> <li>Source file information a la "-g:source"</li> <li>Handling of @deprecated doc comment tag</li> <li>Accessibility checking (PUBLIC, PROTECTED, PRIVATE)</li> <li>Local variable information information for debugging (i.e. "-g:vars")</li> <li>Checking of "definite assignment" (JLS2 16)</li> <li>Methods that compile to more than 32 KB</li> <li>J2SE 5.0: Static imports (single and on-demand; fields, types and methods)</li> <li>J2SE 5.0: Autoboxing and unboxing</li> <li>J2SE 5.0: StringBuilder class used (if available) for string concatenation</li> <li>J2SE 5.0: Covariant return types</li> </ul> <p><img class="editor-inline-macro" src="/plugins/servlet/confluence/placeholder/macro?definition=e2FuY2hvcjpsaW1pdGF0aW9uc30&locale=en_GB&version=2" data-macro-name="anchor" data-macro-default-parameter="limitations"></p> <h4>Limitations</h4> <p>The following elements of the Java programming language are <strong>not</strong> implemented:</p> <ul> <li><code>assert</code> (a rarely-used JDK 1.4 language feature)</li> <li>J2SE 5.0: Parametrized types (generics)</li> <li>J2SE 5.0: Enhanced FOR loop</li> <li>J2SE 5.0: Typesafe enums</li> <li>J2SE 5.0: Variable arguments</li> <li>J2SE 5.0: Annotations</li> </ul> </td></tr></table></td></tr></table>
Please type the word appearing in the picture.
Attachments
Labels
Location
Watch this page
< Edit
Preview >
Loading…
Save
Cancel
Next hint
search
attachments
weblink
advanced