class EclipseHack
extends java.lang.Object
Modifier and Type | Field and Description |
---|---|
private javax.annotation.processing.ProcessingEnvironment |
processingEnv |
Constructor and Description |
---|
EclipseHack(javax.annotation.processing.ProcessingEnvironment processingEnv) |
Modifier and Type | Method and Description |
---|---|
(package private) javax.lang.model.type.TypeMirror |
methodReturnType(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.
|
private final javax.annotation.processing.ProcessingEnvironment processingEnv
EclipseHack(javax.annotation.processing.ProcessingEnvironment processingEnv)
javax.lang.model.type.TypeMirror methodReturnType(javax.lang.model.element.ExecutableElement method, javax.lang.model.type.DeclaredType in)
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)
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(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 of
Elements.getAllMembers(javax.lang.model.element.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
.private java.util.Map<javax.lang.model.element.Name,javax.lang.model.element.ExecutableElement> noArgMethodsIn(javax.lang.model.type.DeclaredType in)
Elements.getAllMembers(javax.lang.model.element.TypeElement)
will not compare
equal to the original ExecutableElement if getAllMembers
substituted type parameters,
as it does in Eclipse.