CtrlK
BlogDocsLog inGet started
Tessl Logo

tessl/maven-com-google-auto-value--auto-value

Generated immutable value classes for Java 8+ using annotation processing

Pending
Quality

Pending

Does it follow best practices?

Impact

Pending

No eval scenarios have been run

SecuritybySnyk

Pending

The risk profile of this skill

Overview
Eval results
Files

AutoValue

AutoValue is a Java annotation processor that automatically generates immutable value classes, eliminating the need to manually write repetitive equals(), hashCode(), and toString() methods. It provides a clean, declarative way to create value objects using annotations, supporting advanced features like builders, extensions for serialization and memoization, and integration with popular Java frameworks.

Package Information

  • Package Name: auto-value
  • Package Type: maven
  • Language: Java
  • Group ID: com.google.auto.value
  • Installation:
    <dependency>
      <groupId>com.google.auto.value</groupId>
      <artifactId>auto-value-annotations</artifactId>
      <version>1.11.0</version>
    </dependency>
    <dependency>
      <groupId>com.google.auto.value</groupId>
      <artifactId>auto-value</artifactId>
      <version>1.11.0</version>
      <scope>provided</scope>
    </dependency>

Core Imports

import com.google.auto.value.AutoValue;
import com.google.auto.value.AutoBuilder;
import com.google.auto.value.AutoAnnotation;
import com.google.auto.value.AutoOneOf;

Basic Usage

import com.google.auto.value.AutoValue;

@AutoValue
public abstract class Person {
  public static Person create(String name, int age) {
    return new AutoValue_Person(name, age);
  }

  public abstract String name();
  public abstract int age();
}

// Usage
Person person = Person.create("Alice", 30);
System.out.println(person); // Person{name=Alice, age=30}
System.out.println(person.equals(Person.create("Alice", 30))); // true

Architecture

AutoValue uses annotation processing to generate implementation classes at compile time. The key components are:

  • Annotations: Declarative markers for code generation (@AutoValue, @AutoBuilder, etc.)
  • Annotation Processor: Compile-time code generator that creates implementations
  • Extension Framework: Pluggable system for customizing generated code
  • Built-in Extensions: Common functionality like memoization, serialization, and pretty printing

Capabilities

Value Class Generation

Generate immutable value classes with proper equals, hashCode, and toString implementations.

@AutoValue
public abstract class YourClass {
  // Abstract getters define properties
  public abstract PropertyType propertyName();
  
  // Static factory method
  public static YourClass create(PropertyType propertyName) {
    return new AutoValue_YourClass(propertyName);
  }
}

Value Classes

Builder Pattern Support

Generate builder classes for complex object construction with optional properties.

@AutoValue
public abstract class YourClass {
  public abstract PropertyType property();
  
  public static Builder builder() {
    return new AutoValue_YourClass.Builder();
  }
  
  @AutoValue.Builder
  public abstract static class Builder {
    public abstract Builder property(PropertyType value);
    public abstract YourClass build();
  }
}

Builder Pattern

Standalone Builder Generation

Generate builders for existing classes or constructors.

@AutoBuilder(ofClass = TargetClass.class)
public abstract class TargetClassBuilder {
  public abstract TargetClassBuilder property(PropertyType value);
  public abstract TargetClass build();
  
  public static TargetClassBuilder builder() {
    return new AutoBuilder_TargetClassBuilder();
  }
}

Standalone Builders

Annotation Implementation Generation

Generate proper annotation implementations with correct equals and hashCode.

@AutoAnnotation
public static AnnotationType createAnnotation(ParamType param) {
  return new AutoAnnotation_ClassName_createAnnotation(param);
}

Annotation Generation

Tagged Union Types

Generate tagged union (one-of) types for representing values that can be one of several types.

@AutoOneOf(Kind.class)
public abstract class StringOrInteger {
  public enum Kind { STRING, INTEGER }
  
  public abstract Kind getKind();
  public abstract String string();
  public abstract int integer();
  
  public static StringOrInteger ofString(String s) {
    return AutoOneOf_StringOrInteger.string(s);
  }
  
  public static StringOrInteger ofInteger(int i) {
    return AutoOneOf_StringOrInteger.integer(i);
  }
}

Tagged Unions

Method Memoization

Cache method results for expensive computations with thread-safe lazy initialization.

@Memoized
public abstract ComputedType expensiveComputation() {
  return performExpensiveCalculation();
}

Memoization

Serialization Support

Generate serializable implementations for classes with non-serializable fields.

@SerializableAutoValue
@AutoValue
public abstract class SerializableClass implements Serializable {
  public abstract Optional<String> optionalField();
  public abstract ImmutableList<Integer> listField();
}

Serialization

Pretty String Generation

Generate human-readable string representations with structured formatting.

@ToPrettyString
public abstract String toPrettyString();

Pretty String Generation

Extension Framework

Create custom extensions to modify or enhance generated code.

public abstract class AutoValueExtension {
  public abstract boolean applicable(Context context);
  public abstract String generateClass(Context context, String className, String classToExtend, boolean isFinal);
}

Extension Framework

Core Types

// Core annotation
@Retention(RetentionPolicy.CLASS)
@Target(ElementType.TYPE)
public @interface AutoValue {
  
  @Retention(RetentionPolicy.CLASS)
  @Target(ElementType.TYPE)
  public @interface Builder {}
  
  @Retention(RetentionPolicy.CLASS)
  @Target({ElementType.TYPE, ElementType.METHOD})
  public @interface CopyAnnotations {
    Class<? extends Annotation>[] exclude() default {};
  }
}

// Builder annotation
@Retention(RetentionPolicy.CLASS)
@Target(ElementType.TYPE)
public @interface AutoBuilder {
  String callMethod() default "";
  Class<?> ofClass() default Void.class;
}

// Annotation generation
@Retention(RetentionPolicy.CLASS)
@Target(ElementType.METHOD)
public @interface AutoAnnotation {}

// Tagged unions
@Retention(RetentionPolicy.CLASS)
@Target(ElementType.TYPE)
public @interface AutoOneOf {
  Class<? extends Enum<?>> value();
}
Workspace
tessl
Visibility
Public
Created
Last updated
Describes
mavenpkg:maven/com.google.auto.value/auto-value@1.11.x
Publish Source
CLI
Badge
tessl/maven-com-google-auto-value--auto-value badge