adam bien's blog

Searching For Suspicious (Superfluous) Interfaces With IntelliJ 📎

In enterprise apps interfaces are at least suspicious in case:
  1. There is and very likely will be a 1:1 relation between the interface and its realization through the whole application lifecycle
  2. You cannot name an interface properly any more and are forced to use naming conventions like "Impl" or "I" to avoid name clashes

IntelliJ comes with structural search. "Structural Search" is a (Groovy/Java) programmable search facility with that you can easily find all (probably superfluous) interfaces with only a single implementation:

  1. Go to: Search -> Search Structurally
  2. Push: Copy Existing Template -> class-based -> interface that is not implemented or extended
  3. Push: "Edit Variables" and replace the content of the "Script Text" with com.intellij.psi.search.searches.ClassInheritorsSearch.search(__context__).findAll().size() == 1

The found interfaces are probably superfluous if you cannot clearly explain their intentions/purpose (decoupling, extensibility etc. is not good enough for a justification).
[Warning: this script is not perfect: it will also find cases of interface inheritance.]