comparison src/share/vm/oops/klass.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 85318d1fe8fe
children 52b4284cb496 54bc75c144b0 ce8f6bb717c9
comparison
equal deleted inserted replaced
17887:cd3c534f8f4a 17889:386dd1c71858
180 Klass(); 180 Klass();
181 181
182 void* operator new(size_t size, ClassLoaderData* loader_data, size_t word_size, TRAPS) throw(); 182 void* operator new(size_t size, ClassLoaderData* loader_data, size_t word_size, TRAPS) throw();
183 183
184 public: 184 public:
185 enum MethodLookupMode { normal, skip_overpass, skip_defaults };
186
185 bool is_klass() const volatile { return true; } 187 bool is_klass() const volatile { return true; }
186 188
187 // super 189 // super
188 Klass* super() const { return _super; } 190 Klass* super() const { return _super; }
189 void set_super(Klass* k) { _super = k; } 191 void set_super(Klass* k) { _super = k; }
419 virtual bool should_be_initialized() const { return false; } 421 virtual bool should_be_initialized() const { return false; }
420 // initializes the klass 422 // initializes the klass
421 virtual void initialize(TRAPS); 423 virtual void initialize(TRAPS);
422 // lookup operation for MethodLookupCache 424 // lookup operation for MethodLookupCache
423 friend class MethodLookupCache; 425 friend class MethodLookupCache;
424 virtual Method* uncached_lookup_method(Symbol* name, Symbol* signature) const; 426 virtual Method* uncached_lookup_method(Symbol* name, Symbol* signature, MethodLookupMode mode) const;
425 public: 427 public:
426 Method* lookup_method(Symbol* name, Symbol* signature) const { 428 Method* lookup_method(Symbol* name, Symbol* signature) const {
427 return uncached_lookup_method(name, signature); 429 return uncached_lookup_method(name, signature, normal);
428 } 430 }
429 431
430 // array class with specific rank 432 // array class with specific rank
431 Klass* array_klass(int rank, TRAPS) { return array_klass_impl(false, rank, THREAD); } 433 Klass* array_klass(int rank, TRAPS) { return array_klass_impl(false, rank, THREAD); }
432 434