Catch common Java mistakes as compile-time errors
C

Catch common Java mistakes as compile-time errors

Catch common Java mistakes as compile-time errors

7,191 stars
N/A forks
N/A contributors

README

Project documentation from GitHub

Catch Java Bugs Before They Bite: Introducing Error Prone

We've all been there. You write some Java code, it compiles, you run your tests, and everything seems fine. Then, hours or days later, a subtle bug surfaces—maybe a missing @Override, an accidental assignment in a conditional, or a misuse of String.format. These aren't logic errors; they're common, well-understood mistakes that the standard compiler lets slide. What if you could catch them at compile time instead?

That's exactly what Google's Error Prone project does. It plugs into your Java compiler (javac) to turn these common pitfalls into hard, fail-the-build errors. Think of it as a supercharged linter that doesn't just warn you—it enforces correctness as part of your build process.

What It Does

Error Prone is a static analysis tool for Java. It works as a compiler plugin, extending javac with hundreds of extra bug checks. When it detects a likely bug—like comparing identical values, using the wrong type in a collection, or forgetting to close a resource—it doesn't just output a warning. It throws a compilation error, forcing you to fix the issue immediately.

This shifts bug detection left, way left. The bug is caught the moment you compile, not during code review, testing, or, worst of all, in production.

Why It's Cool

The real power of Error Prone isn't just the sheer number of checks; it's the philosophy. It treats certain bug patterns not as stylistic choices or "maybe" problems, but as definite errors that should block compilation. This is a game-changer for team consistency and codebase hygiene.

Some of its checks are incredibly smart. For example, it can catch:

  • Self-comparisons:if (x == x) which is always true.
  • Missing @Override: Ensuring you're actually overriding a method.
  • Array equals misuse: Warning you that a.equals(b) doesn't work as expected for arrays.
  • StringFormat mismatches: Validating the number and type of arguments in String.format calls.

Because it's built into the compiler, it has deep access to the code's abstract syntax tree (AST) and type information, allowing for more precise and reliable analysis than many external linting tools.

How to Try It

Getting started with Error Prone is straightforward, especially if you're using Maven or Gradle. The GitHub repository has excellent, up-to-date instructions.

For a q

Did you like this issue?

Join our weekly newsletter

Love discovering amazing projects?

Help us continue bringing you the best open-source discoveries every week.

Back to Projects
Last updated: Dec 8, 2025