Top Description Fields Constructors Methods
org.codehaus.janino

public Class Unparser

extends Object
implements AutoCloseable
Class Inheritance
All Implemented Interfaces
java.lang.AutoCloseable
Imports
java.io.BufferedReader, .BufferedWriter, .FileReader, .IOException, .OutputStreamWriter, .PrintWriter, .StringReader, .Writer, java.util.HashMap, .HashSet, .Iterator, .List, .Map, .Set, org.codehaus.commons.compiler.InternalCompilerException, org.codehaus.commons.nullanalysis.Nullable, org.codehaus.janino.Java.AbstractClassDeclaration, .Java.AbstractCompilationUnit, .Java.AbstractCompilationUnit.ImportDeclaration, .Java.AccessModifier, .Java.AlternateConstructorInvocation, .Java.AmbiguousName, .Java.Annotation, .Java.AnnotationTypeDeclaration, .Java.AnonymousClassDeclaration, .Java.ArrayAccessExpression, .Java.ArrayCreationReference, .Java.ArrayInitializer, .Java.ArrayInitializerOrRvalue, .Java.ArrayLength, .Java.ArrayType, .Java.AssertStatement, .Java.Assignment, .Java.Atom, .Java.BinaryOperation, .Java.Block, .Java.BlockLambdaBody, .Java.BlockStatement, .Java.BooleanLiteral, .Java.BreakStatement, .Java.Cast, .Java.CatchClause, .Java.CatchParameter, .Java.CharacterLiteral, .Java.ClassInstanceCreationReference, .Java.ClassLiteral, .Java.CompilationUnit, .Java.ConditionalExpression, .Java.ConstructorDeclarator, .Java.ConstructorInvocation, .Java.ContinueStatement, .Java.Crement, .Java.DoStatement, .Java.DocCommentable, .Java.ElementValueArrayInitializer, .Java.ElementValuePair, .Java.EmptyStatement, .Java.EnumConstant, .Java.EnumDeclaration, .Java.ExportsModuleDirective, .Java.ExpressionLambdaBody, .Java.ExpressionStatement, .Java.FieldAccess, .Java.FieldAccessExpression, .Java.FieldDeclaration, .Java.FloatingPointLiteral, .Java.ForEachStatement, .Java.ForStatement, .Java.FormalLambdaParameters, .Java.FunctionDeclarator, .Java.FunctionDeclarator.FormalParameters, .Java.IdentifierLambdaParameters, .Java.IfStatement, .Java.InferredLambdaParameters, .Java.Initializer, .Java.Instanceof, .Java.IntegerLiteral, .Java.InterfaceDeclaration, .Java.LabeledStatement, .Java.LambdaBody, .Java.LambdaExpression, .Java.LambdaParameters, .Java.LocalClassDeclaration, .Java.LocalClassDeclarationStatement, .Java.LocalVariableAccess, .Java.LocalVariableDeclarationStatement, .Java.Lvalue, .Java.MarkerAnnotation, .Java.MemberAnnotationTypeDeclaration, .Java.MemberClassDeclaration, .Java.MemberEnumDeclaration, .Java.MemberInterfaceDeclaration, .Java.MemberTypeDeclaration, .Java.MethodDeclarator, .Java.MethodInvocation, .Java.MethodReference, .Java.Modifier, .Java.ModularCompilationUnit, .Java.ModuleDeclaration, .Java.ModuleDirective, .Java.NamedClassDeclaration, .Java.NewAnonymousClassInstance, .Java.NewArray, .Java.NewClassInstance, .Java.NewInitializedArray, .Java.NormalAnnotation, .Java.NullLiteral, .Java.OpensModuleDirective, .Java.Package, .Java.PackageDeclaration, .Java.PackageMemberAnnotationTypeDeclaration, .Java.PackageMemberClassDeclaration, .Java.PackageMemberEnumDeclaration, .Java.PackageMemberInterfaceDeclaration, .Java.PackageMemberTypeDeclaration, .Java.ParameterAccess, .Java.ParenthesizedExpression, .Java.PrimitiveType, .Java.ProvidesModuleDirective, .Java.QualifiedThisReference, .Java.ReferenceType, .Java.RequiresModuleDirective, .Java.ReturnStatement, .Java.Rvalue, .Java.RvalueMemberType, .Java.SimpleConstant, .Java.SimpleType, .Java.SingleElementAnnotation, .Java.StringLiteral, .Java.SuperConstructorInvocation, .Java.SuperclassFieldAccessExpression, .Java.SuperclassMethodInvocation, .Java.SwitchStatement, .Java.SynchronizedStatement, .Java.TextBlock, .Java.ThisReference, .Java.ThrowStatement, .Java.TryStatement, .Java.TryStatement.LocalVariableDeclaratorResource, .Java.TryStatement.VariableAccessResource, .Java.Type, .Java.TypeBodyDeclaration, .Java.TypeDeclaration, .Java.TypeParameter, .Java.UnaryOperation, .Java.UsesModuleDirective, .Java.VariableDeclarator, .Java.WhileStatement, .Visitor.AbstractCompilationUnitVisitor, .Visitor.AnnotationVisitor, .Visitor.ArrayInitializerOrRvalueVisitor, .Visitor.AtomVisitor, .Visitor.BlockStatementVisitor, .Visitor.ElementValueVisitor, .Visitor.FunctionDeclaratorVisitor, .Visitor.ImportVisitor, .Visitor.LambdaBodyVisitor, .Visitor.LambdaParametersVisitor, .Visitor.LvalueVisitor, .Visitor.ModifierVisitor, .Visitor.ModuleDirectiveVisitor, .Visitor.RvalueVisitor, .Visitor.TryStatementResourceVisitor, .Visitor.TypeBodyDeclarationVisitor, .Visitor.TypeDeclarationVisitor, .Visitor.TypeVisitor, org.codehaus.janino.util.AutoIndentWriter

