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 ...@@ -92,5 +92,26 @@ JNI_GENERATOR_EXPORT jobjectArray
return JNI_Foo_Foobar(env, base::android::JavaParamRef<jobjectArray>(env, a)).Release(); 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 #endif // org_chromium_foo_Foo_JNI
...@@ -121,9 +121,16 @@ class NativeMethod(object): ...@@ -121,9 +121,16 @@ class NativeMethod(object):
self.static = kwargs['static'] self.static = kwargs['static']
self.java_class_name = kwargs['java_class_name'] self.java_class_name = kwargs['java_class_name']
self.return_type = kwargs['return_type'] self.return_type = kwargs['return_type']
self.name = kwargs['name']
self.params = kwargs['params'] self.params = kwargs['params']
self.is_proxy = kwargs.get('is_proxy', False) 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) self.proxy_name = kwargs.get('proxy_name', self.name)
has_jcaller = False has_jcaller = False
...@@ -1207,14 +1214,7 @@ $METHOD_STUBS ...@@ -1207,14 +1214,7 @@ $METHOD_STUBS
# Inner class # Inner class
class_name = native.java_class_name class_name = native.java_class_name
method_name = native.name return 'JNI_%s_%s' % (class_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)
def GetNativeStub(self, native): def GetNativeStub(self, native):
is_method = native.type == 'method' is_method = native.type == 'method'
......
...@@ -29,6 +29,8 @@ SCRIPT_NAME = 'base/android/jni_generator/jni_generator.py' ...@@ -29,6 +29,8 @@ SCRIPT_NAME = 'base/android/jni_generator/jni_generator.py'
INCLUDES = ( INCLUDES = (
'base/android/jni_generator/jni_generator_helper.h' '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 # Set this environment variable in order to regenerate the golden text
# files. # files.
...@@ -146,8 +148,8 @@ class BaseTest(unittest.TestCase): ...@@ -146,8 +148,8 @@ class BaseTest(unittest.TestCase):
"""Compares generated text with the corresponding golden_file """Compares generated text with the corresponding golden_file
By default compares generated_text with the file at By default compares generated_text with the file at
script_dir/golden/{caller_name}[suffix].golden. If the parameter golden_file is script_dir/golden/{caller_name}[suffix].golden. If the parameter
provided it will instead compare the generated text with golden_file is provided it will instead compare the generated text with
script_dir/golden/golden_file.""" script_dir/golden/golden_file."""
# This is the caller test method. # This is the caller test method.
caller = inspect.stack()[1][3] caller = inspect.stack()[1][3]
...@@ -955,7 +957,7 @@ public class java.util.HashSet { ...@@ -955,7 +957,7 @@ public class java.util.HashSet {
def testJniSelfDocumentingExample(self): def testJniSelfDocumentingExample(self):
generated_text = self._CreateJniHeaderFromFile( 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') 'org/chromium/example/jni_generator/SampleForTests')
self.AssertGoldenTextEquals( self.AssertGoldenTextEquals(
generated_text, golden_file='SampleForTests_jni.golden') generated_text, golden_file='SampleForTests_jni.golden')
...@@ -1253,8 +1255,7 @@ class ProxyTestGenerator(BaseTest): ...@@ -1253,8 +1255,7 @@ class ProxyTestGenerator(BaseTest):
options = TestOptions() options = TestOptions()
path = self._JoinScriptDir( 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 = jni_registration_generator._DictForPath(path)
reg_dict = self._MergeRegistrationForTests([reg_dict]) reg_dict = self._MergeRegistrationForTests([reg_dict])
...@@ -1271,6 +1272,8 @@ class ProxyTestGenerator(BaseTest): ...@@ -1271,6 +1272,8 @@ class ProxyTestGenerator(BaseTest):
void foo(); void foo();
String bar(String s, int y, char x, short z); String bar(String s, int y, char x, short z);
String[] foobar(String[] a); String[] foobar(String[] a);
void baz(@JCaller BazClass caller, long nativePtr);
void fooBar(long nativePtr);
} }
void justARegularFunction(); void justARegularFunction();
...@@ -1495,7 +1498,7 @@ class ProxyTestGenerator(BaseTest): ...@@ -1495,7 +1498,7 @@ class ProxyTestGenerator(BaseTest):
def testProxyHashedExample(self): def testProxyHashedExample(self):
opts = TestOptions() opts = TestOptions()
opts.use_proxy_hash = True 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( generated_text = self._CreateJniHeaderFromFile(
path, 'org/chromium/example/jni_generator/SampleForAnnotationProcessor', path, 'org/chromium/example/jni_generator/SampleForAnnotationProcessor',
...@@ -1516,7 +1519,7 @@ class ProxyTestGenerator(BaseTest): ...@@ -1516,7 +1519,7 @@ class ProxyTestGenerator(BaseTest):
def testProxyJniExample(self): def testProxyJniExample(self):
generated_text = self._CreateJniHeaderFromFile( 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') 'org/chromium/example/jni_generator/SampleForAnnotationProcessor')
self.AssertGoldenTextEquals( self.AssertGoldenTextEquals(
generated_text, golden_file='SampleForAnnotationProcessor_jni.golden') generated_text, golden_file='SampleForAnnotationProcessor_jni.golden')
......
...@@ -65,12 +65,12 @@ static jlong JNI_SendTabToSelfAndroidBridge_Init( ...@@ -65,12 +65,12 @@ static jlong JNI_SendTabToSelfAndroidBridge_Init(
return reinterpret_cast<intptr_t>(send_tab_to_self_android_bridge); return reinterpret_cast<intptr_t>(send_tab_to_self_android_bridge);
} }
void SendTabToSelfAndroidBridge::destroy(JNIEnv*, void SendTabToSelfAndroidBridge::Destroy(JNIEnv*,
const JavaParamRef<jobject>&) { const JavaParamRef<jobject>&) {
delete this; delete this;
} }
void SendTabToSelfAndroidBridge::getAllGuids( void SendTabToSelfAndroidBridge::GetAllGuids(
JNIEnv* env, JNIEnv* env,
const JavaParamRef<jobject>& obj, const JavaParamRef<jobject>& obj,
const JavaParamRef<jobject>& j_guid_list_obj) { const JavaParamRef<jobject>& j_guid_list_obj) {
...@@ -86,13 +86,13 @@ void SendTabToSelfAndroidBridge::getAllGuids( ...@@ -86,13 +86,13 @@ void SendTabToSelfAndroidBridge::getAllGuids(
} }
} }
void SendTabToSelfAndroidBridge::deleteAllEntries( void SendTabToSelfAndroidBridge::DeleteAllEntries(
JNIEnv* env, JNIEnv* env,
const JavaParamRef<jobject>& obj) { const JavaParamRef<jobject>& obj) {
send_tab_to_self_model_->DeleteAllEntries(); send_tab_to_self_model_->DeleteAllEntries();
} }
ScopedJavaLocalRef<jobject> SendTabToSelfAndroidBridge::addEntry( ScopedJavaLocalRef<jobject> SendTabToSelfAndroidBridge::AddEntry(
JNIEnv* env, JNIEnv* env,
const JavaParamRef<jobject>& obj, const JavaParamRef<jobject>& obj,
const JavaParamRef<jstring>& j_url, const JavaParamRef<jstring>& j_url,
...@@ -111,7 +111,7 @@ ScopedJavaLocalRef<jobject> SendTabToSelfAndroidBridge::addEntry( ...@@ -111,7 +111,7 @@ ScopedJavaLocalRef<jobject> SendTabToSelfAndroidBridge::addEntry(
return CreateJavaSendTabToSelfEntry(env, persisted_entry); return CreateJavaSendTabToSelfEntry(env, persisted_entry);
} }
ScopedJavaLocalRef<jobject> SendTabToSelfAndroidBridge::getEntryByGUID( ScopedJavaLocalRef<jobject> SendTabToSelfAndroidBridge::GetEntryByGUID(
JNIEnv* env, JNIEnv* env,
const JavaParamRef<jobject>& obj, const JavaParamRef<jobject>& obj,
const JavaParamRef<jstring>& j_guid) { const JavaParamRef<jstring>& j_guid) {
......
...@@ -22,23 +22,23 @@ class SendTabToSelfAndroidBridge { ...@@ -22,23 +22,23 @@ class SendTabToSelfAndroidBridge {
const base::android::JavaRef<jobject>& obj, const base::android::JavaRef<jobject>& obj,
const base::android::JavaRef<jobject>& j_profile); 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. // 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>& obj,
const base::android::JavaParamRef<jobject>& j_guid_list_obj); const base::android::JavaParamRef<jobject>& j_guid_list_obj);
// Returns the entry associated with a GUID. May return nullptr if none is // Returns the entry associated with a GUID. May return nullptr if none is
// found. // found.
base::android::ScopedJavaLocalRef<jobject> getEntryByGUID( base::android::ScopedJavaLocalRef<jobject> GetEntryByGUID(
JNIEnv* env, JNIEnv* env,
const base::android::JavaParamRef<jobject>& obj, const base::android::JavaParamRef<jobject>& obj,
const base::android::JavaParamRef<jstring>& j_guid); const base::android::JavaParamRef<jstring>& j_guid);
// Adds a new entry with the specified parameters. Returns the persisted // Adds a new entry with the specified parameters. Returns the persisted
// version which contains additional information such as GUID. // version which contains additional information such as GUID.
base::android::ScopedJavaLocalRef<jobject> addEntry( base::android::ScopedJavaLocalRef<jobject> AddEntry(
JNIEnv* env, JNIEnv* env,
const base::android::JavaParamRef<jobject>& obj, const base::android::JavaParamRef<jobject>& obj,
const base::android::JavaParamRef<jstring>& j_url, const base::android::JavaParamRef<jstring>& j_url,
...@@ -46,7 +46,7 @@ class SendTabToSelfAndroidBridge { ...@@ -46,7 +46,7 @@ class SendTabToSelfAndroidBridge {
jlong j_navigation_time); jlong j_navigation_time);
// Deletes all entries in the model. // Deletes all entries in the model.
void deleteAllEntries(JNIEnv* env, void DeleteAllEntries(JNIEnv* env,
const base::android::JavaParamRef<jobject>& obj); const base::android::JavaParamRef<jobject>& obj);
protected: 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