class CoreExtensionEntry {
    private final ClassRealm realm;

    private final Set<String> artifacts;

    private final Set<String> packages;

    private final String key;

    private final XmlNode configuration;

    public CoreExtensionEntry(
            ClassRealm realm,
            Collection<String> artifacts,
            Collection<String> packages,
            String key,
            XmlNode configuration) {
        this.realm = realm;
        this.artifacts = Collections.unmodifiableSet(new HashSet<>(artifacts));
        this.packages = Collections.unmodifiableSet(new HashSet<>(packages));
        this.key = key;
        this.configuration = configuration;
    }

    /**
     * Returns ClassLoader used to load extension classes.
     */
    public ClassRealm getClassRealm() {
        return realm;
    }

    /**
     * Returns artifacts exported by the extension, identified by groupId:artifactId string key.
     */
    public Set<String> getExportedArtifacts() {
        return artifacts;
    }

    /**
     * Returns classpath elements exported by the extension.
     */
    public Set<String> getExportedPackages() {
        return packages;
    }

    /**
     * The key that can must used to identify the configuration using the
     * {@link javax.inject.Named} annotation.
     */
    public String getKey() {
        return key;
    }

    /**
     * Returns the configuration for this extension.
     */
    public XmlNode getConfiguration() {
        return configuration;
    }

    private static final ExtensionDescriptorBuilder BUILDER = new ExtensionDescriptorBuilder();

    public static CoreExtensionEntry discoverFrom(ClassRealm loader) {<FILL_FUNCTION_BODY>}

    public static CoreExtensionEntry discoverFrom(
            ClassRealm loader, Collection<File> classpath, String key, XmlNode configuration) {
        Set<String> artifacts = new LinkedHashSet<>();
        Set<String> packages = new LinkedHashSet<>();

        try {
            for (File entry : classpath) {
                ExtensionDescriptor descriptor = BUILDER.build(entry);
                if (descriptor != null) {
                    artifacts.addAll(descriptor.getExportedArtifacts());
                    packages.addAll(descriptor.getExportedPackages());
                }
            }
        } catch (IOException ignored) {
            // exports descriptors are entirely optional
        }

        return new CoreExtensionEntry(loader, artifacts, packages, key, configuration);
    }
}

        Set<String> artifacts = new LinkedHashSet<>();
        Set<String> packages = new LinkedHashSet<>();

        try {
            Enumeration<URL> urls = loader.getResources(BUILDER.getExtensionDescriptorLocation());
            while (urls.hasMoreElements()) {

                try (InputStream is = urls.nextElement().openStream()) {
                    ExtensionDescriptor descriptor = BUILDER.build(is);
                    artifacts.addAll(descriptor.getExportedArtifacts());
                    packages.addAll(descriptor.getExportedPackages());
                }
            }
        } catch (IOException ignored) {
            // exports descriptors are entirely optional
        }

        return new CoreExtensionEntry(loader, artifacts, packages, null, null);
    
<no_super_class>