Unparses (un-compiles) an AST to a Writer. See main(String[]) for a usage example.

Field Summary

Modifier and TypeField and Description
private final Visitor.AnnotationVisitor<Void, RuntimeException>
private final Visitor.ArrayInitializerOrRvalueVisitor<Void, RuntimeException>
private final Visitor.AtomVisitor<Void, RuntimeException>
private final Visitor.BlockStatementVisitor<Void, RuntimeException>
private final Visitor.AbstractCompilationUnitVisitor<Void, RuntimeException>
private final Visitor.ElementValueVisitor<Void, RuntimeException>
private final Visitor.FunctionDeclaratorVisitor<Void, RuntimeException>
private final Visitor.ImportVisitor<Void, RuntimeException>
private final Visitor.LambdaBodyVisitor<Void, RuntimeException>
private final Visitor.LambdaParametersVisitor<Void, RuntimeException>
private static final Set<String>
private final Visitor.LvalueVisitor<Void, RuntimeException>
private final Visitor.ModifierVisitor<Void, RuntimeException>
private final Visitor.ModuleDirectiveVisitor<Void, RuntimeException>
private static final Map<String, Integer>
OPERATOR_PRECEDENCE

Maps (pseudo-)operators like "?:" and "x++" to precedences (higher value means higher precedence).

protected final PrintWriter
pw

Where the visit...() methods print their text.

private final Visitor.TryStatementResourceVisitor<Void, RuntimeException>
private static final Set<String>
private final Visitor.RvalueVisitor<Void, RuntimeException>
private final Visitor.TypeBodyDeclarationVisitor<Void, RuntimeException>
private final Visitor.TypeDeclarationVisitor<Void, RuntimeException>
private final Visitor.TypeVisitor<Void, RuntimeException>
private static final Set<String>

Constructor Summary

AccessConstructor and Description
public

Method Summary

Modifier and TypeMethod and Description
private static boolean
public void
close()

Implements java.lang.AutoCloseable.close.

Flushes all generated code.
private static int
comparePrecedence(String operator, Java.Atom operand)

Returns a value

  • < 0 iff the operator has lower precedence than the operand
  • ==; 0 iff the operator has equal precedence than the operand
  • > 0 iff the operator has higher precedence than the operand
public void
flush()

Flushes all generated code.

private static int
private static boolean
isLeftAssociate(String operator)

Returns true iff operator is left associative e.g. a - b - c evaluates as (a - b) - c.

private static boolean

Returns:

Return true iff operator is right associative
isRightAssociate
(String operator)

Returns true iff operator is right associative e.g. a = b = c evaluates as a = (b = c).

public static void
main(String[] args)

Testing of parsing/unparsing.

public static void
private void
unparse(Java.Atom operand, boolean natural)

public void
unparseAbstractCompilationUnit(Java.AbstractCompilationUnit
The compilation unit to unparse
cu
)

private void
private void
private void
public void
public void
unparseBlock(Java.Block b)

Generates Java code from a Block.

public void
private void
public void
private void
private void
private void
private void
private void
private void
private void
private void
private void
public void
private void
private void
public void
public void
private void
unparseLhs(Java.Atom lhs, String
= +=... ?: || && | ^ & == != < > <= >= instanceof << >> >>> + - * / % cast
binaryOperator
)

Iff the lhs is unnatural for the binaryOperator, encloses the lhs in parentheses.

public void
private void
private void
private void
private void
private void
private void
unparseRhs(Java.Rvalue rhs, String binaryOperator)

Iff the rhs is unnatural for the binaryOperator, enclose the rhs in parentheses.

public void
public void
unparseStatements(List<? extends Java.BlockStatement> statements)

Generates Java code from a sequence of BlockStatements.

public void
public void
private void
private void
private void
private void
unparseUnaryOperation(Java.Rvalue operand, String
++x --x +x -x ~x !x x++ x--
unaryOperator
)

Iff the operand is unnatural for the unaryOperator, encloses the operand in parentheses.

private void
private void
Inherited from java.lang.Object:
cloneequalsfinalizegetClasshashCodenotifynotifyAlltoStringwaitwaitwait

Field Detail

annotationUnparserback to summary
private final Visitor.AnnotationVisitor<Void, RuntimeException> annotationUnparser
arrayInitializerOrRvalueUnparserback to summary
private final Visitor.ArrayInitializerOrRvalueVisitor<Void, RuntimeException> arrayInitializerOrRvalueUnparser
atomUnparserback to summary
private final Visitor.AtomVisitor<Void, RuntimeException> atomUnparser
blockStatementUnparserback to summary
private final Visitor.BlockStatementVisitor<Void, RuntimeException> blockStatementUnparser
compilationUnitUnparserback to summary
private final Visitor.AbstractCompilationUnitVisitor<Void, RuntimeException> compilationUnitUnparser
elementValueUnparserback to summary
private final Visitor.ElementValueVisitor<Void, RuntimeException> elementValueUnparser
functionDeclaratorUnparserback to summary
private final Visitor.FunctionDeclaratorVisitor<Void, RuntimeException> functionDeclaratorUnparser
importUnparserback to summary
private final Visitor.ImportVisitor<Void, RuntimeException> importUnparser
lambdaBodyUnparserback to summary
private final Visitor.LambdaBodyVisitor<Void, RuntimeException> lambdaBodyUnparser
lambdaParametersUnparserback to summary
private final Visitor.LambdaParametersVisitor<Void, RuntimeException> lambdaParametersUnparser
LEFT_ASSOCIATIVE_OPERATORSback to summary
private static final Set<String> LEFT_ASSOCIATIVE_OPERATORS
lvalueUnparserback to summary
private final Visitor.LvalueVisitor<Void, RuntimeException> lvalueUnparser
modifierUnparserback to summary
private final Visitor.ModifierVisitor<Void, RuntimeException> modifierUnparser
moduleDirectiveUnparserback to summary
private final Visitor.ModuleDirectiveVisitor<Void, RuntimeException> moduleDirectiveUnparser
OPERATOR_PRECEDENCEback to summary
private static final Map<String, Integer> OPERATOR_PRECEDENCE

Maps (pseudo-)operators like "?:" and "x++" to precedences (higher value means higher precedence).

pwback to summary
protected final PrintWriter pw

