@Beta
public final class MoreElements
extends java.lang.Object
Element
instances.Modifier and Type | Field and Description |
---|---|
private static javax.lang.model.element.ElementVisitor<javax.lang.model.element.ExecutableElement,java.lang.Void> |
EXECUTABLE_ELEMENT_VISITOR |
private static javax.lang.model.element.ElementVisitor<javax.lang.model.element.PackageElement,java.lang.Void> |
PACKAGE_ELEMENT_VISITOR |
private static javax.lang.model.element.ElementVisitor<javax.lang.model.element.TypeElement,java.lang.Void> |
TYPE_ELEMENT_VISITOR |
private static javax.lang.model.element.ElementVisitor<javax.lang.model.element.VariableElement,java.lang.Void> |
VARIABLE_ELEMENT_VISITOR |
Modifier | Constructor and Description |
---|---|
private |
MoreElements() |
Modifier and Type | Method and Description |
---|---|
static javax.lang.model.element.ExecutableElement |
asExecutable(javax.lang.model.element.Element element)
Returns the given
Element instance as ExecutableElement . |
static javax.lang.model.element.PackageElement |
asPackage(javax.lang.model.element.Element element)
Returns the given
Element instance as PackageElement . |
static javax.lang.model.element.TypeElement |
asType(javax.lang.model.element.Element element)
Returns the given
Element instance as TypeElement . |
static javax.lang.model.element.VariableElement |
asVariable(javax.lang.model.element.Element element)
Returns the given
Element instance as VariableElement . |
static com.google.common.base.Optional<javax.lang.model.element.AnnotationMirror> |
getAnnotationMirror(javax.lang.model.element.Element element,
java.lang.Class<? extends java.lang.annotation.Annotation> annotationClass)
Returns an
AnnotationMirror for the annotation of type annotationClass on
element , or Optional.absent() if no such annotation exists. |
private static void |
getLocalAndInheritedMethods(javax.lang.model.element.PackageElement pkg,
javax.lang.model.element.TypeElement type,
com.google.common.collect.SetMultimap<java.lang.String,javax.lang.model.element.ExecutableElement> methods) |
static com.google.common.collect.ImmutableSet<javax.lang.model.element.ExecutableElement> |
getLocalAndInheritedMethods(javax.lang.model.element.TypeElement type,
javax.lang.model.util.Elements elementUtils)
Returns the set of all non-private methods from
type , including methods that it
inherits from its ancestors. |
static javax.lang.model.element.PackageElement |
getPackage(javax.lang.model.element.Element element)
An alternate implementation of
Elements.getPackageOf(javax.lang.model.element.Element) that does not require an
Elements instance. |
static com.google.common.base.Predicate<javax.lang.model.element.Element> |
hasModifiers(javax.lang.model.element.Modifier... modifiers)
Returns a
Predicate that can be used to filter elements by Modifier . |
static com.google.common.base.Predicate<javax.lang.model.element.Element> |
hasModifiers(java.util.Set<javax.lang.model.element.Modifier> modifiers)
Returns a
Predicate that can be used to filter elements by Modifier . |
static boolean |
isAnnotationPresent(javax.lang.model.element.Element element,
java.lang.Class<? extends java.lang.annotation.Annotation> annotationClass)
Returns
true iff the given element has an AnnotationMirror whose
annotation type has the same canonical name
as that of annotationClass . |
static boolean |
isType(javax.lang.model.element.Element element)
Returns true if the given
Element instance is a TypeElement . |
private static boolean |
methodVisibleFromPackage(javax.lang.model.element.ExecutableElement method,
javax.lang.model.element.PackageElement pkg) |
private static final javax.lang.model.element.ElementVisitor<javax.lang.model.element.PackageElement,java.lang.Void> PACKAGE_ELEMENT_VISITOR
private static final javax.lang.model.element.ElementVisitor<javax.lang.model.element.TypeElement,java.lang.Void> TYPE_ELEMENT_VISITOR
private static final javax.lang.model.element.ElementVisitor<javax.lang.model.element.VariableElement,java.lang.Void> VARIABLE_ELEMENT_VISITOR
private static final javax.lang.model.element.ElementVisitor<javax.lang.model.element.ExecutableElement,java.lang.Void> EXECUTABLE_ELEMENT_VISITOR
public static javax.lang.model.element.PackageElement getPackage(javax.lang.model.element.Element element)
Elements.getPackageOf(javax.lang.model.element.Element)
that does not require an
Elements
instance.java.lang.NullPointerException
- if element
is null
public static javax.lang.model.element.PackageElement asPackage(javax.lang.model.element.Element element)
Element
instance as PackageElement
.
This method is functionally equivalent to an instanceof
check and a cast, but should
always be used over that idiom as instructed in the documentation for Element
.
java.lang.NullPointerException
- if element
is null
java.lang.IllegalArgumentException
- if element
isn't a PackageElement
.public static boolean isType(javax.lang.model.element.Element element)
Element
instance is a TypeElement
.
This method is functionally equivalent to an instanceof
check, but should
always be used over that idiom as instructed in the documentation for Element
.
java.lang.NullPointerException
- if element
is null
public static javax.lang.model.element.TypeElement asType(javax.lang.model.element.Element element)
Element
instance as TypeElement
.
This method is functionally equivalent to an instanceof
check and a cast, but should
always be used over that idiom as instructed in the documentation for Element
.
java.lang.NullPointerException
- if element
is null
java.lang.IllegalArgumentException
- if element
isn't a TypeElement
.public static javax.lang.model.element.VariableElement asVariable(javax.lang.model.element.Element element)
Element
instance as VariableElement
.
This method is functionally equivalent to an instanceof
check and a cast, but should
always be used over that idiom as instructed in the documentation for Element
.
java.lang.NullPointerException
- if element
is null
java.lang.IllegalArgumentException
- if element
isn't a VariableElement
.public static javax.lang.model.element.ExecutableElement asExecutable(javax.lang.model.element.Element element)
Element
instance as ExecutableElement
.
This method is functionally equivalent to an instanceof
check and a cast, but should
always be used over that idiom as instructed in the documentation for Element
.
java.lang.NullPointerException
- if element
is null
java.lang.IllegalArgumentException
- if element
isn't a ExecutableElement
.public static boolean isAnnotationPresent(javax.lang.model.element.Element element, java.lang.Class<? extends java.lang.annotation.Annotation> annotationClass)
true
iff the given element has an AnnotationMirror
whose
annotation type has the same canonical name
as that of annotationClass
. This method is a safer alternative to calling
Element.getAnnotation(java.lang.Class<A>)
and checking for null
as it avoids any interaction with
annotation proxies.public static com.google.common.base.Optional<javax.lang.model.element.AnnotationMirror> getAnnotationMirror(javax.lang.model.element.Element element, java.lang.Class<? extends java.lang.annotation.Annotation> annotationClass)
AnnotationMirror
for the annotation of type annotationClass
on
element
, or Optional.absent()
if no such annotation exists. This method is a
safer alternative to calling Element.getAnnotation(java.lang.Class<A>)
as it avoids any interaction with
annotation proxies.public static com.google.common.base.Predicate<javax.lang.model.element.Element> hasModifiers(javax.lang.model.element.Modifier... modifiers)
Predicate
that can be used to filter elements by Modifier
.
The predicate returns true
if the input Element
has all of the given
modifiers
, perhaps in addition to others.
Here is an example how one could get a List of static methods of a class:
FluentIterable.from(ElementFilter.methodsIn(clazzElement.getEnclosedElements()))
.filter(MoreElements.hasModifiers(Modifier.STATIC).toList();
public static com.google.common.base.Predicate<javax.lang.model.element.Element> hasModifiers(java.util.Set<javax.lang.model.element.Modifier> modifiers)
Predicate
that can be used to filter elements by Modifier
.
The predicate returns true
if the input Element
has all of the given
modifiers
, perhaps in addition to others.
Here is an example how one could get a List of methods with certain modifiers of a class:
Set<Modifier> modifiers = ...;
FluentIterable.from(ElementFilter.methodsIn(clazzElement.getEnclosedElements()))
.filter(MoreElements.hasModifiers(modifiers).toList();
public static com.google.common.collect.ImmutableSet<javax.lang.model.element.ExecutableElement> getLocalAndInheritedMethods(javax.lang.model.element.TypeElement type, javax.lang.model.util.Elements elementUtils)
type
, including methods that it
inherits from its ancestors. Inherited methods that are overridden are not included in the
result. So if type
defines public String toString()
, the returned set will
contain that method, but not the toString()
method defined by Object
.
The returned set may contain more than one method with the same signature, if
type
inherits those methods from different ancestors. For example, if it
inherits from unrelated interfaces One
and Two
which each define
void foo();
, and if it does not itself override the foo()
method,
then both One.foo()
and Two.foo()
will be in the returned set.
type
- the type whose own and inherited methods are to be returnedelementUtils
- an Elements
object, typically returned by
processingEnv
.getElementUtils()
private static void getLocalAndInheritedMethods(javax.lang.model.element.PackageElement pkg, javax.lang.model.element.TypeElement type, com.google.common.collect.SetMultimap<java.lang.String,javax.lang.model.element.ExecutableElement> methods)
private static boolean methodVisibleFromPackage(javax.lang.model.element.ExecutableElement method, javax.lang.model.element.PackageElement pkg)