Package org.codehaus.janino
Class Unparser
- java.lang.Object
-
- org.codehaus.janino.Unparser
-
public class Unparser extends java.lang.Object
Unparses (un-compiles) an AST to aWriter
. Seemain(String[])
for a usage example.
-
-
Field Summary
Fields Modifier and Type Field Description private Visitor.AnnotationVisitor<java.lang.Void,java.lang.RuntimeException>
annotationUnparser
private Visitor.AtomVisitor<java.lang.Void,java.lang.RuntimeException>
atomUnparser
private Visitor.BlockStatementVisitor<java.lang.Void,java.lang.RuntimeException>
blockStatementUnparser
private Visitor.AbstractCompilationUnitVisitor<java.lang.Void,java.lang.RuntimeException>
compilationUnitUnparser
private Visitor.ElementValueVisitor<java.lang.Void,java.lang.RuntimeException>
elementValueUnparser
private Visitor.FunctionDeclaratorVisitor<java.lang.Void,java.lang.RuntimeException>
functionDeclaratorUnparser
private Visitor.ImportVisitor<java.lang.Void,java.lang.RuntimeException>
importUnparser
private Visitor.LambdaBodyVisitor<java.lang.Void,java.lang.RuntimeException>
lambdaBodyUnparser
private Visitor.LambdaParametersVisitor<java.lang.Void,java.lang.RuntimeException>
lambdaParametersUnparser
private static java.util.Set<java.lang.String>
LEFT_ASSOCIATIVE_OPERATORS
private Visitor.LvalueVisitor<java.lang.Void,java.lang.RuntimeException>
lvalueUnparser
private Visitor.ModifierVisitor<java.lang.Void,java.lang.RuntimeException>
modifierUnparser
private Visitor.ModuleDirectiveVisitor<java.lang.Void,java.lang.RuntimeException>
moduleDirectiveUnparser
private static java.util.Map<java.lang.String,java.lang.Integer>
OPERATOR_PRECEDENCE
Maps (pseudo-)operators like"?:"
and"x++"
to precedences (higher value means higher precedence).protected java.io.PrintWriter
pw
Where thevisit...()
methods print their text.private Visitor.TryStatementResourceVisitor<java.lang.Void,java.lang.RuntimeException>
resourceUnparser
private static java.util.Set<java.lang.String>
RIGHT_ASSOCIATIVE_OPERATORS
private Visitor.RvalueVisitor<java.lang.Void,java.lang.RuntimeException>
rvalueUnparser
private Visitor.TypeBodyDeclarationVisitor<java.lang.Void,java.lang.RuntimeException>
typeBodyDeclarationUnparser
private Visitor.TypeDeclarationVisitor<java.lang.Void,java.lang.RuntimeException>
typeDeclarationUnparser
private Visitor.TypeVisitor<java.lang.Void,java.lang.RuntimeException>
typeUnparser
private static java.util.Set<java.lang.String>
UNARY_OPERATORS
-
Constructor Summary
Constructors Constructor Description Unparser(java.io.Writer w)
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description private static boolean
classDeclarationBodyIsEmpty(Java.AbstractClassDeclaration cd)
void
close()
Flushes all generated code.private static int
comparePrecedence(java.lang.String operator, Java.Atom operand)
Returns a value < 0 iff theoperator
has lower precedence than theoperand
==; 0 iff theoperator
has equal precedence than theoperand
> 0 iff theoperator
has higher precedence than theoperand
private static int
getOperatorPrecedence(java.lang.String operator)
private static boolean
isLeftAssociate(java.lang.String operator)
Returnstrue
iff operator is left associative e.g.private static boolean
isRightAssociate(java.lang.String operator)
Returnstrue
iff operator is right associative e.g.static void
main(java.lang.String[] args)
Testing of parsing/unparsing.static void
unparse(Java.AbstractCompilationUnit acu, java.io.Writer w)
Unparses the givenJava.AbstractCompilationUnit
to the givenWriter
.private void
unparse(Java.Atom operand, boolean natural)
void
unparseAbstractCompilationUnit(Java.AbstractCompilationUnit cu)
private void
unparseAnnotations(Java.Annotation[] annotations)
private void
unparseAnnotationTypeDeclaration(Java.AnnotationTypeDeclaration atd)
private void
unparseArrayInitializerOrRvalue(Java.ArrayInitializerOrRvalue aiorv)
void
unparseAtom(Java.Atom a)
void
unparseBlock(Java.Block b)
Generates Java code from aJava.Block
.void
unparseBlockStatement(Java.BlockStatement bs)
private void
unparseCatchParameter(Java.CatchParameter cp)
void
unparseClassDeclarationBody(Java.AbstractClassDeclaration cd)
Generates Java code from aJava.AbstractClassDeclaration
.private void
unparseConstructorDeclarator(Java.ConstructorDeclarator cd)
private void
unparseDocComment(Java.DocCommentable dc)
private void
unparseEnumDeclaration(Java.EnumDeclaration ed)
private void
unparseFieldDeclaration(Java.FieldDeclaration fd)
private void
unparseFormalParameter(Java.FunctionDeclarator.FormalParameter fp, boolean hasEllipsis)
private void
unparseFormalParameters(Java.FunctionDeclarator.FormalParameters fps)
private void
unparseFunctionDeclarator(Java.FunctionDeclarator fd)
private void
unparseFunctionDeclaratorRest(Java.FunctionDeclarator fd)
private void
unparseFunctionInvocationArguments(Java.Rvalue[] arguments)
void
unparseImportDeclaration(Java.AbstractCompilationUnit.ImportDeclaration id)
private void
unparseInitializer(Java.Initializer i)
private void
unparseInterfaceDeclaration(Java.InterfaceDeclaration id)
void
unparseLambdaBody(Java.LambdaBody body)
void
unparseLambdaParameters(Java.LambdaParameters lp)
private void
unparseLhs(Java.Atom lhs, java.lang.String binaryOperator)
Iff thelhs
is unnatural for thebinaryOperator
, encloses thelhs
in parentheses.void
unparseLvalue(Java.Lvalue lv)
private void
unparseMethodDeclarator(Java.MethodDeclarator md)
private void
unparseModifiers(Java.Modifier[] modifiers)
private void
unparseNamedClassDeclaration(Java.NamedClassDeclaration ncd)
private void
unparseResource(Java.TryStatement.Resource r)
private void
unparseResources(Java.TryStatement.Resource[] resources)
private void
unparseRhs(Java.Rvalue rhs, java.lang.String binaryOperator)
Iff therhs
is unnatural for thebinaryOperator
, enclose therhs
in parentheses.void
unparseRvalue(Java.Rvalue rv)
void
unparseStatements(java.util.List<? extends Java.BlockStatement> statements)
Generates Java code from a sequence ofJava.BlockStatement
s.void
unparseType(Java.Type t)
void
unparseTypeDeclaration(Java.TypeDeclaration td)
private void
unparseTypeDeclarationBody(Java.TypeDeclaration td)
private void
unparseTypeParameter(Java.TypeParameter typeParameter)
private void
unparseTypeParameters(Java.TypeParameter[] typeParameters)
private void
unparseUnaryOperation(Java.Rvalue operand, java.lang.String unaryOperator)
Iff theoperand
is unnatural for theunaryOperator
, encloses theoperand
in parentheses.private void
unparseVariableDeclarator(Java.VariableDeclarator vd)
private void
unparseVariableDeclarators(Java.VariableDeclarator[] variableDeclarators)
-
-
-
Field Detail
-
compilationUnitUnparser
private final Visitor.AbstractCompilationUnitVisitor<java.lang.Void,java.lang.RuntimeException> compilationUnitUnparser
-
moduleDirectiveUnparser
private final Visitor.ModuleDirectiveVisitor<java.lang.Void,java.lang.RuntimeException> moduleDirectiveUnparser
-
importUnparser
private final Visitor.ImportVisitor<java.lang.Void,java.lang.RuntimeException> importUnparser
-
typeDeclarationUnparser
private final Visitor.TypeDeclarationVisitor<java.lang.Void,java.lang.RuntimeException> typeDeclarationUnparser
-
typeBodyDeclarationUnparser
private final Visitor.TypeBodyDeclarationVisitor<java.lang.Void,java.lang.RuntimeException> typeBodyDeclarationUnparser
-
blockStatementUnparser
private final Visitor.BlockStatementVisitor<java.lang.Void,java.lang.RuntimeException> blockStatementUnparser
-
atomUnparser
private final Visitor.AtomVisitor<java.lang.Void,java.lang.RuntimeException> atomUnparser
-
typeUnparser
private final Visitor.TypeVisitor<java.lang.Void,java.lang.RuntimeException> typeUnparser
-
rvalueUnparser
private final Visitor.RvalueVisitor<java.lang.Void,java.lang.RuntimeException> rvalueUnparser
-
lvalueUnparser
private final Visitor.LvalueVisitor<java.lang.Void,java.lang.RuntimeException> lvalueUnparser
-
elementValueUnparser
private final Visitor.ElementValueVisitor<java.lang.Void,java.lang.RuntimeException> elementValueUnparser
-
annotationUnparser
private final Visitor.AnnotationVisitor<java.lang.Void,java.lang.RuntimeException> annotationUnparser
-
modifierUnparser
private final Visitor.ModifierVisitor<java.lang.Void,java.lang.RuntimeException> modifierUnparser
-
lambdaParametersUnparser
private final Visitor.LambdaParametersVisitor<java.lang.Void,java.lang.RuntimeException> lambdaParametersUnparser
-
lambdaBodyUnparser
private final Visitor.LambdaBodyVisitor<java.lang.Void,java.lang.RuntimeException> lambdaBodyUnparser
-
functionDeclaratorUnparser
private final Visitor.FunctionDeclaratorVisitor<java.lang.Void,java.lang.RuntimeException> functionDeclaratorUnparser
-
resourceUnparser
private final Visitor.TryStatementResourceVisitor<java.lang.Void,java.lang.RuntimeException> resourceUnparser
-
pw
protected final java.io.PrintWriter pw
Where thevisit...()
methods print their text. Notice that thisPrintWriter
does not print to the output directly, but through anAutoIndentWriter
.
-
LEFT_ASSOCIATIVE_OPERATORS
private static final java.util.Set<java.lang.String> LEFT_ASSOCIATIVE_OPERATORS
-
RIGHT_ASSOCIATIVE_OPERATORS
private static final java.util.Set<java.lang.String> RIGHT_ASSOCIATIVE_OPERATORS
-
UNARY_OPERATORS
private static final java.util.Set<java.lang.String> UNARY_OPERATORS
-
OPERATOR_PRECEDENCE
private static final java.util.Map<java.lang.String,java.lang.Integer> OPERATOR_PRECEDENCE
Maps (pseudo-)operators like"?:"
and"x++"
to precedences (higher value means higher precedence).
-
-
Method Detail
-
unparseInitializer
private void unparseInitializer(Java.Initializer i)
-
unparseFieldDeclaration
private void unparseFieldDeclaration(Java.FieldDeclaration fd)
-
unparseResources
private void unparseResources(Java.TryStatement.Resource[] resources)
-
main
public static void main(java.lang.String[] args) throws java.lang.Exception
Testing of parsing/unparsing.Reads compilation units from the files named on the command line and unparses them to
System.out
.- Throws:
java.lang.Exception
-
unparse
public static void unparse(Java.AbstractCompilationUnit acu, java.io.Writer w)
Unparses the givenJava.AbstractCompilationUnit
to the givenWriter
.
-
close
public void close()
Flushes all generated code.
-
unparseAbstractCompilationUnit
public void unparseAbstractCompilationUnit(Java.AbstractCompilationUnit cu)
- Parameters:
cu
- The compilation unit to unparse
-
unparseImportDeclaration
public void unparseImportDeclaration(Java.AbstractCompilationUnit.ImportDeclaration id)
-
unparseConstructorDeclarator
private void unparseConstructorDeclarator(Java.ConstructorDeclarator cd)
-
unparseMethodDeclarator
private void unparseMethodDeclarator(Java.MethodDeclarator md)
-
unparseStatements
public void unparseStatements(java.util.List<? extends Java.BlockStatement> statements)
Generates Java code from a sequence ofJava.BlockStatement
s.
-
unparseVariableDeclarator
private void unparseVariableDeclarator(Java.VariableDeclarator vd)
-
unparseFormalParameter
private void unparseFormalParameter(Java.FunctionDeclarator.FormalParameter fp, boolean hasEllipsis)
-
unparseCatchParameter
private void unparseCatchParameter(Java.CatchParameter cp)
-
unparseLambdaParameters
public void unparseLambdaParameters(Java.LambdaParameters lp)
-
unparseLambdaBody
public void unparseLambdaBody(Java.LambdaBody body)
-
unparseBlock
public void unparseBlock(Java.Block b)
Generates Java code from aJava.Block
.
-
unparseBlockStatement
public void unparseBlockStatement(Java.BlockStatement bs)
-
unparseTypeDeclaration
public void unparseTypeDeclaration(Java.TypeDeclaration td)
-
unparseType
public void unparseType(Java.Type t)
-
unparseAtom
public void unparseAtom(Java.Atom a)
-
unparseRvalue
public void unparseRvalue(Java.Rvalue rv)
-
unparseLvalue
public void unparseLvalue(Java.Lvalue lv)
-
unparseUnaryOperation
private void unparseUnaryOperation(Java.Rvalue operand, java.lang.String unaryOperator)
Iff theoperand
is unnatural for theunaryOperator
, encloses theoperand
in parentheses. Example: "a+b" is an unnatural operand for unary "!x".- Parameters:
unaryOperator
- ++x --x +x -x ~x !x x++ x--
-
unparseLhs
private void unparseLhs(Java.Atom lhs, java.lang.String binaryOperator)
Iff thelhs
is unnatural for thebinaryOperator
, encloses thelhs
in parentheses. Example: "a+b" is an unnatural lhs for operator "*".- Parameters:
binaryOperator
- = +=... ?: || && | ^ & == != < > <= >= instanceof << >> >>> + - * / % cast
-
unparseRhs
private void unparseRhs(Java.Rvalue rhs, java.lang.String binaryOperator)
Iff therhs
is unnatural for thebinaryOperator
, enclose therhs
in parentheses. Example: "a+b" is an unnatural rhs for operator "*".
-
unparse
private void unparse(Java.Atom operand, boolean natural)
-
isRightAssociate
private static boolean isRightAssociate(java.lang.String operator)
Returnstrue
iff operator is right associative e.g.a = b = c
evaluates asa = (b = c)
.- Returns:
- Return true iff operator is right associative
-
isLeftAssociate
private static boolean isLeftAssociate(java.lang.String operator)
Returnstrue
iff operator is left associative e.g.a - b - c
evaluates as(a - b) - c
.
-
comparePrecedence
private static int comparePrecedence(java.lang.String operator, Java.Atom operand)
Returns a value- < 0 iff the
operator
has lower precedence than theoperand
- ==; 0 iff the
operator
has equal precedence than theoperand
- > 0 iff the
operator
has higher precedence than theoperand
- < 0 iff the
-
getOperatorPrecedence
private static int getOperatorPrecedence(java.lang.String operator)
-
unparseNamedClassDeclaration
private void unparseNamedClassDeclaration(Java.NamedClassDeclaration ncd)
-
unparseArrayInitializerOrRvalue
private void unparseArrayInitializerOrRvalue(Java.ArrayInitializerOrRvalue aiorv)
-
unparseClassDeclarationBody
public void unparseClassDeclarationBody(Java.AbstractClassDeclaration cd)
Generates Java code from aJava.AbstractClassDeclaration
.
-
classDeclarationBodyIsEmpty
private static boolean classDeclarationBodyIsEmpty(Java.AbstractClassDeclaration cd)
- Returns:
- Whether
unparseClassDeclarationBody(Java.AbstractClassDeclaration)
will produce no output
-
unparseInterfaceDeclaration
private void unparseInterfaceDeclaration(Java.InterfaceDeclaration id)
-
unparseTypeDeclarationBody
private void unparseTypeDeclarationBody(Java.TypeDeclaration td)
-
unparseFunctionDeclaratorRest
private void unparseFunctionDeclaratorRest(Java.FunctionDeclarator fd)
-
unparseFormalParameters
private void unparseFormalParameters(Java.FunctionDeclarator.FormalParameters fps)
-
unparseDocComment
private void unparseDocComment(Java.DocCommentable dc)
-
unparseAnnotations
private void unparseAnnotations(Java.Annotation[] annotations)
-
unparseModifiers
private void unparseModifiers(Java.Modifier[] modifiers)
-
unparseTypeParameters
private void unparseTypeParameters(@Nullable Java.TypeParameter[] typeParameters)
-
unparseTypeParameter
private void unparseTypeParameter(Java.TypeParameter typeParameter)
-
unparseFunctionInvocationArguments
private void unparseFunctionInvocationArguments(Java.Rvalue[] arguments)
-
unparseEnumDeclaration
private void unparseEnumDeclaration(Java.EnumDeclaration ed)
-
unparseAnnotationTypeDeclaration
private void unparseAnnotationTypeDeclaration(Java.AnnotationTypeDeclaration atd)
-
unparseFunctionDeclarator
private void unparseFunctionDeclarator(Java.FunctionDeclarator fd)
-
unparseResource
private void unparseResource(Java.TryStatement.Resource r)
-
unparseVariableDeclarators
private void unparseVariableDeclarators(Java.VariableDeclarator[] variableDeclarators)
-
-