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);
continue;
}
}
defs.add(def);
}
fillList(defs, body.rawMembers(), flagKeyMap);
enumDecl.astBody(body);
} else {
throw new IllegalStateException("Unknown type declaration: " + node);
}
typeDecl.astName(new Identifier().astValue(name));