Skip to content

Commit

Permalink
Traverse parent DexClassLoaders for native libraries in DelegateClass…
Browse files Browse the repository at this point in the history
…Loader

Fixes bazelbuild#13661 by traversing the class loaders looking for native libraries.

Closes bazelbuild#14965.

PiperOrigin-RevId: 447733120
Tagakov authored and copybara-github committed May 10, 2022
1 parent 001bbdc commit f5ed7d0
Showing 1 changed file with 19 additions and 0 deletions.
Original file line number Diff line number Diff line change
@@ -43,6 +43,11 @@ public Class<?> findClass(String className) throws ClassNotFoundException {
return delegateClassLoader.findClass(className);
}

@Override
public String findLibrary(String name) {
return delegateClassLoader.findLibrary(name);
}

/**
* A class loader whose only purpose is to make {@code findClass()} public.
*/
@@ -56,6 +61,20 @@ private DelegateClassLoader(
public Class<?> findClass(String name) throws ClassNotFoundException {
return super.findClass(name);
}

@Override
public String findLibrary(String name) {
String foundLib = super.findLibrary(name);

for (ClassLoader parent = getParent();
foundLib == null && parent != null;
parent = parent.getParent()) {
if (parent instanceof BaseDexClassLoader) {
foundLib = ((BaseDexClassLoader) parent).findLibrary(name);
}
}
return foundLib;
}
}

private static DelegateClassLoader createDelegateClassLoader(

0 comments on commit f5ed7d0

Please sign in to comment.