Add ClassLinker::VisitRoots
As part of implementing VisitRoots, created ClassLinker::class_roots_
with enum of offsets. This required revising ClassLinker::Init yet
again, so took the opportunity to simplify and document ordering
restrictions. Also simplified special cases in FindClass, as well as
making a fast path for FindClass and CreateArrayClass for post
::Init. Made ClassLinker::Alloc* conveniences private after realizing
they are only used externally by tests. Sprinkled some
Class::IsSynthetic validation in ClassLinkerTest along with adding a
test for VisitRoots. Updated kJavaLangDex to have a java.lang.String
to work with the simplified ::Init code.
Change-Id: I76b92c0bde5da32d9ebc8d3702d8e7ac7972dda7
diff --git a/src/class_linker_test.cc b/src/class_linker_test.cc
index 5aea3aa..7c33930 100644
--- a/src/class_linker_test.cc
+++ b/src/class_linker_test.cc
@@ -34,6 +34,7 @@
EXPECT_TRUE(primitive->IsPublic());
EXPECT_TRUE(primitive->IsFinal());
EXPECT_TRUE(primitive->IsPrimitive());
+ EXPECT_FALSE(primitive->IsSynthetic());
EXPECT_EQ(0U, primitive->NumDirectMethods());
EXPECT_EQ(0U, primitive->NumVirtualMethods());
EXPECT_EQ(0U, primitive->NumInstanceFields());
@@ -66,6 +67,7 @@
EXPECT_EQ(array->GetComponentType()->IsPublic(), array->IsPublic());
EXPECT_TRUE(array->IsFinal());
EXPECT_FALSE(array->IsPrimitive());
+ EXPECT_FALSE(array->IsSynthetic());
EXPECT_EQ(0U, array->NumDirectMethods());
EXPECT_EQ(0U, array->NumVirtualMethods());
EXPECT_EQ(0U, array->NumInstanceFields());
@@ -173,6 +175,10 @@
total_num_reference_instance_fields == 0);
}
+ static void TestRootVisitor(Object* root, void* arg) {
+ EXPECT_TRUE(root != NULL);
+ }
+
void AssertDexFile(const DexFile* dex) {
ASSERT_TRUE(dex != NULL);
class_linker_->RegisterDexFile(dex);
@@ -181,6 +187,7 @@
const char* descriptor = dex->GetClassDescriptor(class_def);
AssertDexFileClass(dex, descriptor);
}
+ class_linker_->VisitRoots(TestRootVisitor, NULL);
}
};
@@ -238,6 +245,7 @@
EXPECT_TRUE(JavaLangObject->IsPublic());
EXPECT_FALSE(JavaLangObject->IsFinal());
EXPECT_FALSE(JavaLangObject->IsPrimitive());
+ EXPECT_FALSE(JavaLangObject->IsSynthetic());
EXPECT_EQ(1U, JavaLangObject->NumDirectMethods());
EXPECT_EQ(0U, JavaLangObject->NumVirtualMethods());
EXPECT_EQ(0U, JavaLangObject->NumInstanceFields());
@@ -267,6 +275,7 @@
EXPECT_FALSE(MyClass->IsPublic());
EXPECT_FALSE(MyClass->IsFinal());
EXPECT_FALSE(MyClass->IsPrimitive());
+ EXPECT_FALSE(MyClass->IsSynthetic());
EXPECT_EQ(1U, MyClass->NumDirectMethods());
EXPECT_EQ(0U, MyClass->NumVirtualMethods());
EXPECT_EQ(0U, MyClass->NumInstanceFields());