[ 
https://issues.apache.org/jira/browse/JCLOUDS-750?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14184327#comment-14184327
 ] 

Adrian Cole commented on JCLOUDS-750:
-------------------------------------

Also, if you need custom type adapters, they will need to be type hierarchy 
factories (as autovalue writes a subtype). Here's an example superclass I made 
in oauth.

{code}
import com.google.gson.Gson;
import com.google.gson.TypeAdapter;
import com.google.gson.TypeAdapterFactory;
import com.google.gson.reflect.TypeToken;

/**
 * Type adapter used to serialize all subtypes of a value. This can be used to 
force serialization for an {@link
 * com.google.auto.value.AutoValue} generated class.
 */
public abstract class SubTypeAdapterFactory<T> extends TypeAdapter<T> 
implements TypeAdapterFactory {
   private final Class clazz;

   protected SubTypeAdapterFactory() {
      // As long as the implementing type is not parameterized, this can steal 
type T
      this.clazz = Class.class.cast(new 
com.google.common.reflect.TypeToken<T>(getClass()) {
         private static final long serialVersionUID = 1L;
      }.getRawType());
   }

   /** Accepts duty for any subtype. When using AutoValue properly, this will 
be the generated form. */
   @Override public <T> TypeAdapter<T> create(Gson gson, TypeToken<T> 
typeToken) {
      if (!(clazz.isAssignableFrom(typeToken.getRawType()))) {
         return null;
      }
      return (TypeAdapter<T>) this;
   }
}
{code}

> Replace hand-written domain classes with Auto-Value ones
> --------------------------------------------------------
>
>                 Key: JCLOUDS-750
>                 URL: https://issues.apache.org/jira/browse/JCLOUDS-750
>             Project: jclouds
>          Issue Type: New Feature
>            Reporter: Adrian Cole
>            Assignee: Adrian Cole
>
> In doing maintenance and ports, I've noticed that we have drift related to 
> using guava to implement hashCode/equals on domain classes. Having an 
> opportunity for a guava incompatibility on something like this is not high 
> value, in my opinion. Moreover, we have a lot of other inconsistency in our 
> value classes, which have caused bugs, and extra review time on pull requests.
> Auto-Value generates concrete implementations and takes out the possibility 
> of inconsistency of field names, Nullability, etc. It is handled at compile 
> time, so doesn't introduce a dependency of note, nor a chance of guava 
> version conflict for our users.
> https://github.com/google/auto/tree/master/value
> While it may be the case that we need custom gson adapters (ex opposed to the 
> ConstructorAnnotation approach), or a revision to our approach, I believe 
> that this work is worthwhile.
> While it is the case that our Builders won't be generated, I still think this 
> is valuable. For example, in many cases, we shouldn't be making Builders 
> anyway (ex. they are read-only objects never instantiated, such as lists). 
> Even if we choose to still write Builders, the problem is isolated there.



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to