Make methods and fields accessible by default in art.

This also fixes a corner-case bug where calling Field.setBoolean()
on a non-boolean field would crash the runtime.

Change-Id: I2f6693e3c3fe3bf23b4761335300506b3fbd3008
diff --git a/src/class_linker_test.cc b/src/class_linker_test.cc
index e64131f..b51822f 100644
--- a/src/class_linker_test.cc
+++ b/src/class_linker_test.cc
@@ -398,13 +398,6 @@
   };
 };
 
-struct AccessibleObjectOffsets : public CheckOffsets<AccessibleObject> {
-  AccessibleObjectOffsets()
-      : CheckOffsets<AccessibleObject>(false, "Ljava/lang/reflect/AccessibleObject;") {
-    offsets.push_back(CheckOffset(OFFSETOF_MEMBER(AccessibleObject, java_flag_), "flag"));
-  };
-};
-
 struct FieldOffsets : public CheckOffsets<Field> {
   FieldOffsets() : CheckOffsets<Field>(false, "Ljava/lang/reflect/Field;") {
     // alphabetical references
@@ -637,7 +630,6 @@
 // ClassLinker::LinkFields.
 TEST_F(ClassLinkerTest, ValidateFieldOrderOfJavaCppUnionClasses) {
   EXPECT_TRUE(ObjectOffsets().Check());
-  EXPECT_TRUE(AccessibleObjectOffsets().Check());
   EXPECT_TRUE(ConstructorOffsets().Check());
   EXPECT_TRUE(FieldOffsets().Check());
   EXPECT_TRUE(MethodOffsets().Check());
diff --git a/src/java_lang_reflect_Field.cc b/src/java_lang_reflect_Field.cc
index b23a29e..7e66dd9 100644
--- a/src/java_lang_reflect_Field.cc
+++ b/src/java_lang_reflect_Field.cc
@@ -194,6 +194,11 @@
   if (!CheckReceiver(env, javaObj, javaDeclaringClass, f, o)) {
     return;
   }
+  if (f->GetPrimitiveType() == Primitive::kPrimNot) {
+    Thread::Current()->ThrowNewExceptionF("Ljava/lang/IllegalArgumentException;",
+        "Not a primitive field: %s", PrettyField(f).c_str());
+    return;
+  }
 
   // Widen the value if necessary (and possible).
   JValue wide_value;
diff --git a/src/object.h b/src/object.h
index 98b36ab..91fca63 100644
--- a/src/object.h
+++ b/src/object.h
@@ -373,17 +373,8 @@
   }
 };
 
-// C++ mirror of java.lang.reflect.AccessibleObject
-class MANAGED AccessibleObject : public Object {
- private:
-  // Field order required by test "ValidateFieldOrderOfJavaCppUnionClasses".
-  uint32_t java_flag_;  // can accessibility checks be bypassed
-  friend struct AccessibleObjectOffsets;  // for verifying offset information
-  DISALLOW_IMPLICIT_CONSTRUCTORS(AccessibleObject);
-};
-
 // C++ mirror of java.lang.reflect.Field
-class MANAGED Field : public AccessibleObject {
+class MANAGED Field : public Object {
  public:
   Class* GetDeclaringClass() const;
 
@@ -518,7 +509,7 @@
 };
 
 // C++ mirror of java.lang.reflect.Method and java.lang.reflect.Constructor
-class MANAGED Method : public AccessibleObject {
+class MANAGED Method : public Object {
  public:
   // An function that invokes a method with an array of its arguments.
   typedef void InvokeStub(const Method* method,
diff --git a/src/reflection.cc b/src/reflection.cc
index 0bdfe82..f02c2d2 100644
--- a/src/reflection.cc
+++ b/src/reflection.cc
@@ -152,6 +152,7 @@
  */
 bool ConvertPrimitiveValue(Primitive::Type srcType, Primitive::Type dstType,
                            const JValue& src, JValue& dst) {
+  CHECK(srcType != Primitive::kPrimNot && dstType != Primitive::kPrimNot);
   switch (dstType) {
   case Primitive::kPrimBoolean:
   case Primitive::kPrimChar: