 Chromium Code Reviews
 Chromium Code Reviews Issue 1000793002:
  [Android] Incorporate findbugs into android builds.  (Closed) 
  Base URL: https://chromium.googlesource.com/chromium/src.git@master
    
  
    Issue 1000793002:
  [Android] Incorporate findbugs into android builds.  (Closed) 
  Base URL: https://chromium.googlesource.com/chromium/src.git@master| Index: build/android/findbugs_diff.py | 
| diff --git a/build/android/findbugs_diff.py b/build/android/findbugs_diff.py | 
| index 28224f1a3871c59dfe53e58c25a7140bc781834d..b518946608ea3237ba38868402a3decd6e8c36f7 100755 | 
| --- a/build/android/findbugs_diff.py | 
| +++ b/build/android/findbugs_diff.py | 
| @@ -5,14 +5,6 @@ | 
| # found in the LICENSE file. | 
| """Runs findbugs, and returns an error code if there are new warnings. | 
| -This runs findbugs with an additional flag to exclude known bugs. | 
| -To update the list of known bugs, do this: | 
| - | 
| - findbugs_diff.py --rebaseline | 
| - | 
| -Note that this is separate from findbugs_exclude.xml. The "exclude" file has | 
| -false positives that we do not plan to fix. The "known bugs" file has real | 
| -bugs that we *do* plan to fix (but haven't done so yet). | 
| Other options | 
| --only-analyze used to only analyze the class you are interested. | 
| @@ -20,30 +12,98 @@ Other options | 
| --findbugs-args used to passin other findbugs's options. | 
| Run | 
| - $CHROM_SRC/third_party/findbugs/bin/findbugs -textui for details. | 
| + $CHROMIUM_SRC/third_party/findbugs/bin/findbugs -textui for details. | 
| """ | 
| +import argparse | 
| import os | 
| import sys | 
| from pylib import constants | 
| from pylib.utils import findbugs | 
| +_DEFAULT_BASE_DIR = os.path.join( | 
| + constants.DIR_SOURCE_ROOT, 'build', 'android', 'findbugs_filter') | 
| + | 
| +sys.path.append( | 
| + os.path.join(constants.DIR_SOURCE_ROOT, 'build', 'android', 'gyp')) | 
| +from util import build_utils | 
| + | 
| def main(): | 
| - parser = findbugs.GetCommonParser() | 
| + parser = argparse.ArgumentParser() | 
| + | 
| + parser.add_argument( | 
| + '-a', '--auxclasspath', default=None, dest='auxclasspath', | 
| + help='Set aux classpath for analysis.') | 
| + parser.add_argument( | 
| + '--auxclasspath-gyp', dest='auxclasspath_gyp', | 
| + help='A gyp list containing the aux classpath for analysis') | 
| + parser.add_argument( | 
| + '-o', '--only-analyze', default=None, | 
| + dest='only_analyze', help='Only analyze the given classes and packages.') | 
| + parser.add_argument( | 
| + '-e', '--exclude', default=None, dest='exclude', | 
| + help='Exclude bugs matching given filter.') | 
| + parser.add_argument( | 
| + '-l', '--release-build', action='store_true', dest='release_build', | 
| + help='Analyze release build instead of debug.') | 
| + parser.add_argument( | 
| + '-f', '--findbug-args', default=None, dest='findbug_args', | 
| + help='Additional findbug arguments.') | 
| + parser.add_argument( | 
| + '-b', '--base-dir', default=_DEFAULT_BASE_DIR, | 
| + dest='base_dir', help='Base directory for configuration file.') | 
| + parser.add_argument( | 
| + '--output-file', dest='output_file', | 
| + help='Path to save the output to.') | 
| + parser.add_argument( | 
| + '--stamp', help='Path to touch on success.') | 
| + parser.add_argument( | 
| + '--depfile', help='Path to the depfile. This must be specified as the ' | 
| + "action's first output.") | 
| - options, _ = parser.parse_args() | 
| + parser.add_argument( | 
| + 'jar_paths', metavar='JAR_PATH', nargs='+', | 
| + help='JAR file to analyze') | 
| - if not options.base_dir: | 
| - options.base_dir = os.path.join(constants.DIR_SOURCE_ROOT, 'build', | 
| - 'android', 'findbugs_filter') | 
| - if not options.only_analyze: | 
| - options.only_analyze = 'org.chromium.-' | 
| + args = parser.parse_args(build_utils.ExpandFileArgs(sys.argv[1:])) | 
| + if args.auxclasspath: | 
| + args.auxclasspath = args.auxclasspath.split(':') | 
| + elif args.auxclasspath_gyp: | 
| + args.auxclasspath = build_utils.ParseGypList(args.auxclasspath_gyp) | 
| - return findbugs.Run(options) | 
| + if args.base_dir: | 
| + if not args.exclude: | 
| + args.exclude = os.path.join(args.base_dir, 'findbugs_exclude.xml') | 
| + | 
| + findbugs_command, findbugs_warnings = findbugs.Run( | 
| + args.exclude, args.only_analyze, args.auxclasspath, | 
| + args.output_file, args.findbug_args, args.jar_paths) | 
| + | 
| + if findbugs_warnings: | 
| + print '*' * 80 | 
| + print 'FindBugs run via:' | 
| + print findbugs_command | 
| + print 'FindBugs reported the following issues:' | 
| + for warning in sorted(findbugs_warnings): | 
| + print str(warning) | 
| + print '*' * 80 | 
| + else: | 
| + if args.depfile: | 
| + build_utils.WriteDepfile( | 
| + args.depfile, | 
| + build_utils.GetPythonDependencies()) | 
| 
cjhopman
2015/03/24 01:01:07
This list of inputs should include jar_paths and t
 
jbudorick
2015/03/24 01:21:07
Done.
 | 
| + if args.stamp: | 
| + build_utils.Touch(args.stamp) | 
| + | 
| + return len(findbugs_warnings) | 
| if __name__ == '__main__': | 
| sys.exit(main()) | 
| + |