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

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

Introduction

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

Prototype

@Override
Element getEnclosingElement();

Source Link

Document

Returns the package of a top-level type and returns the immediately lexically enclosing element for a NestingKind#isNested nested type.

Usage

From source file:Main.java

/**
 * get package name from class {@code type}
 * @param type The element of class//from w w w  .jav a2  s  .c  o  m
 * @return package name
 */
public static String getPackageName(TypeElement type) {
    if (type == null || type.getSimpleName().toString().length() == 0) {
        return "";
    }
    Element parent = type.getEnclosingElement();
    if (parent.getKind() == ElementKind.PACKAGE) {
        return ((PackageElement) parent).getQualifiedName().toString();
    }
    return getPackageName((TypeElement) parent);
}

From source file:org.ez18n.apt.processor.DesktopMessagesProcessor.java

static final String getDesktopMessagesClassName(TypeElement typeElement, boolean fqcn) {
    final String simpleName = typeElement.getSimpleName().toString();
    final int resourceIndex = simpleName.indexOf("Resources");
    final String shortName = resourceIndex > 0 ? simpleName.substring(0, resourceIndex) : simpleName;
    return (fqcn ? typeElement.getEnclosingElement().toString() + "." : "") + shortName + "DesktopMessages";
}

From source file:org.ez18n.apt.processor.MobileMessagesProcessor.java

static final String getMobileMessagesClassName(TypeElement typeElement, boolean fqcn) {
    final String simpleName = typeElement.getSimpleName().toString();
    final int resourceIndex = simpleName.indexOf("Resources");
    final String shortName = resourceIndex > 0 ? simpleName.substring(0, resourceIndex) : simpleName;
    return (fqcn ? typeElement.getEnclosingElement().toString() + "." : "") + shortName + "MobileMessages";
}

From source file:therian.buildweaver.StandardOperatorsProcessor.java

/**
 * Must be a public static concrete class with a default constructor, public static zero-arg method, or public
 * static final field.//from  w w w . java2  s  . c  o  m
 *
 * @param e
 * @return boolean
 */
private static boolean isValidStandardOperator(final Element e) {
    if (e.getKind() == ElementKind.FIELD) {
        return e.getModifiers().containsAll(EnumSet.of(Modifier.PUBLIC, Modifier.STATIC, Modifier.FINAL));
    }
    if (e.getKind() == ElementKind.METHOD) {
        return e.getModifiers().containsAll(EnumSet.of(Modifier.PUBLIC, Modifier.STATIC))
                && ((ExecutableElement) e).getParameters().isEmpty();
    }
    if (e.getKind() == ElementKind.CLASS) {
        if (e.getModifiers().contains(Modifier.ABSTRACT) || findDefaultConstructor((TypeElement) e) == null) {
            return false;
        }
        Element current = e;
        while (current.getKind() == ElementKind.CLASS) {
            final TypeElement t = (TypeElement) current;
            if (t.getNestingKind() == NestingKind.TOP_LEVEL) {
                return true;
            }
            if (t.getNestingKind() == NestingKind.MEMBER && t.getModifiers().contains(Modifier.STATIC)) {
                current = t.getEnclosingElement();
                continue;
            }
            break;
        }
    }
    return false;
}

From source file:org.ez18n.apt.processor.GwtXmlProcessor.java

@Override
public boolean process(Set<? extends TypeElement> annotations, RoundEnvironment roundEnv) {
    if (roundEnv.processingOver()) {
        return true;
    }//from   w  w w  . j a v a  2 s  .c  o  m

    final List<TypeElement> bundleTypes = new ArrayList<TypeElement>();
    for (Element element : roundEnv.getElementsAnnotatedWith(MessageBundle.class)) {
        if (element.getKind() != ElementKind.INTERFACE) {
            continue;
        }
        final TypeElement bundleType = (TypeElement) element;
        bundleTypes.add(bundleType);
    }

    if (bundleTypes.isEmpty()) {
        return true;
    }

    String packageName = null;
    for (TypeElement typeElement : bundleTypes) {
        String typeElementPackage = typeElement.getEnclosingElement().toString();
        if (packageName == null) {
            packageName = typeElementPackage;
        } else {
            packageName = intersectPackage(packageName, typeElementPackage);
        }
    }

    try {
        final FileObject file = processingEnv.getFiler().createResource(SOURCE_OUTPUT,
                packageName == null ? "net.courtanet.b2c" : packageName, "Generated.gwt.xml");
        final Writer writer = file.openWriter();
        writer.write(getCode(bundleTypes));
        writer.close();
    } catch (FilerException e) {
        return false;
    } catch (IOException e) {
        processingEnv.getMessager().printMessage(Kind.ERROR, e.getMessage());
    }
    return false;
}

