Index: build/android/pylib/utils/findbugs.py |
diff --git a/build/android/pylib/utils/findbugs.py b/build/android/pylib/utils/findbugs.py |
deleted file mode 100644 |
index 8deb0fe274de99773ccb53be24e720fb2ba9251c..0000000000000000000000000000000000000000 |
--- a/build/android/pylib/utils/findbugs.py |
+++ /dev/null |
@@ -1,154 +0,0 @@ |
-# Copyright (c) 2012 The Chromium Authors. All rights reserved. |
-# Use of this source code is governed by a BSD-style license that can be |
-# found in the LICENSE file. |
- |
-import argparse |
-import logging |
-import os |
-import re |
-import shlex |
-import sys |
-import xml.dom.minidom |
- |
-from pylib import cmd_helper |
-from pylib import constants |
- |
- |
-_FINDBUGS_HOME = os.path.join(constants.DIR_SOURCE_ROOT, 'third_party', |
- 'findbugs') |
-_FINDBUGS_JAR = os.path.join(_FINDBUGS_HOME, 'lib', 'findbugs.jar') |
-_FINDBUGS_MAX_HEAP = 768 |
-_FINDBUGS_PLUGIN_PATH = os.path.join( |
- constants.DIR_SOURCE_ROOT, 'tools', 'android', 'findbugs_plugin', 'lib', |
- 'chromiumPlugin.jar') |
- |
- |
-def _ParseXmlResults(results_doc): |
- warnings = set() |
- for en in (n for n in results_doc.documentElement.childNodes |
- if n.nodeType == xml.dom.Node.ELEMENT_NODE): |
- if en.tagName == 'BugInstance': |
- warnings.add(_ParseBugInstance(en)) |
- return warnings |
- |
- |
-def _GetMessage(node): |
- for c in (n for n in node.childNodes |
- if n.nodeType == xml.dom.Node.ELEMENT_NODE): |
- if c.tagName == 'Message': |
- if (len(c.childNodes) == 1 |
- and c.childNodes[0].nodeType == xml.dom.Node.TEXT_NODE): |
- return c.childNodes[0].data |
- return None |
- |
- |
-def _ParseBugInstance(node): |
- bug = FindBugsWarning(node.getAttribute('type')) |
- msg_parts = [] |
- for c in (n for n in node.childNodes |
- if n.nodeType == xml.dom.Node.ELEMENT_NODE): |
- if c.tagName == 'Class': |
- msg_parts.append(_GetMessage(c)) |
- elif c.tagName == 'Method': |
- msg_parts.append(_GetMessage(c)) |
- elif c.tagName == 'Field': |
- msg_parts.append(_GetMessage(c)) |
- elif c.tagName == 'SourceLine': |
- bug.file_name = c.getAttribute('sourcefile') |
- if c.hasAttribute('start'): |
- bug.start_line = int(c.getAttribute('start')) |
- if c.hasAttribute('end'): |
- bug.end_line = int(c.getAttribute('end')) |
- msg_parts.append(_GetMessage(c)) |
- elif (c.tagName == 'ShortMessage' and len(c.childNodes) == 1 |
- and c.childNodes[0].nodeType == xml.dom.Node.TEXT_NODE): |
- msg_parts.append(c.childNodes[0].data) |
- bug.message = tuple(m for m in msg_parts if m) |
- return bug |
- |
- |
-class FindBugsWarning(object): |
- |
- def __init__(self, bug_type='', end_line=0, file_name='', message=None, |
- start_line=0): |
- self.bug_type = bug_type |
- self.end_line = end_line |
- self.file_name = file_name |
- if message is None: |
- self.message = tuple() |
- else: |
- self.message = message |
- self.start_line = start_line |
- |
- def __cmp__(self, other): |
- return (cmp(self.file_name, other.file_name) |
- or cmp(self.start_line, other.start_line) |
- or cmp(self.end_line, other.end_line) |
- or cmp(self.bug_type, other.bug_type) |
- or cmp(self.message, other.message)) |
- |
- def __eq__(self, other): |
- return self.__dict__ == other.__dict__ |
- |
- def __hash__(self): |
- return hash((self.bug_type, self.end_line, self.file_name, self.message, |
- self.start_line)) |
- |
- def __ne__(self, other): |
- return not self == other |
- |
- def __str__(self): |
- return '%s: %s' % (self.bug_type, '\n '.join(self.message)) |
- |
- |
-def Run(exclude, classes_to_analyze, auxiliary_classes, output_file, |
- findbug_args, jars): |
- """Run FindBugs. |
- |
- Args: |
- exclude: the exclude xml file, refer to FindBugs's -exclude command option. |
- classes_to_analyze: the list of classes need to analyze, refer to FindBug's |
- -onlyAnalyze command line option. |
- auxiliary_classes: the classes help to analyze, refer to FindBug's |
- -auxclasspath command line option. |
- output_file: An optional path to dump XML results to. |
- findbug_args: A list of addtional command line options to pass to Findbugs. |
- """ |
- # TODO(jbudorick): Get this from the build system. |
- system_classes = [ |
- os.path.join(constants.ANDROID_SDK_ROOT, 'platforms', |
- 'android-%s' % constants.ANDROID_SDK_VERSION, 'android.jar') |
- ] |
- system_classes.extend(os.path.abspath(classes) |
- for classes in auxiliary_classes or []) |
- |
- cmd = ['java', |
- '-classpath', '%s:' % _FINDBUGS_JAR, |
- '-Xmx%dm' % _FINDBUGS_MAX_HEAP, |
- '-Dfindbugs.home="%s"' % _FINDBUGS_HOME, |
- '-jar', _FINDBUGS_JAR, |
- '-textui', '-sortByClass', |
- '-pluginList', _FINDBUGS_PLUGIN_PATH, '-xml:withMessages'] |
- if system_classes: |
- cmd.extend(['-auxclasspath', ':'.join(system_classes)]) |
- if classes_to_analyze: |
- cmd.extend(['-onlyAnalyze', classes_to_analyze]) |
- if exclude: |
- cmd.extend(['-exclude', os.path.abspath(exclude)]) |
- if output_file: |
- cmd.extend(['-output', output_file]) |
- if findbug_args: |
- cmd.extend(findbug_args) |
- cmd.extend(os.path.abspath(j) for j in jars or []) |
- |
- if output_file: |
- cmd_helper.RunCmd(cmd) |
- results_doc = xml.dom.minidom.parse(output_file) |
- else: |
- raw_out = cmd_helper.GetCmdOutput(cmd) |
- results_doc = xml.dom.minidom.parseString(raw_out) |
- |
- current_warnings_set = _ParseXmlResults(results_doc) |
- |
- return (' '.join(cmd), current_warnings_set) |
- |