jctree.java
来自「是一款用JAVA 编写的编译器 具有很强的编译功能」· Java 代码 · 共 2,048 行 · 第 1/5 页
JAVA
2,048 行
public static class JCFieldAccess extends JCExpression implements MemberSelectTree { public JCExpression selected; public Name name; public Symbol sym; protected JCFieldAccess(JCExpression selected, Name name, Symbol sym) { this.selected = selected; this.name = name; this.sym = sym; } @Override public void accept(Visitor v) { v.visitSelect(this); } public Kind getKind() { return Kind.MEMBER_SELECT; } public JCExpression getExpression() { return selected; } @Override public <R,D> R accept(TreeVisitor<R,D> v, D d) { return v.visitMemberSelect(this, d); } public Name getIdentifier() { return name; } @Override public int getTag() { return SELECT; } } /** * An identifier * @param idname the name * @param sym the symbol */ public static class JCIdent extends JCExpression implements IdentifierTree { public Name name; public Symbol sym; protected JCIdent(Name name, Symbol sym) { this.name = name; this.sym = sym; } @Override public void accept(Visitor v) { v.visitIdent(this); } public Kind getKind() { return Kind.IDENTIFIER; } public Name getName() { return name; } @Override public <R,D> R accept(TreeVisitor<R,D> v, D d) { return v.visitIdentifier(this, d); } public int getTag() { return IDENT; } } /** * A constant value given literally. * @param value value representation */ public static class JCLiteral extends JCExpression implements LiteralTree { public int typetag; public Object value; protected JCLiteral(int typetag, Object value) { this.typetag = typetag; this.value = value; } @Override public void accept(Visitor v) { v.visitLiteral(this); } public Kind getKind() { switch (typetag) { case TypeTags.INT: return Kind.INT_LITERAL; case TypeTags.LONG: return Kind.LONG_LITERAL; case TypeTags.FLOAT: return Kind.FLOAT_LITERAL; case TypeTags.DOUBLE: return Kind.DOUBLE_LITERAL; case TypeTags.BOOLEAN: return Kind.BOOLEAN_LITERAL; case TypeTags.CHAR: return Kind.CHAR_LITERAL; case TypeTags.CLASS: return Kind.STRING_LITERAL; case TypeTags.BOT: return Kind.NULL_LITERAL; default: throw new AssertionError("unknown literal kind " + this); } } public Object getValue() { switch (typetag) { case TypeTags.BOOLEAN: int bi = (Integer) value; return (bi != 0); case TypeTags.CHAR: int ci = (Integer) value; char c = (char) ci; if (c != ci) throw new AssertionError("bad value for char literal"); return c; default: return value; } } @Override public <R,D> R accept(TreeVisitor<R,D> v, D d) { return v.visitLiteral(this, d); } @Override public JCLiteral setType(Type type) { super.setType(type); return this; } @Override public int getTag() { return LITERAL; } } /** * Identifies a basic type. * @param tag the basic type id * @see TypeTags */ public static class JCPrimitiveTypeTree extends JCExpression implements PrimitiveTypeTree { public int typetag; protected JCPrimitiveTypeTree(int typetag) { this.typetag = typetag; } @Override public void accept(Visitor v) { v.visitTypeIdent(this); } public Kind getKind() { return Kind.PRIMITIVE_TYPE; } public TypeKind getPrimitiveTypeKind() { switch (typetag) { case TypeTags.BOOLEAN: return TypeKind.BOOLEAN; case TypeTags.BYTE: return TypeKind.BYTE; case TypeTags.SHORT: return TypeKind.SHORT; case TypeTags.INT: return TypeKind.INT; case TypeTags.LONG: return TypeKind.LONG; case TypeTags.CHAR: return TypeKind.CHAR; case TypeTags.FLOAT: return TypeKind.FLOAT; case TypeTags.DOUBLE: return TypeKind.DOUBLE; case TypeTags.VOID: return TypeKind.VOID; default: throw new AssertionError("unknown primitive type " + this); } } @Override public <R,D> R accept(TreeVisitor<R,D> v, D d) { return v.visitPrimitiveType(this, d); } @Override public int getTag() { return TYPEIDENT; } } /** * An array type, A[] */ public static class JCArrayTypeTree extends JCExpression implements ArrayTypeTree { public JCExpression elemtype; protected JCArrayTypeTree(JCExpression elemtype) { this.elemtype = elemtype; } @Override public void accept(Visitor v) { v.visitTypeArray(this); } public Kind getKind() { return Kind.ARRAY_TYPE; } public JCTree getType() { return elemtype; } @Override public <R,D> R accept(TreeVisitor<R,D> v, D d) { return v.visitArrayType(this, d); } @Override public int getTag() { return TYPEARRAY; } } /** * A parameterized type, T<...> */ public static class JCTypeApply extends JCExpression implements ParameterizedTypeTree { public JCExpression clazz; public List<JCExpression> arguments; protected JCTypeApply(JCExpression clazz, List<JCExpression> arguments) { this.clazz = clazz; this.arguments = arguments; } @Override public void accept(Visitor v) { v.visitTypeApply(this); } public Kind getKind() { return Kind.PARAMETERIZED_TYPE; } public JCTree getType() { return clazz; } public List<JCExpression> getTypeArguments() { return arguments; } @Override public <R,D> R accept(TreeVisitor<R,D> v, D d) { return v.visitParameterizedType(this, d); } @Override public int getTag() { return TYPEAPPLY; } } /** * A formal class parameter. * @param name name * @param bounds bounds */ public static class JCTypeParameter extends JCTree implements TypeParameterTree { public Name name; public List<JCExpression> bounds; protected JCTypeParameter(Name name, List<JCExpression> bounds) { this.name = name; this.bounds = bounds; } @Override public void accept(Visitor v) { v.visitTypeParameter(this); } public Kind getKind() { return Kind.TYPE_PARAMETER; } public Name getName() { return name; } public List<JCExpression> getBounds() { return bounds; } @Override public <R,D> R accept(TreeVisitor<R,D> v, D d) { return v.visitTypeParameter(this, d); } @Override public int getTag() { return TYPEPARAMETER; } } public static class JCWildcard extends JCExpression implements WildcardTree { public TypeBoundKind kind; public JCTree inner; protected JCWildcard(TypeBoundKind kind, JCTree inner) { kind.getClass(); // null-check this.kind = kind; this.inner = inner; } @Override public void accept(Visitor v) { v.visitWildcard(this); } public Kind getKind() { switch (kind.kind) { case UNBOUND: return Kind.UNBOUNDED_WILDCARD; case EXTENDS: return Kind.EXTENDS_WILDCARD; case SUPER: return Kind.SUPER_WILDCARD; default: throw new AssertionError("Unknown wildcard bound " + kind); } } public JCTree getBound() { return inner; } @Override public <R,D> R accept(TreeVisitor<R,D> v, D d) { return v.visitWildcard(this, d); } @Override public int getTag() { return WILDCARD; } } public static class TypeBoundKind extends JCTree { public BoundKind kind; protected TypeBoundKind(BoundKind kind) { this.kind = kind; } @Override public void accept(Visitor v) { v.visitTypeBoundKind(this); } public Kind getKind() { throw new AssertionError("TypeBoundKind is not part of a public API"); } @Override public <R,D> R accept(TreeVisitor<R,D> v, D d) { throw new AssertionError("TypeBoundKind is not part of a public API"); } @Override public int getTag() { return TYPEBOUNDKIND; } } public static class JCAnnotation extends JCExpression implements AnnotationTree { public JCTree annotationType; public List<JCExpression> args; protected JCAnnotation(JCTree annotationType, List<JCExpression> args) { this.annotationType = annotationType; this.args = args; } @Override public void accept(Visitor v) { v.visitAnnotation(this); } public Kind getKind() { return Kind.ANNOTATION; } public JCTree getAnnotationType() { return annotationType; } public List<JCExpression> getArguments() { return args; } @Override public <R,D> R accept(TreeVisitor<R,D> v, D d) { return v.visitAnnotation(this, d); } @Override public int getTag() { return ANNOTATION; } } public static class JCModifiers extends JCTree implements com.sun.source.tree.ModifiersTree { public long flags; public List<JCAnnotation> annotations; protected JCModifiers(long flags, List<JCAnnotation> annotations) { this.flags = flags; this.annotations = annotations; } @Override public void accept(Visitor v) { v.visitModifiers(this); } public Kind getKind() { return Kind.MODIFIERS; } public Set<Modifier> getFlags() { return Flags.asModifierSet(flags); } public List<JCAnnotation> getAnnotations() { return annotations; } @Override public <R,D> R accept(TreeVisitor<R,D> v, D d) { return v.visitModifiers(this, d); } @Override public int getTag() { return MODIFIERS; } } public static class JCErroneous extends JCExpression implements com.sun.source.tree.ErroneousTree { public List<? extends JCTree> errs; protected JCErroneous(List<? extends JCTree> errs) { this.errs = errs; } @Override public void accept(Visitor v) { v.visitErroneous(this); } public Kind getKind() { return Kind.ERRONEOUS; } public List<? extends JCTree> getErrorTrees() { return errs; } @Override public <R,D> R accept(TreeVisitor<R,D> v, D d) { return v.visitErroneous(this, d); } @Override public int getTag() { return ERRONEOUS; } } /** (let int x = 3; in x+2) */ public static class LetExpr extends JCExpression { public List<JCVariableDecl> defs; public JCTree expr; protected LetExpr(List<JCVariableDecl> defs, JCTree expr) { this.defs = defs; this.expr = expr; } @Override public void accept(Visitor v) { v.visitLetExpr(this); } public Kind getKind() { throw new AssertionError("LetExpr is not part of a public API"); } @Override public <R,D> R accept(TreeVisitor<R,D> v, D d) { throw new AssertionError("LetExpr is not part of a public API"); } @Override public int getTag() { return LETEXPR; } } /** An interface for tree factories */ public interface Factory { JCCompilationUnit TopLevel(List<JCAnnotation> packageAnnotations, JCExpression pid, List<JCTr
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?