List of usage examples for javax.lang.model.element ExecutableElement getEnclosingElement
Element getEnclosingElement();
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); } }