Auto Common Utilities ======== ## Overview The Auto project has a set of common utilities to help ease use of the annotation processing environment. ## Utility classes of note * MoreTypes - utilities and Equivalence wrappers for TypeMirror and related subtypes * MoreElements - utilities for Element and related subtypes * SuperficialValidation - very simple scanner to ensure an Element is valid and free from distortion from upstream compilation errors * Visibility - utilities for working with Elements' visibility levels (public, protected, etc.) * BasicAnnotationProcessor/ProcessingStep - simple types that - implement a validating annotation processor - defer invalid elements until later - break processor actions into multiple steps (which may each handle different annotations) ## Usage/Setup Auto common utilities have a standard [Maven](http://maven.apache.org) setup which can also be used from Gradle, Ivy, Ant, or other systems which consume binary artifacts from the central Maven binary artifact repositories. ```xml <dependency> <groupId>com.google.auto</groupId> <artifactId>auto-common</artifactId> <version>1.0-SNAPSHOT</version> <!-- or use a known release version --> </dependency> ``` ## Processor Resilience Auto Common Utilities is used by a variety of annotation processors in Google and new versions may have breaking changes. Users of auto-common are urged to use [shade](https://maven.apache.org/plugins/maven-shade-plugin/) or [jarjar](https://code.google.com/p/jarjar/) (or something similar) in packaging their processors so that conflicting versions of this library do not adversely interact with each other. For example, in a Maven build you can repackage `com.google.auto.common` into `your.processor.shaded.auto.common` like this: ```xml <project> <!-- your other config --> <build> <plugins> <plugin> <artifactId>maven-shade-plugin</artifactId> <executions> <execution> <phase>package</phase> <goals> <goal>shade</goal> </goals> <configuration> <artifactSet> <excludes> <!-- exclude dependencies you don't want to bundle in your processor --> </excludes> </artifactSet> <relocations> <relocation> <pattern>com.google.auto.common</pattern> <shadedPattern>your.processor.shaded.auto.common</shadedPattern> </relocation> </relocations> </configuration> </execution> </executions> </plugin> </plugins> </build> </project> ```