package polyglot.ast;
import polyglot.types.Flags;
import polyglot.types.Type;
import polyglot.types.Type;
import polyglot.types.Package;
import polyglot.util.Position;
import java.util.List;
/**
* A <code>NodeFactory</code> constructs AST nodes. All node construction
* should go through this factory or be done with the <code>copy()</code>
* method of <code>Node</code>.
*/
public interface NodeFactory
{
/**
* Returns a disambiguator for nodes from this factory.
*/
Disamb disamb();
//////////////////////////////////////////////////////////////////
// Factory Methods
//////////////////////////////////////////////////////////////////
AmbExpr AmbExpr(Position pos, String name);
// type or expr
AmbReceiver AmbReceiver(Position pos, String name);
AmbReceiver AmbReceiver(Position pos, Prefix prefix, String name);
// package or type
AmbQualifierNode AmbQualifierNode(Position pos, String name);
AmbQualifierNode AmbQualifierNode(Position pos, QualifierNode qual, String name);
// package or type or expr
AmbPrefix AmbPrefix(Position pos, String name);
AmbPrefix AmbPrefix(Position pos, Prefix prefix, String name);
AmbTypeNode AmbTypeNode(Position pos, String name);
AmbTypeNode AmbTypeNode(Position pos, QualifierNode qualifier, String name);
ArrayTypeNode ArrayTypeNode(Position pos, TypeNode base);
CanonicalTypeNode CanonicalTypeNode(Position pos, Type type);
ArrayAccess ArrayAccess(Position pos, Expr base, Expr index);
ArrayInit ArrayInit(Position pos);
ArrayInit ArrayInit(Position pos, List elements);
Assert Assert(Position pos, Expr cond);
Assert Assert(Position pos, Expr cond, Expr errorMessage);
Assign Assign(Position pos, Expr target, Assign.Operator op, Expr source);
LocalAssign LocalAssign(Position pos, Local target, Assign.Operator op, Expr source);
FieldAssign FieldAssign(Position pos, Field target, Assign.Operator op, Expr source);
ArrayAccessAssign ArrayAccessAssign(Position pos, ArrayAccess target, Assign.Operator op, Expr source);
AmbAssign AmbAssign(Position pos, Expr target, Assign.Operator op, Expr source);
Binary Binary(Position pos, Expr left, Binary.Operator op, Expr right);
Block Block(Position pos);
Block Block(Position pos, Stmt s1);
Block Block(Position pos, Stmt s1, Stmt s2);
Block Block(Position pos, Stmt s1, Stmt s2, Stmt s3);
Block Block(Position pos, Stmt s1, Stmt s2, Stmt s3, Stmt s4);
Block Block(Position pos, List statements);
SwitchBlock SwitchBlock(Position pos, List statements);
BooleanLit BooleanLit(Position pos, boolean value);
Branch Break(Position pos);
Branch Break(Position pos, String label);
Branch Continue(Position pos);
Branch Continue(Position pos, String label);
Branch Branch(Position pos, Branch.Kind kind);
Branch Branch(Position pos, Branch.Kind kind, String label);
Call Call(Position pos, String name);
Call Call(Position pos, String name, Expr a1);
Call Call(Position pos, String name, Expr a1, Expr a2);
Call Call(Position pos, String name, Expr a1, Expr a2, Expr a3);
Call Call(Position pos, String name, Expr a1, Expr a2, Expr a3, Expr a4);
Call Call(Position pos, String name, List args);
Call Call(Position pos, Receiver target, String name);
Call Call(Position pos, Receiver target, String name, Expr a1);
Call Call(Position pos, Receiver target, String name, Expr a1, Expr a2);
Call Call(Position pos, Receiver target, String name, Expr a1, Expr a2, Expr a3);
Call Call(Position pos, Receiver target, String name, Expr a1, Expr a2, Expr a3, Expr a4);
Call Call(Position pos, Receiver target, String name, List args);
Case Default(Position pos);
Case Case(Position pos, Expr expr);
Cast Cast(Position pos, TypeNode type, Expr expr);
Catch Catch(Position pos, Formal formal, Block body);
CharLit CharLit(Position pos, char value);
ClassBody ClassBody(Position pos, List members);
ClassDecl ClassDecl(Position pos, Flags flags, String name,
TypeNode superClass, List interfaces, ClassBody body);
ClassLit ClassLit(Position pos, TypeNode typeNode);
Conditional Conditional(Position pos, Expr cond, Expr consequent, Expr alternative);
ConstructorCall ThisCall(Position pos, List args);
ConstructorCall ThisCall(Position pos, Expr outer, List args);
ConstructorCall SuperCall(Position pos, List args);
ConstructorCall SuperCall(Position pos, Expr outer, List args);
ConstructorCall ConstructorCall(Position pos, ConstructorCall.Kind kind, List args);
ConstructorCall ConstructorCall(Position pos, ConstructorCall.Kind kind,
Expr outer, List args);
ConstructorDecl ConstructorDecl(Position pos, Flags flags, String name,
List formals, List throwTypes,
Block body);
FieldDecl FieldDecl(Position pos, Flags flags, TypeNode type, String name);
FieldDecl FieldDecl(Position pos, Flags flags, TypeNode type, String name, Expr init);
Do Do(Position pos, Stmt body, Expr cond);
Empty Empty(Position pos);
Eval Eval(Position pos, Expr expr);
Field Field(Position pos, String name);
Field Field(Position pos, Receiver target, String name);
FloatLit FloatLit(Position pos, FloatLit.Kind kind, double value);
For For(Position pos, List inits, Expr cond, List iters, Stmt body);
Formal Formal(Position pos, Flags flags, TypeNode type, String name);
If If(Position pos, Expr cond, Stmt consequent);
If If(Position pos, Expr cond, Stmt consequent, Stmt alternative);
Import Import(Position pos, Import.Kind kind, String name);
Initializer Initializer(Position pos, Flags flags, Block body);
Instanceof Instanceof(Position pos, Expr expr, TypeNode type);
IntLit IntLit(Position pos, IntLit.Kind kind, long value);
Labeled Labeled(Position pos, String label, Stmt body);
Local Local(Position pos, String name);
LocalClassDecl LocalClassDecl(Position pos, ClassDecl decl);
LocalDecl LocalDecl(Position pos, Flags flags, TypeNode type, String name);
LocalDecl LocalDecl(Position pos, Flags flags, TypeNode type, String name, Expr init);
MethodDecl MethodDecl(Position pos, Flags flags, TypeNode returnType, String name,
List formals, List throwTypes, Block body);
New New(Position pos, TypeNode type, List args);
New New(Position pos, TypeNode type, List args, ClassBody body);
New New(Position pos, Expr outer, TypeNode objectType, List args);
New New(Position pos, Expr outer, TypeNode objectType, List args, ClassBody body);
NewArray NewArray(Position pos, TypeNode base, List dims);
NewArray NewArray(Position pos, TypeNode base, List dims, int addDims);
NewArray NewArray(Position pos, TypeNode base, int addDims, ArrayInit init);
NewArray NewArray(Position pos, TypeNode base, List dims, int addDims, ArrayInit init);
NullLit NullLit(Position pos);
Return Return(Position pos);
Return Return(Position pos, Expr expr);
SourceCollection SourceCollection(Position pos, List sources);
SourceFile SourceFile(Position pos, List decls);
SourceFile SourceFile(Position pos, List imports, List decls);
SourceFile SourceFile(Position pos, PackageNode packageName, List imports, List decls);
Special This(Position pos);
Special This(Position pos, TypeNode outer);
Special Super(Position pos);
Special Super(Position pos, TypeNode outer);
Special Special(Position pos, Special.Kind kind);
Special Special(Position pos, Special.Kind kind, TypeNode outer);
StringLit StringLit(Position pos, String value);
Switch Switch(Position pos, Expr expr, List elements);
Synchronized Synchronized(Position pos, Expr expr, Block body);
Throw Throw(Position pos, Expr expr);
Try Try(Position pos, Block tryBlock, List catchBlocks);
Try Try(Position pos, Block tryBlock, List catchBlocks, Block finallyBlock);
PackageNode PackageNode(Position pos, Package p);
Unary Unary(Position pos, Unary.Operator op, Expr expr);
Unary Unary(Position pos, Expr expr, Unary.Operator op);
While While(Position pos, Expr cond, Stmt body);
}