in winegrower-core/src/main/java/org/apache/winegrower/scanner/manifest/RequirementManifestContributor.java [76:113]
private Stream<String> findRequirements(final Class<?> aClass, final WinegrowerAnnotationFinder finder) {
try (final InputStream bytecode = finder.getArchive().getBytecode(aClass.getName())) {
final Collection<String> requirements = new ArrayList<>();
final ClassReader reader = new ClassReader(bytecode);
reader.accept(new EmptyVisitor() {
@Override
public AnnotationVisitor visitAnnotation(String desc, boolean visible) {
switch (desc) {
case "Lorg/osgi/annotation/bundle/Requirement;":
return new RequirementAnnotationVisitor(requirements);
case "Lorg/osgi/annotation/bundle/Requirements;":
return new AnnotationVisitor(ASM9) {
@Override
public AnnotationVisitor visitAnnotation(final String name, final String descriptor) {
if ("Lorg/osgi/annotation/bundle/Requirement;".equals(descriptor)) {
return new RequirementAnnotationVisitor(requirements);
}
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 requirements.stream();
} catch (final IOException | ClassNotFoundException e) {
throw new IllegalArgumentException(e);
}
}