summaryrefslogtreecommitdiffstats
path: root/runtime/native/java_lang_reflect_Field.cc
diff options
context:
space:
mode:
authorAndreas Gampe <agampe@google.com>2014-09-23 10:38:30 -0700
committerAndreas Gampe <agampe@google.com>2014-09-29 11:40:16 -0700
commitc0d8229898c44c0f604f08a5df1de83ff56c18fd (patch)
tree13b150e68e806204c547e04bc071246c06199c37 /runtime/native/java_lang_reflect_Field.cc
parentc70535b4f9f1ff3e3da451734bb7d9601012ccc1 (diff)
downloadart-c0d8229898c44c0f604f08a5df1de83ff56c18fd.tar.gz
art-c0d8229898c44c0f604f08a5df1de83ff56c18fd.tar.bz2
art-c0d8229898c44c0f604f08a5df1de83ff56c18fd.zip
ART: Better IllegalAccessException message
Bug: 17618578 Bug: 17614623 Change-Id: I0e3f15e676acd6ed5844fc86e136f75cc335372d
Diffstat (limited to 'runtime/native/java_lang_reflect_Field.cc')
-rw-r--r--runtime/native/java_lang_reflect_Field.cc21
1 files changed, 16 insertions, 5 deletions
diff --git a/runtime/native/java_lang_reflect_Field.cc b/runtime/native/java_lang_reflect_Field.cc
index 14c6d3879c..d166be030a 100644
--- a/runtime/native/java_lang_reflect_Field.cc
+++ b/runtime/native/java_lang_reflect_Field.cc
@@ -33,13 +33,24 @@ ALWAYS_INLINE inline static bool VerifyFieldAccess(Thread* self, mirror::ArtFiel
mirror::Object* obj)
SHARED_LOCKS_REQUIRED(Locks::mutator_lock_) {
if (kIsSet && field->IsFinal()) {
- ThrowIllegalAccessException(nullptr, StringPrintf("Cannot set final field: %s",
- PrettyField(field).c_str()).c_str());
+ ThrowIllegalAccessException(nullptr,
+ StringPrintf("Cannot set %s field %s of class %s",
+ PrettyJavaAccessFlags(field->GetAccessFlags()).c_str(),
+ PrettyField(field).c_str(),
+ field->GetDeclaringClass() == nullptr ? "null" :
+ PrettyClass(field->GetDeclaringClass()).c_str()).c_str());
return false;
}
- if (!VerifyAccess(self, obj, field->GetDeclaringClass(), field->GetAccessFlags())) {
- ThrowIllegalAccessException(nullptr, StringPrintf("Cannot access field: %s",
- PrettyField(field).c_str()).c_str());
+ mirror::Class* calling_class = nullptr;
+ if (!VerifyAccess(self, obj, field->GetDeclaringClass(), field->GetAccessFlags(),
+ &calling_class)) {
+ ThrowIllegalAccessException(nullptr,
+ StringPrintf("Class %s cannot access %s field %s of class %s",
+ calling_class == nullptr ? "null" : PrettyClass(calling_class).c_str(),
+ PrettyJavaAccessFlags(field->GetAccessFlags()).c_str(),
+ PrettyField(field).c_str(),
+ field->GetDeclaringClass() == nullptr ? "null" :
+ PrettyClass(field->GetDeclaringClass()).c_str()).c_str());
return false;
}
return true;