Where the visit...() methods print their text. Notice that this PrintWriter does not print to the output directly, but through an AutoIndentWriter.

resourceUnparserback to summary
private final Visitor.TryStatementResourceVisitor<Void, RuntimeException> resourceUnparser
RIGHT_ASSOCIATIVE_OPERATORSback to summary
private static final Set<String> RIGHT_ASSOCIATIVE_OPERATORS
rvalueUnparserback to summary
private final Visitor.RvalueVisitor<Void, RuntimeException> rvalueUnparser
typeBodyDeclarationUnparserback to summary
private final Visitor.TypeBodyDeclarationVisitor<Void, RuntimeException> typeBodyDeclarationUnparser
typeDeclarationUnparserback to summary
private final Visitor.TypeDeclarationVisitor<Void, RuntimeException> typeDeclarationUnparser
typeUnparserback to summary
private final Visitor.TypeVisitor<Void, RuntimeException> typeUnparser
UNARY_OPERATORSback to summary
private static final Set<String> UNARY_OPERATORS

Constructor Detail

Unparserback to summary
public Unparser(Writer w)

Method Detail

classDeclarationBodyIsEmptyback to summary
private static boolean classDeclarationBodyIsEmpty(Java.AbstractClassDeclaration cd)
Returns:boolean

Whether unparseClassDeclarationBody(Java.AbstractClassDeclaration) will produce no output

closeback to summary
public void close()

Implements java.lang.AutoCloseable.close.

Flushes all generated code.

Annotations
@Override
comparePrecedenceback to summary
private static int comparePrecedence(String operator, Java.Atom operand)

Returns a value

  • < 0 iff the operator has lower precedence than the operand
  • ==; 0 iff the operator has equal precedence than the operand
  • > 0 iff the operator has higher precedence than the operand
flushback to summary
public void flush()

Flushes all generated code.

getOperatorPrecedenceback to summary
private static int getOperatorPrecedence(String operator)
isLeftAssociateback to summary
private static boolean isLeftAssociate(String operator)

Returns true iff operator is left associative e.g. a - b - c evaluates as (a - b) - c.

isRightAssociateback to summary
private static boolean isRightAssociate(String operator)

Returns true iff operator is right associative e.g. a = b = c evaluates as a = (b = c).

Returns:boolean

Return true iff operator is right associative

mainback to summary
public static void main(String[] args) throws Exception

Testing of parsing/unparsing.

Reads compilation units from the files named on the command line and unparses them to System#out.

unparseback to summary
public static void unparse(Java.AbstractCompilationUnit acu, Writer w)

Unparses the given Java.AbstractCompilationUnit to the given Writer.

unparseback to summary
private void unparse(Java.Atom operand, boolean natural)
unparseAbstractCompilationUnitback to summary
public void unparseAbstractCompilationUnit(Java.AbstractCompilationUnit cu)
Parameters
cu:Java.AbstractCompilationUnit

The compilation unit to unparse

unparseAnnotationsback to summary
private void unparseAnnotations(Java.Annotation[] annotations)
unparseAnnotationTypeDeclarationback to summary
private void unparseAnnotationTypeDeclaration(Java.AnnotationTypeDeclaration atd)
unparseArrayInitializerOrRvalueback to summary
private void unparseArrayInitializerOrRvalue(Java.ArrayInitializerOrRvalue aiorv)
unparseAtomback to summary
public void unparseAtom(Java.Atom a)
unparseBlockback to summary
public void unparseBlock(Java.Block b)

Generates Java code from a Block.

unparseBlockStatementback to summary
public void unparseBlockStatement(Java.BlockStatement bs)
unparseCatchParameterback to summary
private void unparseCatchParameter(Java.CatchParameter cp)
unparseClassDeclarationBodyback to summary
public void unparseClassDeclarationBody(Java.AbstractClassDeclaration cd)

Generates Java code from a AbstractClassDeclaration.

