code: void injectContextApplication(Application app) {
          ApplicationInfo appinfo = new ApplicationInfo(app, this.getBus());
          if (appinfo.contextsAvailable()) {
              InjectionRuntimeContext irc = InjectionRuntimeContextHelper.getRuntimeContext();
              for (Map.Entry<Class<?>, Method> entry : appinfo.getContextMethods().entrySet()) {
                  Method method = entry.getValue();
                  Object value = method.getParameterTypes()[0] == Application.class ? null : appinfo.getContextSetterProxy(method);
  
                  irc.setRuntimeCtxObject(entry.getKey().getName(),
                                          value);
                  InjectionUtils.injectThroughMethod(app, method, value);
              }
  
              //FIXME: what if we have a method and field with same name?
              for (Field f : appinfo.getContextFields()) {
                  Object value = f.getType() == Application.class ? null : appinfo.getContextFieldProxy(f);
                  irc.setRuntimeCtxObject(f.getType().getName(), value);
                  InjectionUtils.injectFieldValue(f, app, value);
              }
          }
      }
docs: Inject ThreadLocal proxy into Application if there is context injection:
  Please be aware doesn't inject the application itself.
  
  9.2.1 Application
  The instance of the application-supplied Application subclass can be injected into a class field or method
  parameter using the @Context annotation. Access to the Application subclass instance allows configuration
  information to be centralized in that class. Note that this cannot be injected into the Application
  subclass itself since this would create a circular dependency.
  
  @param app