summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorjbudorick <jbudorick@chromium.org>2015-03-23 20:14:39 -0700
committerCommit bot <commit-bot@chromium.org>2015-03-24 03:15:40 +0000
commit45816be817451773244bf491806806be2cbab1cf (patch)
tree1f73db42adab4878b7a9dbc42db31676bc0cbf8a
parent875513095d90b9520fdb2d3996684166fe079f98 (diff)
downloadchromium_src-45816be817451773244bf491806806be2cbab1cf.zip
chromium_src-45816be817451773244bf491806806be2cbab1cf.tar.gz
chromium_src-45816be817451773244bf491806806be2cbab1cf.tar.bz2
[Android] Incorporate findbugs into android builds.
BUG=431823 Review URL: https://codereview.chromium.org/1000793002 Cr-Commit-Position: refs/heads/master@{#321927}
-rw-r--r--android_webview/glue/java/src/com/android/webview/chromium/ContentSettingsAdapter.java2
-rw-r--r--android_webview/glue/java/src/com/android/webview/chromium/CookieManagerAdapter.java2
-rw-r--r--android_webview/glue/java/src/com/android/webview/chromium/ResourcesContextWrapperFactory.java3
-rw-r--r--android_webview/glue/java/src/com/android/webview/chromium/WebBackForwardListChromium.java4
-rw-r--r--android_webview/glue/java/src/com/android/webview/chromium/WebHistoryItemChromium.java4
-rw-r--r--android_webview/glue/java/src/com/android/webview/chromium/WebViewChromium.java2
-rw-r--r--android_webview/glue/java/src/com/android/webview/chromium/WebViewContentsClientAdapter.java2
-rw-r--r--android_webview/java/src/org/chromium/android_webview/AwContents.java2
-rw-r--r--android_webview/java/src/org/chromium/android_webview/AwContentsClient.java2
-rw-r--r--android_webview/javatests/src/org/chromium/android_webview/test/AndroidScrollIntegrationTest.java2
-rw-r--r--android_webview/javatests/src/org/chromium/android_webview/test/AwContentsClientShouldOverrideUrlLoadingTest.java2
-rw-r--r--android_webview/javatests/src/org/chromium/android_webview/test/AwContentsTest.java2
-rw-r--r--android_webview/javatests/src/org/chromium/android_webview/test/AwLegacyQuirksTest.java2
-rw-r--r--android_webview/javatests/src/org/chromium/android_webview/test/ContentViewMiscTest.java2
-rw-r--r--android_webview/javatests/src/org/chromium/android_webview/test/LoadUrlTest.java3
-rw-r--r--android_webview/javatests/src/org/chromium/android_webview/test/NavigationHistoryTest.java2
-rw-r--r--android_webview/javatests/src/org/chromium/android_webview/test/PostMessageTest.java2
-rw-r--r--base/android/javatests/src/org/chromium/base/ObserverListTest.java1
-rw-r--r--build/android/PRESUBMIT.py21
-rwxr-xr-xbuild/android/buildbot/bb_host_steps.py14
-rwxr-xr-xbuild/android/buildbot/bb_run_bot.py5
-rw-r--r--build/android/findbugs_action.gypi22
-rwxr-xr-xbuild/android/findbugs_diff.py95
-rw-r--r--build/android/findbugs_filter/findbugs_exclude.xml32
-rw-r--r--build/android/pylib/utils/findbugs.py359
-rw-r--r--build/config/android/config.gni3
-rw-r--r--build/config/android/internal_rules.gni46
-rw-r--r--build/java.gypi27
-rw-r--r--build/java_apk.gypi28
-rw-r--r--build/protoc_java.gypi1
-rw-r--r--chrome/android/java/src/org/chromium/chrome/browser/ChromiumApplication.java3
-rw-r--r--chrome/android/javatests/src/org/chromium/chrome/browser/appmenu/AppMenuTest.java2
-rw-r--r--chrome/android/javatests/src/org/chromium/chrome/browser/autofill/AutofillTest.java2
-rw-r--r--chrome/android/javatests/src/org/chromium/chrome/browser/enhanced_bookmarks/EnhancedBookmarksModelTest.java2
-rw-r--r--chrome/android/javatests/src/org/chromium/chrome/browser/notifications/NotificationUIManagerTest.java2
-rw-r--r--chrome/android/javatests/src/org/chromium/chrome/browser/tabmodel/RestoreMigrateTest.java6
-rw-r--r--chrome/android/javatests/src/org/chromium/chrome/browser/webapps/AddToHomescreenDialogTest.java3
-rw-r--r--components/cronet/android/test/javatests/src/org/chromium/net/MockUrlRequestJobTest.java2
-rw-r--r--components/cronet/android/test/javatests/src/org/chromium/net/urlconnection/CronetHttpURLConnectionTest.java3
-rw-r--r--components/cronet/android/test/src/org/chromium/net/CronetTestActivity.java3
-rw-r--r--components/devtools_bridge/android/javatests/src/org/chromium/components/devtools_bridge/SocketTunnelServerTest.java3
-rw-r--r--components/devtools_bridge/android/javatests/src/org/chromium/components/devtools_bridge/commands/CommandSenderTest.java2
-rw-r--r--components/devtools_bridge/test/android/javatests/src/org/chromium/components/devtools_bridge/PeerConnectionObserverMock.java3
-rw-r--r--components/devtools_bridge/test/android/javatests/src/org/chromium/components/devtools_bridge/SignalingReceiverMock.java3
-rw-r--r--content/public/android/javatests/src/org/chromium/content/browser/JavaBridgeBasicsTest.java1
-rw-r--r--content/public/android/javatests/src/org/chromium/content/browser/JavaBridgeFieldsTest.java4
-rw-r--r--content/public/android/javatests/src/org/chromium/content/browser/LocationProviderTest.java2
-rw-r--r--content/public/android/javatests/src/org/chromium/content/common/CleanupReferenceTest.java4
-rw-r--r--third_party/cacheinvalidation/cacheinvalidation.gyp1
-rw-r--r--tools/android/findbugs_plugin/findbugs.xml4
-rw-r--r--tools/android/findbugs_plugin/findbugs_plugin.gyp1
-rw-r--r--tools/android/findbugs_plugin/lib/chromiumPlugin.jarbin3913 -> 4133 bytes
-rwxr-xr-xtools/android/findbugs_plugin/test/run_findbugs_plugin_tests.py85
53 files changed, 496 insertions, 339 deletions
diff --git a/android_webview/glue/java/src/com/android/webview/chromium/ContentSettingsAdapter.java b/android_webview/glue/java/src/com/android/webview/chromium/ContentSettingsAdapter.java
index 671cead..4c08e0f 100644
--- a/android_webview/glue/java/src/com/android/webview/chromium/ContentSettingsAdapter.java
+++ b/android_webview/glue/java/src/com/android/webview/chromium/ContentSettingsAdapter.java
@@ -10,12 +10,14 @@ import android.webkit.WebSettings.RenderPriority;
import android.webkit.WebSettings.ZoomDensity;
import org.chromium.android_webview.AwSettings;
+import org.chromium.base.annotations.SuppressFBWarnings;
/**
* Type adaptation layer between {@link android.webkit.WebSettings} and
* {@link org.chromium.android_webview.AwSettings}.
*/
@SuppressWarnings("deprecation")
+@SuppressFBWarnings("CHROMIUM_SYNCHRONIZED_METHOD")
public class ContentSettingsAdapter extends android.webkit.WebSettings {
private AwSettings mAwSettings;
diff --git a/android_webview/glue/java/src/com/android/webview/chromium/CookieManagerAdapter.java b/android_webview/glue/java/src/com/android/webview/chromium/CookieManagerAdapter.java
index 0520cb1..b0820fe 100644
--- a/android_webview/glue/java/src/com/android/webview/chromium/CookieManagerAdapter.java
+++ b/android_webview/glue/java/src/com/android/webview/chromium/CookieManagerAdapter.java
@@ -12,12 +12,14 @@ import android.webkit.ValueCallback;
import android.webkit.WebView;
import org.chromium.android_webview.AwCookieManager;
+import org.chromium.base.annotations.SuppressFBWarnings;
/**
* Chromium implementation of CookieManager -- forwards calls to the
* chromium internal implementation.
*/
@SuppressWarnings("deprecation")
+@SuppressFBWarnings("CHROMIUM_SYNCHRONIZED_METHOD")
public class CookieManagerAdapter extends CookieManager {
private static final String LOGTAG = "CookieManager";
diff --git a/android_webview/glue/java/src/com/android/webview/chromium/ResourcesContextWrapperFactory.java b/android_webview/glue/java/src/com/android/webview/chromium/ResourcesContextWrapperFactory.java
index fb64073..e33188f 100644
--- a/android_webview/glue/java/src/com/android/webview/chromium/ResourcesContextWrapperFactory.java
+++ b/android_webview/glue/java/src/com/android/webview/chromium/ResourcesContextWrapperFactory.java
@@ -9,6 +9,8 @@ import android.content.Context;
import android.content.ContextWrapper;
import android.view.LayoutInflater;
+import org.chromium.base.annotations.SuppressFBWarnings;
+
import java.util.WeakHashMap;
/**
@@ -40,6 +42,7 @@ public class ResourcesContextWrapperFactory {
return new ContextWrapper(ctx) {
private Context mApplicationContext;
+ @SuppressFBWarnings("DP_CREATE_CLASSLOADER_INSIDE_DO_PRIVILEGED")
@Override
public ClassLoader getClassLoader() {
final ClassLoader appCl = getBaseContext().getClassLoader();
diff --git a/android_webview/glue/java/src/com/android/webview/chromium/WebBackForwardListChromium.java b/android_webview/glue/java/src/com/android/webview/chromium/WebBackForwardListChromium.java
index 0a49a49..7b10cab 100644
--- a/android_webview/glue/java/src/com/android/webview/chromium/WebBackForwardListChromium.java
+++ b/android_webview/glue/java/src/com/android/webview/chromium/WebBackForwardListChromium.java
@@ -7,6 +7,7 @@ package com.android.webview.chromium;
import android.webkit.WebBackForwardList;
import android.webkit.WebHistoryItem;
+import org.chromium.base.annotations.SuppressFBWarnings;
import org.chromium.content_public.browser.NavigationHistory;
import java.util.ArrayList;
@@ -16,6 +17,9 @@ import java.util.List;
* WebView Chromium implementation of WebBackForwardList. Simple immutable
* wrapper around NavigationHistory.
*/
+@SuppressFBWarnings({
+ "CHROMIUM_SYNCHRONIZED_METHOD",
+ "SE_BAD_FIELD"})
public class WebBackForwardListChromium extends WebBackForwardList {
private final List<WebHistoryItemChromium> mHistroryItemList;
private final int mCurrentIndex;
diff --git a/android_webview/glue/java/src/com/android/webview/chromium/WebHistoryItemChromium.java b/android_webview/glue/java/src/com/android/webview/chromium/WebHistoryItemChromium.java
index 44853da..5a93abc 100644
--- a/android_webview/glue/java/src/com/android/webview/chromium/WebHistoryItemChromium.java
+++ b/android_webview/glue/java/src/com/android/webview/chromium/WebHistoryItemChromium.java
@@ -7,6 +7,7 @@ package com.android.webview.chromium;
import android.graphics.Bitmap;
import android.webkit.WebHistoryItem;
+import org.chromium.base.annotations.SuppressFBWarnings;
import org.chromium.content_public.browser.NavigationEntry;
/**
@@ -79,6 +80,9 @@ public class WebHistoryItemChromium extends WebHistoryItem {
/**
* See {@link android.webkit.WebHistoryItem#clone}.
*/
+ @SuppressFBWarnings({
+ "CHROMIUM_SYNCHRONIZED_METHOD",
+ "CN_IDIOM_NO_SUPER_CALL"})
@Override
public synchronized WebHistoryItemChromium clone() {
return new WebHistoryItemChromium(mUrl, mOriginalUrl, mTitle, mFavicon);
diff --git a/android_webview/glue/java/src/com/android/webview/chromium/WebViewChromium.java b/android_webview/glue/java/src/com/android/webview/chromium/WebViewChromium.java
index b96e35e..dd543d5 100644
--- a/android_webview/glue/java/src/com/android/webview/chromium/WebViewChromium.java
+++ b/android_webview/glue/java/src/com/android/webview/chromium/WebViewChromium.java
@@ -46,6 +46,7 @@ import org.chromium.android_webview.AwContentsStatics;
import org.chromium.android_webview.AwPrintDocumentAdapter;
import org.chromium.android_webview.AwSettings;
import org.chromium.base.ThreadUtils;
+import org.chromium.base.annotations.SuppressFBWarnings;
import org.chromium.content.browser.SmartClipProvider;
import java.io.BufferedWriter;
@@ -1141,6 +1142,7 @@ class WebViewChromium implements WebViewProvider, WebViewProvider.ScrollDelegate
mAwContents.findAllAsync(searchString);
}
+ @SuppressFBWarnings("RCN_REDUNDANT_NULLCHECK_OF_NONNULL_VALUE")
@Override
public boolean showFindDialog(final String text, final boolean showIme) {
mFactory.startYourEngines(false);
diff --git a/android_webview/glue/java/src/com/android/webview/chromium/WebViewContentsClientAdapter.java b/android_webview/glue/java/src/com/android/webview/chromium/WebViewContentsClientAdapter.java
index 0cc8d22..650c194 100644
--- a/android_webview/glue/java/src/com/android/webview/chromium/WebViewContentsClientAdapter.java
+++ b/android_webview/glue/java/src/com/android/webview/chromium/WebViewContentsClientAdapter.java
@@ -46,6 +46,7 @@ import org.chromium.android_webview.JsResultReceiver;
import org.chromium.android_webview.permission.AwPermissionRequest;
import org.chromium.base.ThreadUtils;
import org.chromium.base.TraceEvent;
+import org.chromium.base.annotations.SuppressFBWarnings;
import org.chromium.content.browser.ContentView;
import org.chromium.content.browser.ContentViewClient;
import org.chromium.content.browser.ContentViewCore;
@@ -1203,6 +1204,7 @@ public class WebViewContentsClientAdapter extends AwContentsClient {
return mAwPermissionRequest.getOrigin();
}
+ @SuppressFBWarnings("CHROMIUM_SYNCHRONIZED_THIS")
@Override
public String[] getResources() {
synchronized (this) {
diff --git a/android_webview/java/src/org/chromium/android_webview/AwContents.java b/android_webview/java/src/org/chromium/android_webview/AwContents.java
index 8df209d..0f8974a 100644
--- a/android_webview/java/src/org/chromium/android_webview/AwContents.java
+++ b/android_webview/java/src/org/chromium/android_webview/AwContents.java
@@ -46,6 +46,7 @@ import org.chromium.base.JNINamespace;
import org.chromium.base.ThreadUtils;
import org.chromium.base.TraceEvent;
import org.chromium.base.VisibleForTesting;
+import org.chromium.base.annotations.SuppressFBWarnings;
import org.chromium.components.navigation_interception.InterceptNavigationDelegate;
import org.chromium.components.navigation_interception.NavigationParams;
import org.chromium.content.browser.ContentViewClient;
@@ -2422,6 +2423,7 @@ public class AwContents implements SmartClipProvider,
}
// Called as a result of nativeUpdateLastHitTestData.
+ @SuppressFBWarnings("URF_UNREAD_PUBLIC_OR_PROTECTED_FIELD")
@CalledByNative
private void updateHitTestData(
int type, String extra, String href, String anchorText, String imgSrc) {
diff --git a/android_webview/java/src/org/chromium/android_webview/AwContentsClient.java b/android_webview/java/src/org/chromium/android_webview/AwContentsClient.java
index 3c03243..acd1e9d 100644
--- a/android_webview/java/src/org/chromium/android_webview/AwContentsClient.java
+++ b/android_webview/java/src/org/chromium/android_webview/AwContentsClient.java
@@ -21,6 +21,7 @@ import android.webkit.ValueCallback;
import android.webkit.WebChromeClient;
import org.chromium.android_webview.permission.AwPermissionRequest;
+import org.chromium.base.annotations.SuppressFBWarnings;
import java.security.Principal;
import java.util.HashMap;
@@ -79,6 +80,7 @@ public abstract class AwContentsClient {
/**
* Parameters for the {@link AwContentsClient#shouldInterceptRequest} method.
*/
+ @SuppressFBWarnings("URF_UNREAD_PUBLIC_OR_PROTECTED_FIELD")
public static class AwWebResourceRequest {
// Url of the request.
public String url;
diff --git a/android_webview/javatests/src/org/chromium/android_webview/test/AndroidScrollIntegrationTest.java b/android_webview/javatests/src/org/chromium/android_webview/test/AndroidScrollIntegrationTest.java
index a5d7323..59b53e3 100644
--- a/android_webview/javatests/src/org/chromium/android_webview/test/AndroidScrollIntegrationTest.java
+++ b/android_webview/javatests/src/org/chromium/android_webview/test/AndroidScrollIntegrationTest.java
@@ -15,6 +15,7 @@ import org.chromium.android_webview.AwScrollOffsetManager;
import org.chromium.android_webview.test.util.AwTestTouchUtils;
import org.chromium.android_webview.test.util.CommonResources;
import org.chromium.android_webview.test.util.JavascriptEventObserver;
+import org.chromium.base.annotations.SuppressFBWarnings;
import org.chromium.base.test.util.Feature;
import org.chromium.base.test.util.MinAndroidSdkLevel;
import org.chromium.content.browser.test.util.CallbackHelper;
@@ -30,6 +31,7 @@ import java.util.concurrent.atomic.AtomicBoolean;
* Integration tests for synchronous scrolling.
*/
@MinAndroidSdkLevel(Build.VERSION_CODES.KITKAT)
+@SuppressFBWarnings("DLS_DEAD_LOCAL_STORE")
public class AndroidScrollIntegrationTest extends AwTestBase {
private static class OverScrollByCallbackHelper extends CallbackHelper {
int mDeltaX;
diff --git a/android_webview/javatests/src/org/chromium/android_webview/test/AwContentsClientShouldOverrideUrlLoadingTest.java b/android_webview/javatests/src/org/chromium/android_webview/test/AwContentsClientShouldOverrideUrlLoadingTest.java
index fb11cc1..ec9d887 100644
--- a/android_webview/javatests/src/org/chromium/android_webview/test/AwContentsClientShouldOverrideUrlLoadingTest.java
+++ b/android_webview/javatests/src/org/chromium/android_webview/test/AwContentsClientShouldOverrideUrlLoadingTest.java
@@ -11,6 +11,7 @@ import android.util.Pair;
import org.chromium.android_webview.AwContents;
import org.chromium.android_webview.test.util.CommonResources;
import org.chromium.android_webview.test.util.JSUtils;
+import org.chromium.base.annotations.SuppressFBWarnings;
import org.chromium.base.test.util.DisabledTest;
import org.chromium.base.test.util.Feature;
import org.chromium.base.test.util.MinAndroidSdkLevel;
@@ -825,6 +826,7 @@ public class AwContentsClientShouldOverrideUrlLoadingTest extends AwTestBase {
assertEquals(0, shouldOverrideUrlLoadingHelper.getCallCount());
}
+ @SuppressFBWarnings("DLS_DEAD_LOCAL_STORE")
@SmallTest
@Feature({"AndroidWebView"})
public void testCallDestroyInCallback() throws Throwable {
diff --git a/android_webview/javatests/src/org/chromium/android_webview/test/AwContentsTest.java b/android_webview/javatests/src/org/chromium/android_webview/test/AwContentsTest.java
index 5db0679..85db017 100644
--- a/android_webview/javatests/src/org/chromium/android_webview/test/AwContentsTest.java
+++ b/android_webview/javatests/src/org/chromium/android_webview/test/AwContentsTest.java
@@ -25,6 +25,7 @@ import org.chromium.android_webview.AwContents;
import org.chromium.android_webview.AwSettings;
import org.chromium.android_webview.test.TestAwContentsClient.OnDownloadStartHelper;
import org.chromium.android_webview.test.util.CommonResources;
+import org.chromium.base.annotations.SuppressFBWarnings;
import org.chromium.base.test.util.Feature;
import org.chromium.base.test.util.MinAndroidSdkLevel;
import org.chromium.content.browser.test.util.CallbackHelper;
@@ -468,6 +469,7 @@ public class AwContentsTest extends AwTestBase {
script));
}
+ @SuppressFBWarnings("DLS_DEAD_LOCAL_STORE")
@Feature({"AndroidWebView"})
@SmallTest
public void testCanInjectHeaders() throws Throwable {
diff --git a/android_webview/javatests/src/org/chromium/android_webview/test/AwLegacyQuirksTest.java b/android_webview/javatests/src/org/chromium/android_webview/test/AwLegacyQuirksTest.java
index f5f5bce..febbf83 100644
--- a/android_webview/javatests/src/org/chromium/android_webview/test/AwLegacyQuirksTest.java
+++ b/android_webview/javatests/src/org/chromium/android_webview/test/AwLegacyQuirksTest.java
@@ -10,6 +10,7 @@ import android.test.suitebuilder.annotation.MediumTest;
import org.chromium.android_webview.AwContents;
import org.chromium.android_webview.AwContentsClient;
import org.chromium.android_webview.AwSettings;
+import org.chromium.base.annotations.SuppressFBWarnings;
import org.chromium.base.test.util.Feature;
import org.chromium.base.test.util.MinAndroidSdkLevel;
import org.chromium.content.browser.test.util.CallbackHelper;
@@ -119,6 +120,7 @@ public class AwLegacyQuirksTest extends AwTestBase {
assertEquals(1.0f, getScaleOnUiThread(awContents));
}
+ @SuppressFBWarnings("DLS_DEAD_LOCAL_STORE")
@MediumTest
@Feature({"AndroidWebView"})
public void testScreenSizeInPhysicalPixelsQuirk() throws Throwable {
diff --git a/android_webview/javatests/src/org/chromium/android_webview/test/ContentViewMiscTest.java b/android_webview/javatests/src/org/chromium/android_webview/test/ContentViewMiscTest.java
index 2e16c04..942fb4a 100644
--- a/android_webview/javatests/src/org/chromium/android_webview/test/ContentViewMiscTest.java
+++ b/android_webview/javatests/src/org/chromium/android_webview/test/ContentViewMiscTest.java
@@ -14,6 +14,7 @@ import android.test.mock.MockContext;
import android.test.suitebuilder.annotation.SmallTest;
import org.chromium.android_webview.AwContents;
+import org.chromium.base.annotations.SuppressFBWarnings;
import org.chromium.base.test.util.Feature;
import org.chromium.base.test.util.MinAndroidSdkLevel;
import org.chromium.content.browser.ContentViewCore;
@@ -33,6 +34,7 @@ public class ContentViewMiscTest extends AwTestBase {
private AwContents mAwContents;
private ContentViewCore mContentViewCore;
+ @SuppressFBWarnings("URF_UNREAD_FIELD")
@Override
public void setUp() throws Exception {
super.setUp();
diff --git a/android_webview/javatests/src/org/chromium/android_webview/test/LoadUrlTest.java b/android_webview/javatests/src/org/chromium/android_webview/test/LoadUrlTest.java
index e494ad5..addbdbc 100644
--- a/android_webview/javatests/src/org/chromium/android_webview/test/LoadUrlTest.java
+++ b/android_webview/javatests/src/org/chromium/android_webview/test/LoadUrlTest.java
@@ -14,6 +14,7 @@ import org.chromium.android_webview.AwContents;
import org.chromium.android_webview.AwSettings;
import org.chromium.android_webview.test.util.CommonResources;
import org.chromium.android_webview.test.util.JSUtils;
+import org.chromium.base.annotations.SuppressFBWarnings;
import org.chromium.base.test.util.Feature;
import org.chromium.base.test.util.MinAndroidSdkLevel;
import org.chromium.content.browser.test.util.CallbackHelper;
@@ -240,6 +241,7 @@ public class LoadUrlTest extends AwTestBase {
}
}
+ @SuppressFBWarnings("DLS_DEAD_LOCAL_STORE")
@SmallTest
@Feature({"AndroidWebView"})
public void testRedirectAndReloadWithExtraHeaders() throws Throwable {
@@ -278,6 +280,7 @@ public class LoadUrlTest extends AwTestBase {
}
}
+ @SuppressFBWarnings("DLS_DEAD_LOCAL_STORE")
@SmallTest
@Feature({"AndroidWebView"})
public void testRendererNavigationAndGoBackWithExtraHeaders() throws Throwable {
diff --git a/android_webview/javatests/src/org/chromium/android_webview/test/NavigationHistoryTest.java b/android_webview/javatests/src/org/chromium/android_webview/test/NavigationHistoryTest.java
index 467e0bb..5a8c75d 100644
--- a/android_webview/javatests/src/org/chromium/android_webview/test/NavigationHistoryTest.java
+++ b/android_webview/javatests/src/org/chromium/android_webview/test/NavigationHistoryTest.java
@@ -10,6 +10,7 @@ import android.test.suitebuilder.annotation.SmallTest;
import org.chromium.android_webview.AwContents;
import org.chromium.android_webview.test.util.CommonResources;
import org.chromium.base.ThreadUtils;
+import org.chromium.base.annotations.SuppressFBWarnings;
import org.chromium.base.test.util.DisabledTest;
import org.chromium.base.test.util.MinAndroidSdkLevel;
import org.chromium.content.browser.test.util.HistoryUtils;
@@ -276,6 +277,7 @@ public class NavigationHistoryTest extends AwTestBase {
* @MediumTest
* @Feature({"AndroidWebView"})
*/
+ @SuppressFBWarnings("DLS_DEAD_LOCAL_STORE")
@DisabledTest
public void testNavigateBackToNoncacheableLoginPage() throws Throwable {
final TestCallbackHelperContainer.OnPageFinishedHelper onPageFinishedHelper =
diff --git a/android_webview/javatests/src/org/chromium/android_webview/test/PostMessageTest.java b/android_webview/javatests/src/org/chromium/android_webview/test/PostMessageTest.java
index 76f6cb0..2b89832 100644
--- a/android_webview/javatests/src/org/chromium/android_webview/test/PostMessageTest.java
+++ b/android_webview/javatests/src/org/chromium/android_webview/test/PostMessageTest.java
@@ -17,6 +17,7 @@ import org.chromium.android_webview.AwMessagePort;
import org.chromium.android_webview.AwMessagePortService;
import org.chromium.android_webview.test.util.CommonResources;
import org.chromium.base.ThreadUtils;
+import org.chromium.base.annotations.SuppressFBWarnings;
import org.chromium.base.test.util.DisabledTest;
import org.chromium.base.test.util.Feature;
import org.chromium.base.test.util.MinAndroidSdkLevel;
@@ -31,6 +32,7 @@ import java.util.concurrent.CountDownLatch;
* The tests for content postMessage API.
*/
@MinAndroidSdkLevel(Build.VERSION_CODES.KITKAT)
+@SuppressFBWarnings("DLS_DEAD_LOCAL_STORE")
public class PostMessageTest extends AwTestBase {
private static final String SOURCE_ORIGIN = "";
diff --git a/base/android/javatests/src/org/chromium/base/ObserverListTest.java b/base/android/javatests/src/org/chromium/base/ObserverListTest.java
index 599534a..c28d51d 100644
--- a/base/android/javatests/src/org/chromium/base/ObserverListTest.java
+++ b/base/android/javatests/src/org/chromium/base/ObserverListTest.java
@@ -248,7 +248,6 @@ public class ObserverListTest extends InstrumentationTestCase {
// If we remove an object while iterating, it will be replaced by 'null'.
observerList.addObserver(a);
- Iterator<Object> iterator = observerList.iterator();
assertTrue(observerList.removeObserver(a));
assertFalse(observerList.removeObserver(null));
}
diff --git a/build/android/PRESUBMIT.py b/build/android/PRESUBMIT.py
index d1daaf2..71fc467 100644
--- a/build/android/PRESUBMIT.py
+++ b/build/android/PRESUBMIT.py
@@ -8,25 +8,6 @@ See http://dev.chromium.org/developers/how-tos/depottools/presubmit-scripts for
details on the presubmit API built into depot_tools.
"""
-_DELETIONS_ONLY_FILES = (
- 'build/android/findbugs_filter/findbugs_known_bugs.txt',
-)
-
-
-def _CheckDeletionsOnlyFiles(input_api, output_api):
- """Check that a certain listed files only have deletions.
- """
- warnings = []
- for f in input_api.AffectedFiles():
- if f.LocalPath() in _DELETIONS_ONLY_FILES:
- if f.ChangedContents():
- warnings.append(f.LocalPath())
- results = []
- if warnings:
- results.append(output_api.PresubmitPromptWarning(
- 'Following files should only contain deletions.', warnings))
- return results
-
def CommonChecks(input_api, output_api):
output = []
@@ -70,8 +51,6 @@ def CommonChecks(input_api, output_api):
J('pylib', 'utils', 'md5sum_test.py'),
],
env=pylib_test_env))
- # TODO(jbudorick): Reenable this check once upstreaming is finished.
- # output.extend(_CheckDeletionsOnlyFiles(input_api, output_api))
return output
diff --git a/build/android/buildbot/bb_host_steps.py b/build/android/buildbot/bb_host_steps.py
index 4041ccd..6630321 100755
--- a/build/android/buildbot/bb_host_steps.py
+++ b/build/android/buildbot/bb_host_steps.py
@@ -14,7 +14,7 @@ from pylib import constants
SLAVE_SCRIPTS_DIR = os.path.join(bb_utils.BB_BUILD_DIR, 'scripts', 'slave')
-VALID_HOST_TESTS = set(['check_webview_licenses', 'findbugs'])
+VALID_HOST_TESTS = set(['check_webview_licenses'])
DIR_BUILD_ROOT = os.path.dirname(constants.DIR_SOURCE_ROOT)
@@ -78,17 +78,6 @@ def ExtractBuild(options):
+ bb_utils.EncodeProperties(options), cwd=DIR_BUILD_ROOT)
-def FindBugs(options):
- bb_annotations.PrintNamedStep('findbugs')
- build_type = []
- if options.target == 'Release':
- build_type = ['--release-build']
- RunCmd([SrcPath('build', 'android', 'findbugs_diff.py')] + build_type)
- RunCmd([SrcPath(
- 'tools', 'android', 'findbugs_plugin', 'test',
- 'run_findbugs_plugin_tests.py')] + build_type)
-
-
def BisectPerfRegression(options):
args = []
if options.extra_src:
@@ -105,7 +94,6 @@ def GetHostStepCmds():
('extract_build', ExtractBuild),
('check_webview_licenses', CheckWebViewLicenses),
('bisect_perf_regression', BisectPerfRegression),
- ('findbugs', FindBugs),
('zip_build', ZipBuild)
]
diff --git a/build/android/buildbot/bb_run_bot.py b/build/android/buildbot/bb_run_bot.py
index 29cce1b..4682aea 100755
--- a/build/android/buildbot/bb_run_bot.py
+++ b/build/android/buildbot/bb_run_bot.py
@@ -117,8 +117,7 @@ def GetBotStepMap():
compile_step = ['compile']
chrome_proxy_tests = ['chrome_proxy']
python_unittests = ['python_unittests']
- std_host_tests = ['check_webview_licenses', 'findbugs']
- emma_coverage_tests = [x for x in std_host_tests if x is not 'findbugs']
+ std_host_tests = ['check_webview_licenses']
std_build_steps = ['compile', 'zip_build']
std_test_steps = ['extract_build']
std_tests = ['ui', 'unit']
@@ -164,7 +163,7 @@ def GetBotStepMap():
B('fyi-x86-builder-dbg',
H(compile_step + std_host_tests, experimental, target_arch='ia32')),
B('fyi-builder-dbg',
- H(std_build_steps + emma_coverage_tests, experimental,
+ H(std_build_steps + std_host_tests, experimental,
extra_gyp='emma_coverage=1')),
B('x86-builder-dbg',
H(compile_step + std_host_tests, target_arch='ia32')),
diff --git a/build/android/findbugs_action.gypi b/build/android/findbugs_action.gypi
new file mode 100644
index 0000000..e3b3d36
--- /dev/null
+++ b/build/android/findbugs_action.gypi
@@ -0,0 +1,22 @@
+
+{
+ 'action_name': 'findbugs_<(_target_name)',
+ 'message': 'Running findbugs on <(_target_name)',
+ 'variables': {
+ },
+ 'inputs': [
+ '<(DEPTH)/build/android/findbugs_diff.py',
+ '<(DEPTH)/build/android/findbugs_filter/findbugs_exclude.xml',
+ '<(DEPTH)/build/android/pylib/utils/findbugs.py',
+ '<(findbugs_target_jar_path)',
+ ],
+ 'outputs': [
+ '<(stamp_path)',
+ ],
+ 'action': [
+ 'python', '<(DEPTH)/build/android/findbugs_diff.py',
+ '--auxclasspath-gyp', '>(auxclasspath)',
+ '--stamp', '<(stamp_path)',
+ '<(findbugs_target_jar_path)',
+ ],
+}
diff --git a/build/android/findbugs_diff.py b/build/android/findbugs_diff.py
index 28224f1..f55e462 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,99 @@ 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
+ print '*' * 80
+ print 'FindBugs run via:'
+ print findbugs_command
+ print
+ print 'FindBugs reported the following issues:'
+ for warning in sorted(findbugs_warnings):
+ print str(warning)
+ print '*' * 80
+ print
+ else:
+ if args.depfile:
+ build_utils.WriteDepfile(
+ args.depfile,
+ build_utils.GetPythonDependencies() + args.auxclasspath
+ + args.jar_paths)
+ if args.stamp:
+ build_utils.Touch(args.stamp)
+
+ return len(findbugs_warnings)
if __name__ == '__main__':
sys.exit(main())
+
diff --git a/build/android/findbugs_filter/findbugs_exclude.xml b/build/android/findbugs_filter/findbugs_exclude.xml
index 5060e47..dbff9d9 100644
--- a/build/android/findbugs_filter/findbugs_exclude.xml
+++ b/build/android/findbugs_filter/findbugs_exclude.xml
@@ -12,40 +12,12 @@ In particular, ~ at the start of a string means it's a regex.
<FindBugsFilter>
<!-- Skip the generated resource classes (including nested classes). -->
<Match>
- <Class name="~org\.chromium\..*\.R(\$\w+)?" />
+ <Class name="~.*\.R(\$\w+)?" />
</Match>
<Match>
<Class name="~org\.chromium\..*\.Manifest(\$\w+)?" />
</Match>
+ <Bug pattern="DM_STRING_CTOR" />
<!-- Ignore "reliance on default String encoding" warnings, as we're not multi-platform -->
- <Match>
- <Class name="~org\.chromium\.chrome\.browser\.ChromiumApplication.*" />
- <Method name="onCancel" />
- <Bug code="Dm" />
- </Match>
- <Match>
- <Class name="~org\.chromium\.chrome\.browser\.ChromiumApplication.*" />
- <Method name="onClick" />
- <Bug code="Dm" />
- </Match>
<Bug pattern="DM_DEFAULT_ENCODING" />
- <!-- Ignore bugs that are often false-positives in test code -->
- <Match>
- <Class name="~org\.chromium\..*Test(\$\w+)?" />
- <Or>
- <Bug code="DLS,UrF" />
- <Bug pattern="DM_GC" />
- </Or>
- </Match>
- <!--
- crbug.com/449101
- Ignore findbugs plugin test cases.
- -->
- <Match>
- <Or>
- <Class name="~org\.chromium\.tools\.findbugs\.plugin\.SimpleSynchronizedMethod" />
- <Class name="~org\.chromium\.tools\.findbugs\.plugin\.SimpleSynchronizedStaticMethod" />
- <Class name="~org\.chromium\.tools\.findbugs\.plugin\.SimpleSynchronizedThis" />
- </Or>
- </Match>
</FindBugsFilter>
diff --git a/build/android/pylib/utils/findbugs.py b/build/android/pylib/utils/findbugs.py
index 82408b0..8deb0fe 100644
--- a/build/android/pylib/utils/findbugs.py
+++ b/build/android/pylib/utils/findbugs.py
@@ -2,254 +2,153 @@
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
-import optparse
+import argparse
+import logging
import os
import re
import shlex
-import subprocess
import sys
+import xml.dom.minidom
from pylib import cmd_helper
from pylib import constants
-def _PrintMessage(warnings, title, action, known_bugs_file):
- if warnings:
- print
- print '*' * 80
- print '%s warnings.' % title
- print '%s %s' % (action, known_bugs_file)
- print '-' * 80
- for warning in warnings:
- print warning
- print '-' * 80
- print
-
-
-def _StripLineNumbers(current_warnings):
- re_line = r':\[line.*?\]$'
- return [re.sub(re_line, '', x) for x in current_warnings]
-
-
-def _DiffKnownWarnings(current_warnings_set, known_bugs_file):
- if os.path.exists(known_bugs_file):
- with open(known_bugs_file, 'r') as known_bugs:
- known_bugs_set = set(known_bugs.read().splitlines())
- else:
- known_bugs_set = set()
-
- new_warnings = current_warnings_set - known_bugs_set
- _PrintMessage(sorted(new_warnings), 'New', 'Please fix, or perhaps add to',
- known_bugs_file)
-
- obsolete_warnings = known_bugs_set - current_warnings_set
- _PrintMessage(sorted(obsolete_warnings), 'Obsolete', 'Please remove from',
- known_bugs_file)
-
- count = len(new_warnings) + len(obsolete_warnings)
- if count:
- print '*** %d FindBugs warning%s! ***' % (count, 's' * (count > 1))
- if len(new_warnings):
- print '*** %d: new ***' % len(new_warnings)
- if len(obsolete_warnings):
- print '*** %d: obsolete ***' % len(obsolete_warnings)
- print
- print 'Alternatively, rebaseline with --rebaseline command option'
- print
- else:
- print 'No new FindBugs warnings.'
- print
- return count
-
-
-def _Rebaseline(current_warnings_set, known_bugs_file):
- with file(known_bugs_file, 'w') as known_bugs:
- for warning in sorted(current_warnings_set):
- print >> known_bugs, warning
- return 0
-
-
-def _GetChromeJars(release_version):
- version = 'Debug'
- if release_version:
- version = 'Release'
- path = os.path.join(constants.DIR_SOURCE_ROOT,
- os.environ.get('CHROMIUM_OUT_DIR', 'out'),
- version,
- 'lib.java')
- cmd = 'find %s -name "*.jar"' % path
- out = cmd_helper.GetCmdOutput(shlex.split(cmd))
- out = [p for p in out.splitlines() if not p.endswith('.dex.jar')]
- if not out:
- print 'No classes found in %s' % path
- return ' '.join(out)
-
-
-def _Run(exclude, known_bugs, classes_to_analyze, auxiliary_classes,
- rebaseline, release_version, findbug_args):
- """Run the FindBugs.
+_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.
- known_bugs: the text file of known bugs. The bugs in it will not be
- reported.
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.
- rebaseline: True if the known_bugs file needs rebaseline.
- release_version: True if the release version needs check, otherwise check
- debug version.
- findbug_args: addtional command line options needs pass to Findbugs.
+ output_file: An optional path to dump XML results to.
+ findbug_args: A list of addtional command line options to pass to Findbugs.
"""
-
- chrome_src = constants.DIR_SOURCE_ROOT
- sdk_root = constants.ANDROID_SDK_ROOT
- sdk_version = constants.ANDROID_SDK_VERSION
-
- system_classes = []
- system_classes.append(os.path.join(sdk_root, 'platforms',
- 'android-%s' % sdk_version, 'android.jar'))
- if auxiliary_classes:
- for classes in auxiliary_classes:
- system_classes.append(os.path.abspath(classes))
-
- findbugs_javacmd = 'java'
- findbugs_home = os.path.join(chrome_src, 'third_party', 'findbugs')
- findbugs_jar = os.path.join(findbugs_home, 'lib', 'findbugs.jar')
- findbugs_pathsep = ':'
- findbugs_maxheap = '768'
-
- cmd = '%s ' % findbugs_javacmd
- cmd = '%s -classpath %s%s' % (cmd, findbugs_jar, findbugs_pathsep)
- cmd = '%s -Xmx%sm ' % (cmd, findbugs_maxheap)
- cmd = '%s -Dfindbugs.home="%s" ' % (cmd, findbugs_home)
- cmd = '%s -jar %s ' % (cmd, findbugs_jar)
-
- cmd = '%s -textui -sortByClass ' % cmd
- cmd = '%s -pluginList %s' % (cmd, os.path.join(chrome_src, 'tools', 'android',
- 'findbugs_plugin', 'lib',
- 'chromiumPlugin.jar'))
- if len(system_classes):
- cmd = '%s -auxclasspath %s ' % (cmd, ':'.join(system_classes))
-
+ # 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 = '%s -onlyAnalyze %s ' % (cmd, classes_to_analyze)
-
+ cmd.extend(['-onlyAnalyze', classes_to_analyze])
if exclude:
- cmd = '%s -exclude %s ' % (cmd, os.path.abspath(exclude))
-
+ cmd.extend(['-exclude', os.path.abspath(exclude)])
+ if output_file:
+ cmd.extend(['-output', output_file])
if findbug_args:
- cmd = '%s %s ' % (cmd, findbug_args)
-
- chrome_classes = _GetChromeJars(release_version)
- if not chrome_classes:
- return 1
- cmd = '%s %s ' % (cmd, chrome_classes)
-
- print
- print '*' * 80
- print 'Command used to run findbugs:'
- print cmd
- print '*' * 80
- print
-
- proc = subprocess.Popen(shlex.split(cmd),
- stdout=subprocess.PIPE, stderr=subprocess.PIPE)
- out, _err = proc.communicate()
- current_warnings_set = set(_StripLineNumbers(filter(None, out.splitlines())))
-
- if rebaseline:
- return _Rebaseline(current_warnings_set, known_bugs)
+ 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:
- return _DiffKnownWarnings(current_warnings_set, known_bugs)
-
-def Run(options):
- exclude_file = None
- known_bugs_file = None
-
- if options.exclude:
- exclude_file = options.exclude
- elif options.base_dir:
- exclude_file = os.path.join(options.base_dir, 'findbugs_exclude.xml')
-
- if options.known_bugs:
- known_bugs_file = options.known_bugs
- elif options.base_dir:
- known_bugs_file = os.path.join(options.base_dir, 'findbugs_known_bugs.txt')
-
- auxclasspath = None
- if options.auxclasspath:
- auxclasspath = options.auxclasspath.split(':')
- return _Run(exclude_file, known_bugs_file, options.only_analyze, auxclasspath,
- options.rebaseline, options.release_build, options.findbug_args)
-
-
-def GetCommonParser():
- parser = optparse.OptionParser()
- parser.add_option('-r',
- '--rebaseline',
- action='store_true',
- dest='rebaseline',
- help='Rebaseline known findbugs issues.')
-
- parser.add_option('-a',
- '--auxclasspath',
- action='store',
- default=None,
- dest='auxclasspath',
- help='Set aux classpath for analysis.')
-
- parser.add_option('-o',
- '--only-analyze',
- action='store',
- default=None,
- dest='only_analyze',
- help='Only analyze the given classes and packages.')
-
- parser.add_option('-e',
- '--exclude',
- action='store',
- default=None,
- dest='exclude',
- help='Exclude bugs matching given filter.')
-
- parser.add_option('-k',
- '--known-bugs',
- action='store',
- default=None,
- dest='known_bugs',
- help='Not report the bugs in the given file.')
-
- parser.add_option('-l',
- '--release-build',
- action='store_true',
- dest='release_build',
- help='Analyze release build instead of debug.')
-
- parser.add_option('-f',
- '--findbug-args',
- action='store',
- default=None,
- dest='findbug_args',
- help='Additional findbug arguments.')
-
- parser.add_option('-b',
- '--base-dir',
- action='store',
- default=None,
- dest='base_dir',
- help='Base directory for configuration file.')
-
- return parser
-
-
-def main():
- parser = GetCommonParser()
- options, _ = parser.parse_args()
-
- return Run(options)
-
-
-if __name__ == '__main__':
- sys.exit(main())
+ 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)
+
diff --git a/build/config/android/config.gni b/build/config/android/config.gni
index 5a27e78..6e8a312 100644
--- a/build/config/android/config.gni
+++ b/build/config/android/config.gni
@@ -44,6 +44,9 @@ if (is_android) {
# identifying various build artifacts corresponding to a particular build of
# chrome (e.g. where to find archived symbols).
android_chrome_build_id = "\"\""
+
+ # Set to true to run findbugs on JAR targets.
+ run_findbugs = false
}
# Host stuff -----------------------------------------------------------------
diff --git a/build/config/android/internal_rules.gni b/build/config/android/internal_rules.gni
index 8920e95..679213f 100644
--- a/build/config/android/internal_rules.gni
+++ b/build/config/android/internal_rules.gni
@@ -62,6 +62,44 @@ template("android_lint") {
}
}
+template("findbugs") {
+ jar_path = invoker.jar_path
+
+ build_config = invoker.build_config
+
+ action(target_name) {
+ script = "//build/android/findbugs_diff.py"
+ depfile = "$target_gen_dir/$target_name.d"
+ result_path = "$target_gen_dir/$target_name/result.xml"
+ exclusions_file = "//build/android/findbugs_filter/findbugs_exclude.xml"
+
+ rebased_build_config = rebase_path(build_config, root_build_dir)
+
+ inputs = [
+ "//build/android/pylib/utils/findbugs.py",
+ exclusions_file,
+ jar_path,
+ ]
+
+ outputs = [
+ depfile,
+ result_path,
+ ]
+
+ args = [
+ "--depfile",
+ rebase_path(depfile, root_build_dir),
+ "--exclude",
+ rebase_path(exclusions_file, root_build_dir),
+ "--auxclasspath-gyp",
+ "@FileArg($rebased_build_config:javac:classpath)",
+ "--output-file",
+ rebase_path(result_path, root_build_dir),
+ rebase_path(jar_path, root_build_dir),
+ ]
+ }
+}
+
template("dex") {
set_sources_assignment_filter([])
if (defined(invoker.testonly)) {
@@ -914,6 +952,14 @@ template("java_library_impl") {
jar_path = _jar_path
java_files = _java_files
}
+
+ if (run_findbugs) {
+ _final_datadeps += [ ":${_template_name}__findbugs" ]
+ findbugs("${_template_name}__findbugs") {
+ build_config = _build_config
+ jar_path = _jar_path
+ }
+ }
}
_final_deps += [ ":${_template_name}__dex" ]
diff --git a/build/java.gypi b/build/java.gypi
index 061dff2..730fa22 100644
--- a/build/java.gypi
+++ b/build/java.gypi
@@ -77,6 +77,8 @@
'lint_result': '<(intermediate_dir)/lint_result.xml',
'lint_config': '<(intermediate_dir)/lint_config.xml',
'never_lint%': 0,
+ 'findbugs_stamp': '<(intermediate_dir)/findbugs.stamp',
+ 'run_findbugs%': 0,
'proguard_config%': '',
'proguard_preprocess%': '0',
'variables': {
@@ -217,6 +219,31 @@
},
],
}],
+ ['run_findbugs == 1', {
+ 'actions': [
+ {
+ 'action_name': 'findbugs_<(_target_name)',
+ 'message': 'Running findbugs on <(_target_name)',
+ 'inputs': [
+ '<(DEPTH)/build/android/findbugs_diff.py',
+ '<(DEPTH)/build/android/findbugs_filter/findbugs_exclude.xml',
+ '<(DEPTH)/build/android/pylib/utils/findbugs.py',
+ '>@(input_jars_paths)',
+ '<(jar_final_path)',
+ '<(compile_stamp)',
+ ],
+ 'outputs': [
+ '<(findbugs_stamp)',
+ ],
+ 'action': [
+ 'python', '<(DEPTH)/build/android/findbugs_diff.py',
+ '--auxclasspath-gyp', '>(input_jars_paths)',
+ '--stamp', '<(findbugs_stamp)',
+ '<(jar_final_path)',
+ ],
+ },
+ ],
+ }],
],
'actions': [
{
diff --git a/build/java_apk.gypi b/build/java_apk.gypi
index c5e7ae3..56aefdf 100644
--- a/build/java_apk.gypi
+++ b/build/java_apk.gypi
@@ -103,6 +103,8 @@
'lint_result': '<(intermediate_dir)/lint_result.xml',
'lint_config': '<(intermediate_dir)/lint_config.xml',
'never_lint%': 0,
+ 'findbugs_stamp': '<(intermediate_dir)/findbugs.stamp',
+ 'run_findbugs%': 0,
'java_in_dir_suffix%': '/src',
'instr_stamp': '<(intermediate_dir)/instr.stamp',
'jar_stamp': '<(intermediate_dir)/jar.stamp',
@@ -558,6 +560,32 @@
'<(DEPTH)/tools/android/android_tools.gyp:android_tools',
]
}],
+ ['run_findbugs == 1', {
+ 'actions': [
+ {
+ 'action_name': 'findbugs_<(_target_name)',
+ 'message': 'Running findbugs on <(_target_name)',
+ 'inputs': [
+ '<(DEPTH)/build/android/findbugs_diff.py',
+ '<(DEPTH)/build/android/findbugs_filter/findbugs_exclude.xml',
+ '<(DEPTH)/build/android/pylib/utils/findbugs.py',
+ '>@(input_jars_paths)',
+ '<(jar_path)',
+ '<(compile_stamp)',
+ ],
+ 'outputs': [
+ '<(findbugs_stamp)',
+ ],
+ 'action': [
+ 'python', '<(DEPTH)/build/android/findbugs_diff.py',
+ '--auxclasspath-gyp', '>(input_jars_paths)',
+ '--stamp', '<(findbugs_stamp)',
+ '<(jar_path)',
+ ],
+ },
+ ],
+ },
+ ]
],
'dependencies': [
'<(DEPTH)/tools/android/md5sum/md5sum.gyp:md5sum',
diff --git a/build/protoc_java.gypi b/build/protoc_java.gypi
index 9ed597be..6fd80d8 100644
--- a/build/protoc_java.gypi
+++ b/build/protoc_java.gypi
@@ -50,6 +50,7 @@
# Adding the |stamp_file| to |additional_input_paths| makes the actions in
# the include of java.gypi depend on the genproto_java action.
'additional_input_paths': ['<(stamp_file)'],
+ 'run_findbugs': 0,
},
'actions': [
{
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ChromiumApplication.java b/chrome/android/java/src/org/chromium/chrome/browser/ChromiumApplication.java
index 230ff12..ce26fb2 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/ChromiumApplication.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/ChromiumApplication.java
@@ -21,6 +21,7 @@ import org.chromium.base.ApplicationStatus;
import org.chromium.base.CalledByNative;
import org.chromium.base.ThreadUtils;
import org.chromium.base.TraceEvent;
+import org.chromium.base.annotations.SuppressFBWarnings;
import org.chromium.base.library_loader.LibraryLoader;
import org.chromium.base.library_loader.LibraryProcessType;
import org.chromium.base.library_loader.LoaderErrors;
@@ -241,12 +242,14 @@ public abstract class ChromiumApplication extends ContentApplication {
.setCancelable(true)
.setPositiveButton(getResources().getString(android.R.string.ok),
new DialogInterface.OnClickListener() {
+ @SuppressFBWarnings("DM_EXIT")
@Override
public void onClick(DialogInterface dialog, int which) {
System.exit(-1);
}
})
.setOnCancelListener(new DialogInterface.OnCancelListener() {
+ @SuppressFBWarnings("DM_EXIT")
@Override
public void onCancel(DialogInterface dialog) {
System.exit(-1);
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/appmenu/AppMenuTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/appmenu/AppMenuTest.java
index 52616f8..d1f7cc2 100644
--- a/chrome/android/javatests/src/org/chromium/chrome/browser/appmenu/AppMenuTest.java
+++ b/chrome/android/javatests/src/org/chromium/chrome/browser/appmenu/AppMenuTest.java
@@ -14,6 +14,7 @@ import android.widget.ListPopupWindow;
import android.widget.ListView;
import org.chromium.base.ThreadUtils;
+import org.chromium.base.annotations.SuppressFBWarnings;
import org.chromium.base.test.util.DisabledTest;
import org.chromium.base.test.util.Feature;
import org.chromium.chrome.shell.ChromeShellActivity;
@@ -33,6 +34,7 @@ public class AppMenuTest extends ChromeShellTestBase {
/**
* AppMenuHandler that will be used to intercept item selections for testing.
*/
+ @SuppressFBWarnings("URF_UNREAD_FIELD")
public static class AppMenuHandlerForTest extends AppMenuHandler {
int mLastSelectedItemId = -1;
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/autofill/AutofillTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/autofill/AutofillTest.java
index 89958a8..34356d9 100644
--- a/chrome/android/javatests/src/org/chromium/chrome/browser/autofill/AutofillTest.java
+++ b/chrome/android/javatests/src/org/chromium/chrome/browser/autofill/AutofillTest.java
@@ -9,6 +9,7 @@ import android.test.suitebuilder.annotation.SmallTest;
import static org.chromium.base.test.util.ScalableTimeout.scaleTimeout;
import org.chromium.base.ThreadUtils;
+import org.chromium.base.annotations.SuppressFBWarnings;
import org.chromium.base.test.util.Feature;
import org.chromium.chrome.shell.ChromeShellActivity;
import org.chromium.chrome.shell.ChromeShellTestBase;
@@ -35,6 +36,7 @@ public class AutofillTest extends ChromeShellTestBase {
private WindowAndroid mWindowAndroid;
private MockAutofillCallback mMockAutofillCallback;
+ @SuppressFBWarnings("URF_UNREAD_FIELD")
@Override
public void setUp() throws Exception {
super.setUp();
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/enhanced_bookmarks/EnhancedBookmarksModelTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/enhanced_bookmarks/EnhancedBookmarksModelTest.java
index c4630fd..d5a8fdc 100644
--- a/chrome/android/javatests/src/org/chromium/chrome/browser/enhanced_bookmarks/EnhancedBookmarksModelTest.java
+++ b/chrome/android/javatests/src/org/chromium/chrome/browser/enhanced_bookmarks/EnhancedBookmarksModelTest.java
@@ -8,6 +8,7 @@ import android.test.UiThreadTest;
import android.test.suitebuilder.annotation.SmallTest;
import org.chromium.base.ThreadUtils;
+import org.chromium.base.annotations.SuppressFBWarnings;
import org.chromium.base.test.util.Feature;
import org.chromium.chrome.browser.BookmarksBridge.BookmarkItem;
import org.chromium.chrome.browser.profiles.Profile;
@@ -118,6 +119,7 @@ public class EnhancedBookmarksModelTest extends ChromeShellTestBase{
verifyBookmark(bookmarkD, "kauri", "http://kauri.org/", false, folderA, "kauri");
}
+ @SuppressFBWarnings("DLS_DEAD_LOCAL_STORE")
@UiThreadTest
@SmallTest
@Feature({"Bookmark"})
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/notifications/NotificationUIManagerTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/notifications/NotificationUIManagerTest.java
index 49215f7..d9a02f4 100644
--- a/chrome/android/javatests/src/org/chromium/chrome/browser/notifications/NotificationUIManagerTest.java
+++ b/chrome/android/javatests/src/org/chromium/chrome/browser/notifications/NotificationUIManagerTest.java
@@ -13,6 +13,7 @@ import android.test.suitebuilder.annotation.SmallTest;
import android.util.SparseArray;
import org.chromium.base.ThreadUtils;
+import org.chromium.base.annotations.SuppressFBWarnings;
import org.chromium.base.test.util.Feature;
import org.chromium.base.test.util.MinAndroidSdkLevel;
import org.chromium.chrome.browser.preferences.website.ContentSetting;
@@ -277,6 +278,7 @@ public class NotificationUIManagerTest extends ChromeShellTestBase {
* Verifies that creating a notification with an associated "tag" will cause any previous
* notification with the same tag to be dismissed prior to being shown.
*/
+ @SuppressFBWarnings("DLS_DEAD_LOCAL_STORE")
@MediumTest
@Feature({"Browser", "Notifications"})
public void testNotificationTagReplacement() throws Exception {
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/tabmodel/RestoreMigrateTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/tabmodel/RestoreMigrateTest.java
index 5548033..aa39d79 100644
--- a/chrome/android/javatests/src/org/chromium/chrome/browser/tabmodel/RestoreMigrateTest.java
+++ b/chrome/android/javatests/src/org/chromium/chrome/browser/tabmodel/RestoreMigrateTest.java
@@ -8,6 +8,7 @@ import android.test.InstrumentationTestCase;
import android.test.suitebuilder.annotation.SmallTest;
import org.chromium.base.ThreadUtils;
+import org.chromium.base.annotations.SuppressFBWarnings;
import org.chromium.chrome.browser.TabState;
import org.chromium.chrome.browser.util.StreamUtil;
import org.chromium.chrome.test.util.ApplicationData;
@@ -60,6 +61,7 @@ public class RestoreMigrateTest extends InstrumentationTestCase {
* @throws ExecutionException
*/
@SuppressWarnings("unused")
+ @SuppressFBWarnings("DLS_DEAD_LOCAL_STORE")
@SmallTest
public void testMigrateData() throws IOException, InterruptedException, ExecutionException {
ApplicationData.clearAppData(getInstrumentation().getTargetContext());
@@ -115,6 +117,7 @@ public class RestoreMigrateTest extends InstrumentationTestCase {
* @throws ExecutionException
*/
@SuppressWarnings("unused")
+ @SuppressFBWarnings("DLS_DEAD_LOCAL_STORE")
@SmallTest
public void testSkipMigrateData() throws IOException, InterruptedException, ExecutionException {
ApplicationData.clearAppData(getInstrumentation().getTargetContext());
@@ -172,6 +175,7 @@ public class RestoreMigrateTest extends InstrumentationTestCase {
* @throws ExecutionException
*/
@SuppressWarnings("unused")
+ @SuppressFBWarnings("DLS_DEAD_LOCAL_STORE")
@SmallTest
public void testMigrationLeavesOtherFilesAlone() throws IOException, InterruptedException,
ExecutionException {
@@ -261,4 +265,4 @@ public class RestoreMigrateTest extends InstrumentationTestCase {
assertEquals("Unexpected number of tabst o load", 3, storeIn1.getRestoredTabCount());
}
-} \ No newline at end of file
+}
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/webapps/AddToHomescreenDialogTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/webapps/AddToHomescreenDialogTest.java
index 4b8d26e..363093c 100644
--- a/chrome/android/javatests/src/org/chromium/chrome/browser/webapps/AddToHomescreenDialogTest.java
+++ b/chrome/android/javatests/src/org/chromium/chrome/browser/webapps/AddToHomescreenDialogTest.java
@@ -12,7 +12,6 @@ import org.chromium.base.ThreadUtils;
import org.chromium.base.test.util.Feature;
import org.chromium.chrome.R;
import org.chromium.chrome.shell.ChromeShellActivity;
-import org.chromium.chrome.shell.ChromeShellApplication;
import org.chromium.chrome.shell.ChromeShellTestBase;
/**
@@ -30,8 +29,6 @@ public class AddToHomescreenDialogTest extends ChromeShellTestBase {
public void setUp() throws Exception {
super.setUp();
mActivity = launchChromeShellWithBlankPage();
- ChromeShellApplication application =
- (ChromeShellApplication) mActivity.getApplication();
}
@SmallTest
diff --git a/components/cronet/android/test/javatests/src/org/chromium/net/MockUrlRequestJobTest.java b/components/cronet/android/test/javatests/src/org/chromium/net/MockUrlRequestJobTest.java
index 6c6eaca..c6242da 100644
--- a/components/cronet/android/test/javatests/src/org/chromium/net/MockUrlRequestJobTest.java
+++ b/components/cronet/android/test/javatests/src/org/chromium/net/MockUrlRequestJobTest.java
@@ -7,6 +7,7 @@ package org.chromium.net;
import android.test.suitebuilder.annotation.LargeTest;
import android.test.suitebuilder.annotation.SmallTest;
+import org.chromium.base.annotations.SuppressFBWarnings;
import org.chromium.base.test.util.Feature;
import java.io.IOException;
@@ -252,6 +253,7 @@ public class MockUrlRequestJobTest extends CronetTestBase {
}
}
+ @SuppressFBWarnings("DLS_DEAD_LOCAL_STORE")
@SmallTest
@Feature({"Cronet"})
public void testNoWriteAfterSyncCancel() throws Exception {
diff --git a/components/cronet/android/test/javatests/src/org/chromium/net/urlconnection/CronetHttpURLConnectionTest.java b/components/cronet/android/test/javatests/src/org/chromium/net/urlconnection/CronetHttpURLConnectionTest.java
index e5e5e5d..133d673 100644
--- a/components/cronet/android/test/javatests/src/org/chromium/net/urlconnection/CronetHttpURLConnectionTest.java
+++ b/components/cronet/android/test/javatests/src/org/chromium/net/urlconnection/CronetHttpURLConnectionTest.java
@@ -7,6 +7,7 @@ package org.chromium.net.urlconnection;
import android.os.Build;
import android.test.suitebuilder.annotation.SmallTest;
+import org.chromium.base.annotations.SuppressFBWarnings;
import org.chromium.base.test.util.Feature;
import org.chromium.net.CronetTestActivity;
import org.chromium.net.CronetTestBase;
@@ -168,6 +169,7 @@ public class CronetHttpURLConnectionTest extends CronetTestBase {
checkExceptionsAreThrown(urlConnection);
}
+ @SuppressFBWarnings("DLS_DEAD_LOCAL_STORE")
@SmallTest
@Feature({"Cronet"})
@CompareDefaultWithCronet
@@ -432,6 +434,7 @@ public class CronetHttpURLConnectionTest extends CronetTestBase {
connection.disconnect();
}
+ @SuppressFBWarnings("DLS_DEAD_LOCAL_STORE")
@SmallTest
@Feature({"Cronet"})
@CompareDefaultWithCronet
diff --git a/components/cronet/android/test/src/org/chromium/net/CronetTestActivity.java b/components/cronet/android/test/src/org/chromium/net/CronetTestActivity.java
index 948bad5..897515f 100644
--- a/components/cronet/android/test/src/org/chromium/net/CronetTestActivity.java
+++ b/components/cronet/android/test/src/org/chromium/net/CronetTestActivity.java
@@ -10,6 +10,7 @@ import android.os.Bundle;
import android.os.Environment;
import android.util.Log;
+import org.chromium.base.annotations.SuppressFBWarnings;
import org.chromium.net.urlconnection.CronetURLStreamHandlerFactory;
import java.io.ByteArrayInputStream;
@@ -22,6 +23,7 @@ import java.util.HashMap;
/**
* Activity for managing the Cronet Test.
*/
+@SuppressFBWarnings("URF_UNREAD_PUBLIC_OR_PROTECTED_FIELD")
public class CronetTestActivity extends Activity {
private static final String TAG = "CronetTestActivity";
@@ -42,6 +44,7 @@ public class CronetTestActivity extends Activity {
public CronetURLStreamHandlerFactory mStreamHandlerFactory;
public UrlRequestContext mUrlRequestContext;
HttpUrlRequestFactory mRequestFactory;
+ @SuppressFBWarnings("URF_UNREAD_FIELD")
HistogramManager mHistogramManager;
String mUrl;
diff --git a/components/devtools_bridge/android/javatests/src/org/chromium/components/devtools_bridge/SocketTunnelServerTest.java b/components/devtools_bridge/android/javatests/src/org/chromium/components/devtools_bridge/SocketTunnelServerTest.java
index 56fb383..53aab71 100644
--- a/components/devtools_bridge/android/javatests/src/org/chromium/components/devtools_bridge/SocketTunnelServerTest.java
+++ b/components/devtools_bridge/android/javatests/src/org/chromium/components/devtools_bridge/SocketTunnelServerTest.java
@@ -11,6 +11,8 @@ import android.test.suitebuilder.annotation.MediumTest;
import junit.framework.Assert;
+import org.chromium.base.annotations.SuppressFBWarnings;
+
import java.io.IOException;
import java.io.OutputStream;
import java.nio.ByteBuffer;
@@ -193,6 +195,7 @@ public class SocketTunnelServerTest extends InstrumentationTestCase {
Assert.assertEquals(sentData, readData);
}
+ @SuppressFBWarnings("DLS_DEAD_LOCAL_STORE")
@MediumTest
public void testReuseConnectionId() throws IOException, InterruptedException {
LocalSocket socket = connectToSocket(CONNECTION_ID);
diff --git a/components/devtools_bridge/android/javatests/src/org/chromium/components/devtools_bridge/commands/CommandSenderTest.java b/components/devtools_bridge/android/javatests/src/org/chromium/components/devtools_bridge/commands/CommandSenderTest.java
index b529751..3d03935 100644
--- a/components/devtools_bridge/android/javatests/src/org/chromium/components/devtools_bridge/commands/CommandSenderTest.java
+++ b/components/devtools_bridge/android/javatests/src/org/chromium/components/devtools_bridge/commands/CommandSenderTest.java
@@ -9,6 +9,7 @@ import android.test.suitebuilder.annotation.SmallTest;
import junit.framework.Assert;
+import org.chromium.base.annotations.SuppressFBWarnings;
import org.chromium.components.devtools_bridge.RTCConfiguration;
import org.chromium.components.devtools_bridge.SessionBase;
@@ -18,6 +19,7 @@ import java.util.List;
/**
* Tests for {@link CommandSender}
*/
+@SuppressFBWarnings("URF_UNREAD_FIELD")
public class CommandSenderTest extends InstrumentationTestCase {
private static final RTCConfiguration CONFIG = new RTCConfiguration.Builder()
.addIceServer("http://example.org")
diff --git a/components/devtools_bridge/test/android/javatests/src/org/chromium/components/devtools_bridge/PeerConnectionObserverMock.java b/components/devtools_bridge/test/android/javatests/src/org/chromium/components/devtools_bridge/PeerConnectionObserverMock.java
index 6dda0bd..fc1fdd4 100644
--- a/components/devtools_bridge/test/android/javatests/src/org/chromium/components/devtools_bridge/PeerConnectionObserverMock.java
+++ b/components/devtools_bridge/test/android/javatests/src/org/chromium/components/devtools_bridge/PeerConnectionObserverMock.java
@@ -4,11 +4,14 @@
package org.chromium.components.devtools_bridge;
+import org.chromium.base.annotations.SuppressFBWarnings;
+
import java.util.concurrent.CountDownLatch;
/**
* Mock for AbstractPeerConnection.Observer.
*/
+@SuppressFBWarnings("URF_UNREAD_PUBLIC_OR_PROTECTED_FIELD")
public class PeerConnectionObserverMock implements AbstractPeerConnection.Observer {
public AbstractPeerConnection.SessionDescriptionType localDescriptionType;
public String localDescription;
diff --git a/components/devtools_bridge/test/android/javatests/src/org/chromium/components/devtools_bridge/SignalingReceiverMock.java b/components/devtools_bridge/test/android/javatests/src/org/chromium/components/devtools_bridge/SignalingReceiverMock.java
index 1ff0f7e..6d1fb25 100644
--- a/components/devtools_bridge/test/android/javatests/src/org/chromium/components/devtools_bridge/SignalingReceiverMock.java
+++ b/components/devtools_bridge/test/android/javatests/src/org/chromium/components/devtools_bridge/SignalingReceiverMock.java
@@ -4,11 +4,14 @@
package org.chromium.components.devtools_bridge;
+import org.chromium.base.annotations.SuppressFBWarnings;
+
import java.util.List;
/**
* Mock of SignalingReceiver.
*/
+@SuppressFBWarnings("URF_UNREAD_PUBLIC_OR_PROTECTED_FIELD")
public class SignalingReceiverMock implements SignalingReceiver {
public String sessionId;
public String offer;
diff --git a/content/public/android/javatests/src/org/chromium/content/browser/JavaBridgeBasicsTest.java b/content/public/android/javatests/src/org/chromium/content/browser/JavaBridgeBasicsTest.java
index 56fc999..4e9729a 100644
--- a/content/public/android/javatests/src/org/chromium/content/browser/JavaBridgeBasicsTest.java
+++ b/content/public/android/javatests/src/org/chromium/content/browser/JavaBridgeBasicsTest.java
@@ -36,6 +36,7 @@ import java.util.concurrent.CountDownLatch;
* - Threading
* - Inheritance
*/
+@SuppressFBWarnings("URF_UNREAD_PUBLIC_OR_PROTECTED_FIELD")
public class JavaBridgeBasicsTest extends JavaBridgeTestBase {
@SuppressFBWarnings("CHROMIUM_SYNCHRONIZED_METHOD")
private class TestController extends Controller {
diff --git a/content/public/android/javatests/src/org/chromium/content/browser/JavaBridgeFieldsTest.java b/content/public/android/javatests/src/org/chromium/content/browser/JavaBridgeFieldsTest.java
index 046ea59..088520b 100644
--- a/content/public/android/javatests/src/org/chromium/content/browser/JavaBridgeFieldsTest.java
+++ b/content/public/android/javatests/src/org/chromium/content/browser/JavaBridgeFieldsTest.java
@@ -14,7 +14,9 @@ import org.chromium.base.test.util.Feature;
* use of fields.
*/
public class JavaBridgeFieldsTest extends JavaBridgeTestBase {
- @SuppressFBWarnings("CHROMIUM_SYNCHRONIZED_METHOD")
+ @SuppressFBWarnings({
+ "CHROMIUM_SYNCHRONIZED_METHOD",
+ "URF_UNREAD_PUBLIC_OR_PROTECTED_FIELD"})
private class TestObject extends Controller {
private String mStringValue;
diff --git a/content/public/android/javatests/src/org/chromium/content/browser/LocationProviderTest.java b/content/public/android/javatests/src/org/chromium/content/browser/LocationProviderTest.java
index 297d5f3..f4fca72 100644
--- a/content/public/android/javatests/src/org/chromium/content/browser/LocationProviderTest.java
+++ b/content/public/android/javatests/src/org/chromium/content/browser/LocationProviderTest.java
@@ -9,6 +9,7 @@ import android.test.InstrumentationTestCase;
import android.test.UiThreadTest;
import android.test.suitebuilder.annotation.SmallTest;
+import org.chromium.base.annotations.SuppressFBWarnings;
import org.chromium.base.test.util.Feature;
/**
@@ -18,6 +19,7 @@ public class LocationProviderTest extends InstrumentationTestCase {
private Activity mActivity;
private LocationProviderAdapter mLocationProvider;
+ @SuppressFBWarnings("URF_UNREAD_FIELD")
@Override
public void setUp() {
mActivity = new Activity();
diff --git a/content/public/android/javatests/src/org/chromium/content/common/CleanupReferenceTest.java b/content/public/android/javatests/src/org/chromium/content/common/CleanupReferenceTest.java
index 52658f3..b1a1651 100644
--- a/content/public/android/javatests/src/org/chromium/content/common/CleanupReferenceTest.java
+++ b/content/public/android/javatests/src/org/chromium/content/common/CleanupReferenceTest.java
@@ -7,6 +7,7 @@ package org.chromium.content.common;
import android.test.InstrumentationTestCase;
import android.test.suitebuilder.annotation.SmallTest;
+import org.chromium.base.annotations.SuppressFBWarnings;
import org.chromium.base.test.util.Feature;
import org.chromium.content.browser.test.util.Criteria;
import org.chromium.content.browser.test.util.CriteriaHelper;
@@ -30,6 +31,7 @@ public class CleanupReferenceTest extends InstrumentationTestCase {
}
};
+ @SuppressFBWarnings("URF_UNREAD_FIELD")
public ReferredObject() {
sObjectCount.incrementAndGet();
mRef = new CleanupReference(this, new DestroyRunnable());
@@ -42,6 +44,7 @@ public class CleanupReferenceTest extends InstrumentationTestCase {
sObjectCount.set(0);
}
+ @SuppressFBWarnings("DM_GC")
private void collectGarbage() {
// While this is only a 'hint' to the VM, it's generally effective and sufficient on
// dalvik. If this changes in future, maybe try allocating a few gargantuan objects
@@ -49,6 +52,7 @@ public class CleanupReferenceTest extends InstrumentationTestCase {
System.gc();
}
+ @SuppressFBWarnings("DLS_DEAD_LOCAL_STORE")
@SmallTest
@Feature({"AndroidWebView"})
public void testCreateSingle() throws Throwable {
diff --git a/third_party/cacheinvalidation/cacheinvalidation.gyp b/third_party/cacheinvalidation/cacheinvalidation.gyp
index 703033c..7755807 100644
--- a/third_party/cacheinvalidation/cacheinvalidation.gyp
+++ b/third_party/cacheinvalidation/cacheinvalidation.gyp
@@ -228,6 +228,7 @@
'variables': {
'java_in_dir': '../../build/android/empty',
'additional_src_dirs': [ 'src/java/' ],
+ 'run_findbugs': 0,
},
'includes': [ '../../build/java.gypi' ],
},
diff --git a/tools/android/findbugs_plugin/findbugs.xml b/tools/android/findbugs_plugin/findbugs.xml
index 43b1f34..a1c4b5e 100644
--- a/tools/android/findbugs_plugin/findbugs.xml
+++ b/tools/android/findbugs_plugin/findbugs.xml
@@ -11,8 +11,8 @@
provider="chromium"
website="http://code.google.com/p/chromium/wiki/UseFindBugsForAndroid">
<Detector class="org.chromium.tools.findbugs.plugin.SynchronizedThisDetector" reports="CHROMIUM_SYNCHRONIZED_THIS" />
- <BugPattern type="CHROMIUM_SYNCHRONIZED_THIS" abbrev="CST" category="CORRECTNESS"/>
+ <BugPattern type="CHROMIUM_SYNCHRONIZED_THIS" abbrev="CHROMIUM" category="CORRECTNESS"/>
<Detector class="org.chromium.tools.findbugs.plugin.SynchronizedMethodDetector" reports="CHROMIUM_SYNCHRONIZED_METHOD" />
- <BugPattern type="CHROMIUM_SYNCHRONIZED_METHOD" abbrev="CSM" category="CORRECTNESS"/>
+ <BugPattern type="CHROMIUM_SYNCHRONIZED_METHOD" abbrev="CHROMIUM" category="CORRECTNESS"/>
</FindbugsPlugin>
diff --git a/tools/android/findbugs_plugin/findbugs_plugin.gyp b/tools/android/findbugs_plugin/findbugs_plugin.gyp
index 16d06e6..440d779 100644
--- a/tools/android/findbugs_plugin/findbugs_plugin.gyp
+++ b/tools/android/findbugs_plugin/findbugs_plugin.gyp
@@ -9,6 +9,7 @@
'type': 'none',
'variables': {
'java_in_dir': 'test/java/',
+ 'run_findbugs': 0,
},
'includes': [ '../../../build/java.gypi' ],
}
diff --git a/tools/android/findbugs_plugin/lib/chromiumPlugin.jar b/tools/android/findbugs_plugin/lib/chromiumPlugin.jar
index 6ccf61b..451566d 100644
--- a/tools/android/findbugs_plugin/lib/chromiumPlugin.jar
+++ b/tools/android/findbugs_plugin/lib/chromiumPlugin.jar
Binary files differ
diff --git a/tools/android/findbugs_plugin/test/run_findbugs_plugin_tests.py b/tools/android/findbugs_plugin/test/run_findbugs_plugin_tests.py
index a570cdb..e36fe8e 100755
--- a/tools/android/findbugs_plugin/test/run_findbugs_plugin_tests.py
+++ b/tools/android/findbugs_plugin/test/run_findbugs_plugin_tests.py
@@ -14,7 +14,7 @@
# remove the expected result of exsting tests.
-import optparse
+import argparse
import os
import sys
@@ -26,28 +26,79 @@ from pylib import constants
from pylib.utils import findbugs
+_EXPECTED_WARNINGS = set([
+ findbugs.FindBugsWarning(
+ bug_type='CHROMIUM_SYNCHRONIZED_THIS',
+ start_line=15,
+ end_line=15,
+ file_name='SimpleSynchronizedThis.java',
+ message=(
+ "Shouldn't use synchronized(this)",
+ 'In class org.chromium.tools.findbugs.plugin.'
+ + 'SimpleSynchronizedThis',
+ 'In method org.chromium.tools.findbugs.plugin.'
+ + 'SimpleSynchronizedThis.synchronizedThis()',
+ 'At SimpleSynchronizedThis.java:[line 15]',
+ )),
+ findbugs.FindBugsWarning(
+ bug_type='CHROMIUM_SYNCHRONIZED_METHOD',
+ start_line=14,
+ end_line=14,
+ file_name='SimpleSynchronizedStaticMethod.java',
+ message=(
+ "Shouldn't use synchronized method",
+ 'In class org.chromium.tools.findbugs.plugin.'
+ + 'SimpleSynchronizedStaticMethod',
+ 'In method org.chromium.tools.findbugs.plugin.'
+ + 'SimpleSynchronizedStaticMethod.synchronizedStaticMethod()',
+ 'At SimpleSynchronizedStaticMethod.java:[line 14]',
+ )),
+ findbugs.FindBugsWarning(
+ bug_type='CHROMIUM_SYNCHRONIZED_METHOD',
+ start_line=15,
+ end_line=15,
+ file_name='SimpleSynchronizedMethod.java',
+ message=(
+ "Shouldn't use synchronized method",
+ 'In class org.chromium.tools.findbugs.plugin.'
+ + 'SimpleSynchronizedMethod',
+ 'In method org.chromium.tools.findbugs.plugin.'
+ + 'SimpleSynchronizedMethod.synchronizedMethod()',
+ 'At SimpleSynchronizedMethod.java:[line 15]',
+ )),
+])
+
+
def main(argv):
- parser = findbugs.GetCommonParser()
- options, _ = parser.parse_args()
+ parser = argparse.ArgumentParser()
+ parser.add_argument(
+ '-l', '--release-build', action='store_true', dest='release',
+ help='Run the release build of the findbugs plugin test.')
+ args = parser.parse_args()
+
+ test_jar_path = os.path.join(
+ constants.GetOutDirectory(
+ 'Release' if args.release else 'Debug'),
+ 'lib.java', 'findbugs_plugin_test.jar')
- if not options.known_bugs:
- options.known_bugs = os.path.join(constants.DIR_SOURCE_ROOT, 'tools',
- 'android', 'findbugs_plugin', 'test',
- 'expected_result.txt')
+ findbugs_command, findbugs_warnings = findbugs.Run(
+ None, 'org.chromium.tools.findbugs.plugin.*', None, None, None,
+ [test_jar_path])
- if not options.only_analyze:
- options.only_analyze = 'org.chromium.tools.findbugs.plugin.*'
+ missing_warnings = _EXPECTED_WARNINGS.difference(findbugs_warnings)
+ if missing_warnings:
+ print 'Missing warnings:'
+ for w in missing_warnings:
+ print '%s' % str(w)
- # crbug.com/449101
- # Temporary workaround to have the Android Clang Builder (dbg) bot
- # pass the findbugs_tests step.
- if not options.exclude:
- options.exclude = os.path.join(constants.DIR_SOURCE_ROOT, 'build',
- 'android', 'findbugs_filter',
- 'findbugs_exclude.xml')
+ unexpected_warnings = findbugs_warnings.difference(_EXPECTED_WARNINGS)
+ if unexpected_warnings:
+ print 'Unexpected warnings:'
+ for w in unexpected_warnings:
+ print '%s' % str(w)
- return findbugs.Run(options)
+ return len(unexpected_warnings) + len(missing_warnings)
if __name__ == '__main__':
sys.exit(main(sys.argv))