Searching For Suspicious (Superfluous) Interfaces With IntelliJ 📎
- There is and very likely will be a 1:1 relation between the interface and its realization through the whole application lifecycle
- You cannot name an interface properly any more and are forced to use naming conventions like "Impl" or "I" to avoid name clashes
- Go to: Search -> Search Structurally
- Push: Copy Existing Template -> class-based -> interface that is not implemented or extended
- 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.]