class SisuDiBridgeModule extends AbstractModule {

    @Override
    protected void configure() {<FILL_FUNCTION_BODY>}
}

        Provider<PlexusContainer> containerProvider = getProvider(PlexusContainer.class);

        Injector injector = new InjectorImpl() {
            @Override
            public <Q> Supplier<Q> getCompiledBinding(Key<Q> key) {
                Set<Binding<Q>> res = getBindings(key);
                if (res != null && !res.isEmpty()) {
                    List<Binding<Q>> bindingList = new ArrayList<>(res);
                    Comparator<Binding<Q>> comparing = Comparator.comparing(Binding::getPriority);
                    bindingList.sort(comparing.reversed());
                    Binding<Q> binding = bindingList.get(0);
                    return compile(binding);
                }
                if (key.getRawType() == List.class) {
                    Set<Binding<Object>> res2 = getBindings(key.getTypeParameter(0));
                    Set<Binding<Object>> res3 = res2 != null ? new HashSet<>(res2) : new HashSet<>();
                    try {
                        List<Object> l = containerProvider
                                .get()
                                .lookupList(key.getTypeParameter(0).getRawType());
                        l.forEach(o -> res3.add(new Binding.BindingToInstance<>(o)));
                    } catch (Throwable e) {
                        // ignore
                        e.printStackTrace();
                    }
                    List<Supplier<Object>> list =
                            res3.stream().map(this::compile).collect(Collectors.toList());
                    //noinspection unchecked
                    return () -> (Q) list(list);
                }
                if (key.getRawType() == Map.class) {
                    Key<?> k = key.getTypeParameter(0);
                    Key<Object> v = key.getTypeParameter(1);
                    if (k.getRawType() == String.class) {
                        Set<Binding<Object>> res2 = getBindings(v);
                        Set<Binding<Object>> res3 = res2 != null ? new HashSet<>(res2) : new HashSet<>();
                        Map<String, Supplier<Object>> map = res3.stream()
                                .filter(b -> b.getOriginalKey() == null
                                        || b.getOriginalKey().getQualifier() == null
                                        || b.getOriginalKey().getQualifier() instanceof String)
                                .collect(Collectors.toMap(
                                        b -> (String)
                                                (b.getOriginalKey() != null
                                                        ? b.getOriginalKey().getQualifier()
                                                        : null),
                                        this::compile));
                        //noinspection unchecked
                        return () -> (Q) map(map);
                    }
                }
                try {
                    Q t = containerProvider.get().lookup(key.getRawType());
                    return compile(new Binding.BindingToInstance<>(t));
                } catch (Throwable e) {
                    // ignore
                    e.printStackTrace();
                }
                throw new DIException("No binding to construct an instance for key "
                        + key.getDisplayString() + ".  Existing bindings:\n"
                        + getBoundKeys().stream()
                                .map(Key::toString)
                                .map(String::trim)
                                .sorted()
                                .distinct()
                                .collect(Collectors.joining("\n - ", " - ", "")));
            }
        };
        injector.bindInstance(Injector.class, injector);
        bind(Injector.class).toInstance(injector);
        ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
        if (classLoader == null) {
            classLoader = getClass().getClassLoader();
        }
        try {
            for (Iterator<URL> it = classLoader
                            .getResources("META-INF/maven/org.apache.maven.api.di.Inject")
                            .asIterator();
                    it.hasNext(); ) {
                URL url = it.next();
                try (InputStream is = url.openStream()) {
                    String[] lines = new String(is.readAllBytes()).split("\n");
                    for (String className : lines) {
                        try {
                            Class<?> clazz = classLoader.loadClass(className);
                            injector.bindImplicit(clazz);
                            Class<Object> itf = (Class)
                                    (clazz.isInterface()
                                            ? clazz
                                            : clazz.getInterfaces().length > 0 ? clazz.getInterfaces()[0] : null);
                            if (itf != null) {
                                bind(itf).toProvider(() -> injector.getInstance(clazz));
                            }
                        } catch (ClassNotFoundException e) {
                            // ignore
                            e.printStackTrace();
                        }
                    }
                }
            }

        } catch (IOException e) {
            throw new MavenException(e);
        }
        Stream.of(
                        LanguageProvider.class,
                        LifecycleProvider.class,
                        PackagingProvider.class,
                        DefaultArtifactCoordinateFactory.class,
                        DefaultArtifactDeployer.class,
                        DefaultArtifactFactory.class,
                        DefaultArtifactInstaller.class,
                        DefaultArtifactResolver.class,
                        DefaultChecksumAlgorithmService.class,
                        DefaultDependencyCollector.class,
                        DefaultDependencyCoordinateFactory.class,
                        DefaultLocalRepositoryManager.class,
                        DefaultMessageBuilderFactory.class,
                        DefaultModelXmlFactory.class,
                        DefaultRepositoryFactory.class,
                        DefaultSettingsBuilder.class,
                        DefaultSettingsXmlFactory.class,
                        DefaultToolchainsBuilder.class,
                        DefaultToolchainsXmlFactory.class,
                        DefaultTransportProvider.class,
                        DefaultVersionParser.class,
                        DefaultVersionRangeResolver.class,
                        DefaultVersionResolver.class,
                        DefaultVersionSchemeProvider.class,
                        VersionScheme.class,
                        DefaultModelVersionParser.class,
                        DefaultRepositorySystemSessionFactory.class,
                        LegacyRepositorySystemSessionExtender.class,
                        ExtensibleEnumRegistries.DefaultLanguageRegistry.class,
                        ExtensibleEnumRegistries.DefaultPathScopeRegistry.class,
                        ExtensibleEnumRegistries.DefaultProjectScopeRegistry.class,
                        DefaultModelBuilder.class,
                        DefaultModelProcessor.class,
                        ModelParser.class,
                        DefaultModelValidator.class,
                        DefaultModelVersionProcessor.class,
                        DefaultModelNormalizer.class,
                        DefaultModelInterpolator.class,
                        DefaultPathTranslator.class,
                        DefaultUrlNormalizer.class,
                        DefaultRootLocator.class,
                        DefaultModelPathTranslator.class,
                        DefaultModelUrlNormalizer.class,
                        DefaultSuperPomProvider.class,
                        DefaultInheritanceAssembler.class,
                        DefaultProfileSelector.class,
                        ProfileActivator.class,
                        DefaultProfileInjector.class,
                        DefaultPluginManagementInjector.class,
                        DefaultDependencyManagementInjector.class,
                        DefaultDependencyManagementImporter.class,
                        DefaultLifecycleBindingsInjector.class,
                        DefaultPluginConfigurationExpander.class,
                        ProfileActivationFilePathInterpolator.class,
                        BuildModelTransformer.class,
                        DefaultArtifactDescriptorReader.class,
                        DistributionManagementArtifactRelocationSource.class,
                        UserPropertiesArtifactRelocationSource.class,
                        FileProfileActivator.class,
                        JdkVersionProfileActivator.class,
                        OperatingSystemProfileActivator.class,
                        PackagingProfileActivator.class,
                        PropertyProfileActivator.class)
                .forEach((Class<?> clazz) -> {
                    injector.bindImplicit(clazz);
                    Class<Object> itf = (Class)
                            (clazz.isInterface()
                                    ? null
                                    : clazz.getInterfaces().length > 0 ? clazz.getInterfaces()[0] : null);
                    if (itf != null) {
                        bind(itf).toProvider(() -> injector.getInstance(clazz));
                    }
                });
    
<no_super_class>