Package com.google.auto.value.processor
Class EclipseHack
- java.lang.Object
-
- com.google.auto.value.processor.EclipseHack
-
class EclipseHack extends java.lang.ObjectHacks needed to work around various bugs and incompatibilities in Eclipse's implementation of annotation processing.
-
-
Field Summary
Fields Modifier and Type Field Description private javax.annotation.processing.ProcessingEnvironmentprocessingEnv
-
Constructor Summary
Constructors Constructor Description EclipseHack(javax.annotation.processing.ProcessingEnvironment processingEnv)
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description (package private) javax.lang.model.type.TypeMirrormethodReturnType(javax.lang.model.element.ExecutableElement method, javax.lang.model.type.DeclaredType in)(package private) com.google.common.collect.ImmutableMap<javax.lang.model.element.ExecutableElement,javax.lang.model.type.TypeMirror>methodReturnTypes(java.util.Set<javax.lang.model.element.ExecutableElement> methods, javax.lang.model.type.DeclaredType in)Returns a map containing the real return types of the given methods, knowing that they appear in the given type.private java.util.Map<javax.lang.model.element.Name,javax.lang.model.element.ExecutableElement>noArgMethodsIn(javax.lang.model.type.DeclaredType in)Constructs a map from name to method of the no-argument methods in the given type.
-
-
-
Method Detail
-
methodReturnType
javax.lang.model.type.TypeMirror methodReturnType(javax.lang.model.element.ExecutableElement method, javax.lang.model.type.DeclaredType in)
-
methodReturnTypes
com.google.common.collect.ImmutableMap<javax.lang.model.element.ExecutableElement,javax.lang.model.type.TypeMirror> methodReturnTypes(java.util.Set<javax.lang.model.element.ExecutableElement> methods, javax.lang.model.type.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 sayStringIterator implements Iterator<String>then we want thenext()method to map to String, rather than theTthat it returns as inherited fromIterator<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 theTypes.asMemberOf(javax.lang.model.type.DeclaredType, javax.lang.model.element.Element)method throws IllegalArgumentException if given a method that is inherited from an interface. Fortunately, Eclipse's implementation ofElements.getAllMembers(javax.lang.model.element.TypeElement)does the type substitution thatasMemberOfwould 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 usegetAllMembers.
-
noArgMethodsIn
private java.util.Map<javax.lang.model.element.Name,javax.lang.model.element.ExecutableElement> noArgMethodsIn(javax.lang.model.type.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 byElements.getAllMembers(javax.lang.model.element.TypeElement)will not compare equal to the original ExecutableElement ifgetAllMemberssubstituted type parameters, as it does in Eclipse.
-
-