📄 treeinfo.java
字号:
return ((Select) tree).name;
default:
return null;
}
}
/**
* If this tree is a qualified identifier, its return fully qualified name,
* otherwise return null.
*/
public static Name fullName(Tree tree) {
tree = skipParens(tree);
switch (tree.tag) {
case Tree.IDENT:
return ((Ident) tree).name;
case Tree.SELECT:
Name sname = fullName(((Select) tree).selected);
return sname == null ? null : sname.append('.', name(tree));
default:
return null;
}
}
/**
* If this tree is an identifier or a field, return its symbol,
* otherwise return null.
*/
public static Symbol symbol(Tree tree) {
tree = skipParens(tree);
switch (tree.tag) {
case Tree.IDENT:
return ((Ident) tree).sym;
case Tree.SELECT:
return ((Select) tree).sym;
default:
return null;
}
}
/**
* If this tree is an identifier or a field, set its symbol, otherwise skip.
*/
public static void setSymbol(Tree tree, Symbol sym) {
tree = skipParens(tree);
switch (tree.tag) {
case Tree.IDENT:
((Ident) tree).sym = sym;
break;
case Tree.SELECT:
((Select) tree).sym = sym;
break;
default:
}
}
/**
* If this tree is a declaration or a block, return its flags field,
* otherwise return 0.
*/
public static long flags(Tree tree) {
switch (tree.tag) {
case Tree.VARDEF:
return ((VarDef) tree).flags;
case Tree.METHODDEF:
return ((MethodDef) tree).flags;
case Tree.CLASSDEF:
return ((ClassDef) tree).flags;
case Tree.BLOCK:
return ((Block) tree).flags;
default:
return 0;
}
}
/**
* Return first (smallest) flag in `flags':
* pre: flags != 0
*/
public static long firstFlag(long flags) {
int flag = 1;
while ((flag & StandardFlags) != 0 && (flag & flags) == 0)
flag = flag << 1;
return flag;
}
/**
* Return flags as a string, separated by " ".
*/
public static String flagNames(long flags) {
StringBuffer sbuf = new StringBuffer();
int i = 0;
long f = flags & StandardFlags;
while (f != 0) {
if ((f & 1) != 0) {
if (sbuf.length() != 0)
sbuf.append(" ");
sbuf.append(flagName[i]);
}
f = f >> 1;
i++;
}
return sbuf.toString();
}
private static final String[] flagName = {"public", "private", "protected", "static",
"final", "synchronized", "volatile", "transient", "native", "interface",
"abstract", "strictfp"};
/**
* Operator precedences values.
*/
public static final int notExpression = -1;
/**
* Operator precedences values.
*/
public static final int noPrec = 0;
/**
* Operator precedences values.
*/
public static final int assignPrec = 1;
/**
* Operator precedences values.
*/
public static final int assignopPrec = 2;
/**
* Operator precedences values.
*/
public static final int condPrec = 3;
/**
* Operator precedences values.
*/
public static final int orPrec = 4;
/**
* Operator precedences values.
*/
public static final int andPrec = 5;
/**
* Operator precedences values.
*/
public static final int bitorPrec = 6;
/**
* Operator precedences values.
*/
public static final int bitxorPrec = 7;
/**
* Operator precedences values.
*/
public static final int bitandPrec = 8;
/**
* Operator precedences values.
*/
public static final int eqPrec = 9;
/**
* Operator precedences values.
*/
public static final int ordPrec = 10;
/**
* Operator precedences values.
*/
public static final int shiftPrec = 11;
/**
* Operator precedences values.
*/
public static final int addPrec = 12;
/**
* Operator precedences values.
*/
public static final int mulPrec = 13;
/**
* Operator precedences values.
*/
public static final int prefixPrec = 14;
/**
* Operator precedences values.
*/
public static final int postfixPrec = 15;
/**
* Operator precedences values.
*/
public static final int precCount = 16;
/**
* Map operators to their precedence levels.
*/
public static int opPrec(int op) {
switch (op) {
case Tree.POS:
case Tree.NEG:
case Tree.NOT:
case Tree.COMPL:
case Tree.PREINC:
case Tree.PREDEC:
return prefixPrec;
case Tree.POSTINC:
case Tree.POSTDEC:
case Tree.NULLCHK:
return postfixPrec;
case Tree.ASSIGN:
return assignPrec;
case Tree.BITOR_ASG:
case Tree.BITXOR_ASG:
case Tree.BITAND_ASG:
case Tree.SL_ASG:
case Tree.SR_ASG:
case Tree.USR_ASG:
case Tree.PLUS_ASG:
case Tree.MINUS_ASG:
case Tree.MUL_ASG:
case Tree.DIV_ASG:
case Tree.MOD_ASG:
return assignopPrec;
case Tree.OR:
return orPrec;
case Tree.AND:
return andPrec;
case Tree.EQ:
case Tree.NE:
return eqPrec;
case Tree.LT:
case Tree.GT:
case Tree.LE:
case Tree.GE:
return ordPrec;
case Tree.BITOR:
return bitorPrec;
case Tree.BITXOR:
return bitxorPrec;
case Tree.BITAND:
return bitandPrec;
case Tree.SL:
case Tree.SR:
case Tree.USR:
return shiftPrec;
case Tree.PLUS:
case Tree.MINUS:
return addPrec;
case Tree.MUL:
case Tree.DIV:
case Tree.MOD:
return mulPrec;
case Tree.TYPETEST:
return ordPrec;
default:
throw new AssertionError();
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -