Catch Simple Java Mistakes in Compile Time » Gofore



Catch Simple Java Mistakes in Compile Time » Gofore

What is Error Prone

All Java developers should be familiar with the Java programming language compiler a.k.a javac. It reads class and interface definitions and produces bytecode class files. If syntax or static type checking has issues, a compilation error is raised. Error Prone does all this, but in addition to this it checks for common mistakes that could be present in the source code and forces them to be fixed at compile time. It does this without interfering a developer’s basic development cycle and without any significant performance impact (9.0% time overhead [3]).

How Does it Work?

Since the release of JSR 199 (Java Compiler API) it has been possible to compile Java inside a Java program. The different compilation phases are exposed in JavaCompiler class and Error Prone actually extends this class in order to insert hooks into the compilation pipeline. To be more specific, it adds custom error checking after the flow phase of the default compiler. It uses AST (Abstract Syntax Tree) related APIs such as TreeScanner to visit the AST nodes and with each node, it runs proper validation code depending on the node type.

Below is an example of a bug checker that ensures that the codebase does not contain a division by integer literal zero:

 

 What Kind of Errors Are Actually Caught?

Instead of writing a sample code snippet myself, I think it is more interesting to see what Error Prone finds in real software projects. I picked Elasticsearch [4] as it is an active open source project with a large contributor pool. A cloned the project and replaced the compiler configuration to the following in the pom.xml in order to active Error Prone:

<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.2</version>
<configuration>
<compilerId>javac-with-errorprone</compilerId>
<forceJavacCompilerUse>true</forceJavacCompilerUse>
<source>1.7</source>
<target>1.7</target>
</configuration>
<dependencies>
<dependency>
<groupId>com.google.errorprone</groupId>
<artifactId>error_prone_core</artifactId>
<version>1.1.2</version>
</dependency>
<dependency>
<groupId>org.codehaus.plexus</groupId>
<artifactId>plexus-compiler-javac</artifactId>
<version>2.3</version>
</dependency>
<dependency>
<groupId>org.codehaus.plexus</groupId>
<artifactId>plexus-compiler-javac-errorprone</artifactId>
<version>2.3</version>
</dependency>
</dependencies>
</plugin>

Read full article from Catch Simple Java Mistakes in Compile Time » Gofore


No comments:

Post a Comment

Labels

Algorithm (219) Lucene (130) LeetCode (97) Database (36) Data Structure (33) text mining (28) Solr (27) java (27) Mathematical Algorithm (26) Difficult Algorithm (25) Logic Thinking (23) Puzzles (23) Bit Algorithms (22) Math (21) List (20) Dynamic Programming (19) Linux (19) Tree (18) Machine Learning (15) EPI (11) Queue (11) Smart Algorithm (11) Operating System (9) Java Basic (8) Recursive Algorithm (8) Stack (8) Eclipse (7) Scala (7) Tika (7) J2EE (6) Monitoring (6) Trie (6) Concurrency (5) Geometry Algorithm (5) Greedy Algorithm (5) Mahout (5) MySQL (5) xpost (5) C (4) Interview (4) Vi (4) regular expression (4) to-do (4) C++ (3) Chrome (3) Divide and Conquer (3) Graph Algorithm (3) Permutation (3) Powershell (3) Random (3) Segment Tree (3) UIMA (3) Union-Find (3) Video (3) Virtualization (3) Windows (3) XML (3) Advanced Data Structure (2) Android (2) Bash (2) Classic Algorithm (2) Debugging (2) Design Pattern (2) Google (2) Hadoop (2) Java Collections (2) Markov Chains (2) Probabilities (2) Shell (2) Site (2) Web Development (2) Workplace (2) angularjs (2) .Net (1) Amazon Interview (1) Android Studio (1) Array (1) Boilerpipe (1) Book Notes (1) ChromeOS (1) Chromebook (1) Codility (1) Desgin (1) Design (1) Divide and Conqure (1) GAE (1) Google Interview (1) Great Stuff (1) Hash (1) High Tech Companies (1) Improving (1) LifeTips (1) Maven (1) Network (1) Performance (1) Programming (1) Resources (1) Sampling (1) Sed (1) Smart Thinking (1) Sort (1) Spark (1) Stanford NLP (1) System Design (1) Trove (1) VIP (1) tools (1)

Popular Posts