protected AnnotationFinder newFinder() { return new AnnotationFinder(new CompositeArchive(Stream .of(classes) .map(c -> new FileArchive(Thread.currentThread().getContextClassLoader(), c)) .toArray(Archive[]::new))) { private final Map<Class<?>, List<Field>> fieldCache = new HashMap<>(); private final Map<Class<?>, List<Class<?>>> classCache = new HashMap<>(); @Override public List<Field> findAnnotatedFields(final Class<? extends Annotation> annotation) { return fieldCache.computeIfAbsent(annotation, a -> super.findAnnotatedFields(annotation)); } @Override public List<Class<?>> findAnnotatedClasses(final Class<? extends Annotation> annotation) { return classCache.computeIfAbsent(annotation, a -> super.findAnnotatedClasses(annotation)); } }; }
public WebappAggregatedArchive(final Archive delegate, final Iterable<URL> urls) { final List<Archive> archives = doScan(Thread.currentThread().getContextClassLoader(), urls, null); final List<String> classes = new ArrayList<String>(); final Archive archive = new FilteredArchive(delegate, new ScanXmlSaverFilter(scanXmlExists, handler, classes, null)); try { this.map.put(new URL("jar:file://!/META-INF/beans.xml"), classes); } catch (final MalformedURLException e) { throw new IllegalArgumentException(e); } archives.add(archive); this.archive = new CompositeArchive(archives); }
private static IAnnotationFinder finderFromClasses(final DeploymentModule module, final Class<?>[] value, final Collection<File> others) { final Collection<Archive> archives = new ArrayList<Archive>(1 + (others == null ? 0 : others.size())); final Collection<Class<?>> classes = new ArrayList<Class<?>>(asList(FinderFactory.ensureMinimalClasses(module))); if (value != null) { classes.addAll(asList(value)); } archives.add(new ClassesArchive(classes)); if (others != null) { final ClassLoader classLoader = Thread.currentThread().getContextClassLoader(); for (final File f : others) { try { archives.add(new JarArchive(classLoader, f.toURI().toURL())); } catch (final MalformedURLException e) { throw new IllegalArgumentException(e); } } } return new FinderFactory.OpenEJBAnnotationFinder(new CompositeArchive(archives)).link(); }
private static IAnnotationFinder finderFromClasses(final DeploymentModule module, final Class<?>[] value, final Collection<File> others, final String[] excludes) { final Collection<Archive> archives = new ArrayList<>(1 + (others == null ? 0 : others.size())); final Filter filter = excludes == null || excludes.length == 0 ? null : Filters.invert(Filters.prefixes(excludes)); final Collection<Class<?>> classes = new ArrayList<>(asList(FinderFactory.ensureMinimalClasses(module))); if (value != null) { classes.addAll(asList(value)); } final ClassesArchive classesArchive = new ClassesArchive(classes); archives.add(filter == null ? classesArchive : new FilteredArchive(classesArchive, filter)); if (others != null) { final ClassLoader classLoader = Thread.currentThread().getContextClassLoader(); for (final File f : others) { try { final Archive archive = f.isDirectory() ? new FileArchive(classLoader, f) : new JarArchive(classLoader, f.toURI().toURL()); archives.add(filter == null ? archive : new FilteredArchive(archive, filter)); } catch (final MalformedURLException e) { throw new IllegalArgumentException(e); } } } return new FinderFactory.OpenEJBAnnotationFinder(new CompositeArchive(archives)).link(); }
@Override protected void doExecute() { final AnnotationFinder finder = new AnnotationFinder(new CompositeArchive(Stream .of(classes) .map(c -> new FileArchive(Thread.currentThread().getContextClassLoader(), c)) .toArray(Archive[]::new))); final List<Class<?>> icons = finder.findAnnotatedClasses(Icon.class); final List<Package> packages = finder.findAnnotatedPackages(Icon.class); if (!icons.isEmpty()) { final List<IconModel> foundIcons = Stream .concat(icons.stream(), packages.stream()) .map(type -> type.getAnnotation(Icon.class)) .map(icon -> { final boolean isCustom = icon.value() == CUSTOM; final String name = isCustom ? icon.custom() : icon.value().getKey(); return new IconModel(project.getArtifactId(), name, findIcon(name), isCustom); }) .collect(toList()); final GlobalReporter reporter = getReporter(); synchronized (reporter) { reporter.icons.addAll(foundIcons); } } }
public CdiArchive(BeanArchiveService beanArchiveService, ClassLoader loader, Map<String, URL> urls, Filter userFilter, Archive customArchive) { Collection<Archive> archives = new ArrayList<>(); boolean customAdded = false; for (URL url : urls.values()) { List<String> urlClasses = new ArrayList<>(); BeanArchiveInformation beanArchiveInfo = beanArchiveService.getBeanArchiveInformation(url); final boolean custom = "openwebbeans".equals(url.getProtocol()); Archive archive = new FilteredArchive( custom ? customArchive : ClasspathArchive.archive(loader, url), new BeanArchiveFilter(beanArchiveInfo, urlClasses, userFilter)); if (!customAdded && custom) { customAdded = true; } classesByUrl.put(url.toExternalForm(), new FoundClasses(url, urlClasses, beanArchiveInfo)); archives.add(archive); } if (!customAdded && customArchive != null) { archives.add(userFilter != null ? new FilteredArchive(customArchive, userFilter) : customArchive); } delegate = new CompositeArchive(archives); }
return new SimpleWebappAggregatedArchive(new CompositeArchive(archives), classesByUrl);
return new SimpleWebappAggregatedArchive(cl, new CompositeArchive(archives), webAppClassesByUrl);
public WebappAggregatedArchive(final Module module, final Iterable<URL> urls) { final List<Archive> archives = new ArrayList<Archive>(); final URL scanXml = (URL) module.getAltDDs().get(ScanConstants.SCAN_XML_NAME); if (scanXml != null) { try { handler = ScanUtil.read(scanXml); scanXmlExists = true; } catch (final IOException e) { // ignored, will not use filtering with scan.xml } } for (final URL url : urls) { final List<String> classes = new ArrayList<String>(); final Archive archive = new FilteredArchive(new ConfigurableClasspathArchive(module.getClassLoader(), Arrays.asList(url)), new ScanXmlSaverFilter(scanXmlExists, handler, classes)); map.put(url, classes); archives.add(archive); } archive = new CompositeArchive(archives); }
public void load() { final AnnotationFinder finder = new AnnotationFinder(new CompositeArchive(thisArchive(), cpArchive())).enableFindSubclasses(); for (final Annotated<Class<?>> clazz : finder.findMetaAnnotatedClasses(Editor.class)) { PropertyEditorManager.registerEditor(clazz.getAnnotation(Editor.class).value(), clazz.get()); } } }
archive = new CompositeArchive(doScan(module.getClassLoader(), urls, filter));
return new CompositeArchive(archives);
return new CompositeArchive(classesArchive, packageArchive); } else if (packageArchive != null) { return packageArchive;
public static Archive archive(final Module module, final URL location, final boolean forceDescriptor) { final ClassLoader loader = module.getClassLoader(); final String name = "META-INF/" + name(); try { final URL scanXml = new URLClassLoader(new URL[]{location}, new EmptyResourcesClassLoader()).getResource(name); if (scanXml == null && !forceDescriptor) { return ClasspathArchive.archive(loader, location); } else if (scanXml == null) { return new ClassesArchive(); } // read descriptors final ScanUtil.ScanHandler scan = ScanUtil.read(scanXml); final Archive packageArchive = packageArchive(scan.getPackages(), loader, location); final Archive classesArchive = classesArchive(scan.getPackages(), scan.getClasses(), loader); if (packageArchive != null && classesArchive != null) { return new CompositeArchive(classesArchive, packageArchive); } else if (packageArchive != null) { return packageArchive; } return classesArchive; } catch (final IOException e) { if (forceDescriptor) { return new ClassesArchive(); } return ClasspathArchive.archive(loader, location); } }
final CompositeArchive archive = new CompositeArchive(archives); final Archive finalArchive = classes.excludes().length > 0 ? new FilteredArchive(archive, Filters.invert(Filters.prefixes(classes.excludes()))) : archive; ejbModule.setFinder(new FinderFactory.OpenEJBAnnotationFinder(finalArchive).link());