private JCTree generateField() {
    long flags = Flags.PRIVATE | (modifiers & Flags.STATIC);
    // only make it final if we have an init, otherwise we still have to initialise it
    if (!writable && (variableInit != null || valueConstructor)) {
      flags |= Flags.FINAL;
    }

    return owner
        .make()
        .VarDef(
            owner.make().Modifiers(flags),
            owner.names().fromString(Naming.quoteIfJavaKeyword(fieldName)),
            (toplevel) ? owner.make().TypeArray(attrType) : attrType,
            null);
  }