Skip to content

Commit

Permalink
jni_generator: Fix native method capitalization for Proxy Natives.
Browse files Browse the repository at this point in the history
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: Andrew Grieve <agrieve@chromium.org>
Reviewed-by: Tommy Nyquist <nyquist@chromium.org>
Commit-Queue: Tommy Nyquist <nyquist@chromium.org>
Cr-Commit-Position: refs/heads/master@{#636561}
  • Loading branch information
Eric Stevenson authored and Commit Bot committed Feb 28, 2019
1 parent 83f32cf commit f0b8bab
Show file tree
Hide file tree
Showing 5 changed files with 50 additions and 26 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -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
18 changes: 9 additions & 9 deletions base/android/jni_generator/jni_generator.py
Original file line number Diff line number Diff line change
Expand Up @@ -121,9 +121,16 @@ def __init__(self, **kwargs):
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
Expand Down Expand Up @@ -1207,14 +1214,7 @@ def GetImplementationMethodName(self, native):
# 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'
Expand Down
17 changes: 10 additions & 7 deletions base/android/jni_generator/jni_generator_tests.py
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,8 @@
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.
Expand Down Expand Up @@ -146,8 +148,8 @@ def AssertGoldenTextEquals(self, generated_text, suffix='', golden_file=None):
"""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]
Expand Down Expand Up @@ -955,7 +957,7 @@ class MyInnerClass {

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')
Expand Down Expand Up @@ -1253,8 +1255,7 @@ def _BuildRegDictFromSample(self, options=None):
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])

Expand All @@ -1271,6 +1272,8 @@ class Foo {
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();
Expand Down Expand Up @@ -1495,7 +1498,7 @@ class SampleProxyJni{
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',
Expand All @@ -1516,7 +1519,7 @@ def testProxyHashedExample(self):

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')
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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) {
Expand All @@ -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,
Expand All @@ -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) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,31 +22,31 @@ 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,
const base::android::JavaParamRef<jstring>& j_title,
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:
Expand Down

0 comments on commit f0b8bab

Please sign in to comment.