< prev index next >

src/hotspot/share/oops/klass.cpp

Print this page
rev 58768 : 8238358: Implementation of JEP 371: Hidden Classes
Reviewed-by: alanb, cjplummer, coleenp, dholmes, dlong, forax, jlahoda, psandoz, plevart, vromero
Contributed-by: mandy.chung@oracle.com, lois.foltan@oracle.com, david.holmes@oracle.com, harold.seigel@oracle.com, serguei.spitsyn@oracle.com, alex.buckley@oracle.com, jamsheed.c.m@oracle.com, jan.lahoda@oracle.com, amy.lu@oracle.com
rev 58769 : imported patch type-descriptor-name
rev 58770 : [mq]: svc-spec-update


 704       return result;
 705 
 706     } else if (ik->is_hidden()) {
 707       char* result = convert_hidden_name_to_java(name());
 708       return result;
 709     }
 710   } else if (is_objArray_klass() && ObjArrayKlass::cast(this)->bottom_klass()->is_hidden()) {
 711     char* result = convert_hidden_name_to_java(name());
 712     return result;
 713   }
 714   if (name() == NULL)  return "<unknown>";
 715   return name()->as_klass_external_name();
 716 }
 717 
 718 const char* Klass::signature_name() const {
 719   if (name() == NULL)  return "<unknown>";
 720   if (is_objArray_klass() && ObjArrayKlass::cast(this)->bottom_klass()->is_hidden()) {
 721     size_t name_len = name()->utf8_length();
 722     char* result = NEW_RESOURCE_ARRAY(char, name_len + 1);
 723     name()->as_C_string(result, (int)name_len + 1);
 724     for (int index = (int)name_len; index > 0; index--) {





 725       if (result[index] == '+') {
 726         result[index] = JVM_SIGNATURE_DOT;


 727         break;
 728       }
 729     }
 730     return result;
 731   }
 732   return name()->as_C_string();
 733 }
 734 
 735 const char* Klass::external_kind() const {
 736   if (is_interface()) return "interface";
 737   if (is_abstract()) return "abstract class";
 738   return "class";
 739 }
 740 
 741 // Unless overridden, modifier_flags is 0.
 742 jint Klass::compute_modifier_flags(TRAPS) const {
 743   return 0;
 744 }
 745 
 746 int Klass::atomic_incr_biased_lock_revocation_count() {




 704       return result;
 705 
 706     } else if (ik->is_hidden()) {
 707       char* result = convert_hidden_name_to_java(name());
 708       return result;
 709     }
 710   } else if (is_objArray_klass() && ObjArrayKlass::cast(this)->bottom_klass()->is_hidden()) {
 711     char* result = convert_hidden_name_to_java(name());
 712     return result;
 713   }
 714   if (name() == NULL)  return "<unknown>";
 715   return name()->as_klass_external_name();
 716 }
 717 
 718 const char* Klass::signature_name() const {
 719   if (name() == NULL)  return "<unknown>";
 720   if (is_objArray_klass() && ObjArrayKlass::cast(this)->bottom_klass()->is_hidden()) {
 721     size_t name_len = name()->utf8_length();
 722     char* result = NEW_RESOURCE_ARRAY(char, name_len + 1);
 723     name()->as_C_string(result, (int)name_len + 1);
 724     // the signature name of an array of hidden class is of the form "[L<N>;/<S>"
 725     // <N> is the binary name of the original class file in internal form
 726     // <S> is the suffix
 727     assert(result[name_len-1] == JVM_SIGNATURE_ENDCLASS, "unexpected signature endclass character");
 728     for (int index = (int)name_len-2; index > 0; index--) {
 729       result[index+1] = result[index];   // shift the suffix to the right
 730       if (result[index] == '+') {
 731         // Replace the last '+' with a ';' followed with '/'.
 732         result[index] = JVM_SIGNATURE_ENDCLASS;
 733         result[index+1] = JVM_SIGNATURE_SLASH;
 734         break;
 735       }
 736     }
 737     return result;
 738   }
 739   return name()->as_C_string();
 740 }
 741 
 742 const char* Klass::external_kind() const {
 743   if (is_interface()) return "interface";
 744   if (is_abstract()) return "abstract class";
 745   return "class";
 746 }
 747 
 748 // Unless overridden, modifier_flags is 0.
 749 jint Klass::compute_modifier_flags(TRAPS) const {
 750   return 0;
 751 }
 752 
 753 int Klass::atomic_incr_biased_lock_revocation_count() {


< prev index next >