Package org.codehaus.janino
Class Unparser
- java.lang.Object
-
- org.codehaus.janino.Unparser
-
- All Implemented Interfaces:
java.lang.AutoCloseable
public class Unparser extends java.lang.Object implements java.lang.AutoCloseableUnparses (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>annotationUnparserprivate Visitor.ArrayInitializerOrRvalueVisitor<java.lang.Void,java.lang.RuntimeException>arrayInitializerOrRvalueUnparserprivate Visitor.AtomVisitor<java.lang.Void,java.lang.RuntimeException>atomUnparserprivate Visitor.BlockStatementVisitor<java.lang.Void,java.lang.RuntimeException>blockStatementUnparserprivate Visitor.AbstractCompilationUnitVisitor<java.lang.Void,java.lang.RuntimeException>compilationUnitUnparserprivate Visitor.ElementValueVisitor<java.lang.Void,java.lang.RuntimeException>elementValueUnparserprivate Visitor.FunctionDeclaratorVisitor<java.lang.Void,java.lang.RuntimeException>functionDeclaratorUnparserprivate Visitor.ImportVisitor<java.lang.Void,java.lang.RuntimeException>importUnparserprivate Visitor.LambdaBodyVisitor<java.lang.Void,java.lang.RuntimeException>lambdaBodyUnparserprivate Visitor.LambdaParametersVisitor<java.lang.Void,java.lang.RuntimeException>lambdaParametersUnparserprivate static java.util.Set<java.lang.String>LEFT_ASSOCIATIVE_OPERATORSprivate Visitor.LvalueVisitor<java.lang.Void,java.lang.RuntimeException>lvalueUnparserprivate Visitor.ModifierVisitor<java.lang.Void,java.lang.RuntimeException>modifierUnparserprivate Visitor.ModuleDirectiveVisitor<java.lang.Void,java.lang.RuntimeException>moduleDirectiveUnparserprivate static java.util.Map<java.lang.String,java.lang.Integer>OPERATOR_PRECEDENCEMaps (pseudo-)operators like"?:"and"x++"to precedences (higher value means higher precedence).protected java.io.PrintWriterpwWhere thevisit...()methods print their text.private Visitor.TryStatementResourceVisitor<java.lang.Void,java.lang.RuntimeException>resourceUnparserprivate static java.util.Set<java.lang.String>RIGHT_ASSOCIATIVE_OPERATORSprivate Visitor.RvalueVisitor<java.lang.Void,java.lang.RuntimeException>rvalueUnparserprivate Visitor.TypeBodyDeclarationVisitor<java.lang.Void,java.lang.RuntimeException>typeBodyDeclarationUnparserprivate Visitor.TypeDeclarationVisitor<java.lang.Void,java.lang.RuntimeException>typeDeclarationUnparserprivate Visitor.TypeVisitor<java.lang.Void,java.lang.RuntimeException>typeUnparserprivate 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 booleanclassDeclarationBodyIsEmpty(Java.AbstractClassDeclaration cd)voidclose()Flushes all generated code.private static intcomparePrecedence(java.lang.String operator, Java.Atom operand)Returns a value < 0 iff theoperatorhas lower precedence than theoperand==; 0 iff theoperatorhas equal precedence than theoperand> 0 iff theoperatorhas higher precedence than theoperandvoidflush()Flushes all generated code.private static intgetOperatorPrecedence(java.lang.String operator)private static booleanisLeftAssociate(java.lang.String operator)Returnstrueiff operator is left associative e.g.private static booleanisRightAssociate(java.lang.String operator)Returnstrueiff operator is right associative e.g.static voidmain(java.lang.String[] args)Testing of parsing/unparsing.static voidunparse(Java.AbstractCompilationUnit acu, java.io.Writer w)Unparses the givenJava.AbstractCompilationUnitto the givenWriter.private voidunparse(Java.Atom operand, boolean natural)voidunparseAbstractCompilationUnit(Java.AbstractCompilationUnit cu)private voidunparseAnnotations(Java.Annotation[] annotations)private voidunparseAnnotationTypeDeclaration(Java.AnnotationTypeDeclaration atd)private voidunparseArrayInitializerOrRvalue(Java.ArrayInitializerOrRvalue aiorv)voidunparseAtom(Java.Atom a)voidunparseBlock(Java.Block b)Generates Java code from aJava.Block.voidunparseBlockStatement(Java.BlockStatement bs)private voidunparseCatchParameter(Java.CatchParameter cp)voidunparseClassDeclarationBody(Java.AbstractClassDeclaration cd)Generates Java code from aJava.AbstractClassDeclaration.private voidunparseConstructorDeclarator(Java.ConstructorDeclarator cd)private voidunparseDocComment(Java.DocCommentable dc)private voidunparseEnumDeclaration(Java.EnumDeclaration ed)private voidunparseFieldDeclaration(Java.FieldDeclaration fd)private voidunparseFormalParameter(Java.FunctionDeclarator.FormalParameter fp, boolean hasEllipsis)private voidunparseFormalParameters(Java.FunctionDeclarator.FormalParameters fps)private voidunparseFunctionDeclarator(Java.FunctionDeclarator fd)private voidunparseFunctionDeclaratorRest(Java.FunctionDeclarator fd)private voidunparseFunctionInvocationArguments(Java.Rvalue[] arguments)voidunparseImportDeclaration(Java.AbstractCompilationUnit.ImportDeclaration id)private voidunparseInitializer(Java.Initializer i)private voidunparseInterfaceDeclaration(Java.InterfaceDeclaration id)voidunparseLambdaBody(Java.LambdaBody body)voidunparseLambdaParameters(Java.LambdaParameters lp)private voidunparseLhs(Java.Atom lhs, java.lang.String binaryOperator)Iff thelhsis unnatural for thebinaryOperator, encloses thelhsin parentheses.voidunparseLvalue(Java.Lvalue lv)private voidunparseMethodDeclarator(Java.MethodDeclarator md)private voidunparseModifiers(Java.Modifier[] modifiers)private voidunparseNamedClassDeclaration(Java.NamedClassDeclaration ncd)private voidunparseResource(Java.TryStatement.Resource r)private voidunparseResources(Java.TryStatement.Resource[] resources)private voidunparseRhs(Java.Rvalue rhs, java.lang.String binaryOperator)Iff therhsis unnatural for thebinaryOperator, enclose therhsin parentheses.voidunparseRvalue(Java.Rvalue rv)voidunparseStatements(java.util.List<? extends Java.BlockStatement> statements)Generates Java code from a sequence ofJava.BlockStatements.voidunparseType(Java.Type t)voidunparseTypeDeclaration(Java.TypeDeclaration td)private voidunparseTypeDeclarationBody(Java.TypeDeclaration td)private voidunparseTypeParameter(Java.TypeParameter typeParameter)private voidunparseTypeParameters(Java.TypeParameter[] typeParameters)private voidunparseUnaryOperation(Java.Rvalue operand, java.lang.String unaryOperator)Iff theoperandis unnatural for theunaryOperator, encloses theoperandin parentheses.private voidunparseVariableDeclarator(Java.VariableDeclarator vd)private voidunparseVariableDeclarators(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
-
arrayInitializerOrRvalueUnparser
private final Visitor.ArrayInitializerOrRvalueVisitor<java.lang.Void,java.lang.RuntimeException> arrayInitializerOrRvalueUnparser
-
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 thisPrintWriterdoes 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.ExceptionTesting 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.AbstractCompilationUnitto the givenWriter.
-
flush
public void flush()
Flushes all generated code.
-
close
public void close()
Flushes all generated code.- Specified by:
closein interfacejava.lang.AutoCloseable
-
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.BlockStatements.
-
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)
-
unparseArrayInitializerOrRvalue
private void unparseArrayInitializerOrRvalue(Java.ArrayInitializerOrRvalue aiorv)
-
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 theoperandis unnatural for theunaryOperator, encloses theoperandin 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 thelhsis unnatural for thebinaryOperator, encloses thelhsin 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 therhsis unnatural for thebinaryOperator, enclose therhsin 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)
Returnstrueiff operator is right associative e.g.a = b = cevaluates asa = (b = c).- Returns:
- Return true iff operator is right associative
-
isLeftAssociate
private static boolean isLeftAssociate(java.lang.String operator)
Returnstrueiff operator is left associative e.g.a - b - cevaluates as(a - b) - c.
-
comparePrecedence
private static int comparePrecedence(java.lang.String operator, Java.Atom operand)Returns a value- < 0 iff the
operatorhas lower precedence than theoperand - ==; 0 iff the
operatorhas equal precedence than theoperand - > 0 iff the
operatorhas higher precedence than theoperand
- < 0 iff the
-
getOperatorPrecedence
private static int getOperatorPrecedence(java.lang.String operator)
-
unparseNamedClassDeclaration
private void unparseNamedClassDeclaration(Java.NamedClassDeclaration ncd)
-
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)
-
-