< prev index next >
src/hotspot/share/oops/instanceKlass.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
*** 2680,2705 ****
// Add the actual class name
for (int src_index = 0; src_index < src_length; ) {
dest[dest_index++] = src[src_index++];
}
! if (is_hidden()) { // Replace the last '+' with a '.'.
! for (int index = (int)src_length; index > 0; index--) {
if (dest[index] == '+') {
! dest[index] = JVM_SIGNATURE_DOT;
break;
}
}
}
// If we have a hash, append it
for (int hash_index = 0; hash_index < hash_len; ) {
dest[dest_index++] = hash_buf[hash_index++];
}
// Add the semicolon and the NULL
dest[dest_index++] = JVM_SIGNATURE_ENDCLASS;
dest[dest_index] = '\0';
return dest;
}
ModuleEntry* InstanceKlass::module() const {
--- 2680,2714 ----
// Add the actual class name
for (int src_index = 0; src_index < src_length; ) {
dest[dest_index++] = src[src_index++];
}
! if (is_hidden()) {
! int end_class = -1;
! for (int index = (int)dest_index-1; index > 0; index--) { // dest[0] is "L"
! dest[index+1] = dest[index];
if (dest[index] == '+') {
! // Replace the last '+' with a ';' followed with '/'.
! dest[index] = JVM_SIGNATURE_ENDCLASS;
! dest[index+1] = JVM_SIGNATURE_SLASH;
! end_class = index;
break;
}
}
+ assert(end_class > 0, "unexpected hidden class name");
+ dest_index++;
}
// If we have a hash, append it
for (int hash_index = 0; hash_index < hash_len; ) {
dest[dest_index++] = hash_buf[hash_index++];
}
// Add the semicolon and the NULL
+ if (!is_hidden()) {
dest[dest_index++] = JVM_SIGNATURE_ENDCLASS;
+ }
dest[dest_index] = '\0';
return dest;
}
ModuleEntry* InstanceKlass::module() const {
< prev index next >