Searching For Suspicious (Superfluous) Interfaces With IntelliJ
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.]
Unless you're implementing a framework/library
Posted by Pascal Bleser on August 02, 2011 at 04:29 PM CEST #
@Pascal,
+1 and -1 :-).
If you design an API let's say JDBC, it is a good idea to use interfaces or abstract classes for this purpose.
But: if there is only a single implementation of the API (a SPI -> e.g. only a MySQL implementation), I would question the added value of such an API.
thanks for your feedback!,
adam
Posted by Adam Bien on August 02, 2011 at 05:06 PM CEST #