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 + -
显示快捷键?