You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@accumulo.apache.org by "Mark Owens (JIRA)" <ji...@apache.org> on 2018/01/09 20:45:00 UTC

[jira] [Assigned] (ACCUMULO-4158) Investigate using Google's error-prone

     [ https://issues.apache.org/jira/browse/ACCUMULO-4158?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Mark Owens reassigned ACCUMULO-4158:
------------------------------------

    Assignee: Mark Owens

> Investigate using Google's error-prone
> --------------------------------------
>
>                 Key: ACCUMULO-4158
>                 URL: https://issues.apache.org/jira/browse/ACCUMULO-4158
>             Project: Accumulo
>          Issue Type: Improvement
>          Components: build
>            Reporter: Michael Wall
>            Assignee: Mark Owens
>            Priority: Minor
>
> Google has a tool at http://errorprone.info.  From that page
> {quote}
> Using Error Prone to augment the compiler’s type analysis, you can catch more mistakes before they cost you time, or end up as bugs in production.
> {quote}
> It requires java 1.8.  In the top level pom, replacing
> {code:xml}
>         <plugin>
>           <artifactId>maven-compiler-plugin</artifactId>
>           <configuration>
>             <source>${java.ver}</source>
>             <target>${java.ver}</target>
>             <optimize>true</optimize>
>             <showDeprecation>true</showDeprecation>
>             <showWarnings>true</showWarnings>
>           </configuration>
>         </plugin>
> {code}
> with
> {code:xml}
>         <plugin>
>           <groupId>org.apache.maven.plugins</groupId>
>           <artifactId>maven-compiler-plugin</artifactId>
>           <version>3.3</version>
>           <configuration>
>             <compilerId>javac-with-errorprone</compilerId>
>             <forceJavacCompilerUse>true</forceJavacCompilerUse>
>             <!-- maven-compiler-plugin defaults to targeting Java 5,
>                     but our javac only supports >=6 -->
>             <source>${java.ver}</source>
>             <target>${java.ver}</target>
>             <compilerArgs>
>               <arg>-Xep:ChainingConstructorIgnoresParameter:WARN</arg>
>               <arg>-Xep:LongLiteralLowerCaseSuffix:OFF</arg>
>               <arg>-Xep:SizeGreaterThanOrEqualsZero:WARN</arg>
>               <arg>-Xep:InvalidPatternSyntax:WARN</arg>
>               <arg>-Xep:TryFailThrowable:WARN</arg>
>               <arg>-Xep:NonOverridingEquals:OFF</arg>
>             </compilerArgs>
>             <showWarnings>true</showWarnings>
>           </configuration>
>           <dependencies>
>             <!-- override plexus-compiler-javac-errorprone's dependency on
>              Error Prone with the latest version -->
>             <dependency>
>               <groupId>com.google.errorprone</groupId>
>               <artifactId>error_prone_core</artifactId>
>               <version>2.0.8</version>
>             </dependency>
>             <dependency>
>               <groupId>org.codehaus.plexus</groupId>
>               <artifactId>plexus-compiler-javac-errorprone</artifactId>
>               <version>2.5</version>
>             </dependency>
>           </dependencies>
>         </plugin>
> {code}
> in the 1.6 branch and runing 'mvn compile' yielded the following. 
> {noformat}
> [INFO] Scanning for projects...
> [INFO] ------------------------------------------------------------------------
> [INFO] Reactor Build Order:
> [INFO] 
> [INFO] Apache Accumulo Project
> [INFO] Apache Accumulo Trace
> [INFO] Apache Accumulo Fate
> [INFO] Apache Accumulo Start
> [INFO] Apache Accumulo Core
> [INFO] Apache Accumulo Simple Examples
> [INFO] Apache Accumulo Server Base
> [INFO] Apache Accumulo GC Server
> [INFO] Apache Accumulo Master Server
> [INFO] Apache Accumulo Monitor Server
> [INFO] Apache Accumulo Tracer Server
> [INFO] Apache Accumulo Tablet Server
> [INFO] Apache Accumulo MiniCluster
> [INFO] Apache Accumulo Native Libraries
> [INFO] Apache Accumulo Testing
> [INFO] Apache Accumulo Proxy
> [INFO] Apache Accumulo
> [INFO] Apache Accumulo Documentation
> [INFO] Apache Accumulo Maven Plugin
> [INFO]                                                                         
> [INFO] ------------------------------------------------------------------------
> [INFO] Building Apache Accumulo Project 1.6.6-SNAPSHOT
> [INFO] ------------------------------------------------------------------------
> ...
> [INFO]                                                                         
> [INFO] ------------------------------------------------------------------------
> [INFO] Building Apache Accumulo Trace 1.6.6-SNAPSHOT
> [INFO] ------------------------------------------------------------------------
> ...
> [INFO]                                                                         
> [INFO] ------------------------------------------------------------------------
> [INFO] Building Apache Accumulo Fate 1.6.6-SNAPSHOT
> [INFO] ------------------------------------------------------------------------
> ...
> [INFO]                                                                         
> [INFO] ------------------------------------------------------------------------
> [INFO] Building Apache Accumulo Start 1.6.6-SNAPSHOT
> [INFO] ------------------------------------------------------------------------
> ...
> [INFO]                                                                         
> [INFO] ------------------------------------------------------------------------
> [INFO] Building Apache Accumulo Core 1.6.6-SNAPSHOT
> [INFO] ------------------------------------------------------------------------
> ...
> [INFO] --- maven-compiler-plugin:3.3:compile (default-compile) @ accumulo-core ---
> [INFO] Changes detected - recompiling the module!
> [INFO] Compiling 595 source files to /Users/mjwall/NetBeansProjects/accumulo-mjwall/core/target/classes
> /Users/mjwall/NetBeansProjects/accumulo-mjwall/core/src/main/java/org/apache/accumulo/core/data/Value.java:80: warning: [ChainingConstructorIgnoresParameter] The called constructor accepts a parameter with the same name and type as one of its caller's parameters, but its caller doesn't pass that parameter to it.  It's likely that it was intended to.
>     this(toBytes(bytes), false);
>         ^
>     (see http://errorprone.info/bugpattern/ChainingConstructorIgnoresParameter)
>   Did you mean 'this(toBytes(bytes), copy);'?
> /Users/mjwall/NetBeansProjects/accumulo-mjwall/core/src/main/java/org/apache/accumulo/core/client/mapreduce/AccumuloOutputFormat.java:510: warning: [SizeGreaterThanOrEqualsZero] Comparison of a size >= 0 is always true, did you intend to check for non-emptiness?
>         if (e.getAuthorizationFailuresMap().size() >= 0) {
>                                                    ^
>     (see http://errorprone.info/bugpattern/SizeGreaterThanOrEqualsZero)
>   Did you mean 'if (!e.getAuthorizationFailuresMap().isEmpty()) {'?
> /Users/mjwall/NetBeansProjects/accumulo-mjwall/core/src/main/java/org/apache/accumulo/core/client/mapreduce/lib/impl/ConfiguratorBase.java:277: warning: [Finally] If you return or throw from a finally, then values returned or thrown from the try-catch block will be ignored. Consider using try-with-resources instead.
>         throw new RuntimeException(fileScanner.ioException());
>         ^
>     (see http://errorprone.info/bugpattern/Finally)
> /Users/mjwall/NetBeansProjects/accumulo-mjwall/core/src/main/java/org/apache/accumulo/core/client/impl/TabletServerBatchWriter.java:447: warning: [WaitNotInLoop] Because of spurious wakeups, wait() must always be called in a loop
>       wait();
>           ^
>     (see http://errorprone.info/bugpattern/WaitNotInLoop)
> /Users/mjwall/NetBeansProjects/accumulo-mjwall/core/src/main/java/org/apache/accumulo/core/volume/VolumeImpl.java:109: warning: [EqualsHashCode] Classes that override equals should also override hashCode.
>   public boolean equals(Object o) {
>                  ^
>     (see http://errorprone.info/bugpattern/EqualsHashCode)
> /Users/mjwall/NetBeansProjects/accumulo-mjwall/core/src/main/java/org/apache/accumulo/core/file/blockfile/cache/LruBlockCache.java:444: warning: [EqualsHashCode] Classes that override equals should also override hashCode.
>     public boolean equals(Object that) {
>                    ^
>     (see http://errorprone.info/bugpattern/EqualsHashCode)
> /Users/mjwall/NetBeansProjects/accumulo-mjwall/core/src/main/java/org/apache/accumulo/core/file/FileOperations.java:17: warning: [MultipleTopLevelClasses] Expected at most one top-level class declaration, instead found: DispatchingFileFactory, FileOperations
> package org.apache.accumulo.core.file;
>                                 ^
>     (see http://errorprone.info/bugpattern/MultipleTopLevelClasses)
> /Users/mjwall/NetBeansProjects/accumulo-mjwall/core/src/main/java/org/apache/accumulo/core/util/shell/commands/ConfigCommand.java:211: warning: [InvalidPatternSyntax] Invalid syntax used for a regular expression: "." is a valid but useless regex
>           siteVal = sysVal = dfault = curVal = curVal.replaceAll(".", "*");
>                                                                 ^
>     (see http://errorprone.info/bugpattern/InvalidPatternSyntax)
>   Did you mean 'siteVal = sysVal = dfault = curVal = curVal.replaceAll("\\.", "*");'?
> /Users/mjwall/NetBeansProjects/accumulo-mjwall/core/src/main/java/org/apache/accumulo/core/client/mapred/AccumuloOutputFormat.java:509: warning: [SizeGreaterThanOrEqualsZero] Comparison of a size >= 0 is always true, did you intend to check for non-emptiness?
>         if (e.getAuthorizationFailuresMap().size() >= 0) {
>                                                    ^
>     (see http://errorprone.info/bugpattern/SizeGreaterThanOrEqualsZero)
>   Did you mean 'if (!e.getAuthorizationFailuresMap().isEmpty()) {'?
> /Users/mjwall/NetBeansProjects/accumulo-mjwall/core/src/main/java/org/apache/accumulo/core/client/impl/OfflineScanner.java:17: warning: [MultipleTopLevelClasses] Expected at most one top-level class declaration, instead found: OfflineIterator, OfflineScanner
> package org.apache.accumulo.core.client.impl;
>                                        ^
>     (see http://errorprone.info/bugpattern/MultipleTopLevelClasses)
> /Users/mjwall/NetBeansProjects/accumulo-mjwall/core/src/main/java/org/apache/accumulo/core/client/impl/ConditionalWriterImpl.java:211: warning: [SynchronizeOnNonFinalField] Synchronizing on non-final fields is not safe: if the field is ever updated, different threads may end up locking on different objects.
>     synchronized (serverQueues) {
>                  ^
>     (see http://errorprone.info/bugpattern/SynchronizeOnNonFinalField)
> /Users/mjwall/NetBeansProjects/accumulo-mjwall/core/src/main/java/org/apache/accumulo/core/client/impl/ConditionalWriterImpl.java:487: warning: [SynchronizeOnNonFinalField] Synchronizing on non-final fields is not safe: if the field is ever updated, different threads may end up locking on different objects.
>     synchronized (cachedSessionIDs) {
>                  ^
>     (see http://errorprone.info/bugpattern/SynchronizeOnNonFinalField)
> /Users/mjwall/NetBeansProjects/accumulo-mjwall/core/src/main/java/org/apache/accumulo/core/client/impl/ConditionalWriterImpl.java:505: warning: [SynchronizeOnNonFinalField] Synchronizing on non-final fields is not safe: if the field is ever updated, different threads may end up locking on different objects.
>     synchronized (cachedSessionIDs) {
>                  ^
>     (see http://errorprone.info/bugpattern/SynchronizeOnNonFinalField)
> /Users/mjwall/NetBeansProjects/accumulo-mjwall/core/src/main/java/org/apache/accumulo/core/client/impl/ConditionalWriterImpl.java:521: warning: [SynchronizeOnNonFinalField] Synchronizing on non-final fields is not safe: if the field is ever updated, different threads may end up locking on different objects.
>     synchronized (cachedSessionIDs) {
>                  ^
>     (see http://errorprone.info/bugpattern/SynchronizeOnNonFinalField)
> /Users/mjwall/NetBeansProjects/accumulo-mjwall/core/src/main/java/org/apache/accumulo/core/client/impl/ConditionalWriterImpl.java:528: warning: [SynchronizeOnNonFinalField] Synchronizing on non-final fields is not safe: if the field is ever updated, different threads may end up locking on different objects.
>     synchronized (cachedSessionIDs) {
>                  ^
>     (see http://errorprone.info/bugpattern/SynchronizeOnNonFinalField)
> /Users/mjwall/NetBeansProjects/accumulo-mjwall/core/src/main/java/org/apache/accumulo/core/client/impl/MultiTableBatchWriterImpl.java:218: warning: [SynchronizeOnNonFinalField] Synchronizing on non-final fields is not safe: if the field is ever updated, different threads may end up locking on different objects.
>     synchronized (tableWriters) {
>                  ^
>     (see http://errorprone.info/bugpattern/SynchronizeOnNonFinalField)
> 16 warnings
> [INFO]                                                                         
> [INFO] ------------------------------------------------------------------------
> [INFO] Building Apache Accumulo Simple Examples 1.6.6-SNAPSHOT
> [INFO] ------------------------------------------------------------------------
> ..
> [INFO]                                                                         
> [INFO] ------------------------------------------------------------------------
> [INFO] Building Apache Accumulo Server Base 1.6.6-SNAPSHOT
> [INFO] ------------------------------------------------------------------------
> ...
> [INFO]                                                                         
> [INFO] ------------------------------------------------------------------------
> [INFO] Building Apache Accumulo GC Server 1.6.6-SNAPSHOT
> [INFO] ------------------------------------------------------------------------
> ...
> [INFO]                                                                         
> [INFO] ------------------------------------------------------------------------
> [INFO] Building Apache Accumulo Master Server 1.6.6-SNAPSHOT
> [INFO] ------------------------------------------------------------------------
> ...
> [INFO]                                                                         
> [INFO] ------------------------------------------------------------------------
> [INFO] Building Apache Accumulo Monitor Server 1.6.6-SNAPSHOT
> [INFO] ------------------------------------------------------------------------
> ...
> [INFO]                                                                         
> [INFO] ------------------------------------------------------------------------
> [INFO] Building Apache Accumulo Tracer Server 1.6.6-SNAPSHOT
> [INFO] ------------------------------------------------------------------------
> ...
> [INFO]                                                                         
> [INFO] ------------------------------------------------------------------------
> [INFO] Building Apache Accumulo Tablet Server 1.6.6-SNAPSHOT
> [INFO] ------------------------------------------------------------------------
> ...
> [INFO]                                                                         
> [INFO] ------------------------------------------------------------------------
> [INFO] Building Apache Accumulo MiniCluster 1.6.6-SNAPSHOT
> [INFO] ------------------------------------------------------------------------
> ...
> [INFO]                                                                         
> [INFO] ------------------------------------------------------------------------
> [INFO] Building Apache Accumulo Native Libraries 1.6.6-SNAPSHOT
> [INFO] ------------------------------------------------------------------------
> ...
> [INFO]                                                                         
> [INFO] ------------------------------------------------------------------------
> [INFO] Building Apache Accumulo Testing 1.6.6-SNAPSHOT
> [INFO] ------------------------------------------------------------------------
> ...
> [INFO] 
> [INFO] --- maven-compiler-plugin:3.3:compile (default-compile) @ accumulo-test ---
> [INFO] Changes detected - recompiling the module!
> [INFO] Compiling 176 source files to /Users/mjwall/NetBeansProjects/accumulo-mjwall/test/target/classes
> /Users/mjwall/NetBeansProjects/accumulo-mjwall/test/src/main/java/org/apache/accumulo/test/EstimateInMemMapOverhead.java:17: warning: [MultipleTopLevelClasses] Expected at most one top-level class declaration, instead found: MemoryUsageTest, TextMemoryUsageTest, InMemoryMapMemoryUsageTest, MutationMemoryUsageTest, IntObjectMemoryUsageTest, EstimateInMemMapOverhead
> package org.apache.accumulo.test;
>                            ^
>     (see http://errorprone.info/bugpattern/MultipleTopLevelClasses)
> /Users/mjwall/NetBeansProjects/accumulo-mjwall/test/src/main/java/org/apache/accumulo/test/IMMLGBenchmark.java:129: warning: [ElementsCountedInLoop] This code, which counts elements using a loop, can be replaced by a simpler library method
>     for (@SuppressWarnings("unused")
>     ^
>     (see http://errorprone.info/bugpattern/ElementsCountedInLoop)
>   Did you mean 'count += Iterables.size(scanner);'?
> /Users/mjwall/NetBeansProjects/accumulo-mjwall/test/src/main/java/org/apache/accumulo/test/continuous/Histogram.java:17: warning: [MultipleTopLevelClasses] Expected at most one top-level class declaration, instead found: HistData, Histogram
> package org.apache.accumulo.test.continuous;
>                                 ^
>     (see http://errorprone.info/bugpattern/MultipleTopLevelClasses)
> /Users/mjwall/NetBeansProjects/accumulo-mjwall/test/src/main/java/org/apache/accumulo/test/performance/metadata/MetadataBatchScanTest.java:225: warning: [ElementsCountedInLoop] This code, which counts elements using a loop, can be replaced by a simpler library method
>     for (@SuppressWarnings("unused")
>     ^
>     (see http://errorprone.info/bugpattern/ElementsCountedInLoop)
>   Did you mean 'count += Iterables.size(bs);'?
> /Users/mjwall/NetBeansProjects/accumulo-mjwall/test/src/main/java/org/apache/accumulo/test/randomwalk/Module.java:402: warning: [SynchronizeOnNonFinalField] Synchronizing on non-final fields is not safe: if the field is ever updated, different threads may end up locking on different objects.
>     synchronized (timer) {
>                  ^
>     (see http://errorprone.info/bugpattern/SynchronizeOnNonFinalField)
> 5 warnings
> [INFO]                                                                         
> [INFO] ------------------------------------------------------------------------
> [INFO] Building Apache Accumulo Proxy 1.6.6-SNAPSHOT
> [INFO] ------------------------------------------------------------------------
> ...
> [INFO]                                                                         
> [INFO] ------------------------------------------------------------------------
> [INFO] Building Apache Accumulo 1.6.6-SNAPSHOT
> [INFO] ------------------------------------------------------------------------
> ...
> [INFO]                                                                         
> [INFO] ------------------------------------------------------------------------
> [INFO] Building Apache Accumulo Documentation 1.6.6-SNAPSHOT
> [INFO] ------------------------------------------------------------------------
> ...
> [INFO]                                                                         
> [INFO] ------------------------------------------------------------------------
> [INFO] Building Apache Accumulo Maven Plugin 1.6.6-SNAPSHOT
> [INFO] ------------------------------------------------------------------------
> ...
> [INFO] 
> [INFO] --- maven-compiler-plugin:3.3:compile (default-compile) @ accumulo-maven-plugin ---
> [INFO] Changes detected - recompiling the module!
> [INFO] Compiling 4 source files to /Users/mjwall/NetBeansProjects/accumulo-mjwall/maven-plugin/target/classes
> /Users/mjwall/NetBeansProjects/accumulo-mjwall/maven-plugin/target/generated-sources/plugin/org/apache/accumulo/maven/plugin/HelpMojo.java:100: warning: [Finally] If you return or throw from a finally, then values returned or thrown from the try-catch block will be ignored. Consider using try-with-resources instead.
>                     throw new MojoExecutionException( e.getMessage(), e );
>                     ^
>     (see http://errorprone.info/bugpattern/Finally)
> 1 warning
> [INFO] ------------------------------------------------------------------------
> [INFO] Reactor Summary:
> [INFO] 
> [INFO] Apache Accumulo Project ............................ SUCCESS [  3.028 s]
> [INFO] Apache Accumulo Trace .............................. SUCCESS [  1.216 s]
> [INFO] Apache Accumulo Fate ............................... SUCCESS [  0.584 s]
> [INFO] Apache Accumulo Start .............................. SUCCESS [  2.946 s]
> [INFO] Apache Accumulo Core ............................... SUCCESS [ 28.759 s]
> [INFO] Apache Accumulo Simple Examples .................... SUCCESS [  1.099 s]
> [INFO] Apache Accumulo Server Base ........................ SUCCESS [  1.251 s]
> [INFO] Apache Accumulo GC Server .......................... SUCCESS [  0.856 s]
> [INFO] Apache Accumulo Master Server ...................... SUCCESS [  0.993 s]
> [INFO] Apache Accumulo Monitor Server ..................... SUCCESS [  1.111 s]
> [INFO] Apache Accumulo Tracer Server ...................... SUCCESS [  0.808 s]
> [INFO] Apache Accumulo Tablet Server ...................... SUCCESS [  1.032 s]
> [INFO] Apache Accumulo MiniCluster ........................ SUCCESS [  2.017 s]
> [INFO] Apache Accumulo Native Libraries ................... SUCCESS [  1.591 s]
> [INFO] Apache Accumulo Testing ............................ SUCCESS [  3.486 s]
> [INFO] Apache Accumulo Proxy .............................. SUCCESS [  1.984 s]
> [INFO] Apache Accumulo .................................... SUCCESS [  2.274 s]
> [INFO] Apache Accumulo Documentation ...................... SUCCESS [  0.280 s]
> [INFO] Apache Accumulo Maven Plugin ....................... SUCCESS [  6.065 s]
> [INFO] ------------------------------------------------------------------------
> [INFO] BUILD SUCCESS
> [INFO] ------------------------------------------------------------------------
> [INFO] Total time: 01:02 min
> [INFO] Finished at: 2016-03-03T11:05:24-05:00
> [INFO] Final Memory: 142M/615M
> [INFO] ------------------------------------------------------------------------
> {noformat}
> Notice the LongLiteralLowerCaseSuffix and NonOverridingEquals are both off.  There were lots of these.  Also notice I only ran 'mvn compile', there are errors in the test classes as well like
> {noformat}
> /Users/mjwall/NetBeansProjects/accumulo-mjwall/fate/src/test/java/org/apache/accumulo/fate/zookeeper/DistributedReadWriteLockTest.java:74: warning: [NonAtomicVolatileUpdate] This update of a volatile variable is non-atomic
>       ++counter;
>       ^
> {noformat}
> Maybe this is useful.  Thanks to [~drew.farris] for showing me error-prone.



--
This message was sent by Atlassian JIRA
(v6.4.14#64029)