Disambiguate type annotations on fields, parameters, and methods

Given a declaration like `private @A int x;` or `@A private int x;`,
there are three possibilities:

* `@A` is a declaration annotation on the field
* `@A` is a `TYPE_USE` annotation on the type
* `@A` sets `TYPE_USE` _and_ `FIELD` targets, and appears in the
  bytecode as both a declaration annotation and as a type annotation

This can't be determined syntactically -- note that the presence of
other modifiers before or after the annotation has no bearing on whether
the annotation targets the type or the declaration.

So, we wait until constant binding is done, read the `@Target`
meta-annotation for each ambiguous annotation, and move it to the
appropriate location.

MOE_MIGRATED_REVID=137749757
18 files changed
tree: a984b3eea2d7b4ce99ebcb7d1818f8e7cf825f5f
  1. java/
  2. javatests/
  3. proto/
  4. .gitignore
  5. LICENSE
  6. pom.xml
  7. README.md
  8. turbine.iml
README.md

Turbine

Turbine is a header compiler for Java.