Class EclipseHack

java.lang.Object
com.google.auto.value.processor.EclipseHack

class EclipseHack extends Object
Hacks needed to work around various bugs and incompatibilities in Eclipse's implementation of annotation processing.
  • Field Details

  • Constructor Details

  • Method Details

    • methodReturnType

      TypeMirror methodReturnType(ExecutableElement method, DeclaredType in)
    • methodReturnTypes

      com.google.common.collect.ImmutableMap<ExecutableElement, TypeMirror> methodReturnTypes(Set<ExecutableElement> methods, DeclaredType in)
      Returns a map containing the real return types of the given methods, knowing that they appear in the given type. This means that if the given type is say StringIterator implements Iterator<String> then we want the next() method to map to String, rather than the T that it returns as inherited from Iterator<T>. This method is in EclipseHack because if it weren't for this Eclipse bug it would be trivial. Unfortunately, versions of Eclipse up to at least 4.5 have a bug where the Types.asMemberOf(DeclaredType, Element) method throws IllegalArgumentException if given a method that is inherited from an interface. Fortunately, Eclipse's implementation of Elements.getAllMembers(TypeElement) does the type substitution that asMemberOf would have done. But javac's implementation doesn't. So we try the way that would work if Eclipse weren't buggy, and only if we get IllegalArgumentException do we use getAllMembers.
    • noArgMethodsIn

      private Map<Name, ExecutableElement> noArgMethodsIn(DeclaredType in)
      Constructs a map from name to method of the no-argument methods in the given type. We need this because an ExecutableElement returned by Elements.getAllMembers(TypeElement) will not compare equal to the original ExecutableElement if getAllMembers substituted type parameters, as it does in Eclipse.