Example usage for javax.lang.model.element ExecutableElement getEnclosingElement

List of usage examples for javax.lang.model.element ExecutableElement getEnclosingElement

Introduction

In this page you can find the example usage for javax.lang.model.element ExecutableElement getEnclosingElement.

Prototype

Element getEnclosingElement();

Source Link

Document

Returns the innermost element within which this element is, loosely speaking, enclosed.

Usage

From source file:auto.parse.processor.AutoParseProcessor.java

/**
 * Given a list of all methods defined in or inherited by a class, returns a map with keys
 * "toString", "equals", "hashCode" and corresponding value true if that method should be
 * generated./* w w w .j  a va2s .  c  o  m*/
 */
private static Map<String, Boolean> objectMethodsToGenerate(List<ExecutableElement> methods) {
    Map<String, Boolean> vars = new TreeMap<String, Boolean>();
    // The defaults here only come into play when an ancestor class doesn't exist.
    // Compilation will fail in that case, but we don't want it to crash the compiler with
    // an exception before it does. If all ancestors do exist then we will definitely find
    // definitions of these three methods (perhaps the ones in Object) so we will overwrite these:
    vars.put("equals", false);
    vars.put("hashCode", false);
    vars.put("toString", false);
    for (ExecutableElement method : methods) {
        if (isToStringOrEqualsOrHashCode(method)) {
            boolean canGenerate = method.getModifiers().contains(Modifier.ABSTRACT)
                    || isJavaLangObject((TypeElement) method.getEnclosingElement());
            vars.put(method.getSimpleName().toString(), canGenerate);
        }
    }
    assert vars.size() == 3;
    return vars;
}

From source file:com.ym.easyipc.processor.AnnotationProcessor.java

@Override
public boolean process(Set<? extends TypeElement> annotations, RoundEnvironment roundEnv) {
    jobs = new HashMap<TypeElement, List<ExecutableElement>>();
    try {/*from   w  ww . j  ava  2s . co  m*/
        for (Element elem : roundEnv.getElementsAnnotatedWith(EasyIPCMethod.class)) {
            if (elem.getKind() != ElementKind.METHOD)
                throw new Exception("only methods can be marked by EasyIPCMethod");
            ExecutableElement methodElem = (ExecutableElement) elem;
            TypeElement classElem = (TypeElement) methodElem.getEnclosingElement();

            if (jobs.get(classElem) == null) {
                jobs.put(classElem, new ArrayList<ExecutableElement>());
            }
            jobs.get(classElem).add(methodElem);
        }

        boolean hasListenerJobs = false;
        for (Element elem : roundEnv.getElementsAnnotatedWith(EasyIPCListener.class)) {
            hasListenerJobs = true;
            new ListenerGenerator(processingEnv, roundEnv, (TypeElement) elem).generateClass();
        }

        if (hasListenerJobs || !jobs.isEmpty()) {
            new Generator(processingEnv, roundEnv, jobs).generate();
            return true;
        }

    } catch (Exception e) {
        processingEnv.getMessager().printMessage(Diagnostic.Kind.ERROR,
                "failed to generate EasyIPC classes:\n " + ExceptionUtils.getFullStackTrace(e));

    }
    return false;
}

From source file:com.github.pellaton.springconfigvalidation.SpringConfigurationValidationProcessor.java

private boolean isInConfigurationClass(ExecutableElement methodElement) {
    Element enclosingElement = methodElement.getEnclosingElement();

    List<? extends AnnotationMirror> annotationMirrors = enclosingElement.getAnnotationMirrors();
    for (AnnotationMirror annotationMirror : annotationMirrors) {
        DeclaredType annotationType = annotationMirror.getAnnotationType();

        if (this.configurationTypeElement.equals(annotationType.asElement())) {
            return true;
        }/*www .  ja  va2  s  . c o m*/
    }

    return false;
}

From source file:org.commonjava.vertx.vabr.anno.proc.AbstractTemplateInfo.java

