Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1399)

Unified Diff: base/android/jni_generator/jni_generator.py

Issue 1959583003: jni_generator: remove obsolete/unused features. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Undo whitespace change to reduce diff to golden files Created 4 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | base/android/jni_generator/jni_generator_tests.py » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: base/android/jni_generator/jni_generator.py
diff --git a/base/android/jni_generator/jni_generator.py b/base/android/jni_generator/jni_generator.py
index 5d262c8933578a1ab588d0607f36f8ec8f03bad4..b0134d6ae12e241c4506b91dc6b82cb65f533ed3 100755
--- a/base/android/jni_generator/jni_generator.py
+++ b/base/android/jni_generator/jni_generator.py
@@ -177,7 +177,6 @@ class JniParams(object):
_fully_qualified_class = ''
_package = ''
_inner_classes = []
- _remappings = []
_implicit_imports = []
@staticmethod
@@ -268,7 +267,7 @@ class JniParams(object):
return prefix + pod_param_map[param]
if '/' in param:
# Coming from javap, use the fully qualified param directly.
- return prefix + 'L' + JniParams.RemapClassName(param) + ';'
+ return prefix + 'L' + param + ';'
for qualified_name in (object_param_list +
[JniParams._fully_qualified_class] +
@@ -276,7 +275,7 @@ class JniParams(object):
if (qualified_name.endswith('/' + param) or
qualified_name.endswith('$' + param.replace('.', '$')) or
qualified_name == 'L' + param):
- return prefix + JniParams.RemapClassName(qualified_name) + ';'
+ return prefix + qualified_name + ';'
# Is it from an import? (e.g. referecing Class from import pkg.Class;
# note that referencing an inner class Inner from import pkg.Class.Inner
@@ -290,7 +289,7 @@ class JniParams(object):
'and used by JNI (%s). Please import the outer '
'class and use Outer.Inner instead.' %
(qualified_name, param))
- return prefix + JniParams.RemapClassName(qualified_name) + ';'
+ return prefix + qualified_name + ';'
# Is it an inner class from an outer class import? (e.g. referencing
# Class.Inner from import pkg.Class).
@@ -300,8 +299,7 @@ class JniParams(object):
inner = components[-1]
for qualified_name in JniParams._imports:
if qualified_name.endswith('/' + outer):
- return (prefix + JniParams.RemapClassName(qualified_name) +
- '$' + inner + ';')
+ return (prefix + qualified_name + '$' + inner + ';')
raise SyntaxError('Inner class (%s) can not be '
'used directly by JNI. Please import the outer '
'class, probably:\n'
@@ -312,8 +310,7 @@ class JniParams(object):
JniParams._CheckImplicitImports(param)
# Type not found, falling back to same package as this class.
- return (prefix + 'L' +
- JniParams.RemapClassName(JniParams._package + '/' + param) + ';')
+ return (prefix + 'L' + JniParams._package + '/' + param + ';')
@staticmethod
def _CheckImplicitImports(param):
@@ -364,43 +361,6 @@ class JniParams(object):
ret += [param]
return ret
- @staticmethod
- def RemapClassName(class_name):
- """Remaps class names using the jarjar mapping table."""
- for old, new in JniParams._remappings:
- if old.endswith('**') and old[:-2] in class_name:
- return class_name.replace(old[:-2], new, 1)
- if '*' not in old and class_name.endswith(old):
- return class_name.replace(old, new, 1)
-
- return class_name
-
- @staticmethod
- def SetJarJarMappings(mappings):
- """Parse jarjar mappings from a string."""
- JniParams._remappings = []
- for line in mappings.splitlines():
- rule = line.split()
- if rule[0] != 'rule':
- continue
- _, src, dest = rule
- src = src.replace('.', '/')
- dest = dest.replace('.', '/')
- if src.endswith('**'):
- src_real_name = src[:-2]
- else:
- assert not '*' in src
- src_real_name = src
-
- if dest.endswith('@0'):
- JniParams._remappings.append((src, dest[:-2] + src_real_name))
- elif dest.endswith('@1'):
- assert '**' in src
- JniParams._remappings.append((src, dest[:-2]))
- else:
- assert not '@' in dest
- JniParams._remappings.append((src, dest))
-
def ExtractJNINamespace(contents):
re_jni_namespace = re.compile('.*?@JNINamespace\("(.*?)"\)')
@@ -743,14 +703,7 @@ class InlHeaderFileGenerator(object):
self.header_guard = fully_qualified_class.replace('/', '_') + '_JNI'
self.constant_fields = constant_fields
self.options = options
- self.init_native = self.ExtractInitNative(options)
- def ExtractInitNative(self, options):
- for native in self.natives:
- if options.jni_init_native_name == 'native' + native.name:
- self.natives.remove(native)
- return native
- return None
def GetContent(self):
"""Returns the content of the JNI binding file."""
@@ -777,7 +730,7 @@ ${INCLUDES}
// Step 1: forward declarations.
namespace {
$CLASS_PATH_DEFINITIONS
-$METHOD_ID_DEFINITIONS
+
} // namespace
$OPEN_NAMESPACE
@@ -791,14 +744,13 @@ $METHOD_STUBS
$JNI_NATIVE_METHODS
$REGISTER_NATIVES
$CLOSE_NAMESPACE
-$JNI_REGISTER_NATIVES
+
#endif // ${HEADER_GUARD}
""")
values = {
'SCRIPT_NAME': self.options.script_name,
'FULLY_QUALIFIED_CLASS': self.fully_qualified_class,
'CLASS_PATH_DEFINITIONS': self.GetClassPathDefinitionsString(),
- 'METHOD_ID_DEFINITIONS': self.GetMethodIDDefinitionsString(),
'CONSTANT_FIELDS': self.GetConstantFieldsString(),
'METHOD_STUBS': self.GetMethodStubsString(),
'OPEN_NAMESPACE': self.GetOpenNamespaceString(),
@@ -807,7 +759,6 @@ $JNI_REGISTER_NATIVES
'CLOSE_NAMESPACE': self.GetCloseNamespaceString(),
'HEADER_GUARD': self.header_guard,
'INCLUDES': self.GetIncludesString(),
- 'JNI_REGISTER_NATIVES': self.GetJNIRegisterNativesString()
}
return WrapOutput(template.substitute(values))
@@ -816,21 +767,6 @@ $JNI_REGISTER_NATIVES
ret += [self.GetClassPathDefinitions()]
return '\n'.join(ret)
- def GetMethodIDDefinitionsString(self):
- """Returns the definition of method ids for the called by native methods."""
- if not self.options.eager_called_by_natives:
- return ''
- template = Template("""\
-jmethodID g_${JAVA_CLASS}_${METHOD_ID_VAR_NAME} = NULL;""")
- ret = []
- for called_by_native in self.called_by_natives:
- values = {
- 'JAVA_CLASS': called_by_native.java_class_name or self.class_name,
- 'METHOD_ID_VAR_NAME': called_by_native.method_id_var_name,
- }
- ret += [template.substitute(values)]
- return '\n'.join(ret)
-
def GetConstantFieldsString(self):
if not self.constant_fields:
return ''
@@ -845,25 +781,13 @@ jmethodID g_${JAVA_CLASS}_${METHOD_ID_VAR_NAME} = NULL;""")
ret = []
for native in self.natives:
ret += [self.GetNativeStub(native)]
- if self.options.eager_called_by_natives:
- ret += self.GetEagerCalledByNativeMethodStubs()
- else:
- ret += self.GetLazyCalledByNativeMethodStubs()
+ ret += self.GetLazyCalledByNativeMethodStubs()
return '\n'.join(ret)
def GetLazyCalledByNativeMethodStubs(self):
return [self.GetLazyCalledByNativeMethodStub(called_by_native)
for called_by_native in self.called_by_natives]
- def GetEagerCalledByNativeMethodStubs(self):
- ret = []
- if self.called_by_natives:
- ret += ['namespace {']
- for called_by_native in self.called_by_natives:
- ret += [self.GetEagerCalledByNativeMethodStub(called_by_native)]
- ret += ['} // namespace']
- return ret
-
def GetIncludesString(self):
if not self.options.includes:
return ''
@@ -903,26 +827,6 @@ ${KMETHODS}
""")
return self.SubstituteNativeMethods(template)
- def GetRegisterCalledByNativesImplString(self):
- """Returns the code for registering the called by native methods."""
- if not self.options.eager_called_by_natives:
- return ''
- template = Template("""\
- g_${JAVA_CLASS}_${METHOD_ID_VAR_NAME} = ${GET_METHOD_ID_IMPL}
- if (g_${JAVA_CLASS}_${METHOD_ID_VAR_NAME} == NULL) {
- return false;
- }
- """)
- ret = []
- for called_by_native in self.called_by_natives:
- values = {
- 'JAVA_CLASS': called_by_native.java_class_name or self.class_name,
- 'METHOD_ID_VAR_NAME': called_by_native.method_id_var_name,
- 'GET_METHOD_ID_IMPL': self.GetMethodIDImpl(called_by_native),
- }
- ret += [template.substitute(values)]
- return '\n'.join(ret)
-
def GetRegisterNativesString(self):
"""Returns the code for RegisterNatives."""
template = Template("""\
@@ -930,16 +834,10 @@ ${REGISTER_NATIVES_SIGNATURE} {
${EARLY_EXIT}
${CLASSES}
${NATIVES}
-${CALLED_BY_NATIVES}
return true;
}
""")
- signature = 'static bool RegisterNativesImpl(JNIEnv* env'
- if self.init_native:
- signature += ', jclass clazz)'
- else:
- signature += ')'
-
+ signature = 'static bool RegisterNativesImpl(JNIEnv* env)'
early_exit = ''
if self.options.native_exports_optional:
early_exit = """\
@@ -947,12 +845,10 @@ ${CALLED_BY_NATIVES}
"""
natives = self.GetRegisterNativesImplString()
- called_by_natives = self.GetRegisterCalledByNativesImplString()
values = {'REGISTER_NATIVES_SIGNATURE': signature,
'EARLY_EXIT': early_exit,
'CLASSES': self.GetFindClasses(),
'NATIVES': natives,
- 'CALLED_BY_NATIVES': called_by_natives,
}
return template.substitute(values)
@@ -974,34 +870,6 @@ ${CALLED_BY_NATIVES}
""")
return self.SubstituteNativeMethods(template)
- def GetJNIRegisterNativesString(self):
- """Returns the implementation for the JNI registration of native methods."""
- if not self.init_native:
- return ''
-
- template = Template("""\
-extern "C" JNIEXPORT bool JNICALL
-Java_${FULLY_QUALIFIED_CLASS}_${INIT_NATIVE_NAME}(JNIEnv* env, jclass clazz) {
- return ${NAMESPACE}RegisterNativesImpl(env, clazz);
-}
-""")
-
- if self.options.native_exports:
- java_name = JniParams.RemapClassName(self.fully_qualified_class)
- java_name = java_name.replace('_', '_1').replace('/', '_')
- else:
- java_name = self.fully_qualified_class.replace('/', '_')
-
- namespace = ''
- if self.namespace:
- namespace = self.namespace + '::'
- values = {'FULLY_QUALIFIED_CLASS': java_name,
- 'INIT_NATIVE_NAME': 'native' + self.init_native.name,
- 'NAMESPACE': namespace,
- 'REGISTER_NATIVES_IMPL': self.GetRegisterNativesImplString()
- }
- return template.substitute(values)
-
def GetOpenNamespaceString(self):
if self.namespace:
all_namespaces = ['namespace %s {' % ns
@@ -1077,8 +945,7 @@ Java_${FULLY_QUALIFIED_CLASS}_${INIT_NATIVE_NAME}(JNIEnv* env, jclass clazz) {
"""
template = Template("Java_${JAVA_NAME}_native${NAME}")
- java_name = JniParams.RemapClassName(self.fully_qualified_class)
- java_name = java_name.replace('_', '_1').replace('/', '_')
+ java_name = self.fully_qualified_class.replace('_', '_1').replace('/', '_')
if native.java_class_name:
java_name += '_00024' + native.java_class_name
@@ -1103,9 +970,7 @@ Java_${FULLY_QUALIFIED_CLASS}_${INIT_NATIVE_NAME}(JNIEnv* env, jclass clazz) {
params = native.params[1:]
else:
params = native.params
- params_in_call = []
- if not self.options.pure_native_methods:
- params_in_call = ['env'] + self.GetJNIFirstParamForCall(native)
+ params_in_call = ['env'] + self.GetJNIFirstParamForCall(native)
for p in params:
c_type = JavaDataTypeToC(p.datatype)
if re.match(RE_SCOPED_JNI_TYPES, c_type):
@@ -1227,17 +1092,6 @@ ${STUB_VISIBILITY}${RETURN} ${STUB_NAME}(JNIEnv* env, ${PARAMS_IN_STUB}) {
'GET_METHOD_ID_IMPL': self.GetMethodIDImpl(called_by_native)
}
- def GetEagerCalledByNativeMethodStub(self, called_by_native):
- """Returns the implementation of the called by native method."""
- template = Template("""
-static ${RETURN_TYPE} ${METHOD_ID_VAR_NAME}(\
-JNIEnv* env${FIRST_PARAM_IN_DECLARATION}${PARAMS_IN_DECLARATION}) {
- ${RETURN_DECLARATION}${PRE_CALL}env->${ENV_CALL}(${FIRST_PARAM_IN_CALL},
- g_${JAVA_CLASS}_${METHOD_ID_VAR_NAME}${PARAMS_IN_CALL})${POST_CALL};
- ${RETURN_CLAUSE}
-}""")
- values = self.GetCalledByNativeValues(called_by_native)
- return template.substitute(values)
def GetLazyCalledByNativeMethodStub(self, called_by_native):
"""Returns a string."""
@@ -1310,7 +1164,7 @@ const char k${JAVA_CLASS}ClassPath[] = "${JNI_CLASS_PATH}";""")
for clazz in all_classes:
values = {
'JAVA_CLASS': clazz,
- 'JNI_CLASS_PATH': JniParams.RemapClassName(all_classes[clazz]),
+ 'JNI_CLASS_PATH': all_classes[clazz],
}
ret += [template.substitute(values)]
ret += ''
@@ -1339,18 +1193,9 @@ jclass g_${JAVA_CLASS}_clazz = NULL;
def GetFindClasses(self):
"""Returns the imlementation of FindClass for all known classes."""
- if self.init_native:
- if self.options.native_exports:
- template = Template("""\
- base::subtle::Release_Store(&g_${JAVA_CLASS}_clazz,
- static_cast<base::subtle::AtomicWord>(env->NewWeakGlobalRef(clazz));""")
- else:
- template = Template("""\
- g_${JAVA_CLASS}_clazz = static_cast<jclass>(env->NewWeakGlobalRef(clazz));""")
- else:
- if self.options.native_exports:
- return '\n'
- template = Template("""\
+ if self.options.native_exports:
+ return '\n'
+ template = Template("""\
g_${JAVA_CLASS}_clazz = reinterpret_cast<jclass>(env->NewGlobalRef(
base::android::GetClass(env, k${JAVA_CLASS}ClassPath).obj()));""")
ret = []
@@ -1361,13 +1206,7 @@ jclass g_${JAVA_CLASS}_clazz = NULL;
def GetMethodIDImpl(self, called_by_native):
"""Returns the implementation of GetMethodID."""
- if self.options.eager_called_by_natives:
- template = Template("""\
-env->Get${STATIC_METHOD_PART}MethodID(
- ${JAVA_CLASS}_clazz(env),
- "${JNI_NAME}", ${JNI_SIGNATURE});""")
- else:
- template = Template("""\
+ template = Template("""\
base::android::MethodID::LazyGet<
base::android::MethodID::TYPE_${STATIC}>(
env, ${JAVA_CLASS}_clazz(env),
@@ -1391,7 +1230,6 @@ env->Get${STATIC_METHOD_PART}MethodID(
'JNI_NAME': jni_name,
'METHOD_ID_VAR_NAME': called_by_native.method_id_var_name,
'STATIC': 'STATIC' if called_by_native.static else 'INSTANCE',
- 'STATIC_METHOD_PART': 'Static' if called_by_native.static else '',
'JNI_SIGNATURE': signature,
}
return template.substitute(values)
@@ -1513,36 +1351,17 @@ See SampleForTests.java for more details.
default=0, help='Whether we should optimize JNI '
'generation by not regenerating files if they have '
'not changed.')
- option_parser.add_option('--jarjar',
- help='Path to optional jarjar rules file.')
option_parser.add_option('--script_name', default=GetScriptName(),
help='The name of this script in the generated '
'header.')
option_parser.add_option('--includes',
help='The comma-separated list of header files to '
'include in the generated header.')
- option_parser.add_option('--pure_native_methods',
- action='store_true', dest='pure_native_methods',
- help='When true, the native methods will be called '
- 'without any JNI-specific arguments.')
option_parser.add_option('--ptr_type', default='int',
type='choice', choices=['int', 'long'],
help='The type used to represent native pointers in '
'Java code. For 32-bit, use int; '
'for 64-bit, use long.')
- option_parser.add_option('--jni_init_native_name', default='',
- help='The name of the JNI registration method that '
- 'is used to initialize all native methods. If a '
- 'method with this name is not present in the Java '
- 'source file, setting this option is a no-op. When '
- 'a method with this name is found however, the '
- 'naming convention Java_<packageName>_<className> '
- 'will limit the initialization to only the '
- 'top-level class.')
- option_parser.add_option('--eager_called_by_natives',
- action='store_true', dest='eager_called_by_natives',
- help='When true, the called-by-native methods will '
- 'be initialized in a non-atomic way.')
option_parser.add_option('--cpp', default='cpp',
help='The path to cpp command.')
option_parser.add_option('--javap', default='javap',
@@ -1569,9 +1388,6 @@ See SampleForTests.java for more details.
if options.output_dir:
root_name = os.path.splitext(os.path.basename(input_file))[0]
output_file = os.path.join(options.output_dir, root_name) + '_jni.h'
- if options.jarjar:
- with open(options.jarjar) as f:
- JniParams.SetJarJarMappings(f.read())
GenerateJNIHeader(input_file, output_file, options)
if options.depfile:
« no previous file with comments | « no previous file | base/android/jni_generator/jni_generator_tests.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698