hotspot/src/share/vm/classfile/defaultMethods.cpp
changeset 21516 8fa5308ab970
parent 20710 550442bd8ffc
child 21556 e75cd34a59e0
--- a/hotspot/src/share/vm/classfile/defaultMethods.cpp	Mon Oct 28 21:41:48 2013 +0400
+++ b/hotspot/src/share/vm/classfile/defaultMethods.cpp	Wed Oct 30 09:11:04 2013 -0700
@@ -392,10 +392,16 @@
     }
 
     GrowableArray<Method*> qualified_methods;
+    int num_defaults = 0;
+    int default_index = -1;
     for (int i = 0; i < _members.length(); ++i) {
       Pair<Method*,QualifiedState> entry = _members.at(i);
       if (entry.second == QUALIFIED) {
         qualified_methods.append(entry.first);
+        default_index++;
+        if (entry.first->is_default_method()) {
+          num_defaults++;
+        }
       }
     }
 
@@ -408,6 +414,9 @@
       if (!method->is_abstract()) {
         _selected_target = qualified_methods.at(0);
       }
+      // If only one qualified method is default, select that
+    } else if (num_defaults == 1) {
+        _selected_target = qualified_methods.at(default_index);
     } else {
       _exception_message = generate_conflicts_message(&qualified_methods,CHECK);
       _exception_name = vmSymbols::java_lang_IncompatibleClassChangeError();