protected AbstractTemplateInfo(final Element elem, final Handles handles, final int priority,
        final Method method, final String path, final String defPath, final String[] routeVersions,
        final boolean fork) {
    this.priority = priority;
    this.httpMethod = method;
    this.fork = fork;
    this.httpPath = AnnotationUtils.pathOf(handles, path, defPath);
    this.routePathFragment = isEmpty(path) ? defPath : path;
    this.handlerPathFragment = isEmpty(handles.prefix()) ? handles.value() : handles.prefix();

    // it only applies to methods...
    final ExecutableElement eelem = (ExecutableElement) elem;

    methodname = eelem.getSimpleName().toString();

    final TypeElement cls = (TypeElement) eelem.getEnclosingElement();

    Element parent = cls.getEnclosingElement();
    while (parent.getKind() != ElementKind.PACKAGE) {
        parent = parent.getEnclosingElement();
    }//from w  ww  .j a  va  2  s  .c  o  m

    final PackageElement pkg = (PackageElement) parent;

    qualifiedClassname = cls.getQualifiedName().toString();

    classname = cls.getSimpleName().toString();

    packagename = pkg.getQualifiedName().toString();

    this.handlerKey = AnnotationUtils.getHandlerKey(handles, qualifiedClassname);

    this.versions = new ArrayList<>();
    if (routeVersions != null && routeVersions.length > 0) {
        for (final String rv : routeVersions) {
            this.versions.add(rv);
        }
    } else {
        final String[] handlerVersions = handles.versions();
        if (handlerVersions != null) {
            for (final String rv : handlerVersions) {
                this.versions.add(rv);
            }
        }
    }
}

From source file:org.mule.devkit.utils.NameUtils.java

public String generateClassName(ExecutableElement executableElement, String append) {
    TypeElement parentClass = ElementFilter.typesIn(Arrays.asList(executableElement.getEnclosingElement()))
            .get(0);//from   ww w . jav a  2  s . com
    String packageName = getPackageName(getBinaryName(parentClass));
    String className = StringUtils.capitalize(executableElement.getSimpleName().toString()) + append;

    return packageName + "." + className;
}

From source file:org.mule.devkit.module.generation.JaxbTransformerGenerator.java

private DefinedClass getJaxbTransformerClass(ExecutableElement executableElement, VariableElement variable) {
    DeclaredType declaredType = (DeclaredType) variable.asType();
    XmlType xmlType = declaredType.asElement().getAnnotation(XmlType.class);
    TypeElement parentClass = ElementFilter.typesIn(Arrays.asList(executableElement.getEnclosingElement()))
            .get(0);/*from  ww  w  .j  a va2s  . co m*/
    String packageName = context.getNameUtils()
            .getPackageName(context.getElementsUtils().getBinaryName(parentClass).toString()) + ".config";
    Package pkg = context.getCodeModel()._package(packageName);
    DefinedClass jaxbTransformer = pkg._class(StringUtils.capitalize(xmlType.name()) + "JaxbTransformer",
            AbstractTransformer.class, new Class<?>[] { DiscoverableTransformer.class });

    return jaxbTransformer;
}

From source file:org.mule.devkit.utils.NameUtils.java

public String generateClassName(ExecutableElement executableElement, String extraPackage, String append) {
    TypeElement parentClass = ElementFilter.typesIn(Arrays.asList(executableElement.getEnclosingElement()))
            .get(0);/*  www .  j  a  v a2 s. c  o  m*/
    String packageName = getPackageName(elements.getBinaryName(parentClass).toString());
    String className = StringUtils.capitalize(executableElement.getSimpleName().toString()) + append;

    return packageName + extraPackage + "." + className;
}

From source file:org.mule.devkit.module.generation.MessageSourceGenerator.java

