Index: components/cronet/tools/api_static_checks.py |
diff --git a/components/cronet/tools/api_static_checks.py b/components/cronet/tools/api_static_checks.py |
index 1c67132ce428fc83e15452175cf876913384a5d6..861594773d0e272b7a33f614fb0d030187c3db9b 100755 |
--- a/components/cronet/tools/api_static_checks.py |
+++ b/components/cronet/tools/api_static_checks.py |
@@ -3,9 +3,7 @@ |
# Use of this source code is governed by a BSD-style license that can be |
# found in the LICENSE file. |
-"""api_static_checks.py - Check Cronet implementation does not call through |
-API classes. |
-""" |
+"""api_static_checks.py - Enforce Cronet API requirements.""" |
import argparse |
import os |
@@ -14,6 +12,8 @@ import shutil |
import sys |
import tempfile |
+import update_api |
+ |
REPOSITORY_ROOT = os.path.abspath(os.path.join( |
os.path.dirname(__file__), '..', '..', '..')) |
@@ -22,7 +22,7 @@ import build_utils |
# These regular expressions catch the beginning of lines that declar classes and |
# methods. The first group returned by a match is the class or method name. |
-CLASS_RE = re.compile(r'.*class ([^ ]*) .*{') |
+from update_api import CLASS_RE |
METHOD_RE = re.compile(r'.* ([^ ]*)\(.*\);') |
# Allowed exceptions. Adding anything to this list is dangerous and should be |
@@ -93,24 +93,9 @@ def find_api_calls(dump, api_classes, bad_calls): |
bad_calls += [bad_call] |
-def main(args): |
+def check_api_calls(opts): |
# Returns True if no calls through API classes in implementation. |
- parser = argparse.ArgumentParser( |
- description='Check modules do not contain ARM Neon instructions.') |
- parser.add_argument('--api_jar', |
- help='Path to API jar (i.e. cronet_api.jar)', |
- required=True, |
- metavar='path/to/cronet_api.jar') |
- parser.add_argument('--impl_jar', |
- help='Path to implementation jar ' |
- '(i.e. cronet_impl_native_java.jar)', |
- required=True, |
- metavar='path/to/cronet_impl_native_java.jar', |
- action='append') |
- parser.add_argument('--stamp', help='Path to touch on success.') |
- opts = parser.parse_args(args) |
- |
temp_dir = tempfile.mkdtemp() |
# Extract API class files from jar |
@@ -162,10 +147,40 @@ def main(args): |
print ' does not contain newer methods. Please call through a' |
print ' wrapper class from VersionSafeCallbacks.' |
print '\n'.join(api_calls) |
+ return not api_calls |
+ |
- if not api_calls and opts.stamp: |
+def check_api_version(opts): |
+ if update_api.check_up_to_date(opts.api_jar): |
+ return True |
+ print 'ERROR: API file out of date. Please run this command:' |
+ print ' components/cronet/tools/update_api.py --api_jar %s' % ( |
+ os.path.abspath(opts.api_jar)) |
+ return False |
+ |
+ |
+def main(args): |
+ parser = argparse.ArgumentParser( |
+ description='Enforce Cronet API requirements.') |
+ parser.add_argument('--api_jar', |
+ help='Path to API jar (i.e. cronet_api.jar)', |
+ required=True, |
+ metavar='path/to/cronet_api.jar') |
+ parser.add_argument('--impl_jar', |
+ help='Path to implementation jar ' |
+ '(i.e. cronet_impl_native_java.jar)', |
+ required=True, |
+ metavar='path/to/cronet_impl_native_java.jar', |
+ action='append') |
+ parser.add_argument('--stamp', help='Path to touch on success.') |
+ opts = parser.parse_args(args) |
+ |
+ ret = True |
+ ret = check_api_calls(opts) and ret |
+ ret = check_api_version(opts) and ret |
+ if ret and opts.stamp: |
build_utils.Touch(opts.stamp) |
- return not api_calls |
+ return ret |
if __name__ == '__main__': |