From source file:com.github.cchacin.JsonSchemaProcessor.java

@Override
public boolean process(Set<? extends TypeElement> annotations, RoundEnvironment roundEnv) {

    for (final Element element : roundEnv.getElementsAnnotatedWith(JsonSchema.class)) {
        final TypeElement classElement = (TypeElement) element;
        final PackageElement packageElement = (PackageElement) classElement.getEnclosingElement();

        processingEnv.getMessager().printMessage(Diagnostic.Kind.NOTE,
                "annotated class: " + classElement.getQualifiedName(), element);

        final String fqClassName = classElement.getQualifiedName().toString();
        final String className = classElement.getSimpleName().toString();
        final String packageName = packageElement.getQualifiedName().toString();

        final JsonSchema jsonSchema = element.getAnnotation(JsonSchema.class);

        try {/*  w  w  w . ja va 2  s .  c  om*/
            final JsonNode node = new ObjectMapper().readTree(
                    Thread.currentThread().getContextClassLoader().getResourceAsStream(jsonSchema.path()));
            vc.put("display", new DisplayTool());
            vc.put("json", node);

            vc.put("className", className);
            vc.put("packageName", packageName);

            final JavaFileObject jfo = filer.createSourceFile(fqClassName + "JsonSchema");

            processingEnv.getMessager().printMessage(Diagnostic.Kind.NOTE,
                    "creating source file: " + jfo.toUri());
            final Writer writer = jfo.openWriter();

            processingEnv.getMessager().printMessage(Diagnostic.Kind.NOTE,
                    "applying velocity template: " + vt.getName());

            vt.merge(vc, writer);

            writer.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    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();
    }// ww  w.  j a v a2  s  .  co 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:net.pkhsolutions.ceres.common.builder.processor.BuildableAP.java

private PackageElement getPackage(TypeElement type) {
    if (type.getEnclosingElement() instanceof PackageElement) {
        return (PackageElement) type.getEnclosingElement();
    } else {/*  w ww.  j  av a2s  .co  m*/
        throw new RuntimeException("The @Buildable annotation can only be used on top-level types");
    }
}

From source file:org.jraf.android.prefs.compiler.PrefsProcessor.java

@Override
public boolean process(Set<? extends TypeElement> annotations, RoundEnvironment roundEnv) {
    for (TypeElement te : annotations) {
        for (Element element : roundEnv.getElementsAnnotatedWith(te)) {
            TypeElement classElement = (TypeElement) element;
            PackageElement packageElement = (PackageElement) classElement.getEnclosingElement();

            String classComment = processingEnv.getElementUtils().getDocComment(classElement);

            List<Pref> prefList = new ArrayList<Pref>();
            // Iterate over the fields of the class
            for (VariableElement variableElement : ElementFilter.fieldsIn(classElement.getEnclosedElements())) {
                if (variableElement.getModifiers().contains(Modifier.STATIC)) {
                    // Ignore constants
                    continue;
                }/*from  w  w  w .j  a  v  a  2  s.  c om*/

                TypeMirror fieldType = variableElement.asType();
                boolean isAllowedType = PrefType.isAllowedType(fieldType);
                if (!isAllowedType) {
                    processingEnv.getMessager().printMessage(Diagnostic.Kind.ERROR,
                            fieldType + " is not allowed here, only these types are allowed: "
                                    + PrefType.getAllowedTypes(),
                            variableElement);
                    // Problem detected: halt
                    return true;
                }

                String fieldName = variableElement.getSimpleName().toString();
                org.jraf.android.prefs.Name fieldNameAnnot = variableElement
                        .getAnnotation(org.jraf.android.prefs.Name.class);
                String prefName = getPrefName(fieldName, fieldNameAnnot);

                String prefDefaultValue = getDefaultValue(variableElement, fieldType);
                if (prefDefaultValue == null) {
                    // Problem detected: halt
                    return true;
                }

                String fieldComment = processingEnv.getElementUtils().getDocComment(variableElement);
                Pref pref = new Pref(fieldName, prefName, PrefType.from(fieldType), prefDefaultValue,
                        fieldComment);
                prefList.add(pref);
            }

            Map<String, Object> args = new HashMap<String, Object>();

            // File name (optional - also use 'value' for this)
            org.jraf.android.prefs.Prefs prefsAnnot = classElement
                    .getAnnotation(org.jraf.android.prefs.Prefs.class);
            String fileName = prefsAnnot.value();
            if (fileName.isEmpty()) {
                fileName = prefsAnnot.fileName();
            }
            if (!fileName.isEmpty())
                args.put("fileName", fileName);

            // File mode (must only appear if fileName is defined)
            int fileMode = prefsAnnot.fileMode();
            if (fileMode != -1) {
                if (fileName.isEmpty()) {
                    // File mode set, but not file name (which makes no sense)
                    processingEnv.getMessager().printMessage(Diagnostic.Kind.ERROR,
                            "fileMode must only be set if fileName (or value) is also set", classElement);
                    // Problem detected: halt
                    return true;
                }
                args.put("fileMode", fileMode);
            }

            // Disable @Nullable generation
            args.put("disableNullable", prefsAnnot.disableNullable());

            JavaFileObject javaFileObject = null;
            try {
                // SharedPreferencesWrapper
                javaFileObject = processingEnv.getFiler()
                        .createSourceFile(classElement.getQualifiedName() + SUFFIX_PREF_WRAPPER);
                Template template = getFreemarkerConfiguration().getTemplate("prefwrapper.ftl");
                args.put("package", packageElement.getQualifiedName());
                args.put("comment", classComment);
                args.put("prefWrapperClassName", classElement.getSimpleName() + SUFFIX_PREF_WRAPPER);
                args.put("editorWrapperClassName", classElement.getSimpleName() + SUFFIX_EDITOR_WRAPPER);
                args.put("prefList", prefList);
                Writer writer = javaFileObject.openWriter();
                template.process(args, writer);
                IOUtils.closeQuietly(writer);

                // EditorWrapper
                javaFileObject = processingEnv.getFiler()
                        .createSourceFile(classElement.getQualifiedName() + "EditorWrapper");
                template = getFreemarkerConfiguration().getTemplate("editorwrapper.ftl");
                writer = javaFileObject.openWriter();
                template.process(args, writer);
                IOUtils.closeQuietly(writer);

            } catch (Exception e) {
                processingEnv.getMessager().printMessage(Diagnostic.Kind.ERROR,
                        "En error occurred while generating Prefs code " + e.getClass() + e.getMessage(),
                        element);
                e.printStackTrace();
                // Problem detected: halt
                return true;
            }
        }
    }
    return true;
}

From source file:org.ez18n.apt.processor.LabelBundleProcessor.java

@Override
public boolean process(Set<? extends TypeElement> annotations, RoundEnvironment roundEnv) {
    if (roundEnv.processingOver()) {
        return true;
    }/*from www.j  a  va 2s  . co m*/
    final List<LabelTemplateMethod> methods = new ArrayList<LabelTemplateMethod>();
    for (Element element : roundEnv.getElementsAnnotatedWith(MessageBundle.class)) {
        if (element.getKind() != ElementKind.INTERFACE) {
            continue;
        }
        final TypeElement bundleType = (TypeElement) element;
        processLabels(bundleType, methods);
        try {

            FileObject file = null;
            switch (generationType) {
            case SOURCE:
                file = processingEnv.getFiler().createSourceFile(getTargetClassName(bundleType), bundleType);
                break;

            case RESSOURCE:
                file = processingEnv.getFiler().createResource(SOURCE_OUTPUT,
                        bundleType.getEnclosingElement().toString(),
                        getTargetSimpleName(bundleType) + ".properties");
                break;
            }

            final Writer writer = file.openWriter();
            writer.write(getCode(bundleType, methods));
            writer.close();
        } catch (IOException e) {
            processingEnv.getMessager().printMessage(Kind.ERROR, e.getMessage(), bundleType);
        } finally {
            methods.clear();
        }
    }
    return false;
}