Commit f0b8bab4 authored by Eric Stevenson's avatar Eric Stevenson Committed by Commit Bot

jni_generator: Fix native method capitalization for Proxy Natives.

Was already done for native functions but missed when calling native
instance methods.

Bug: 934847
Change-Id: Ie4bfbe81c748d8f3c78de77cd759ff4d2c804791
Reviewed-on: https://chromium-review.googlesource.com/c/1495443
Auto-Submit: Eric Stevenson <estevenson@chromium.org>
Reviewed-by: default avatarAndrew Grieve <agrieve@chromium.org>
Reviewed-by: default avatarTommy Nyquist <nyquist@chromium.org>
Commit-Queue: Tommy Nyquist <nyquist@chromium.org>
Cr-Commit-Position: refs/heads/master@{#636561}
parent 83f32cfb
......@@ -92,5 +92,26 @@ JNI_GENERATOR_EXPORT jobjectArray
return JNI_Foo_Foobar(env, base::android::JavaParamRef<jobjectArray>(env, a)).Release();
}
JNI_GENERATOR_EXPORT void Java_org_chromium_base_natives_GEN_1JNI_org_1chromium_1foo_1Foo_1baz(
JNIEnv* env,
jobject jcaller,
jobject caller,
jlong nativePtr) {
TRACE_EVENT0("jni", "Ptr::Baz");
Ptr* native = reinterpret_cast<Ptr*>(nativePtr);
CHECK_NATIVE_PTR(env, jcaller, native, "Baz");
return native->Baz(env, base::android::JavaParamRef<jobject>(env, caller));
}
JNI_GENERATOR_EXPORT void Java_org_chromium_base_natives_GEN_1JNI_org_1chromium_1foo_1Foo_1fooBar(
JNIEnv* env,
jobject jcaller,
jlong nativePtr) {
TRACE_EVENT0("jni", "Ptr::FooBar");
Ptr* native = reinterpret_cast<Ptr*>(nativePtr);
CHECK_NATIVE_PTR(env, jcaller, native, "FooBar");
return native->FooBar(env, base::android::JavaParamRef<jobject>(env, jcaller));
}
#endif // org_chromium_foo_Foo_JNI
......@@ -121,9 +121,16 @@ class NativeMethod(object):
self.static = kwargs['static']
self.java_class_name = kwargs['java_class_name']
self.return_type = kwargs['return_type']
self.name = kwargs['name']
self.params = kwargs['params']
self.is_proxy = kwargs.get('is_proxy', False)
self.name = kwargs['name']
if self.is_proxy:
# Proxy methods don't have a native prefix so the first letter is
# lowercase. But we still want the CPP declaration to use upper camel
# case for the method name.
self.name = self.name[0].upper() + self.name[1:]
self.proxy_name = kwargs.get('proxy_name', self.name)
has_jcaller = False
......@@ -1207,14 +1214,7 @@ $METHOD_STUBS
# Inner class
class_name = native.java_class_name
method_name = native.name
if native.is_proxy:
# proxy methods don't have a native prefix so the first letter is
# lowercase. But we still want the CPP declaration to use upper camel case
# for the method name.
method_name = method_name[0].upper() + method_name[1:]
return 'JNI_%s_%s' % (class_name, method_name)
return 'JNI_%s_%s' % (class_name, native.name)
def GetNativeStub(self, native):
is_method = native.type == 'method'
......
......@@ -29,6 +29,8 @@ SCRIPT_NAME = 'base/android/jni_generator/jni_generator.py'
INCLUDES = (
'base/android/jni_generator/jni_generator_helper.h'
)
_JAVA_SRC_DIR = os.path.join('java', 'src', 'org', 'chromium', 'example',
'jni_generator')
# Set this environment variable in order to regenerate the golden text
# files.
......@@ -146,8 +148,8 @@ class BaseTest(unittest.TestCase):
"""Compares generated text with the corresponding golden_file
By default compares generated_text with the file at
script_dir/golden/{caller_name}[suffix].golden. If the parameter golden_file is
provided it will instead compare the generated text with
script_dir/golden/{caller_name}[suffix].golden. If the parameter
golden_file is provided it will instead compare the generated text with
script_dir/golden/golden_file."""
# This is the caller test method.
caller = inspect.stack()[1][3]
......@@ -955,7 +957,7 @@ public class java.util.HashSet {
def testJniSelfDocumentingExample(self):
generated_text = self._CreateJniHeaderFromFile(
'java/src/org/chromium/example/jni_generator/SampleForTests.java',
os.path.join(_JAVA_SRC_DIR, 'SampleForTests.java'),
'org/chromium/example/jni_generator/SampleForTests')
self.AssertGoldenTextEquals(
generated_text, golden_file='SampleForTests_jni.golden')
......@@ -1253,8 +1255,7 @@ class ProxyTestGenerator(BaseTest):
options = TestOptions()
path = self._JoinScriptDir(
'java/src/org/chromium/example/jni_generator/SampleForAnnotationProcessor.java'
)
os.path.join(_JAVA_SRC_DIR, 'SampleForAnnotationProcessor.java'))
reg_dict = jni_registration_generator._DictForPath(path)
reg_dict = self._MergeRegistrationForTests([reg_dict])
......@@ -1271,6 +1272,8 @@ class ProxyTestGenerator(BaseTest):
void foo();
String bar(String s, int y, char x, short z);
String[] foobar(String[] a);
void baz(@JCaller BazClass caller, long nativePtr);
void fooBar(long nativePtr);
}
void justARegularFunction();
......@@ -1495,7 +1498,7 @@ class ProxyTestGenerator(BaseTest):
def testProxyHashedExample(self):
opts = TestOptions()
opts.use_proxy_hash = True
path = 'java/src/org/chromium/example/jni_generator/SampleForAnnotationProcessor.java'
path = os.path.join(_JAVA_SRC_DIR, 'SampleForAnnotationProcessor.java')
generated_text = self._CreateJniHeaderFromFile(
path, 'org/chromium/example/jni_generator/SampleForAnnotationProcessor',
......@@ -1516,7 +1519,7 @@ class ProxyTestGenerator(BaseTest):
def testProxyJniExample(self):
generated_text = self._CreateJniHeaderFromFile(
'java/src/org/chromium/example/jni_generator/SampleForAnnotationProcessor.java',
os.path.join(_JAVA_SRC_DIR, 'SampleForAnnotationProcessor.java'),
'org/chromium/example/jni_generator/SampleForAnnotationProcessor')
self.AssertGoldenTextEquals(
generated_text, golden_file='SampleForAnnotationProcessor_jni.golden')
......
......@@ -65,12 +65,12 @@ static jlong JNI_SendTabToSelfAndroidBridge_Init(
return reinterpret_cast<intptr_t>(send_tab_to_self_android_bridge);
}
void SendTabToSelfAndroidBridge::destroy(JNIEnv*,
void SendTabToSelfAndroidBridge::Destroy(JNIEnv*,
const JavaParamRef<jobject>&) {
delete this;
}
void SendTabToSelfAndroidBridge::getAllGuids(
void SendTabToSelfAndroidBridge::GetAllGuids(
JNIEnv* env,
const JavaParamRef<jobject>& obj,
const JavaParamRef<jobject>& j_guid_list_obj) {
......@@ -86,13 +86,13 @@ void SendTabToSelfAndroidBridge::getAllGuids(
}
}
void SendTabToSelfAndroidBridge::deleteAllEntries(
void SendTabToSelfAndroidBridge::DeleteAllEntries(
JNIEnv* env,
const JavaParamRef<jobject>& obj) {
send_tab_to_self_model_->DeleteAllEntries();
}
ScopedJavaLocalRef<jobject> SendTabToSelfAndroidBridge::addEntry(
ScopedJavaLocalRef<jobject> SendTabToSelfAndroidBridge::AddEntry(
JNIEnv* env,
const JavaParamRef<jobject>& obj,
const JavaParamRef<jstring>& j_url,
......@@ -111,7 +111,7 @@ ScopedJavaLocalRef<jobject> SendTabToSelfAndroidBridge::addEntry(
return CreateJavaSendTabToSelfEntry(env, persisted_entry);
}
ScopedJavaLocalRef<jobject> SendTabToSelfAndroidBridge::getEntryByGUID(
ScopedJavaLocalRef<jobject> SendTabToSelfAndroidBridge::GetEntryByGUID(
JNIEnv* env,
const JavaParamRef<jobject>& obj,
const JavaParamRef<jstring>& j_guid) {
......
......@@ -22,23 +22,23 @@ class SendTabToSelfAndroidBridge {
const base::android::JavaRef<jobject>& obj,
const base::android::JavaRef<jobject>& j_profile);
void destroy(JNIEnv*, const base::android::JavaParamRef<jobject>&);
void Destroy(JNIEnv*, const base::android::JavaParamRef<jobject>&);
// Populates a list of GUIDs in the model.
void getAllGuids(JNIEnv* env,
void GetAllGuids(JNIEnv* env,
const base::android::JavaParamRef<jobject>& obj,
const base::android::JavaParamRef<jobject>& j_guid_list_obj);
// Returns the entry associated with a GUID. May return nullptr if none is
// found.
base::android::ScopedJavaLocalRef<jobject> getEntryByGUID(
base::android::ScopedJavaLocalRef<jobject> GetEntryByGUID(
JNIEnv* env,
const base::android::JavaParamRef<jobject>& obj,
const base::android::JavaParamRef<jstring>& j_guid);
// Adds a new entry with the specified parameters. Returns the persisted
// version which contains additional information such as GUID.
base::android::ScopedJavaLocalRef<jobject> addEntry(
base::android::ScopedJavaLocalRef<jobject> AddEntry(
JNIEnv* env,
const base::android::JavaParamRef<jobject>& obj,
const base::android::JavaParamRef<jstring>& j_url,
......@@ -46,7 +46,7 @@ class SendTabToSelfAndroidBridge {
jlong j_navigation_time);
// Deletes all entries in the model.
void deleteAllEntries(JNIEnv* env,
void DeleteAllEntries(JNIEnv* env,
const base::android::JavaParamRef<jobject>& obj);
protected:
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment