@Override
 public JCTree visitEnumConstant(final lombok.ast.EnumConstant node, final Void p) {
   final JCModifiers mods =
       setGeneratedBy(
           M(node)
               .Modifiers(
                   flagsFor(node.getModifiers()) | ENUM,
                   build(node.getAnnotations(), JCAnnotation.class)),
           source);
   lombok.ast.ClassDecl enumClassDecl = node.upTo(lombok.ast.ClassDecl.class);
   final JCExpression varType;
   if (enumClassDecl == null) {
     varType = build(Type(typeNodeOf(sourceNode).getName()));
   } else {
     varType = chainDots(node, enumClassDecl.getName());
   }
   final List<JCExpression> nilExp = List.nil();
   final JCNewClass init =
       setGeneratedBy(M(node).NewClass(null, nilExp, varType, nilExp, null), source);
   final JCVariableDecl enumContant =
       setGeneratedBy(M(node).VarDef(mods, name(node.getName()), varType, init), source);
   return enumContant;
 }
 @Override
 public JCTree visitClassDecl(final lombok.ast.ClassDecl node, final Void p) {
   final JCModifiers mods =
       setGeneratedBy(
           M(node)
               .Modifiers(
                   flagsFor(node.getModifiers()),
                   build(node.getAnnotations(), JCAnnotation.class)),
           source);
   if (node.isInterface()) mods.flags |= Flags.INTERFACE;
   final ListBuffer<JCTree> defs = ListBuffer.lb();
   defs.appendList(build(node.getFields()));
   defs.appendList(build(node.getMethods()));
   defs.appendList(build(node.getMemberTypes()));
   final List<JCTypeParameter> typarams = build(node.getTypeParameters());
   final JCExpression extending = build(node.getSuperclass());
   final List<JCExpression> implementing = build(node.getSuperInterfaces());
   final JCClassDecl classDecl =
       setGeneratedBy(
           createClassDef(
               node, mods, name(node.getName()), typarams, extending, implementing, defs.toList()),
           source);
   return classDecl;
 }