public static TypeElement getClassElement(Element element) { if (element instanceof PackageElement) { throw new IllegalArgumentException("Invalid element. A package element can't be used to retrieve a class element"); } else if (element instanceof TypeElement) { return (TypeElement) element; } else { return getClassElement(element.getEnclosingElement()); } }
public static PackageElement getPackageElement(Element element) { if (element instanceof PackageElement) { return (PackageElement) element; } else { return getPackageElement(element.getEnclosingElement()); } }
public static <A extends Annotation> List<ExecutableElement> findMethodsAnnotatedWith(TypeElement classElement, Class<A> annotation) { return filterByAnnotation(ElementFilter.methodsIn(classElement.getEnclosedElements()), annotation); }
public TypeDef apply(TypeElement classElement) { List<ClassRef> extendsList = new ArrayList<ClassRef>(); //Check SuperClass Kind kind = Kind.CLASS; if (classElement.getKind() == ElementKind.INTERFACE) { kind = Kind.INTERFACE; } else if (classElement.getKind() == ElementKind.CLASS) { kind = Kind.CLASS; extendsList.add(TypeDef.OBJECT_REF); } else if (classElement.getKind() == ElementKind.ANNOTATION_TYPE) { kind = Kind.ANNOTATION; } Set<Method> allMethods = new LinkedHashSet<Method>(); for (ExecutableElement method : ElementFilter.methodsIn(classElement.getEnclosedElements())) { } return new TypeDefBuilder() .withKind(kind) .withModifiers(TypeUtils.modifiersToInt(classElement.getModifiers())) .withPackageName(getPackageName(classElement)) .withName(getClassName(classElement)) .withExtendsList(extendsList) .addAllToMethods(allMethods) .withOuterType(classElement.getEnclosingElement() instanceof TypeElement ? SHALLOW_TYPEDEF.apply((TypeElement) classElement.getEnclosingElement()) : null) .build(); } };
@Override default void add(Element element) { CustomResource customResource = element.getAnnotation(CustomResource.class); if (element instanceof TypeElement) { TypeDef definition = ElementTo.TYPEDEF.apply((TypeElement) element); String className = ModelUtils.getClassName(element); on(customResource != null ? new ConfigurationSupplier<CustomResourceConfig>(CustomResourceConfigAdapter.newBuilder(customResource).addToAttributes(Keys.TYPE_DEFINITION, definition).accept(new AddClassNameConfigurator(className))) : new ConfigurationSupplier<CustomResourceConfig>(new CustomResourceConfigBuilder().addToAttributes(Keys.TYPE_DEFINITION, definition).accept(new AddClassNameConfigurator(className)))); } }
.withKind(kind) .withModifiers(TypeUtils.modifiersToInt(classElement.getModifiers())) .withPackageName(getPackageName(classElement)) .withName(getClassName(classElement)) .withParameters(genericTypes) .withExtendsList(superClassType instanceof ClassRef ? (ClassRef) superClassType : null)
public static String getClassName(Element element) { TypeElement typeElement = getClassElement(element); return typeElement.getSimpleName().toString(); /* TypeElement typeElement = getClassElement(element); String qualifiedName = typeElement.getQualifiedName().toString(); String packageName = getPackageName(typeElement); if (packageName.isEmpty()) { return qualifiedName; } return qualifiedName.substring(packageName.length() + 1); */ }
public static String getPackageName(Element element) { return getPackageElement(element).getQualifiedName().toString(); }
public void selectAnnotated(RoundEnvironment env, Types types, AnnotationSelector selector, Map<String, TypeDef> definitions) { for (Object o : env.getElementsAnnotatedWith((TypeElement) types.asElement(annotationMirror(selector)))) { if (o instanceof TypeElement) { TypeDef typeDef = new TypeDefBuilder(ElementTo.TYPEDEF.apply(ModelUtils.getClassElement((Element) o))) .build(); definitions.put(typeDef.getFullyQualifiedName(), typeDef); } } }
.withPackageName(ModelUtils.getPackageElement(element).toString()) .withClassName(targetInterface) .withKind(JavaKind.INTERFACE)
public void selectPackages(Elements elements, PackageSelector selector, Map<String, TypeDef> definitions) { Pattern pattern = Pattern.compile(selector.pattern()); PackageElement packageElement = elements.getPackageElement(selector.value()); List<TypeElement> typeElements = new ArrayList<>(); if (packageElement != null) { for (Element e : packageElement.getEnclosedElements()) { if (e instanceof TypeElement) { typeElements.add((TypeElement) e); } } } else { TypeElement e = elements.getTypeElement(selector.value()); if (e != null) { typeElements.add(e); } } for (TypeElement typeElement : typeElements) { TypeDef typeDef = new TypeDefBuilder(ElementTo.TYPEDEF.apply(ModelUtils.getClassElement(typeElement))) .build(); Matcher m = pattern.matcher(typeDef.getName()); if (m.matches()) { definitions.put(typeDef.getFullyQualifiedName(), typeDef); } } }
.withPackageName(ModelUtils.getPackageElement(element).toString()) .withName(targetInterface) .withKind(Kind.INTERFACE)
TypeDef def = new TypeDefBuilder(ElementTo.TYPEDEF.apply(ModelUtils.getClassElement(element))) .build();
.withPackageName(ModelUtils.getPackageElement(executableElement).toString()) .withClassName(interfaceName) .addToGenericTypes(genericType)
ctx.getRepository().register(ModelUtils.getClassElement(ref)); JavaClazz clazz = ctx.getToClazz().apply(ModelUtils.getClassElement(typeElement)); generateLocalDependenciesIfNeeded(); try {
.withPackageName(ModelUtils.getPackageElement(executableElement).toString()) .withName(interfaceName) .withParameters(paremeterType)
Buildable buildable = element.getAnnotation(Buildable.class); BuilderContext ctx = BuilderContextManager.create(elements, buildable.generateBuilderPackage(), buildable.builderPackage()); ctx.getRepository().register(ModelUtils.getClassElement(element)); for (TypeElement ref : BuilderUtils.getBuildableReferences(ctx, buildable)) { ctx.getRepository().register(ModelUtils.getClassElement(ref)); Buildable buildable = element.getAnnotation(Buildable.class); BuilderContext ctx = BuilderContextManager.create(elements, buildable.generateBuilderPackage(), buildable.builderPackage()); JavaClazz clazz = ctx.getToClazz().apply(ModelUtils.getClassElement(element)); generateLocalDependenciesIfNeeded(); try {
TypeDef b = new TypeDefBuilder(ElementTo.TYPEDEF.apply(ModelUtils.getClassElement(typeElement))) .addToAttributes(EXTERNAL_BUILDABLE, generated) .addToAttributes(EDIATABLE_ENABLED, generated.editableEnabled()) TypeDef r = new TypeDefBuilder(ElementTo.TYPEDEF.apply(ModelUtils.getClassElement(ref))) .addToAttributes(EXTERNAL_BUILDABLE, generated) .addToAttributes(EDIATABLE_ENABLED, generated.editableEnabled())
TypeDef b = new TypeDefBuilder(ElementTo.TYPEDEF.apply(ModelUtils.getClassElement(element))) .addToAttributes(BUILDABLE, buildable) .addToAttributes(EDIATABLE_ENABLED, buildable.editableEnabled()) TypeDef r = new TypeDefBuilder(ElementTo.TYPEDEF.apply(ModelUtils.getClassElement(ref))) .addToAttributes(BUILDABLE, buildable) .addToAttributes(EDIATABLE_ENABLED, buildable.editableEnabled())