comparison src/share/vm/oops/instanceKlass.hpp @ 17889:386dd1c71858

8033150: invokestatic: IncompatibleClassChangeError trying to invoke static method from a parent in presence of conflicting defaults. Summary: A static method should be preferred during method resolution over an overpass, search the current class as well as its superclasses. Reviewed-by: acorn, coleenp, kamg
author lfoltan
date Mon, 14 Apr 2014 14:27:45 -0400
parents 9428a0b94204
children 52b4284cb496 2c6ef90f030a 9906d432d6db
comparison
equal deleted inserted replaced
17887:cd3c534f8f4a 17889:386dd1c71858
516 Method* find_method(Symbol* name, Symbol* signature) const; 516 Method* find_method(Symbol* name, Symbol* signature) const;
517 static Method* find_method(Array<Method*>* methods, Symbol* name, Symbol* signature); 517 static Method* find_method(Array<Method*>* methods, Symbol* name, Symbol* signature);
518 static Method* find_instance_method(Array<Method*>* methods, Symbol* name, Symbol* signature); 518 static Method* find_instance_method(Array<Method*>* methods, Symbol* name, Symbol* signature);
519 519
520 // find a local method index in default_methods (returns -1 if not found) 520 // find a local method index in default_methods (returns -1 if not found)
521 static int find_method_index(Array<Method*>* methods, Symbol* name, Symbol* signature); 521 static int find_method_index(Array<Method*>* methods, Symbol* name, Symbol* signature, bool skipping_overpass);
522 522
523 // lookup operation (returns NULL if not found) 523 // lookup operation (returns NULL if not found)
524 Method* uncached_lookup_method(Symbol* name, Symbol* signature) const; 524 Method* uncached_lookup_method(Symbol* name, Symbol* signature, MethodLookupMode mode) const;
525 525
526 // lookup a method in all the interfaces that this class implements 526 // lookup a method in all the interfaces that this class implements
527 // (returns NULL if not found) 527 // (returns NULL if not found)
528 Method* lookup_method_in_all_interfaces(Symbol* name, Symbol* signature, bool skip_default_methods) const; 528 Method* lookup_method_in_all_interfaces(Symbol* name, Symbol* signature, MethodLookupMode mode) const;
529 529
530 // lookup a method in local defaults then in all interfaces 530 // lookup a method in local defaults then in all interfaces
531 // (returns NULL if not found) 531 // (returns NULL if not found)
532 Method* lookup_method_in_ordered_interfaces(Symbol* name, Symbol* signature) const; 532 Method* lookup_method_in_ordered_interfaces(Symbol* name, Symbol* signature) const;
533 533
1045 // Returns the array class for the n'th dimension 1045 // Returns the array class for the n'th dimension
1046 Klass* array_klass_impl(bool or_null, int n, TRAPS); 1046 Klass* array_klass_impl(bool or_null, int n, TRAPS);
1047 1047
1048 // Returns the array class with this class as element type 1048 // Returns the array class with this class as element type
1049 Klass* array_klass_impl(bool or_null, TRAPS); 1049 Klass* array_klass_impl(bool or_null, TRAPS);
1050
1051 // find a local method (returns NULL if not found)
1052 Method* find_method_impl(Symbol* name, Symbol* signature, bool skipping_overpass) const;
1053 static Method* find_method_impl(Array<Method*>* methods, Symbol* name, Symbol* signature, bool skipping_overpass);
1050 1054
1051 // Free CHeap allocated fields. 1055 // Free CHeap allocated fields.
1052 void release_C_heap_structures(); 1056 void release_C_heap_structures();
1053 public: 1057 public:
1054 // CDS support - remove and restore oops from metadata. Oops are not shared. 1058 // CDS support - remove and restore oops from metadata. Oops are not shared.