Mon, 16 Sep 2013 15:24:11 -0700
Merge
1.1 --- a/src/share/vm/classfile/defaultMethods.cpp Mon Sep 16 12:43:34 2013 -0700 1.2 +++ b/src/share/vm/classfile/defaultMethods.cpp Mon Sep 16 15:24:11 2013 -0700 1.3 @@ -450,6 +450,10 @@ 1.4 streamIndentor si(str, indent * 2); 1.5 str->indent().print("Selected method: "); 1.6 print_method(str, _selected_target); 1.7 + Klass* method_holder = _selected_target->method_holder(); 1.8 + if (!method_holder->is_interface()) { 1.9 + tty->print(" : in superclass"); 1.10 + } 1.11 str->print_cr(""); 1.12 } 1.13 1.14 @@ -1141,19 +1145,23 @@ 1.15 #endif // ndef PRODUCT 1.16 if (method->has_target()) { 1.17 Method* selected = method->get_selected_target(); 1.18 - max_stack = assemble_redirect( 1.19 + if (selected->method_holder()->is_interface()) { 1.20 + max_stack = assemble_redirect( 1.21 &bpool, &buffer, slot->signature(), selected, CHECK); 1.22 + } 1.23 } else if (method->throws_exception()) { 1.24 max_stack = assemble_abstract_method_error( 1.25 &bpool, &buffer, method->get_exception_message(), CHECK); 1.26 } 1.27 - AccessFlags flags = accessFlags_from( 1.28 + if (max_stack != 0) { 1.29 + AccessFlags flags = accessFlags_from( 1.30 JVM_ACC_PUBLIC | JVM_ACC_SYNTHETIC | JVM_ACC_BRIDGE); 1.31 - Method* m = new_method(&bpool, &buffer, slot->name(), slot->signature(), 1.32 + Method* m = new_method(&bpool, &buffer, slot->name(), slot->signature(), 1.33 flags, max_stack, slot->size_of_parameters(), 1.34 ConstMethod::OVERPASS, CHECK); 1.35 - if (m != NULL) { 1.36 - overpasses.push(m); 1.37 + if (m != NULL) { 1.38 + overpasses.push(m); 1.39 + } 1.40 } 1.41 } 1.42 }