| When classes declare that they have an `@javax.inject.Inject`ed method, |
| dependency injection tools must call those methods after first calling any |
| `@javax.inject.Inject` constructor, and performing any field injection. These |
| methods are part of the initialization contract for the object. |
| |
| When subclasses override methods annotated with `@javax.inject.Inject` and |
| *don't* also annotate themselves with `@javax.inject.Inject`, the injector will |
| not call those methods as part of the subclass's initialization. This may |
| unexpectedly cause assumptions taken in the superclass (e.g.: this |
| post-initialization routine is finished, meaning that I can safely use this |
| field) to no longer hold. |
| |
| This compile error is intended to prevent this unintentional breaking of |
| assumptions. Possible resolutions to this error include: |
| |
| * `@Inject` the overridden method, calling the `super` method to maintain the |
| initialization contract. |
| * Make the superclass' method `final` to avoid subclasses unintentionally |
| masking the injected method. |
| * Move the initialization work performed by the superclass method into the |
| constructor. |
| * Suppress this error, and very carefully inspect the initialization routine |
| performed by the superclass, making sure that any work that needs to be done |
| there is done in an @Inject method in the subclass. You may want to refactor |
| portions of the body of the superclass method into a `protected` method for |
| this subclass to use. |