unparseConstructorDeclaratorback to summary
private void unparseConstructorDeclarator(Java.ConstructorDeclarator cd)
unparseDocCommentback to summary
private void unparseDocComment(Java.DocCommentable dc)
unparseEnumDeclarationback to summary
private void unparseEnumDeclaration(Java.EnumDeclaration ed)
unparseFieldDeclarationback to summary
private void unparseFieldDeclaration(Java.FieldDeclaration fd)
unparseFormalParameterback to summary
private void unparseFormalParameter(Java.FunctionDeclarator.FormalParameter fp, boolean hasEllipsis)
unparseFormalParametersback to summary
private void unparseFormalParameters(Java.FunctionDeclarator.FormalParameters fps)
unparseFunctionDeclaratorback to summary
private void unparseFunctionDeclarator(Java.FunctionDeclarator fd)
unparseFunctionDeclaratorRestback to summary
private void unparseFunctionDeclaratorRest(Java.FunctionDeclarator fd)
unparseFunctionInvocationArgumentsback to summary
private void unparseFunctionInvocationArguments(Java.Rvalue[] arguments)
unparseImportDeclarationback to summary
public void unparseImportDeclaration(Java.AbstractCompilationUnit.ImportDeclaration id)
unparseInitializerback to summary
private void unparseInitializer(Java.Initializer i)
unparseInterfaceDeclarationback to summary
private void unparseInterfaceDeclaration(Java.InterfaceDeclaration id)
unparseLambdaBodyback to summary
public void unparseLambdaBody(Java.LambdaBody body)
unparseLambdaParametersback to summary
public void unparseLambdaParameters(Java.LambdaParameters lp)
unparseLhsback to summary
private void unparseLhs(Java.Atom lhs, String binaryOperator)

Iff the lhs is unnatural for the binaryOperator, encloses the lhs in parentheses. Example: "a+b" is an unnatural lhs for operator "*".

Parameters
binaryOperator:String

= +=... ?: || && | ^ & == != < > <= >= instanceof << >> >>> + - * / % cast

unparseLvalueback to summary
public void unparseLvalue(Java.Lvalue lv)
unparseMethodDeclaratorback to summary
private void unparseMethodDeclarator(Java.MethodDeclarator md)
unparseModifiersback to summary
private void unparseModifiers(Java.Modifier[] modifiers)
unparseNamedClassDeclarationback to summary
private void unparseNamedClassDeclaration(Java.NamedClassDeclaration ncd)
unparseResourceback to summary
private void unparseResource(Java.TryStatement.Resource r)
unparseResourcesback to summary
private void unparseResources(Java.TryStatement.Resource[] resources)
unparseRhsback to summary
private void unparseRhs(Java.Rvalue rhs, String binaryOperator)

Iff the rhs is unnatural for the binaryOperator, enclose the rhs in parentheses. Example: "a+b" is an unnatural rhs for operator "*".

unparseRvalueback to summary
public void unparseRvalue(Java.Rvalue rv)
unparseStatementsback to summary
public void unparseStatements(List<? extends Java.BlockStatement> statements)

Generates Java code from a sequence of BlockStatements.

unparseTypeback to summary
public void unparseType(Java.Type t)
unparseTypeDeclarationback to summary
public void unparseTypeDeclaration(Java.TypeDeclaration td)
unparseTypeDeclarationBodyback to summary
private void unparseTypeDeclarationBody(Java.TypeDeclaration td)
unparseTypeParameterback to summary
private void unparseTypeParameter(Java.TypeParameter typeParameter)
unparseTypeParametersback to summary
private void unparseTypeParameters(Java.TypeParameter[] typeParameters)
unparseUnaryOperationback to summary
private void unparseUnaryOperation(Java.Rvalue operand, String unaryOperator)

Iff the operand is unnatural for the unaryOperator, encloses the operand in parentheses. Example: "a+b" is an unnatural operand for unary "!x".

Parameters
unaryOperator:String

++x --x +x -x ~x !x x++ x--

unparseVariableDeclaratorback to summary
private void unparseVariableDeclarator(Java.VariableDeclarator vd)
unparseVariableDeclaratorsback to summary
private void unparseVariableDeclarators(Java.VariableDeclarator[] variableDeclarators)