In enterprise apps interfaces are at least suspicious in case:
- 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.]
NEW workshop: Building HTML 5 Applications With Angular 2
Full week in December 2016: from Java EE 7 Bootstrap, Effective, Architectures over Testing to Microservices
On demand workshops: Java EE 7: Bootstrap, Effective, Testing and Microservices available for streaming.