Java 类org.reflections.scanners.MethodAnnotationsScanner 实例源码
项目:algorithm.annotation
文件:AlgorithmServiceImpl.java
public AlgorithmServiceImpl() {
map = new HashMap<>();
List<URL> urlList = new ArrayList<>();
for(String f:System.getProperty("java.class.path").split(":")){
System.err.println(f);
try {
urlList.add(new File(f).toURI().toURL());
} catch (IOException e) {
e.printStackTrace();
}
}
URL[] urls = urlList.toArray(new URL[0]);
Reflections reflections = new Reflections("jobreading.algorithm.experiment",new MethodAnnotationsScanner(),urls);
for(Method method : reflections.getMethodsAnnotatedWith(Algorithm.class)){
final Algorithm my = method.getAnnotation(Algorithm.class);
Class<?> clazz = method.getDeclaringClass();
if (null != my) {
map.put(my.name(), clazz);
}
}
}
项目:satisfy
文件:ScanningStepsFactory.java
private Set<Class<?>> scanTypes(String packageName) {
Reflections reflections = new Reflections(packageName,
new MethodAnnotationsScanner());
Set<Class<?>> types = new HashSet<>();
types.addAll(typesAnnotatedWith(reflections, Given.class));
types.addAll(typesAnnotatedWith(reflections, When.class));
types.addAll(typesAnnotatedWith(reflections, Then.class));
types.addAll(typesAnnotatedWith(reflections, Before.class));
types.addAll(typesAnnotatedWith(reflections, After.class));
types.addAll(typesAnnotatedWith(reflections, BeforeScenario.class));
types.addAll(typesAnnotatedWith(reflections, AfterScenario.class));
types.addAll(typesAnnotatedWith(reflections, BeforeStory.class));
types.addAll(typesAnnotatedWith(reflections, AfterStory.class));
types.addAll(typesAnnotatedWith(reflections, BeforeStories.class));
types.addAll(typesAnnotatedWith(reflections, AfterStories.class));
types.addAll(typesAnnotatedWith(reflections, AsParameterConverter
.class));
return types;
}
项目:Alpha
文件:Alpha.java
public void scan(String base) {
Reflections reflections = new Reflections(new ConfigurationBuilder()
.setUrls(ClasspathHelper.forPackage(base))
.setScanners(new MethodAnnotationsScanner())
);
Set<Method> predicateMethods = reflections.getMethodsAnnotatedWith(Predicate.class);
for (Method method : predicateMethods) {
String name = method.getAnnotation(Predicate.class).name();
if (name.isEmpty()) {
name = method.getName();
}
this.register(method, name);
}
}
项目:step
文件:JavaJarHandler.java
private String getKeywordClassList(URLClassLoader cl) throws Exception {
URL url = cl.getURLs()[0];
try {
Reflections reflections = new Reflections(new ConfigurationBuilder().setUrls(url)
.addClassLoader(cl).setScanners(new MethodAnnotationsScanner()));
Set<Method> methods = reflections.getMethodsAnnotatedWith(Keyword.class);
Set<String> kwClasses = new HashSet<>();
for(Method method:methods) {
kwClasses.add(method.getDeclaringClass().getName());
}
StringBuilder kwClassnamesBuilder = new StringBuilder();
kwClasses.forEach(kwClassname->kwClassnamesBuilder.append(kwClassname+";"));
return kwClassnamesBuilder.toString();
} catch (Exception e) {
String errorMsg = "Error while looking for methods annotated with @Keyword in "+url.toString();
throw new Exception(errorMsg, e);
}
}
项目:routing-bird
文件:RestfulHelpEndpoints.java
private static Set<Class<?>> getReflected() {
synchronized (LOCK) {
if (reflected != null) {
return reflected;
}
Reflections reflections = new Reflections(new ConfigurationBuilder()
.setUrls(ClasspathHelper.forPackage("com.jivesoftware"))
.setScanners(new MethodAnnotationsScanner(), new TypeAnnotationsScanner()));
Set<Class<?>> result = reflections.getTypesAnnotatedWith(Path.class);
Set<Method> methods = reflections.getMethodsAnnotatedWith(Path.class);
for (Method method : methods) {
result.add(method.getDeclaringClass());
}
reflected = Collections.unmodifiableSet(result);
return reflected;
}
}
项目:metasfresh
文件:ClasspathCachedMethodsTester.java
public void test()
{
final Reflections reflections = new Reflections(new ConfigurationBuilder()
.addUrls(ClasspathHelper.forClassLoader())
.setScanners(new MethodAnnotationsScanner())
);
final Set<Method> methods = reflections.getMethodsAnnotatedWith(Cached.class);
System.out.println("Found " + methods.size() + " methods annotated with " + Cached.class);
for (final Method method : methods)
{
testMethod(method);
}
assertNoExceptions();
}
项目:typesafeconfig-guice
文件:TypesafeConfigModule.java
/**
* Scans the specified packages for annotated classes, and applies Config values to them.
*
* @param config the Config to derive values from
* @param packageNamePrefix the prefix to limit scanning to - e.g. "com.github"
* @return The constructed TypesafeConfigModule.
*/
public static TypesafeConfigModule fromConfigWithPackage(Config config, String packageNamePrefix) {
ConfigurationBuilder configBuilder =
new ConfigurationBuilder()
.filterInputsBy(new FilterBuilder().includePackage(packageNamePrefix))
.setUrls(ClasspathHelper.forPackage(packageNamePrefix))
.setScanners(
new TypeAnnotationsScanner(),
new MethodParameterScanner(),
new MethodAnnotationsScanner(),
new FieldAnnotationsScanner()
);
Reflections reflections = new Reflections(configBuilder);
return new TypesafeConfigModule(config, reflections);
}
项目:flex
文件:FlexUrlResolver.java
private Set<ActionData> getActionContext(String controllerPackageScan) {
Set<ActionData> resourceContext = new HashSet<ActionData>();
if (controllerPackageScan.isEmpty()) return resourceContext;
Reflections reflections = new Reflections(new ConfigurationBuilder()
.addUrls(ClasspathHelper.forPackage(controllerPackageScan))
.setScanners(new MethodAnnotationsScanner()));
Set<Method> methodSet = reflections.getMethodsAnnotatedWith(Action.class);
for (Method method : methodSet) {
Secured authenticated = (Secured)method.getAnnotation(Secured.class);
Action action = (Action)method.getAnnotation(Action.class);
if (null != action) {
resourceContext.add(new ActionData(action.uri(), action.method(), authenticated != null, method));
}
}
return resourceContext;
}
项目:EJBContainer
文件:DynamicHelper.java
public void invokeAnnotatedMethods( Object inObject, Class<? extends Annotation> inAnnotation ) throws InvokeAnnotatedMethodException
{
// Retrieve all methods annotated with the given annotation
Reflections reflections = new Reflections( inObject.getClass().getName(), new MethodAnnotationsScanner() );
Set<Method> methods = reflections.getMethodsAnnotatedWith( inAnnotation );
// Invoke them
for( Method method : methods )
{
try {
method.invoke( inObject, new Object[]{} );
} catch (IllegalAccessException | IllegalArgumentException
| InvocationTargetException e) {
throw new InvokeAnnotatedMethodException( method );
}
}
}
项目:play-sitemap-module.edulify.com
文件:AnnotationUrlProvider.java
@Override
public void addUrlsTo(WebSitemapGenerator generator) {
String baseUrl = configuration.getString("sitemap.baseUrl");
ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
Reflections reflections = new Reflections("controllers", new MethodAnnotationsScanner());
Set<Method> actions = reflections.getMethodsAnnotatedWith(SitemapItem.class);
for(Method method : actions) {
String actionUrl = actionUrl(classLoader, method);
SitemapItem annotation = method.getAnnotation(SitemapItem.class);
if(annotation != null) {
WebSitemapUrl url = webSitemapUrl(baseUrl, actionUrl, annotation);
generator.addUrl(url);
}
}
}
项目:restapidoc
文件:ClassPathScanner.java
private void init(String packageName) {
FilterBuilder filters = new FilterBuilder().includePackage(packageName);
Scanner[] scanners = {
new TypeAnnotationsScanner(),
new MethodAnnotationsScanner(),
new MethodParameterScanner(),
new FieldAnnotationsScanner(),
new SubTypesScanner().filterResultsBy(filters)
};
reflections = new ConfigurationBuilder()
.addUrls(ClasspathHelper.forPackage(packageName))
.addScanners(scanners)
.filterInputsBy(filters)
.build();
}
项目:xm-commons
文件:ReflectionConfig.java
/**
* {@link Reflections} bean.
*
* @return bean
*/
@Bean
public Reflections reflections() {
return new Reflections(new ConfigurationBuilder()
.setUrls(ClasspathHelper.forPackage(SCAN_PACKAGE))
.setScanners(new MethodAnnotationsScanner()));
}
项目:Lahiya
文件:LahiyaTestCaseReport.java
public void generateReport(String packageName,List<String> flagList) throws IOException
{
URL testClassesURL = Paths.get("target/test-classes").toUri().toURL();
URLClassLoader classLoader = URLClassLoader.newInstance(new URL[]{testClassesURL},
ClasspathHelper.staticClassLoader());
reflections = new Reflections(new ConfigurationBuilder()
.setUrls(ClasspathHelper.forPackage(packageName,classLoader))
.addClassLoader(classLoader)
.filterInputsBy(new FilterBuilder().includePackage(packageName))
.setScanners(new MethodAnnotationsScanner(), new TypeAnnotationsScanner(), new SubTypesScanner())
);
List<Map<String, TestClass>> list = new ArrayList<>();
for (String flag : flagList)
{
list.add(printMethods(flag));
}
Gson gson = new Gson();
String overviewTemplate = IOUtils.toString(getClass().getResourceAsStream("/index.tpl.html"));
String editedTemplate = overviewTemplate.replace("##TEST_DATA##", gson.toJson(list));
FileUtils.writeStringToFile(new File("target/test-list-html-report/index.html"), editedTemplate);
logger.info("report file generated");
}
项目:azure-maven-plugins
文件:AnnotationHandlerImpl.java
@Override
public Set<Method> findFunctions(final URL url) {
return new Reflections(
new ConfigurationBuilder()
.addUrls(url)
.setScanners(new MethodAnnotationsScanner())
.addClassLoader(getClassLoader(url)))
.getMethodsAnnotatedWith(FunctionName.class);
}
项目:geeMVC-Java-MVC-Framework
文件:TestReflectionsWrapper.java
@Override
public ReflectionsWrapper configure() {
reflections = (Reflections) cache.get(Reflections.class.getName());
if (reflections == null) {
ConfigurationBuilder cb = new ConfigurationBuilder();
Set<URL> classLocations = new LinkedHashSet<>();
try {
List<URL> urls = Collections.list(Thread.currentThread().getContextClassLoader().getResources(""));
for (URL url : urls) {
if (url.getPath().contains("/geemvc/target/")) {
classLocations.add(url);
}
}
} catch (IOException e) {
throw new IllegalStateException(e);
}
cb = cb.addUrls(classLocations).addClassLoader(Thread.currentThread().getContextClassLoader());
cb = cb.setScanners(new ResourcesScanner(), new TypeAnnotationsScanner(), new MethodAnnotationsScanner(), new SubTypesScanner());
reflections = cb.build();
// Reflections cachedReflections = (Reflections)
cache.putIfAbsent(Reflections.class.getName(), reflections);
// if (cachedReflections != null)
// reflections = cachedReflections;
}
return this;
}
项目:FSDevTools
文件:ReflectionUtils.java
/**
* Retrieves a static method with a String return value that is either annotated with {@link Description}, or using the naming convention
* getDescription().
*
* @param commandClass the class to retrieve the method from
* @return the description method, or null if none is found
*/
static Method getStaticDescriptionMethod(Class<? extends Command> commandClass) {
Reflections reflections = new Reflections(new ConfigurationBuilder()
.setUrls(forClass(commandClass))
.filterInputsBy(in -> in.endsWith("java") || in.endsWith("class"))
.setScanners(new MethodAnnotationsScanner())
);
Set<Method> methodsWithDescriptionAnnotation = reflections.getMethodsAnnotatedWith(Description.class).stream()
.filter(x -> x.getDeclaringClass().getCanonicalName().equals(commandClass.getCanonicalName()))
.collect(Collectors.toSet());
Method staticDescriptionMethod = null;
if (!methodsWithDescriptionAnnotation.isEmpty()) {
LOGGER.debug("Found annotated method for description for " + commandClass);
staticDescriptionMethod = methodsWithDescriptionAnnotation.iterator().next();
} else {
try {
staticDescriptionMethod = commandClass.getMethod("getDescription");
} catch (NoSuchMethodException e) {
// This case doesn't have to be handled, because it is perfectly fine, when such a method
// does not exist
LOGGER.trace(e);
}
}
if (staticDescriptionMethod != null) {
LOGGER.debug("Dynamic description found and used for " + commandClass);
}
return staticDescriptionMethod;
}
项目:anno4j
文件:Anno4j.java
public Anno4j(Repository repository, IDGenerator idGenerator, URI defaultContext, boolean persistSchemaAnnotations, Set<URL> additionalClasses) throws RepositoryConfigException, RepositoryException {
this.idGenerator = idGenerator;
this.defaultContext = defaultContext;
classpath = new HashSet<>();
classpath.addAll(ClasspathHelper.forClassLoader());
classpath.addAll(ClasspathHelper.forJavaClassPath());
classpath.addAll(ClasspathHelper.forManifest());
classpath.addAll(ClasspathHelper.forPackage(""));
if(additionalClasses != null) {
classpath.addAll(additionalClasses);
}
Reflections annotatedClasses = new Reflections(new ConfigurationBuilder()
.setUrls(classpath)
.useParallelExecutor()
.filterInputsBy(FilterBuilder.parsePackages("-java, -javax, -sun, -com.sun"))
.setScanners(new SubTypesScanner(), new TypeAnnotationsScanner(), new MethodAnnotationsScanner(), new FieldAnnotationsScanner()));
// Bugfix: Searching for Reflections creates a lot ot Threads, that are not closed at the end by themselves,
// so we close them manually.
annotatedClasses.getConfiguration().getExecutorService().shutdown();
// find classes with @Partial annotation
this.partialClasses = annotatedClasses.getTypesAnnotatedWith(Partial.class, true);
scanForEvaluators(annotatedClasses);
if(!repository.isInitialized()) {
repository.initialize();
}
this.setRepository(repository, additionalClasses, additionalClasses);
// Persist schema information to repository:
if(persistSchemaAnnotations) {
persistSchemaAnnotations(annotatedClasses);
}
}
项目:anno4j
文件:OWLSchemaPersistingManagerTest.java
@Test
public void testMatchingExistingSchema() throws Exception {
Anno4j anno4j = new Anno4j();
OWLClazz myPerson = anno4j.createObject(OWLClazz.class, (Resource) new URIImpl("http://example.de/#validly_annotated_person"));
RDFSProperty bossProperty = anno4j.createObject(RDFSProperty.class, (Resource) new URIImpl("http://example.de/#has_boss"));
Restriction bossAllValuesFromRestr = anno4j.createObject(Restriction.class);
bossAllValuesFromRestr.setOnClazz(Sets.newHashSet(myPerson));
bossAllValuesFromRestr.setOnProperty(Sets.newHashSet(bossProperty));
bossAllValuesFromRestr.setAllValuesFrom(Sets.<OWLClazz>newHashSet(myPerson));
Reflections types = new Reflections(
new ConfigurationBuilder()
.setUrls(
ClasspathHelper.forClass(Person.class, ClasspathHelper.staticClassLoader()),
ClasspathHelper.forClass(PersonSupport.class, ClasspathHelper.staticClassLoader())
)
.setScanners(new MethodAnnotationsScanner(), new FieldAnnotationsScanner(), new TypeAnnotationsScanner(), new SubTypesScanner())
);
Transaction transaction = anno4j.createTransaction();
transaction.begin();
SchemaPersistingManager persistingManager = new OWLSchemaPersistingManager(transaction.getConnection());
boolean exceptionThrown = false;
try {
persistingManager.persistSchema(types);
} catch (SchemaPersistingManager.ContradictorySchemaException e) {
exceptionThrown = true;
}
assertFalse(exceptionThrown);
}
项目:anno4j
文件:OWLSchemaPersistingManagerTest.java
@Test
public void testContradictoryExistingSchema() throws Exception {
Anno4j anno4j = new Anno4j();
Transaction setupTransaction = anno4j.createTransaction();
setupTransaction.begin();
setupTransaction.getConnection().prepareUpdate("INSERT DATA {" +
" <http://example.de/#validly_annotated_person> rdfs:subClassOf _:restr . " +
" _:restr a owl:Restriction . " +
" _:restr owl:onProperty <http://example.de/#id> . " +
" _:restr owl:minCardinality '42'^^xsd:nonNegativeInteger . " +
"}").execute();
setupTransaction.commit();
Transaction transaction = anno4j.createTransaction();
transaction.begin();
SchemaPersistingManager persistingManager = new OWLSchemaPersistingManager(transaction.getConnection());
Reflections types = new Reflections(
new ConfigurationBuilder()
.setUrls(
ClasspathHelper.forClass(Person.class, ClasspathHelper.staticClassLoader()),
ClasspathHelper.forClass(PersonSupport.class, ClasspathHelper.staticClassLoader())
)
.setScanners(new MethodAnnotationsScanner(), new FieldAnnotationsScanner(), new TypeAnnotationsScanner(), new SubTypesScanner())
);
boolean exceptionThrown = false;
try {
persistingManager.persistSchema(types);
} catch (SchemaPersistingManager.ContradictorySchemaException e) {
exceptionThrown = true;
}
assertTrue(exceptionThrown);
}
项目:motech
文件:ReflectionsUtil.java
/**
* Looks for methods annotated with the given annotation.
*
* @param annotation an annotation to look for.
* @param bundle a bundle to look in.
* @return a list of moethods, annotated with the given annotation
*/
public static Set<Method> getMethods(Class<? extends Annotation> annotation, Bundle bundle) {
LOGGER.debug("Searching for methods with annotations: {}", annotation.getName());
Reflections reflections = configureReflection(bundle, new WrappedBundleClassLoader(bundle),
new MethodAnnotationsScanner());
Set<Method> methods = reflections.getMethodsAnnotatedWith(annotation);
LOGGER.debug("Searched for methods with annotations: {}", annotation.getName());
LOGGER.trace("Found {} methods with annotations: {}", methods.size(), annotation.getName());
return methods;
}
项目:HomeAutomation
文件:GenericJPAEntityService.java
@GET
@Path("getclasses")
public List<GenericClassDescription> getSupportedClasses() {
List<GenericClassDescription> classes=new ArrayList<GenericClassDescription>();
Reflections reflections = new Reflections(
new ConfigurationBuilder().setUrls(ClasspathHelper.forPackage("cm.homeautomation")).setScanners(
new SubTypesScanner(), new TypeAnnotationsScanner(), new MethodAnnotationsScanner()));
// MethodAnnotationsScanner
Set<Class<?>> typesAnnotatedWith = reflections.getTypesAnnotatedWith(Entity.class);
for (Class<?> declaringClass : typesAnnotatedWith) {
GenericClassDescription clazz=new GenericClassDescription();
clazz.setName(declaringClass.getName());
Field[] fields = declaringClass.getDeclaredFields();
for (Field field : fields) {
clazz.getFields().put(field.getName(), field.getType().getSimpleName());
}
/*Method[] methods = declaringClass.getDeclaredMethods();
for (Method method : methods) {
clazz.getMethods().put(method.getName(), method.getParameters());
}*/
classes.add(clazz);
}
return classes;
}
项目:HomeAutomation
文件:EventBusAnnotationInitializer.java
public void run() {
Reflections reflections = new Reflections(new ConfigurationBuilder()
.setUrls(ClasspathHelper.forPackage("cm.homeautomation")).setScanners(new MethodAnnotationsScanner()));
// MethodAnnotationsScanner
Set<Method> resources = reflections.getMethodsAnnotatedWith(Subscribe.class);
for (Method method : resources) {
Class<?> declaringClass = method.getDeclaringClass();
// check if the class has already been initialized
if (!instances.containsKey(declaringClass)) {
LogManager.getLogger(this.getClass()).info("Creating class: " + declaringClass.getName());
Runnable singleInstanceCreator = new Runnable() {
public void run() {
try {
Object classInstance = declaringClass.newInstance();
instances.put(declaringClass, classInstance);
} catch (InstantiationException | IllegalAccessException e) {
e.printStackTrace();
LogManager.getLogger(this.getClass()).info("Failed creating class");
}
}
};
new Thread(singleInstanceCreator).start();
}
}
}
项目:reqa-simple
文件:Scanner.java
/**
* findClasses all the classes that are found within a list of packages.
* @param packageLocations List<URL> of all URLs to the package locations
* to be searched through.
* @return Set<Class<?>> of all unique classes that are to be tested found
* within the given packages.
*/
public static final Set<Class<?>> findClasses(List<URL> packageLocations) {
Reflections reflections = new Reflections(new ConfigurationBuilder()
.addUrls(packageLocations)
.setScanners(new TypeAnnotationsScanner(),
new SubTypesScanner(),
new MethodAnnotationsScanner()));
return Scanner.findClasses(reflections);
}
项目:reqa-simple
文件:Scanner.java
/**
* findClasses all the classes that are found that have a specific prefix.
* @param prefix String that is to be of all classes' packages to be tested.
* @return Set<Class<?>> of all unique classes within packages with the given prefix.
*/
public static final Set<Class<?>> findClasses(String prefix) {
Reflections reflections = new Reflections(prefix, new TypeAnnotationsScanner(),
new SubTypesScanner(),
new MethodAnnotationsScanner());
return Scanner.findClasses(reflections);
}
项目:at.info-knowledge-base
文件:TestRunner.java
private static Set<Method> getMethodsForTag(String tag) {
Reflections reflections = new Reflections(new ConfigurationBuilder()
.setUrls(ClasspathHelper.forPackage("info.at.tagging"))
.setScanners(new MethodAnnotationsScanner()));
Set<Method> testMethods = new HashSet<>();
Set<Method> allMethods = reflections.getMethodsAnnotatedWith(Tag.class);
for (Method klass : allMethods) {
if (Arrays.asList(klass.getAnnotation(Tag.class).value()).contains(tag)) {
testMethods.add(klass);
}
}
return testMethods;
}
项目:Biliomi
文件:ReflectionUtils.java
public EStream<Method, Exception> annotatedMethods(Class<? extends Annotation> annotation) {
return EStream.from(new Reflections(new ConfigurationBuilder()
.forPackages(packages)
.addScanners(new MethodAnnotationsScanner()))
.getMethodsAnnotatedWith(annotation));
}
项目:geeMVC-Java-MVC-Framework
文件:DefaultReflectionsProvider.java
@Override
public Reflections provide() {
Reflections reflections = null;
try {
ConfigurationBuilder cb = new ConfigurationBuilder();
URL webappClassesPath = webappClassesPath();
URL geemvcLibPath = geemvcLibPath();
// TODO: Offer configuration for extra libs.
URL gensonLibPath = gensonLibPath();
cb = cb.addUrls(webappClassesPath, geemvcLibPath).addClassLoader(mainClassLoader());
if (gensonLibPath != null && !isExcluded(gensonLibPath.getPath())) {
cb = cb.addUrls(gensonLibPath);
}
// Add configured libraries configured.
cb = addConfiguredIncludes(cb);
// Give the developer a chance to add his own URLs.
Set<URL> urls = appendURLs();
if (urls != null && !urls.isEmpty()) {
for (URL url : urls) {
if (url != null) {
cb = cb.addUrls(url);
}
}
}
// Give the developer a chance to add his own class-loaders.
Set<ClassLoader> classLoaders = appendClassLoaders();
if (classLoaders != null && !classLoaders.isEmpty()) {
cb = cb.addClassLoaders(classLoaders);
}
// Set all scanners. Can be changed in the extend() method if necessary.
cb = cb.setScanners(new ResourcesScanner(), new TypeAnnotationsScanner(), new MethodAnnotationsScanner(), new SubTypesScanner());
// Give the developer a chance to extend the ConfigurationBuilder without having to re-implement the whole class.
extend(cb);
// Finally build the reflections.
reflections = cb.build();
} catch (Exception e) {
throw new IllegalStateException(e);
}
return reflections;
}
项目:backstopper
文件:ReflectionBasedJsr303AnnotationTrollerBase.java
/**
* Initializes the instance based on what is returned by {@link #ignoreAllAnnotationsAssociatedWithTheseProjectClasses()}
* and {@link #specificAnnotationDeclarationExclusionsForProject()}. This is time consuming and should only be done
* once per project if possible - see the usage info in the {@link ReflectionBasedJsr303AnnotationTrollerBase}
* class-level javadocs.
*
* <p>The given set of extra packages for constraint annotation searching will be passed into {@link
* #getFinalPackagesToSearchForConstraintAnnotations(Set)} to generate the final set of packages that are searched.
* If you don't want the {@link #DEFAULT_CONSTRAINT_SEARCH_PACKAGES} default packages to be searched you can
* override {@link #getDefaultPackagesToSearchForConstraintAnnotations()}.
*/
public ReflectionBasedJsr303AnnotationTrollerBase(Set<String> extraPackagesForConstraintAnnotationSearch) {
/*
* Set up the {@link #ignoreAllAnnotationsAssociatedWithTheseClasses} and
* {@link #specificAnnotationDeclarationsExcludedFromStrictMessageRequirement} fields so we know which
* annotations are project-relevant vs. unit-test-only.
*/
ignoreAllAnnotationsAssociatedWithTheseClasses =
new ArrayList<>(setupIgnoreAllAnnotationsAssociatedWithTheseClasses());
specificAnnotationDeclarationsExcludedFromStrictMessageRequirement =
new ArrayList<>(setupSpecificAnnotationDeclarationExclusions());
/*
* Set up the {@link #reflections}, {@link #constraintAnnotationClasses}, and
* {@link #allConstraintAnnotationsMasterList} fields. This is where the crazy reflection magic happens to troll
* the project for the JSR 303 annotation declarations.
*/
// Create the ConfigurationBuilder to search the relevant set of packages.
ConfigurationBuilder configurationBuilder = new ConfigurationBuilder();
for (String packageToAdd : getFinalPackagesToSearchForConstraintAnnotations(
extraPackagesForConstraintAnnotationSearch)) {
configurationBuilder.addUrls(ClasspathHelper.forPackage(packageToAdd));
}
// Create the Reflections object so it scans for all validation annotations we care about and all project
// classes that might have annotations on them.
reflections = new Reflections(configurationBuilder.setScanners(
new SubTypesScanner(), new MethodParameterScanner(), new TypeAnnotationsScanner(),
new MethodAnnotationsScanner(), new FieldAnnotationsScanner()
));
// Gather the list of all JSR 303 validation annotations in the project. Per the JSR 303 spec this is any
// annotation class type that is marked with @Constraint.
constraintAnnotationClasses = new ArrayList<>();
for (Class<?> constraintAnnotatedType : reflections.getTypesAnnotatedWith(Constraint.class, true)) {
if (constraintAnnotatedType.isAnnotation()) {
//noinspection unchecked
constraintAnnotationClasses.add((Class<? extends Annotation>) constraintAnnotatedType);
}
}
// We're not done gathering validation annotations though, unfortunately. JSR 303 also says that *any*
// annotation (whether it is a Constraint or not) that has a value field that returns an array of actual
// Constraints is treated as a "multi-value constraint", and the validation processor will run each
// of the Constraints in the array as if they were declared separately on the annotated element. Therefore,
// we have to dig through all the annotations in the project, find any that fall into this "multi-value
// constraint" category, and include them in our calculations.
for (Class<? extends Annotation> annotationClass : reflections.getSubTypesOf(Annotation.class)) {
if (isMultiValueConstraintClass(annotationClass))
constraintAnnotationClasses.add(annotationClass);
}
// Setup the master constraint list
allConstraintAnnotationsMasterList =
new ArrayList<>(setupAllConstraintAnnotationsMasterList(reflections, constraintAnnotationClasses));
/*
* Finally use the info we've gathered/constructed previously to populate the
* {@link #projectRelevantConstraintAnnotationsExcludingUnitTestsList} field, which is the main chunk of data
* that extensions of this class will care about.
*/
projectRelevantConstraintAnnotationsExcludingUnitTestsList = Collections.unmodifiableList(
getSubAnnotationListUsingExclusionFilters(allConstraintAnnotationsMasterList,
ignoreAllAnnotationsAssociatedWithTheseClasses,
specificAnnotationDeclarationsExcludedFromStrictMessageRequirement));
}
项目:Argent
文件:VPLCore.java
public void setPackage(String pkg) {
this.reflections = new Reflections(new ConfigurationBuilder()
.setUrls(ClasspathHelper.forPackage(pkg))
.setScanners(new MethodAnnotationsScanner())
.filterInputsBy(new FilterBuilder().includePackage(pkg)));
}
项目:spring-guava-ratelimiter
文件:LimiterAnnotationBean.java
public void afterPropertiesSet() throws Exception {
Preconditions.checkArgument(!Strings.isNullOrEmpty(basePackage),"base package must not be null or empty.");
Reflections reflections = new Reflections(
new ConfigurationBuilder().setUrls(
ClasspathHelper.forPackage(basePackage)).setScanners(
new MethodAnnotationsScanner()));
Set<Method> methods = reflections.getMethodsAnnotatedWith(Limiter.class);
for(Method method:methods){
String methodAbsPath = MethodUtil.getAsbMethodCacheKey(method);
if(!Strings.isNullOrEmpty(methodAbsPath)){
Limiter limiter = method.getAnnotation(Limiter.class);
double value = limiter.value();
RateLimiter rateLimiter = RateLimiter.create(value);
RateLimiterCache.put(methodAbsPath,rateLimiter);
}
}
}
项目:anno4j
文件:OWLSchemaPersistingManagerTest.java
@Test
public void testAnnotationPersisting() throws Exception {
Anno4j anno4j = new Anno4j();
Reflections types = new Reflections(
new ConfigurationBuilder()
.setUrls(
ClasspathHelper.forClass(Person.class, ClasspathHelper.staticClassLoader()),
ClasspathHelper.forClass(PersonSupport.class, ClasspathHelper.staticClassLoader())
)
.setScanners(new MethodAnnotationsScanner(), new FieldAnnotationsScanner(), new TypeAnnotationsScanner(), new SubTypesScanner())
);
Transaction transaction = anno4j.createTransaction();
transaction.begin();
SchemaPersistingManager persistingManager = new OWLSchemaPersistingManager(transaction.getConnection());
persistingManager.persistSchema(types);
// Query property characteristics:
String q = QUERY_PREFIX + "ASK { " +
" <http://example.de/#id> a owl:FunctionalProperty . " +
" <http://example.de/#id> a owl:InverseFunctionalProperty . " +
" <http://example.de/#partner> a owl:SymmetricProperty . " +
" <http://example.de/#has_subordinate> a owl:TransitiveProperty . " +
" <http://example.de/#has_boss> a owl:TransitiveProperty . " +
" <http://example.de/#has_boss> owl:inverseOf <http://example.de/#has_subordinate> . " +
" <http://example.de/#has_subordinate> owl:inverseOf <http://example.de/#has_boss> . " +
"}";
BooleanQuery characteristicsQuery = transaction.getConnection().prepareBooleanQuery(QueryLanguage.SPARQL, q);
assertTrue(characteristicsQuery.evaluate());
// Query property restrictions:
q = QUERY_PREFIX + "ASK { " +
" ?r1 a owl:Restriction . " +
" <http://example.de/#validly_annotated_person> rdfs:subClassOf ?r1 . " +
" ?r1 owl:onProperty <http://example.de/#id> . " +
" ?r1 owl:minCardinality ?v1 . " +
" FILTER ( ?v1 = 1 )" +
" ?r2 a owl:Restriction . " +
" <http://example.de/#validly_annotated_person> rdfs:subClassOf ?r2 . " +
" ?r2 owl:onProperty <http://example.de/#id> . " +
" ?r2 owl:maxCardinality ?v2 . " +
" FILTER ( ?v2 = 1 )" +
" ?r3 a owl:Restriction . " +
" <http://example.de/#validly_annotated_person> rdfs:subClassOf ?r3 . " +
" ?r3 owl:onProperty <http://example.de/#partner> . " +
" ?r3 owl:onClass <http://example.de/#validly_annotated_person> . " +
" ?r3 owl:minQualifiedCardinality ?v3 . " +
" FILTER ( ?v3 = 0 )" +
" ?r4 a owl:Restriction . " +
" <http://example.de/#validly_annotated_person> rdfs:subClassOf ?r4 . " +
" ?r4 owl:onProperty <http://example.de/#has_boss> . " +
" ?r4 owl:allValuesFrom <http://example.de/#validly_annotated_person> . " +
" ?r5 a owl:Restriction . " +
" <http://example.de/#validly_annotated_person> rdfs:subClassOf ?r5 . " +
" ?r5 owl:onProperty <http://example.de/#has_activity> . " +
" ?r5 owl:minCardinality ?v5 . " +
" FILTER( ?v5 = 2 )" +
" ?r6 a owl:Restriction . " +
" <http://example.de/#validly_annotated_person> rdfs:subClassOf ?r6 . " +
" ?r6 owl:onProperty <http://example.de/#has_activity> . " +
" ?r6 owl:minQualifiedCardinality ?v6 . " +
" ?r6 owl:onClass <http://example.de/#job> . " +
" FILTER( ?v6 = 1 )" +
"}";
BooleanQuery restrictionQuery = transaction.getConnection().prepareBooleanQuery(QueryLanguage.SPARQL, q);
assertTrue(restrictionQuery.evaluate());
}
项目:nessian
文件:NessianAPIScanner.java
public static void scanner(String scannerPackageName) {
// 构建查找器
Reflections reflections = new Reflections(new ConfigurationBuilder()
.setUrls(ClasspathHelper.forPackage(scannerPackageName))
.setScanners(new MethodAnnotationsScanner(), new TypeAnnotationsScanner()));
// 选出所有带有 @NessianAPI 注解的方法
Set<Method> methods = reflections.getMethodsAnnotatedWith(NessianAPI.class);
Method urlMethod = null;
try {
urlMethod = UrlService.class.getMethod("getAllUrl");
} catch (NoSuchMethodException e) {
e.printStackTrace();
}
// 加入获取URL的api
methodToUrlMap.put("top.nessian.client.service.UrlService.getAllUrl", "/all/urls");
methodMap.put("/all/urls", urlMethod);
// 遍历所有带有注解的方法,然后操作.
for (Method method : methods) {
String url = method.getAnnotation(NessianAPI.class).value();
// 校验URL格式
if (!url.startsWith("/")) {
url += "/";
}
// 检查URL是不是重复了.
if (methodMap.containsKey(url)) {
throw new RuntimeException("url有重复.");
}
String fullMethodName = String.format("%s.%s", method.getDeclaringClass().getName(), method.getName());
methodToUrlMap.put(fullMethodName, url);
// 把方法和URL对应起来,然后缓存起来.
methodMap.put(url, method);
}
}
项目:AppiumTestDistribution
文件:MyTestExecutor.java
public boolean runMethodParallelAppium(List<String> test, String pack, int devicecount,
String executionType) throws Exception {
URL newUrl = null;
List<URL> newUrls = new ArrayList<>();
Collections.addAll(items, pack.split("\\s*,\\s*"));
int a = 0;
Collection<URL> urls = ClasspathHelper.forPackage(items.get(a));
Iterator<URL> iter = urls.iterator();
URL url = iter.next();
urls.clear();
for (int i = 0; i < items.size(); i++) {
newUrl = new URL(url.toString() + items.get(i).replaceAll("\\.", "/"));
newUrls.add(newUrl);
a++;
}
Reflections reflections = new Reflections(new ConfigurationBuilder().setUrls(newUrls)
.setScanners(new MethodAnnotationsScanner()));
Set<Method> resources =
reflections.getMethodsAnnotatedWith(org.testng.annotations.Test.class);
boolean hasFailure;
String runnerLevel = System.getenv("RUNNER_LEVEL") != null
? System.getenv("RUNNER_LEVEL") : prop.getProperty("RUNNER_LEVEL");
if (executionType.equalsIgnoreCase("distribute")) {
if (runnerLevel != null
&& runnerLevel.equalsIgnoreCase("class")) {
constructXmlSuiteForDistribution(pack, test, createTestsMap(resources),
devicecount);
} else {
constructXmlSuiteForDistributionMethods(pack, test, createTestsMap(resources),
devicecount);
}
hasFailure = runMethodParallel();
} else {
constructXmlSuiteForParallel(pack, test, createTestsMap(resources), devicecount,
deviceAllocationManager.getDevices());
hasFailure = runMethodParallel();
}
System.out.println("Finally complete");
ParallelThread.figlet("Test Completed");
//ImageUtils.creatResultsSet();
//ImageUtils.createJSonForHtml();
return hasFailure;
}
项目:cosmo
文件:TypesFinder.java
public TypesFinder(){
reflections = new Reflections(new FieldAnnotationsScanner(),
new MethodAnnotationsScanner(),
new TypeAnnotationsScanner(),
new SubTypesScanner());
}