Adding JNI code for dalvik.system.DexFile and java.lang.Class
Change-Id: I079c037db77aeaca0dec06660f7551f57adf2607
diff --git a/src/java_lang_VMClassLoader.cc b/src/java_lang_VMClassLoader.cc
index bed89d6..28421b4 100644
--- a/src/java_lang_VMClassLoader.cc
+++ b/src/java_lang_VMClassLoader.cc
@@ -25,16 +25,6 @@
namespace {
-// Turn "java.lang.String" into "Ljava/lang/String;".
-std::string ToDescriptor(const char* class_name) {
- std::string descriptor(class_name);
- std::replace(descriptor.begin(), descriptor.end(), '.', '/');
- if (descriptor.length() > 0 && descriptor[0] != '[') {
- descriptor = "L" + descriptor + ";";
- }
- return descriptor;
-}
-
jclass VMClassLoader_findLoadedClass(JNIEnv* env, jclass, jobject javaLoader, jstring javaName) {
ClassLoader* loader = Decode<ClassLoader*>(env, javaLoader);
ScopedUtfChars name(env, javaName);
@@ -42,7 +32,7 @@
return NULL;
}
- std::string descriptor(ToDescriptor(name.c_str()));
+ std::string descriptor(DotToDescriptor(name.c_str()));
Class* c = Runtime::Current()->GetClassLinker()->LookupClass(descriptor.c_str(), loader);
return AddLocalReference<jclass>(env, c);
}
@@ -90,48 +80,10 @@
return env->NewStringUTF(url.c_str());
}
-/*
- * static Class loadClass(String name, boolean resolve)
- * throws ClassNotFoundException
- *
- * Load class using bootstrap class loader.
- *
- * Return the Class object associated with the class or interface with
- * the specified name.
- *
- * "name" is in "binary name" format, e.g. "dalvik.system.Debug$1".
- */
-jclass VMClassLoader_loadClass(JNIEnv* env, jclass, jstring javaName, jboolean resolve) {
- ScopedUtfChars name(env, javaName);
- if (name.c_str() == NULL) {
- return NULL;
- }
-
- /*
- * We need to validate and convert the name (from x.y.z to x/y/z). This
- * is especially handy for array types, since we want to avoid
- * auto-generating bogus array classes.
- */
- if (!IsValidClassName(name.c_str(), true, true)) {
- Thread::Current()->ThrowNewException("Ljava/lang/ClassNotFoundException;",
- "Invalid name: %s", name.c_str());
- return NULL;
- }
-
- std::string descriptor(ToDescriptor(name.c_str()));
- ClassLinker* class_linker = Runtime::Current()->GetClassLinker();
- Class* c = class_linker->FindClass(descriptor.c_str(), NULL);
- if (resolve) {
- class_linker->EnsureInitialized(c, true);
- }
- return AddLocalReference<jclass>(env, c);
-}
-
static JNINativeMethod gMethods[] = {
NATIVE_METHOD(VMClassLoader, findLoadedClass, "(Ljava/lang/ClassLoader;Ljava/lang/String;)Ljava/lang/Class;"),
NATIVE_METHOD(VMClassLoader, getBootClassPathResource, "(Ljava/lang/String;I)Ljava/lang/String;"),
NATIVE_METHOD(VMClassLoader, getBootClassPathSize, "()I"),
- NATIVE_METHOD(VMClassLoader, loadClass, "(Ljava/lang/String;Z)Ljava/lang/Class;"),
};
} // namespace