in winegrower-core/src/main/java/org/apache/winegrower/scanner/manifest/OSGiCDIManifestContributor.java [111:162]
private Stream<String> extractAriesCdiExtensions(final Class<?> aClass, final WinegrowerAnnotationFinder finder) {
try (final InputStream bytecode = finder.getArchive().getBytecode(aClass.getName())) {
final Collection<String> extensions = new ArrayList<>();
final ClassReader reader = new ClassReader(bytecode);
reader.accept(new EmptyVisitor() {
@Override
public AnnotationVisitor visitAnnotation(String desc, boolean visible) {
switch (desc) {
case "Lorg/apache/aries/cdi/extra/RequireCDIExtension;":
return new AnnotationVisitor(ASM9) {
@Override
public void visit(final String name, final Object value) {
if ("value".equals(name)) {
extensions.add(String.valueOf(value));
}
}
};
case "Lorg/apache/aries/cdi/extra/RequireCDIExtensions;":
return new AnnotationVisitor(ASM9) {
@Override
public AnnotationVisitor visitAnnotation(final String name, final String descriptor) {
if ("Lorg/apache/aries/cdi/extra/RequireCDIExtension;".equals(descriptor)) {
return new AnnotationVisitor(ASM9) {
@Override
public void visit(final String name, final Object value) {
if ("value".equals(name)) {
extensions.add(String.valueOf(value));
}
}
};
}
return super.visitAnnotation(desc, descriptor);
}
@Override
public AnnotationVisitor visitArray(final String name) {
if ("value".equals(name)) {
return this;
}
return super.visitArray(name);
}
};
default:
return super.visitAnnotation(desc, visible);
}
}
}, SKIP_FRAMES | SKIP_CODE | SKIP_DEBUG);
return extensions.stream();
} catch (final IOException | ClassNotFoundException e) {
throw new IllegalArgumentException(e);
}
}