15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#!/usr/bin/env python
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# Copyright (c) 2012 The Chromium Authors. All rights reserved.
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# Use of this source code is governed by a BSD-style license that can be
55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# found in the LICENSE file.
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)"""Runs findbugs, and returns an error code if there are new warnings.
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)This runs findbugs with an additional flag to exclude known bugs.
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)To update the list of known bugs, do this:
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   findbugs_diff.py --rebaseline
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)Note that this is separate from findbugs_exclude.xml. The "exclude" file has
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)false positives that we do not plan to fix. The "known bugs" file has real
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bugs that we *do* plan to fix (but haven't done so yet).
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)Other options
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  --only-analyze used to only analyze the class you are interested.
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  --relase-build analyze the classes in out/Release directory.
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  --findbugs-args used to passin other findbugs's options.
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)Run
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  $CHROM_SRC/third_party/findbugs/bin/findbugs -textui for details.
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)"""
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)import optparse
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)import os
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)import sys
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)from pylib import constants
322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)from pylib.utils import findbugs
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)def main(argv):
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  parser = findbugs.GetCommonParser()
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  options, _ = parser.parse_args()
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if not options.base_dir:
41868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)    options.base_dir = os.path.join(constants.DIR_SOURCE_ROOT, 'build',
42868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)                                    'android', 'findbugs_filter')
435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if not options.only_analyze:
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    options.only_analyze = 'org.chromium.-'
455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return findbugs.Run(options)
475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)if __name__ == '__main__':
505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  sys.exit(main(sys.argv))
51