8199567: [Nestmates] Cleanup instanceKlass.cpp

Reviewed-by: lfoltan, coleenp
This commit is contained in:
David Holmes 2018-10-23 17:01:48 -04:00
parent 34397c4914
commit c145bd0bd0

View file

@ -165,10 +165,18 @@ bool InstanceKlass::has_nest_member(InstanceKlass* k, TRAPS) const {
k->external_name(), this->external_name()); k->external_name(), this->external_name());
} }
// Check names first and if they match then check actual klass. This avoids // Check for a resolved cp entry , else fall back to a name check.
// resolving anything unnecessarily. // We don't want to resolve any class other than the one being checked.
for (int i = 0; i < _nest_members->length(); i++) { for (int i = 0; i < _nest_members->length(); i++) {
int cp_index = _nest_members->at(i); int cp_index = _nest_members->at(i);
if (_constants->tag_at(cp_index).is_klass()) {
Klass* k2 = _constants->klass_at(cp_index, CHECK_false);
if (k2 == k) {
log_trace(class, nestmates)("- class is listed at nest_members[%d] => cp[%d]", i, cp_index);
return true;
}
}
else {
Symbol* name = _constants->klass_name_at(cp_index); Symbol* name = _constants->klass_name_at(cp_index);
if (name == k->name()) { if (name == k->name()) {
log_trace(class, nestmates)("- Found it at nest_members[%d] => cp[%d]", i, cp_index); log_trace(class, nestmates)("- Found it at nest_members[%d] => cp[%d]", i, cp_index);
@ -179,14 +187,16 @@ bool InstanceKlass::has_nest_member(InstanceKlass* k, TRAPS) const {
if (k2 == k) { if (k2 == k) {
log_trace(class, nestmates)("- class is listed as a nest member"); log_trace(class, nestmates)("- class is listed as a nest member");
return true; return true;
} else { }
else {
// same name but different klass! // same name but different klass!
log_trace(class, nestmates)(" - klass comparison failed!"); log_trace(class, nestmates)(" - klass comparison failed!");
// can't have different classes for the same name, so we're done // can't have two names the same, so we're done
return false; return false;
} }
} }
} }
}
log_trace(class, nestmates)("- class is NOT a nest member!"); log_trace(class, nestmates)("- class is NOT a nest member!");
return false; return false;
} }