src/share/vm/classfile/classFileParser.cpp

changeset 4870
cd9ad42dfde0
parent 4819
36376b540a98
parent 4866
16885e702c88
child 4911
9befe2fce567
     1.1 --- a/src/share/vm/classfile/classFileParser.cpp	Thu Mar 28 19:13:22 2013 -0700
     1.2 +++ b/src/share/vm/classfile/classFileParser.cpp	Fri Mar 29 20:52:01 2013 -0700
     1.3 @@ -1735,9 +1735,14 @@
     1.4                                                                  Symbol* name) {
     1.5    vmSymbols::SID sid = vmSymbols::find_sid(name);
     1.6    // Privileged code can use all annotations.  Other code silently drops some.
     1.7 -  bool privileged = loader_data->is_the_null_class_loader_data() ||
     1.8 -                    loader_data->is_anonymous();
     1.9 +  const bool privileged = loader_data->is_the_null_class_loader_data() ||
    1.10 +                          loader_data->is_ext_class_loader_data() ||
    1.11 +                          loader_data->is_anonymous();
    1.12    switch (sid) {
    1.13 +  case vmSymbols::VM_SYMBOL_ENUM_NAME(sun_reflect_CallerSensitive_signature):
    1.14 +    if (_location != _in_method)  break;  // only allow for methods
    1.15 +    if (!privileged)              break;  // only allow in privileged code
    1.16 +    return _method_CallerSensitive;
    1.17    case vmSymbols::VM_SYMBOL_ENUM_NAME(java_lang_invoke_ForceInline_signature):
    1.18      if (_location != _in_method)  break;  // only allow for methods
    1.19      if (!privileged)              break;  // only allow in privileged code
    1.20 @@ -1775,6 +1780,8 @@
    1.21  }
    1.22  
    1.23  void ClassFileParser::MethodAnnotationCollector::apply_to(methodHandle m) {
    1.24 +  if (has_annotation(_method_CallerSensitive))
    1.25 +    m->set_caller_sensitive(true);
    1.26    if (has_annotation(_method_ForceInline))
    1.27      m->set_force_inline(true);
    1.28    if (has_annotation(_method_DontInline))

mercurial