Delegate bootstrap resource loading for unloaded types
This commit is contained in:
parent
f8f45d7f14
commit
27cade057c
|
@ -102,6 +102,11 @@ public class Reference {
|
|||
return merged;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return "Reference<" + className + ">";
|
||||
}
|
||||
|
||||
public static class Source {
|
||||
private final String name;
|
||||
private final int line;
|
||||
|
@ -193,16 +198,25 @@ public class Reference {
|
|||
/** Fallback mismatch in case an unexpected exception occurs during reference checking. */
|
||||
public static class ReferenceCheckError extends Mismatch {
|
||||
private final Exception referenceCheckExcetpion;
|
||||
private final Reference referenceBeingChecked;
|
||||
private final ClassLoader classLoaderBeingChecked;
|
||||
|
||||
public ReferenceCheckError(Exception e) {
|
||||
public ReferenceCheckError(
|
||||
Exception e, Reference referenceBeingChecked, ClassLoader classLoaderBeingChecked) {
|
||||
super(new Source[0]);
|
||||
this.referenceCheckExcetpion = e;
|
||||
this.referenceBeingChecked = referenceBeingChecked;
|
||||
this.classLoaderBeingChecked = classLoaderBeingChecked;
|
||||
}
|
||||
|
||||
@Override
|
||||
String getMismatchDetails() {
|
||||
final StringWriter sw = new StringWriter();
|
||||
sw.write("Failed to generate reference check: ");
|
||||
sw.write("Failed to generate reference check for: ");
|
||||
sw.write(referenceBeingChecked.toString());
|
||||
sw.write(" on classloader ");
|
||||
sw.write(classLoaderBeingChecked.toString());
|
||||
sw.write("\n");
|
||||
// add exception message and stack trace
|
||||
final PrintWriter pw = new PrintWriter(sw);
|
||||
referenceCheckExcetpion.printStackTrace(pw);
|
||||
|
|
|
@ -101,7 +101,7 @@ public class ReferenceMatcher {
|
|||
}
|
||||
} catch (Exception e) {
|
||||
// Shouldn't happen. Fail the reference check and add a mismatch for debug logging.
|
||||
mismatches.add(new Mismatch.ReferenceCheckError(e));
|
||||
mismatches.add(new Mismatch.ReferenceCheckError(e, reference, loader));
|
||||
}
|
||||
return mismatches;
|
||||
}
|
||||
|
@ -134,6 +134,12 @@ public class ReferenceMatcher {
|
|||
private final List<Field> fields = new ArrayList<>();
|
||||
|
||||
public static UnloadedType of(String className, ClassLoader classLoader) throws Exception {
|
||||
if (classLoader != Utils.getBootstrapProxy()) {
|
||||
// getResource delegation won't see our bootstrap classes so do the delegation here.
|
||||
if (Utils.getBootstrapProxy().getResource(Utils.getResourceName(className)) != null) {
|
||||
return of(className, Utils.getBootstrapProxy());
|
||||
}
|
||||
}
|
||||
className = Utils.getInternalName(className);
|
||||
Map<String, UnloadedType> classLoaderCache = typeCache.get(classLoader);
|
||||
if (classLoaderCache == null) {
|
||||
|
|
Loading…
Reference in New Issue