Skip to content
This repository has been archived by the owner on Jul 23, 2022. It is now read-only.

Builder pattern #18

Closed
m6s opened this issue Mar 29, 2016 · 2 comments
Closed

Builder pattern #18

m6s opened this issue Mar 29, 2016 · 2 comments

Comments

@m6s
Copy link

m6s commented Mar 29, 2016

Do you support or plan to support builders? See attached sample value class and stack trace. Not talking about converting to/from a builder, albeit that would be nice as well (but is probably not supported by AutoValue's extension mechanism).

package info.mschmitt.contacts.database.entities;

import android.database.Cursor;

import com.google.auto.value.AutoValue;

import javax.annotation.Nullable;

/**
 * @author Matthias Schmitt
 */
@AutoValue
public abstract class Contact {
    Contact() {
    }

    public static Builder builder() {
        return new AutoValue_Contact.Builder();
    }

    public static Contact create(Cursor cursor) {
        return AutoValue_Contact.createFromCursor(cursor);
    }

//    // if your project includes RxJava the extension will generate a Func1<Cursor, User> for you
//    public static Func1<Cursor, Contact> mapper() {
//        return AutoValue_Contact.MAPPER;
//    }

//    // Optional: When you include an abstract method that returns ContentValues and doesn't have
//    // any parameters the extension will implement it for you
//    abstract ContentValues toContentValues();

    public abstract Builder toBuilder();

    public abstract long id();

    @Nullable
    public abstract String name();

    @Nullable
    public abstract String email();

    @AutoValue.Builder
    public abstract static class Builder {
        public abstract Contact build();

        public abstract Builder id(long id);

        public abstract Builder name(@Nullable String name);

        public abstract Builder email(@Nullable String email);
    }
}
Error:(13, 17) error: @AutoValue processor threw an exception: java.lang.IllegalArgumentException: Property toBuilder has type info.mschmitt.contacts.database.entities.Contact.Builder that can't be read from Cursor.
at com.gabrielittner.auto.value.cursor.AutoValueCursorExtension.createReadMethod(AutoValueCursorExtension.java:135)
at com.gabrielittner.auto.value.cursor.AutoValueCursorExtension.generateClass(AutoValueCursorExtension.java:75)
at com.google.auto.value.processor.AutoValueProcessor.processType(AutoValueProcessor.java:424)
at com.google.auto.value.processor.AutoValueProcessor.process(AutoValueProcessor.java:143)
at com.sun.tools.javac.processing.JavacProcessingEnvironment.callProcessor(JavacProcessingEnvironment.java:794)
...
@m6s
Copy link
Author

m6s commented Mar 29, 2016

It's actually just toBuilder() that doesn't work atm.

@gabrielittner
Copy link
Owner

This is an issue with AutoValue itself google/auto#281

As a workaround you can manually implement toBuilder for now:

public Builder toBuilder() {
    return new AutoValue_Contact.Builder();
}

Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants