Package com.tonic.analysis.source.emit
Class SourceEmitter
- java.lang.Object
-
- com.tonic.analysis.source.emit.SourceEmitter
-
- All Implemented Interfaces:
SourceVisitor<Void>
public class SourceEmitter extends Object implements SourceVisitor<Void>
Visitor that renders recovered AST nodes back to Java source text.
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description static interfaceSourceEmitter.LineMapSinkReceives each provenance-carrying statement's (owning method key, statement, 1-based line).
-
Constructor Summary
Constructors Constructor Description SourceEmitter(IndentingWriter writer)Creates an emitter with the default configuration.SourceEmitter(IndentingWriter writer, SourceEmitterConfig config)Creates an emitter with the given configuration.
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description voidclearUsedTypes()Clears the record of types referenced during emission.static Stringemit(CompilationUnit cu)Emits a compilation unit to source text with the default configuration.static Stringemit(CompilationUnit cu, SourceEmitterConfig config)Emits a compilation unit to source text.static Stringemit(Expression expr)Emits an expression to source text with the default configuration.static Stringemit(Statement stmt)Emits a statement to source text with the default configuration.static Stringemit(Statement stmt, SourceEmitterConfig config)Emits a statement to source text.Set<String>getUsedTypes()voidsetCurrentClassName(String className)Sets the name of the class currently being emitted.voidsetLineMapSink(String baseMethodKey, SourceEmitter.LineMapSink sink)Registers a sink for the 1-based output line each provenance-carrying statement starts on.voidsetParameterNames(Collection<String> names)Seeds the shadow scope with the emitting method's parameter names (block-emission path).VoidvisitAnnotationExpr(AnnotationExpr expr)Visits an annotation use.VoidvisitArrayAccess(ArrayAccessExpr expr)Visits an array element access.VoidvisitArrayInit(ArrayInitExpr expr)Visits a braced array initializer.VoidvisitArrayType(ArraySourceType type)Visits an array type.VoidvisitBinary(BinaryExpr expr)Visits a binary operation.VoidvisitBlock(BlockStmt stmt)Visits a braced block.VoidvisitBreak(BreakStmt stmt)Visits a break statement.VoidvisitCast(CastExpr expr)Visits a cast.VoidvisitClass(ClassExpr expr)Visits a class literal.VoidvisitClassDecl(ClassDecl decl)Visits a class declaration.VoidvisitCompilationUnit(CompilationUnit cu)Visits a compilation unit.VoidvisitConstructorDecl(ConstructorDecl decl)Visits a constructor declaration.VoidvisitContinue(ContinueStmt stmt)Visits a continue statement.VoidvisitDoWhile(DoWhileStmt stmt)Visits a do-while loop.VoidvisitDynamicConstant(DynamicConstantExpr expr)Visits a dynamically computed constant.VoidvisitEnumConstantDecl(EnumConstantDecl decl)Visits one enum constant.VoidvisitEnumDecl(EnumDecl decl)Visits an enum declaration.VoidvisitExprStmt(ExprStmt stmt)Visits an expression used as a statement.VoidvisitFieldAccess(FieldAccessExpr expr)Visits a field access.VoidvisitFieldDecl(FieldDecl decl)Visits a field declaration.VoidvisitFor(ForStmt stmt)Visits a counted for loop.VoidvisitForEach(ForEachStmt stmt)Visits an enhanced for loop.VoidvisitIf(IfStmt stmt)Visits an if statement.VoidvisitImportDecl(ImportDecl decl)Visits an import declaration.VoidvisitInstanceOf(InstanceOfExpr expr)Visits aninstanceoftest.VoidvisitInterfaceDecl(InterfaceDecl decl)Visits an interface declaration.VoidvisitInvokeDynamic(InvokeDynamicExpr expr)Visits an invokedynamic call site.VoidvisitIRRegion(IRRegionStmt stmt)Visits a region of control flow that stayed in IR form because it could not be structured.VoidvisitLabeled(LabeledStmt stmt)Visits a labeled statement.VoidvisitLambda(LambdaExpr expr)Visits a lambda expression.VoidvisitLiteral(LiteralExpr expr)Visits a literal.VoidvisitMethodCall(MethodCallExpr expr)Visits a method call.VoidvisitMethodDecl(MethodDecl decl)Visits a method declaration.VoidvisitMethodRef(MethodRefExpr expr)Visits a method reference.VoidvisitNew(NewExpr expr)Visits an object allocation.VoidvisitNewArray(NewArrayExpr expr)Visits an array allocation.VoidvisitParameterDecl(ParameterDecl decl)Visits a method or constructor parameter.VoidvisitPrimitiveType(PrimitiveSourceType type)Visits a primitive type.VoidvisitReferenceType(ReferenceSourceType type)Visits a class or interface type.VoidvisitReturn(ReturnStmt stmt)Visits a return statement.VoidvisitSuper(SuperExpr expr)Visits asuperreference.VoidvisitSwitch(SwitchStmt stmt)Visits a switch statement.VoidvisitSwitchExpr(SwitchExpr expr)Default so existing visitors need no change; only the source emitter overrides it.VoidvisitSynchronized(SynchronizedStmt stmt)Visits a synchronized block.VoidvisitTernary(TernaryExpr expr)Visits a ternary conditional.VoidvisitThis(ThisExpr expr)Visits athisreference.VoidvisitThrow(ThrowStmt stmt)Visits a throw statement.VoidvisitTryCatch(TryCatchStmt stmt)Visits a try statement, with its catch clauses and finally block.VoidvisitUnary(UnaryExpr expr)Visits a unary operation.VoidvisitVarDecl(VarDeclStmt stmt)Visits a local variable declaration.VoidvisitVarRef(VarRefExpr expr)Visits a variable reference.VoidvisitVoidType(VoidSourceType type)Visits the void type.VoidvisitWhile(WhileStmt stmt)Visits a while loop.
-
-
-
Constructor Detail
-
SourceEmitter
public SourceEmitter(IndentingWriter writer)
Creates an emitter with the default configuration.- Parameters:
writer- the output writer
-
SourceEmitter
public SourceEmitter(IndentingWriter writer, SourceEmitterConfig config)
Creates an emitter with the given configuration.- Parameters:
writer- the output writerconfig- emission options
-
-
Method Detail
-
clearUsedTypes
public void clearUsedTypes()
Clears the record of types referenced during emission.
-
setCurrentClassName
public void setCurrentClassName(String className)
Sets the name of the class currently being emitted.- Parameters:
className- the class name
-
setLineMapSink
public void setLineMapSink(String baseMethodKey, SourceEmitter.LineMapSink sink)
Registers a sink for the 1-based output line each provenance-carrying statement starts on.- Parameters:
baseMethodKey- key of the method being emitted.sink- receives each statement and its start line, skipping offsets whose owning method cannot be identified
-
emit
public static String emit(Statement stmt)
Emits a statement to source text with the default configuration.- Parameters:
stmt- the statement to emit- Returns:
- the emitted source text
-
emit
public static String emit(Statement stmt, SourceEmitterConfig config)
Emits a statement to source text.- Parameters:
stmt- the statement to emitconfig- emission options- Returns:
- the emitted source text
-
emit
public static String emit(Expression expr)
Emits an expression to source text with the default configuration.- Parameters:
expr- the expression to emit- Returns:
- the emitted source text
-
emit
public static String emit(CompilationUnit cu)
Emits a compilation unit to source text with the default configuration.- Parameters:
cu- the compilation unit to emit- Returns:
- the emitted source text
-
emit
public static String emit(CompilationUnit cu, SourceEmitterConfig config)
Emits a compilation unit to source text.- Parameters:
cu- the compilation unit to emitconfig- emission options- Returns:
- the emitted source text
-
visitCompilationUnit
public Void visitCompilationUnit(CompilationUnit cu)
Description copied from interface:SourceVisitorVisits a compilation unit.- Specified by:
visitCompilationUnitin interfaceSourceVisitor<Void>- Parameters:
cu- the compilation unit node- Returns:
- the visitor's result, null unless overridden
-
visitImportDecl
public Void visitImportDecl(ImportDecl decl)
Description copied from interface:SourceVisitorVisits an import declaration.- Specified by:
visitImportDeclin interfaceSourceVisitor<Void>- Parameters:
decl- the declaration node- Returns:
- the visitor's result, null unless overridden
-
visitClassDecl
public Void visitClassDecl(ClassDecl decl)
Description copied from interface:SourceVisitorVisits a class declaration.- Specified by:
visitClassDeclin interfaceSourceVisitor<Void>- Parameters:
decl- the declaration node- Returns:
- the visitor's result, null unless overridden
-
visitInterfaceDecl
public Void visitInterfaceDecl(InterfaceDecl decl)
Description copied from interface:SourceVisitorVisits an interface declaration.- Specified by:
visitInterfaceDeclin interfaceSourceVisitor<Void>- Parameters:
decl- the declaration node- Returns:
- the visitor's result, null unless overridden
-
visitEnumDecl
public Void visitEnumDecl(EnumDecl decl)
Description copied from interface:SourceVisitorVisits an enum declaration.- Specified by:
visitEnumDeclin interfaceSourceVisitor<Void>- Parameters:
decl- the declaration node- Returns:
- the visitor's result, null unless overridden
-
visitEnumConstantDecl
public Void visitEnumConstantDecl(EnumConstantDecl decl)
Description copied from interface:SourceVisitorVisits one enum constant.- Specified by:
visitEnumConstantDeclin interfaceSourceVisitor<Void>- Parameters:
decl- the declaration node- Returns:
- the visitor's result, null unless overridden
-
visitMethodDecl
public Void visitMethodDecl(MethodDecl decl)
Description copied from interface:SourceVisitorVisits a method declaration.- Specified by:
visitMethodDeclin interfaceSourceVisitor<Void>- Parameters:
decl- the declaration node- Returns:
- the visitor's result, null unless overridden
-
visitConstructorDecl
public Void visitConstructorDecl(ConstructorDecl decl)
Description copied from interface:SourceVisitorVisits a constructor declaration.- Specified by:
visitConstructorDeclin interfaceSourceVisitor<Void>- Parameters:
decl- the declaration node- Returns:
- the visitor's result, null unless overridden
-
visitFieldDecl
public Void visitFieldDecl(FieldDecl decl)
Description copied from interface:SourceVisitorVisits a field declaration.- Specified by:
visitFieldDeclin interfaceSourceVisitor<Void>- Parameters:
decl- the declaration node- Returns:
- the visitor's result, null unless overridden
-
visitParameterDecl
public Void visitParameterDecl(ParameterDecl decl)
Description copied from interface:SourceVisitorVisits a method or constructor parameter.- Specified by:
visitParameterDeclin interfaceSourceVisitor<Void>- Parameters:
decl- the declaration node- Returns:
- the visitor's result, null unless overridden
-
visitAnnotationExpr
public Void visitAnnotationExpr(AnnotationExpr expr)
Description copied from interface:SourceVisitorVisits an annotation use.- Specified by:
visitAnnotationExprin interfaceSourceVisitor<Void>- Parameters:
expr- the annotation node- Returns:
- the visitor's result, null unless overridden
-
visitBlock
public Void visitBlock(BlockStmt stmt)
Description copied from interface:SourceVisitorVisits a braced block.- Specified by:
visitBlockin interfaceSourceVisitor<Void>- Parameters:
stmt- the statement node- Returns:
- the visitor's result
-
visitIf
public Void visitIf(IfStmt stmt)
Description copied from interface:SourceVisitorVisits an if statement.- Specified by:
visitIfin interfaceSourceVisitor<Void>- Parameters:
stmt- the statement node- Returns:
- the visitor's result
-
visitWhile
public Void visitWhile(WhileStmt stmt)
Description copied from interface:SourceVisitorVisits a while loop.- Specified by:
visitWhilein interfaceSourceVisitor<Void>- Parameters:
stmt- the statement node- Returns:
- the visitor's result
-
visitDoWhile
public Void visitDoWhile(DoWhileStmt stmt)
Description copied from interface:SourceVisitorVisits a do-while loop.- Specified by:
visitDoWhilein interfaceSourceVisitor<Void>- Parameters:
stmt- the statement node- Returns:
- the visitor's result
-
visitFor
public Void visitFor(ForStmt stmt)
Description copied from interface:SourceVisitorVisits a counted for loop.- Specified by:
visitForin interfaceSourceVisitor<Void>- Parameters:
stmt- the statement node- Returns:
- the visitor's result
-
visitForEach
public Void visitForEach(ForEachStmt stmt)
Description copied from interface:SourceVisitorVisits an enhanced for loop.- Specified by:
visitForEachin interfaceSourceVisitor<Void>- Parameters:
stmt- the statement node- Returns:
- the visitor's result
-
visitSwitch
public Void visitSwitch(SwitchStmt stmt)
Description copied from interface:SourceVisitorVisits a switch statement.- Specified by:
visitSwitchin interfaceSourceVisitor<Void>- Parameters:
stmt- the statement node- Returns:
- the visitor's result
-
visitTryCatch
public Void visitTryCatch(TryCatchStmt stmt)
Description copied from interface:SourceVisitorVisits a try statement, with its catch clauses and finally block.- Specified by:
visitTryCatchin interfaceSourceVisitor<Void>- Parameters:
stmt- the statement node- Returns:
- the visitor's result
-
visitReturn
public Void visitReturn(ReturnStmt stmt)
Description copied from interface:SourceVisitorVisits a return statement.- Specified by:
visitReturnin interfaceSourceVisitor<Void>- Parameters:
stmt- the statement node- Returns:
- the visitor's result
-
visitThrow
public Void visitThrow(ThrowStmt stmt)
Description copied from interface:SourceVisitorVisits a throw statement.- Specified by:
visitThrowin interfaceSourceVisitor<Void>- Parameters:
stmt- the statement node- Returns:
- the visitor's result
-
visitVarDecl
public Void visitVarDecl(VarDeclStmt stmt)
Description copied from interface:SourceVisitorVisits a local variable declaration.- Specified by:
visitVarDeclin interfaceSourceVisitor<Void>- Parameters:
stmt- the statement node- Returns:
- the visitor's result
-
setParameterNames
public void setParameterNames(Collection<String> names)
Seeds the shadow scope with the emitting method's parameter names (block-emission path).- Parameters:
names- the names to treat as already in scope, replacing any previous set
-
visitExprStmt
public Void visitExprStmt(ExprStmt stmt)
Description copied from interface:SourceVisitorVisits an expression used as a statement.- Specified by:
visitExprStmtin interfaceSourceVisitor<Void>- Parameters:
stmt- the statement node- Returns:
- the visitor's result
-
visitSynchronized
public Void visitSynchronized(SynchronizedStmt stmt)
Description copied from interface:SourceVisitorVisits a synchronized block.- Specified by:
visitSynchronizedin interfaceSourceVisitor<Void>- Parameters:
stmt- the statement node- Returns:
- the visitor's result
-
visitLabeled
public Void visitLabeled(LabeledStmt stmt)
Description copied from interface:SourceVisitorVisits a labeled statement.- Specified by:
visitLabeledin interfaceSourceVisitor<Void>- Parameters:
stmt- the statement node- Returns:
- the visitor's result
-
visitBreak
public Void visitBreak(BreakStmt stmt)
Description copied from interface:SourceVisitorVisits a break statement.- Specified by:
visitBreakin interfaceSourceVisitor<Void>- Parameters:
stmt- the statement node- Returns:
- the visitor's result
-
visitContinue
public Void visitContinue(ContinueStmt stmt)
Description copied from interface:SourceVisitorVisits a continue statement.- Specified by:
visitContinuein interfaceSourceVisitor<Void>- Parameters:
stmt- the statement node- Returns:
- the visitor's result
-
visitIRRegion
public Void visitIRRegion(IRRegionStmt stmt)
Description copied from interface:SourceVisitorVisits a region of control flow that stayed in IR form because it could not be structured.- Specified by:
visitIRRegionin interfaceSourceVisitor<Void>- Parameters:
stmt- the statement node- Returns:
- the visitor's result
-
visitLiteral
public Void visitLiteral(LiteralExpr expr)
Description copied from interface:SourceVisitorVisits a literal.- Specified by:
visitLiteralin interfaceSourceVisitor<Void>- Parameters:
expr- the expression node- Returns:
- the visitor's result
-
visitVarRef
public Void visitVarRef(VarRefExpr expr)
Description copied from interface:SourceVisitorVisits a variable reference.- Specified by:
visitVarRefin interfaceSourceVisitor<Void>- Parameters:
expr- the expression node- Returns:
- the visitor's result
-
visitFieldAccess
public Void visitFieldAccess(FieldAccessExpr expr)
Description copied from interface:SourceVisitorVisits a field access.- Specified by:
visitFieldAccessin interfaceSourceVisitor<Void>- Parameters:
expr- the expression node- Returns:
- the visitor's result
-
visitArrayAccess
public Void visitArrayAccess(ArrayAccessExpr expr)
Description copied from interface:SourceVisitorVisits an array element access.- Specified by:
visitArrayAccessin interfaceSourceVisitor<Void>- Parameters:
expr- the expression node- Returns:
- the visitor's result
-
visitMethodCall
public Void visitMethodCall(MethodCallExpr expr)
Description copied from interface:SourceVisitorVisits a method call.- Specified by:
visitMethodCallin interfaceSourceVisitor<Void>- Parameters:
expr- the expression node- Returns:
- the visitor's result
-
visitNew
public Void visitNew(NewExpr expr)
Description copied from interface:SourceVisitorVisits an object allocation.- Specified by:
visitNewin interfaceSourceVisitor<Void>- Parameters:
expr- the expression node- Returns:
- the visitor's result
-
visitNewArray
public Void visitNewArray(NewArrayExpr expr)
Description copied from interface:SourceVisitorVisits an array allocation.- Specified by:
visitNewArrayin interfaceSourceVisitor<Void>- Parameters:
expr- the expression node- Returns:
- the visitor's result
-
visitArrayInit
public Void visitArrayInit(ArrayInitExpr expr)
Description copied from interface:SourceVisitorVisits a braced array initializer.- Specified by:
visitArrayInitin interfaceSourceVisitor<Void>- Parameters:
expr- the expression node- Returns:
- the visitor's result
-
visitBinary
public Void visitBinary(BinaryExpr expr)
Description copied from interface:SourceVisitorVisits a binary operation.- Specified by:
visitBinaryin interfaceSourceVisitor<Void>- Parameters:
expr- the expression node- Returns:
- the visitor's result
-
visitUnary
public Void visitUnary(UnaryExpr expr)
Description copied from interface:SourceVisitorVisits a unary operation.- Specified by:
visitUnaryin interfaceSourceVisitor<Void>- Parameters:
expr- the expression node- Returns:
- the visitor's result
-
visitCast
public Void visitCast(CastExpr expr)
Description copied from interface:SourceVisitorVisits a cast.- Specified by:
visitCastin interfaceSourceVisitor<Void>- Parameters:
expr- the expression node- Returns:
- the visitor's result
-
visitInstanceOf
public Void visitInstanceOf(InstanceOfExpr expr)
Description copied from interface:SourceVisitorVisits aninstanceoftest.- Specified by:
visitInstanceOfin interfaceSourceVisitor<Void>- Parameters:
expr- the expression node- Returns:
- the visitor's result
-
visitTernary
public Void visitTernary(TernaryExpr expr)
Description copied from interface:SourceVisitorVisits a ternary conditional.- Specified by:
visitTernaryin interfaceSourceVisitor<Void>- Parameters:
expr- the expression node- Returns:
- the visitor's result
-
visitSwitchExpr
public Void visitSwitchExpr(SwitchExpr expr)
Description copied from interface:SourceVisitorDefault so existing visitors need no change; only the source emitter overrides it.- Specified by:
visitSwitchExprin interfaceSourceVisitor<Void>- Parameters:
expr- the switch expression to visit- Returns:
- the visitor result, null unless overridden
-
visitLambda
public Void visitLambda(LambdaExpr expr)
Description copied from interface:SourceVisitorVisits a lambda expression.- Specified by:
visitLambdain interfaceSourceVisitor<Void>- Parameters:
expr- the expression node- Returns:
- the visitor's result
-
visitMethodRef
public Void visitMethodRef(MethodRefExpr expr)
Description copied from interface:SourceVisitorVisits a method reference.- Specified by:
visitMethodRefin interfaceSourceVisitor<Void>- Parameters:
expr- the expression node- Returns:
- the visitor's result
-
visitThis
public Void visitThis(ThisExpr expr)
Description copied from interface:SourceVisitorVisits athisreference.- Specified by:
visitThisin interfaceSourceVisitor<Void>- Parameters:
expr- the expression node- Returns:
- the visitor's result
-
visitSuper
public Void visitSuper(SuperExpr expr)
Description copied from interface:SourceVisitorVisits asuperreference.- Specified by:
visitSuperin interfaceSourceVisitor<Void>- Parameters:
expr- the expression node- Returns:
- the visitor's result
-
visitClass
public Void visitClass(ClassExpr expr)
Description copied from interface:SourceVisitorVisits a class literal.- Specified by:
visitClassin interfaceSourceVisitor<Void>- Parameters:
expr- the expression node- Returns:
- the visitor's result
-
visitDynamicConstant
public Void visitDynamicConstant(DynamicConstantExpr expr)
Description copied from interface:SourceVisitorVisits a dynamically computed constant.- Specified by:
visitDynamicConstantin interfaceSourceVisitor<Void>- Parameters:
expr- the expression node- Returns:
- the visitor's result
-
visitInvokeDynamic
public Void visitInvokeDynamic(InvokeDynamicExpr expr)
Description copied from interface:SourceVisitorVisits an invokedynamic call site.- Specified by:
visitInvokeDynamicin interfaceSourceVisitor<Void>- Parameters:
expr- the expression node- Returns:
- the visitor's result
-
visitPrimitiveType
public Void visitPrimitiveType(PrimitiveSourceType type)
Description copied from interface:SourceVisitorVisits a primitive type.- Specified by:
visitPrimitiveTypein interfaceSourceVisitor<Void>- Parameters:
type- the type node- Returns:
- the visitor's result
-
visitReferenceType
public Void visitReferenceType(ReferenceSourceType type)
Description copied from interface:SourceVisitorVisits a class or interface type.- Specified by:
visitReferenceTypein interfaceSourceVisitor<Void>- Parameters:
type- the type node- Returns:
- the visitor's result
-
visitArrayType
public Void visitArrayType(ArraySourceType type)
Description copied from interface:SourceVisitorVisits an array type.- Specified by:
visitArrayTypein interfaceSourceVisitor<Void>- Parameters:
type- the type node- Returns:
- the visitor's result
-
visitVoidType
public Void visitVoidType(VoidSourceType type)
Description copied from interface:SourceVisitorVisits the void type.- Specified by:
visitVoidTypein interfaceSourceVisitor<Void>- Parameters:
type- the type node- Returns:
- the visitor's result
-
-