
cn.tenmg.flink.jobs.utils.AnnotationUtils Maven / Gradle / Ivy
package cn.tenmg.flink.jobs.utils;
import java.io.IOException;
import java.lang.annotation.Annotation;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;
import cn.tenmg.dsl.annotion.Macro;
import cn.tenmg.dsl.utils.FileUtils;
public class AnnotationUtils {
private static final String CLASS_SUFFIX = ".class";
private static final int CLASS_SUFFIX_LENTH = CLASS_SUFFIX.length();
public static Set> discoverClasses(Class annotationClass,
Set basePackages) {
Set> classes = new HashSet>();
if (basePackages != null) {
Class> c;
List paths;
for (Iterator it = basePackages.iterator(); it.hasNext();) {
try {
paths = FileUtils.scanPackage(it.next(), CLASS_SUFFIX);
if (paths != null) {
A annotation;
for (int i = 0, size = paths.size(); i < size; i++) {
try {
c = Class.forName(toClassName(paths.get(i)));
annotation = c.getAnnotation(annotationClass);
if (annotation != null) {
classes.add(c);
}
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
return classes;
}
public static Map>> discoverAnnotationClasses(Set basePackages) {
Map>> classes = new HashMap>>();
if (basePackages != null) {
Class> c;
Set> set;
List paths;
Annotation annotations[], annotation;
for (Iterator it = basePackages.iterator(); it.hasNext();) {
try {
paths = FileUtils.scanPackage(it.next(), CLASS_SUFFIX);
if (paths != null) {
for (int i = 0, size = paths.size(); i < size; i++) {
try {
c = Class.forName(toClassName(paths.get(i)));
annotations = c.getAnnotations();
if (annotations != null) {
for (int j = 0; j < annotations.length; j++) {
annotation = annotations[j];
set = classes.get(annotation);
if (set == null) {
set = new HashSet>();
classes.put(annotation, set);
}
set.add(c);
}
}
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
return classes;
}
private static String toClassName(String path) {
return path.substring(0, path.length() - CLASS_SUFFIX_LENTH).replaceAll("/", ".");
}
public static void main(String[] args) {
System.out.println(discoverClasses(Macro.class, new HashSet() {
{
add("");
}
}));
System.out.println(discoverAnnotationClasses(new HashSet() {
{
add("");
}
}));
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy