ClassDeclaration classDecl = new ClassDeclaration();
typeDecl = classDecl;
fillList(node.implementing, classDecl.rawImplementing(), FlagKey.TYPE_REFERENCE);
classDecl.rawExtending(toTree(node.extending, FlagKey.TYPE_REFERENCE));
fillList(node.typarams, classDecl.rawTypeVariables());
NormalTypeBody body = new NormalTypeBody();
fillList(node.defs, body.rawMembers(), flagKeyMap);
classDecl.astBody(body);
} else if ((flags & Flags.ANNOTATION) != 0) {
AnnotationDeclaration annDecl = new AnnotationDeclaration();
typeDecl = annDecl;
NormalTypeBody body = new NormalTypeBody();
flagKeyMap.put(FlagKey.METHODS_ARE_ANNMETHODS, FlagKey.METHODS_ARE_ANNMETHODS);
fillList(node.defs, body.rawMembers(), flagKeyMap);
annDecl.astBody(body);
} else if ((flags & Flags.INTERFACE) != 0) {
InterfaceDeclaration itfDecl = new InterfaceDeclaration();
typeDecl = itfDecl;
fillList(node.typarams, itfDecl.rawTypeVariables());
fillList(node.implementing, itfDecl.rawExtending(), FlagKey.TYPE_REFERENCE);
NormalTypeBody body = new NormalTypeBody();
fillList(node.defs, body.rawMembers(), flagKeyMap);
itfDecl.astBody(body);
} else if ((flags & Flags.ENUM) != 0) {
EnumDeclaration enumDecl = new EnumDeclaration();
typeDecl = enumDecl;
EnumTypeBody body = new EnumTypeBody();
fillList(node.implementing, enumDecl.rawImplementing(), FlagKey.TYPE_REFERENCE);
java.util.List<JCTree> defs = new ArrayList<JCTree>();
for (JCTree def : node.defs) {
if (def instanceof JCVariableDecl) {
JCVariableDecl vd = (JCVariableDecl) def;
if (vd.mods != null && (vd.mods.flags & ENUM_CONSTANT_FLAGS) == ENUM_CONSTANT_FLAGS) {
// This is an enum constant, not a field of the enum class.
EnumConstant ec = new EnumConstant();
setPos(def, ec);
ec.astName(new Identifier().astValue(vd.getName().toString()));
fillList(vd.mods.annotations, ec.rawAnnotations());
if (vd.init instanceof JCNewClass) {
JCNewClass init = (JCNewClass) vd.init;
fillList(init.getArguments(), ec.rawArguments());
if (init.getClassBody() != null) {
NormalTypeBody constantBody = setPos(init, new NormalTypeBody());
fillList(init.getClassBody().getMembers(), constantBody.rawMembers());
ec.astBody(constantBody);
}
setConversionPositionInfo(ec, "newClass", getPosition(init));
}
body.astConstants().addToEnd(ec);