private Stream extractAriesCdiExtensions()

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);
        }
    }