public abstract class NClassLoaderBase extends URLClassLoader
DefaultNMutableClassLoader and
legacy DefaultImmutableNClassLoader.
Internally behaves as a mutable composite of NClassLoader children
(typically VM-shared DefaultNLeafClassLoader instances obtained
via NIdClassLoaderRegistry). The class still extends
URLClassLoader for backwards compatibility (so callers that cast
to URLClassLoader and collect getURLs() still work); however,
URLs are never actually added to the underlying URLClassLoader — they
are owned by the children. getURLs() is overridden to aggregate
from children.
| Modifier and Type | Field and Description |
|---|---|
protected List<NClasspathEntry> |
baseEntries |
protected List<NClassLoader> |
children
Ordered list of child classloaders used for delegation.
|
protected NDependencyFilter |
dependencyFilter |
protected Map<String,NDefinition> |
lastDefinitions |
protected List<NClasspathEntry> |
lastResolved |
protected Map<String,NVersion> |
loadedShortNameVersions
Tracks which (shortName → version) have already been loaded in this
mutable composite.
|
protected List<NClasspathEntry> |
pendingEntries |
protected NRepositoryFilter |
repositoryFilter |
| Modifier | Constructor and Description |
|---|---|
protected |
NClassLoaderBase(String name,
ClassLoader parent,
NClasspathEntry[] entries,
NRepositoryFilter repositoryFilter,
NDependencyFilter dependencyFilter) |
| Modifier and Type | Method and Description |
|---|---|
NDefinition[] |
add(NClasspathEntry... entries) |
NDefinition[] |
add(NDefinition... defs) |
NDefinition[] |
add(NDependency... defs) |
NDefinition[] |
add(NId... defs) |
boolean |
add0(NClasspathEntry entry) |
boolean |
add0(NDefinition definition) |
boolean |
add0(NDependency id) |
boolean |
add0(NId id) |
protected void |
addPath0(NPath path) |
void |
addURL(URL url) |
ClassLoader |
asClassLoader() |
List<NClasspathEntry> |
baseEntries() |
NDefinition[] |
build() |
protected NDefinition[] |
buildInternal()
Resolve pending entries via
NClasspathBuilder, create or
retrieve shared leaves via NIdClassLoaderRegistry, and add
them to this mutable composite's children list. |
boolean |
contains(NId node) |
protected Package |
definePackage(String name,
Manifest man,
URL url) |
boolean |
equals(Object o) |
URL |
findResource(String name) |
Enumeration<URL> |
findResources(String name) |
String |
getName() |
URL |
getResource(String name) |
InputStream |
getResourceAsStream(String name) |
Enumeration<URL> |
getResources(String name) |
URL[] |
getURLs() |
int |
hashCode() |
boolean |
isShortNameVersionAllowed(NId candidateId) |
Class<?> |
loadClass(String name) |
protected Class<?> |
loadClass(String name,
boolean resolve) |
Class<?> |
loadClassFromChildren(ClassLoader requester,
String name) |
List<NDefinition> |
loadedDefinitions() |
List<URL> |
loadResourcesFromChildren(ClassLoader requester,
String name) |
String |
name() |
NDefinition[] |
rebuild(NDefinition[] desired)
Atomically rebuild the mutable composite so only the desired set of
NDefinitions (and their resolved entries) remain in the delegation
list.
|
void |
remove(NId id)
Remove all children that correspond to the given NId from the
delegation list.
|
NOptional<NId> |
search(NId id) |
static NOptional<NId> |
search(NId id,
ClassLoader classLoader,
boolean delegateSearch) |
String |
toString() |
close, findClass, getPermissions, newInstance, newInstancedefineClass, defineClassclearAssertionStatus, defineClass, defineClass, defineClass, defineClass, definePackage, findLibrary, findLoadedClass, findSystemClass, getClassLoadingLock, getPackage, getPackages, getParent, getSystemClassLoader, getSystemResource, getSystemResourceAsStream, getSystemResources, registerAsParallelCapable, resolveClass, setClassAssertionStatus, setDefaultAssertionStatus, setPackageAssertionStatus, setSignersprotected final List<NClasspathEntry> baseEntries
protected final List<NClasspathEntry> pendingEntries
protected final List<NClasspathEntry> lastResolved
protected final Map<String,NDefinition> lastDefinitions
protected NRepositoryFilter repositoryFilter
protected NDependencyFilter dependencyFilter
protected final List<NClassLoader> children
build() from pendingEntries using the registry.protected final Map<String,NVersion> loadedShortNameVersions
protected NClassLoaderBase(String name, ClassLoader parent, NClasspathEntry[] entries, NRepositoryFilter repositoryFilter, NDependencyFilter dependencyFilter)
public List<NClasspathEntry> baseEntries()
public List<NDefinition> loadedDefinitions()
public boolean contains(NId node)
public static NOptional<NId> search(NId id, ClassLoader classLoader, boolean delegateSearch)
public ClassLoader asClassLoader()
public String name()
public String getName()
public NDefinition[] add(NDefinition... defs)
public NDefinition[] add(NDependency... defs)
public NDefinition[] add(NId... defs)
public NDefinition[] add(NClasspathEntry... entries)
public boolean add0(NClasspathEntry entry)
public boolean add0(NDefinition definition)
public boolean add0(NId id)
public boolean add0(NDependency id)
public void addURL(URL url)
addURL in class URLClassLoaderprotected void addPath0(NPath path)
public InputStream getResourceAsStream(String name)
getResourceAsStream in class URLClassLoaderpublic URL[] getURLs()
getURLs in class URLClassLoaderprotected Package definePackage(String name, Manifest man, URL url)
definePackage in class URLClassLoaderpublic URL findResource(String name)
findResource in class URLClassLoaderpublic Enumeration<URL> findResources(String name) throws IOException
findResources in class URLClassLoaderIOExceptionprotected Class<?> loadClass(String name, boolean resolve) throws ClassNotFoundException
loadClass in class ClassLoaderClassNotFoundExceptionpublic Class<?> loadClassFromChildren(ClassLoader requester, String name) throws ClassNotFoundException
ClassNotFoundExceptionpublic Class<?> loadClass(String name) throws ClassNotFoundException
loadClass in class ClassLoaderClassNotFoundExceptionpublic URL getResource(String name)
getResource in class ClassLoaderpublic Enumeration<URL> getResources(String name) throws IOException
getResources in class ClassLoaderIOExceptionpublic List<URL> loadResourcesFromChildren(ClassLoader requester, String name) throws IOException
IOExceptionpublic boolean isShortNameVersionAllowed(NId candidateId)
public void remove(NId id)
public NDefinition[] rebuild(NDefinition[] desired)
public NDefinition[] build()
protected final NDefinition[] buildInternal()
NClasspathBuilder, create or
retrieve shared leaves via NIdClassLoaderRegistry, and add
them to this mutable composite's children list.
Version conflicts (same shortName, different version already loaded in this composite) are resolved by keeping the first-loaded version and logging a warning for subsequent different versions.
This method is final to ensure subclass constructors (e.g.
DefaultImmutableNClassLoader) always execute the real resolution at
construction time, even if the subclass overrides the public
build() to freeze mutability post-construction.
Copyright © 2026 vpc open source initiative. All rights reserved.