org.jboss.logging.processor.util

## Class ElementHelper

- java.lang.Object
- - org.jboss.logging.processor.util.ElementHelper

    public final class ElementHelper
    extends Object

An utility class to work with element.

Author:
  Kevin Pollet - SERLI - (kevin.pollet@serli.com), James R. Perkins

### Method Summary

Methods
`static Collection<ExecutableElement>` `findByName(Collection<ExecutableElement> methods, Name methodName)` Returns a collection of methods with the same name.
`static Collection<ExecutableElement>` `findByName(Collection<ExecutableElement> methods, Name methodName, int paramCount)` Returns a collection of methods with the same name.
`static Element` `fromMessageObject(MessageObject object)` If the `MessageObject.reference()` is an instance of `Element`, then the value is returned, otherwise `null` is returned.
`static TypeElement` `getClassAnnotationValue(Element element, Class<? extends Annotation> annotation)` Retrieves the first attribute value from the annotation and assumes it's a `class` type.
`static TypeElement` `getClassAnnotationValue(Element element, Class<? extends Annotation> annotation, String attributeName)` Retrieves the attribute value from the annotation and assumes it's a `class` type.
`static List<TypeElement>` `getClassArrayAnnotationValue(Element element, Class<? extends Annotation> annotation, String attributeName)` Retrieves the attribute value from the annotation and assumes it's an array `classes`.
`static String` `getPrimaryClassNamePrefix(TypeElement element)` Returns the primary class simple name prefix for an element who represents a MessageBundle or MessageLogger interface.
`static boolean` `hasCause(Collection<? extends VariableElement> params)` Checks to see if there is a cause parameter.
`static boolean` `inheritsMessage(Collection<ExecutableElement> methods, ExecutableElement method)` Checks to see if the method has or inherits a `Message` annotation.
`static boolean` `isAnnotatedWith(Element element, Class<? extends Annotation> clazz)` Check if an element is annotated with the given annotation.
`static boolean` `isOverloaded(Collection<ExecutableElement> methods, ExecutableElement method)` Checks to see if the method is overloaded.
`static int` `parameterCount(Collection<? extends VariableElement> params)` Returns the number of parameters excluding the `Cause` parameter and any `Param` parameters if found.
`static String` `typeToString(Class<?> type)` Converts a class type to a string recognizable by the `Elements.getTypeElement(CharSequence)`.
`static String` `typeToString(String qualifiedType)` Converts a qualified type name to a string recognizable by the `Elements.getTypeElement(CharSequence)`.

### Methods inherited from class java.lang.Object

`clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

### Method Detail

#### isAnnotatedWith

    public static boolean isAnnotatedWith(Element element,
                          Class<? extends Annotation> clazz)

Check if an element is annotated with the given annotation.

Parameters:
  `element` - the element to look for the annotation on.
  `clazz` - the annotation class
Returns:
  `true` if the element is annotated, otherwise `false`
Throws:
  `IllegalArgumentException` - if element parameter is null

#### getPrimaryClassNamePrefix

    public static String getPrimaryClassNamePrefix(TypeElement element)

Returns the primary class simple name prefix for an element who represents a MessageBundle or MessageLogger interface.

Parameters:
  `element` - the element
Returns:
  the translation file name prefix
Throws:
  `IllegalArgumentException` - if element is null or the element is not an interface

#### findByName

    public static Collection<ExecutableElement> findByName(Collection<ExecutableElement> methods,
                                           Name methodName)

Returns a collection of methods with the same name.

Parameters:
  `methods` - the methods to process.
  `methodName` - the method name to find.
Returns:
  a collection of methods with the same name.

#### findByName

    public static Collection<ExecutableElement> findByName(Collection<ExecutableElement> methods,
                                           Name methodName,
                                           int paramCount)

Returns a collection of methods with the same name.

Parameters:
  `methods` - the methods to process.
  `methodName` - the method name to find.
  `paramCount` - the number of parameters the method must have.
Returns:
  a collection of methods with the same name.

#### hasCause

    public static boolean hasCause(Collection<? extends VariableElement> params)

Checks to see if there is a cause parameter.

Parameters:
  `params` - the parameters to check.
Returns:
  `true` if there is a cause, otherwise `false`.

#### parameterCount

    public static int parameterCount(Collection<? extends VariableElement> params)

Returns the number of parameters excluding the `Cause` parameter and any `Param` parameters if found.

Parameters:
  `params` - the parameters to get the count for.
Returns:
  the number of parameters.

#### inheritsMessage

    public static boolean inheritsMessage(Collection<ExecutableElement> methods,
                          ExecutableElement method)

Checks to see if the method has or inherits a `Message` annotation.

Parameters:
  `methods` - the method to search.
  `method` - the method to check.
Returns:
  `true` if the method has or inherits a message annotation, otherwise `false`.

#### isOverloaded

    public static boolean isOverloaded(Collection<ExecutableElement> methods,
                       ExecutableElement method)

Checks to see if the method is overloaded. An overloaded method has a different parameter count based on the format parameters only. Parameters annotated with `Cause` or `Param` are not counted.

Parameters:
  `methods` - the method to search.
  `method` - the method to check.
Returns:
  `true` if the method is overloaded, otherwise `false`.

#### typeToString

    public static String typeToString(Class<?> type)

Converts a class type to a string recognizable by the `Elements.getTypeElement(CharSequence)`. Essentially replaces any $'s to . (dots).

Parameters:
  `type` - the type to convert.
Returns:
  the qualified name of the type.

#### typeToString

    public static String typeToString(String qualifiedType)

Converts a qualified type name to a string recognizable by the `Elements.getTypeElement(CharSequence)`. Essentially replaces any $'s to . (dots).

Parameters:
  `qualifiedType` - the qualified type name.
Returns:
  the qualified name of the type.

#### fromMessageObject

    public static Element fromMessageObject(MessageObject object)

If the `MessageObject.reference()` is an instance of `Element`, then the value is returned, otherwise `null` is returned.

Parameters:
  `object` - the object to check the reference on
Returns:
  the element reference or `null`

#### getClassAnnotationValue

    public static TypeElement getClassAnnotationValue(Element element,
                                      Class<? extends Annotation> annotation)

Retrieves the first attribute value from the annotation and assumes it's a `class` type.

Parameters:
  `element` - the element the annotation is on
  `annotation` - the annotation to get the value from
Returns:
  a `TypeElement` representing the value for the first annotation attribute or `null` if no attributes were found

#### getClassAnnotationValue

    public static TypeElement getClassAnnotationValue(Element element,
                                      Class<? extends Annotation> annotation,
                                      String attributeName)

Retrieves the attribute value from the annotation and assumes it's a `class` type.

Parameters:
  `element` - the element the annotation is on
  `annotation` - the annotation to get the value from
  `attributeName` - the name of the attribute to retrieve the class value for
Returns:
  a `TypeElement` representing the value for the annotation attribute or `null` if the attribute was not found

#### getClassArrayAnnotationValue

    public static List<TypeElement> getClassArrayAnnotationValue(Element element,
                                                 Class<? extends Annotation> annotation,
                                                 String attributeName)

Retrieves the attribute value from the annotation and assumes it's an array `classes`.

Parameters:
  `element` - the element the annotation is on
  `annotation` - the annotation to get the value from
  `attributeName` - the name of the attribute to retrieve the class value array for
Returns:
  a list of `TypeElement` representing the value for the annotation attribute or an empty list