src/share/vm/classfile/defaultMethods.cpp
Index
Unified diffs
Context diffs
Sdiffs
Wdiffs
Patch
New
Old
Previous File
Next File
hotspot-rt Cdiff src/share/vm/classfile/defaultMethods.cpp
src/share/vm/classfile/defaultMethods.cpp
Print this page
*** 719,737 ****
--- 719,762 ----
ContextMark* cm = new ContextMark(_ctx->mark());
scope->add_mark(cm); // will restore context when scope is freed
_ctx->apply_type_arguments(sub, klass, THREAD);
+ // apply_type_arguments may result in a ClassCirculatoryError
+ // exception while constructing a ClassDescriptor for klass. In
+ // such a situation, it indicates that _method_name can not be
+ // found in the hierarchy currently being traversed. Clear the
+ // exception and return to continue.
+ if (HAS_PENDING_EXCEPTION) {
+ if (PENDING_EXCEPTION->klass()->name() == vmSymbols::java_lang_ClassCircularityError()) {
+ CLEAR_PENDING_EXCEPTION;
+ return true;
+ }
+ }
+
int start, end = 0;
start = klass->find_method_by_name(_method_name, &end);
if (start != -1) {
for (int i = start; i < end; ++i) {
Method* m = klass->methods()->at(i);
// This gets the method's parameter list with its generic type
// parameters resolved
generic::MethodDescriptor* md = _cache->descriptor_for(m, THREAD);
+ // Attempt to get the class descriptor of the method may
+ // result in a ClassCirculatoryError exception while
+ // constructing a ClassDescriptor for the holder of m. In such
+ // a situation, it indicates that m can not be found in the
+ // hierarchy currently being traversed and md is NULL. Clear
+ // the exception and return to continue.
+
+ if (HAS_PENDING_EXCEPTION) {
+ if (PENDING_EXCEPTION->klass()->name() == vmSymbols::java_lang_ClassCircularityError()) {
+ CLEAR_PENDING_EXCEPTION;
+ return true;
+ }
+ }
// Find all methods on this hierarchy that match this method
// (name, signature). This class collects other families of this
// method name.
StatefulMethodFamily* family =
_families.find_matching_or_create(md, _ctx);
src/share/vm/classfile/defaultMethods.cpp
Index
Unified diffs
Context diffs
Sdiffs
Wdiffs
Patch
New
Old
Previous File
Next File