yatatsu / AutoBundle

AutoBundle generates boilerplate code for field binding with android.os.Bundle
Apache License 2.0
135 stars 13 forks source link

nullable nonnull support #25

Closed yatatsu closed 7 years ago

yatatsu commented 7 years ago

@Nullable and @NonNull support

It will make clearly nullability. Especially in Kotlin.

Builder method with annotations.

In Builder, parameter of constructor is for field with @AutoBundleField, which expects as required, and parameter has @NonNull annotation. And not required field has @Nullable annotation.

public class MyActivity extends Activity {
    @AutoBundleField String name;
    @AutoBundleField(required=false) String nickName;
}

// here is generated builder
public final class MyActivityAutoBundle {

public static final class IntentBuilder {
    final Bundle args;

    public IntentBuilder(@NonNull String name) {
      this.args = new Bundle();
      this.args.putString("name", name);
    }

    public @NonNull MyActivityAutoBundle.IntentBuilder nickName(@Nullable String nickName) {
      if (nickName != null) {
        args.putString("nickName", nickName);
      }
      return this;
    }

    public @NonNull Intent build(@NonNull Context context) {
      Intent intent = new Intent(context, ExampleActivity.class);
      intent.putExtras(args);
      return intent;
    }

    public @NonNull Intent build(@NonNull Intent intent) {
      intent.putExtras(args);
      return intent;
    }
}
}

@Nullable makes required=false

@Nullable field will be not required.

Any annotation named Nullable will be ok. (javax.annotation, android.support.annotation or any)

public class MyActivity extends Activity {

    // it equals to @AutoBundleField(required=false)
    @Nullable @AutoBundleField
    String name;

    @Nullable @AutoBundleField
    Integer number;
}

NOTE

It brings new dependency with android support annotation library.