private void generateMessageSource(Element typeElement, ExecutableElement executableElement) {
    // get class/* w w  w.ja  va 2 s.  c  o  m*/
    DefinedClass messageSourceClass = getMessageSourceClass(executableElement);

    messageSourceClass.javadoc().add(messageSourceClass.name() + " wraps ");
    messageSourceClass.javadoc().add("{@link "
            + ((TypeElement) executableElement.getEnclosingElement()).getQualifiedName().toString() + "#");
    messageSourceClass.javadoc().add(executableElement.getSimpleName().toString() + "(");
    boolean first = true;
    for (VariableElement variable : executableElement.getParameters()) {
        if (!first) {
            messageSourceClass.javadoc().add(", ");
        }
        messageSourceClass.javadoc()
                .add(variable.asType().toString().replaceAll("<[a-zA-Z\\-\\.\\<\\>\\s\\,]*>", ""));
        first = false;
    }
    messageSourceClass.javadoc().add(")} method in ");
    messageSourceClass.javadoc().add(ref(executableElement.getEnclosingElement().asType()));
    messageSourceClass.javadoc().add(" as a message source capable of generating Mule events. ");
    messageSourceClass.javadoc().add(" The POJO's method is invoked in its own thread.");

    // add a field for each argument of the method
    Map<String, FieldVariableElement> fields = generateFieldForEachParameter(messageSourceClass,
            executableElement);

    // add standard fields
    FieldVariable object = generateFieldForModuleObject(messageSourceClass, typeElement);
    FieldVariable muleContext = generateFieldForMuleContext(messageSourceClass);
    FieldVariable flowConstruct = generateFieldForFlowConstruct(messageSourceClass);
    FieldVariable messageProcessor = generateFieldForMessageProcessorListener(messageSourceClass);
    FieldVariable thread = messageSourceClass.field(Modifier.PRIVATE, ref(Thread.class), "thread");
    thread.javadoc().add("Thread under which this message source will execute");

    // add initialise
    generateInitialiseMethod(messageSourceClass, fields, typeElement, muleContext, null, null, object);

    // add setmulecontext
    generateSetMuleContextMethod(messageSourceClass, muleContext);

    // add setobject
    generateSetModuleObjectMethod(messageSourceClass, object);

    // add setlistener
    generateSetListenerMethod(messageSourceClass, messageProcessor);

    // add setflowconstruct
    generateSetFlowConstructMethod(messageSourceClass, flowConstruct);

    // generate setters for all parameters
    for (String fieldName : fields.keySet()) {
        generateSetter(messageSourceClass, fields.get(fieldName).getField());
    }

    // add process method
    generateSourceCallbackMethod(messageSourceClass, executableElement, messageProcessor, muleContext,
            flowConstruct);

    // add start method
    generateStartMethod(messageSourceClass, thread);

    // add stop method
    generateStopMethod(messageSourceClass, thread);

    // get pool object if poolable
    if (typeElement.getAnnotation(Module.class).poolable()) {
        DefinedClass poolObjectClass = context
                .getClassForRole(context.getNameUtils().generatePoolObjectRoleKey((TypeElement) typeElement));

        // add run method
        generateRunMethod(messageSourceClass, executableElement, fields, object, muleContext, poolObjectClass);
    } else {
        // add run method
        generateRunMethod(messageSourceClass, executableElement, fields, object, muleContext);
    }
}

From source file:cop.raml.processor.RestProcessor.java

private void processMethod(@NotNull RestApi api, @NotNull ExecutableElement methodElement) {
    TypeElement classElement = (TypeElement) methodElement.getEnclosingElement();
    String path = restImpl.getRequestPath(classElement, methodElement);

    if (StringUtils.isBlank(path))
        throw new RamlProcessingException("endpoint url is empty");

    List<String> doc = ThreadLocalContext.getDocCommentAsList(methodElement);
    MethodJavaDoc methodJavaDoc = MethodJavaDoc.create(doc);

    readClassLevelDoc(api, classElement);

    Resource resource = api.createResource(path);
    readUriParameters(resource, methodElement, methodJavaDoc);
    readMethod(resource, methodElement, methodJavaDoc);
}

From source file:cop.raml.processor.RestProcessor.java

/**
 * This method is responsible for calling {@link #processMethod(RestApi, ExecutableElement)} and catch all exceptions.
 *
 * @param api           rest api//  ww  w . j  av a  2 s  .  c  o m
 * @param methodElement method element
 */
private void processMethodWithCatchException(@NotNull RestApi api, @NotNull ExecutableElement methodElement) {
    try {
        processMethod(api, methodElement);
    } catch (AnnotationTypeMismatchException e) {
        String className = methodElement.getEnclosingElement().getSimpleName().toString();
        String message = String.format(
                "Unable to read annotation parameter '%s' for %s.%s(). Try to use simple inline String.",
                e.element().getName(), className, methodElement.getSimpleName());
        AnnotationMirror annotationMirror = getAnnotationMirror(methodElement,
                e.element().getDeclaringClass().getName());
        AnnotationValue annotationValue = getAnnotationValue(annotationMirror, e.element().getName() + "()");
        ThreadLocalContext.getMessager().printMessage(WARNING, message, methodElement, annotationMirror,
                annotationValue);
    } catch (Exception e) {
        String message = String.format("%s: %s", e.getClass().getName(), e.getStackTrace()[0]);
        ThreadLocalContext.getMessager().printMessage(WARNING, message, methodElement);
    }
}