8302791: Add specific ClassLoader object to Proxy IllegalArgumentException message

Reviewed-by: alanb, mchung
This commit is contained in:
Ravali Yatham 2023-03-07 22:31:50 +00:00 committed by Mandy Chung
parent b5b5cba7fe
commit 9f9d678591
4 changed files with 15 additions and 1 deletions
src/java.base/share/classes

@ -407,6 +407,11 @@ public abstract class ClassLoader {
return nid;
}
// Returns nameAndId string for exception message printing
String nameAndId() {
return nameAndId;
}
/**
* Creates a new class loader of the specified name and using the
* specified parent class loader for delegation.

@ -2663,6 +2663,10 @@ public final class System {
Continuation continuation) {
return StackWalker.newInstance(options, null, contScope, continuation);
}
public String getLoaderNameID(ClassLoader loader) {
return loader.nameAndId();
}
});
}
}

@ -878,7 +878,7 @@ public class Proxy implements java.io.Serializable {
}
if (type != c) {
throw new IllegalArgumentException(c.getName() +
" referenced from a method is not visible from class loader");
" referenced from a method is not visible from class loader: " + JLA.getLoaderNameID(ld));
}
}

@ -564,4 +564,9 @@ public interface JavaLangAccess {
StackWalker newStackWalkerInstance(Set<StackWalker.Option> options,
ContinuationScope contScope,
Continuation continuation);
/**
* Returns '<loader-name>' @<id> if classloader has a name
* explicitly set otherwise <qualified-class-name> @<id>
*/
String getLoaderNameID(ClassLoader loader);
}