code: public MortarScope getScreenScope(Resources resources, MortarScope parentScope, final String name,
        final Object screen) {
      ModuleFactory moduleFactory = getModuleFactory(screen);
      Object[] childModule;
      if (moduleFactory != NO_FACTORY) {
        childModule = new Object[]{ moduleFactory.createDaggerModule(resources, screen) };
      } else {
        // We need every screen to have a scope, so that anything it injects is scoped.  We need
        // this even if the screen doesn't declare a module, because Dagger allows injection of
        // objects that are annotated even if they don't appear in a module.
        childModule = new Object[0];
      }
  
      MortarScope childScope = parentScope.findChild(name);
      if (childScope == null) {
        childScope = parentScope.buildChild()
            .withService(ObjectGraphService.SERVICE_NAME,
                ObjectGraphService.create(parentScope, childModule))
            .build(name);
      }
  
      return childScope;
    }
docs: Finds or creates the scope for the given screen, honoring its optional {@link
  WithModuleFactory} or {@link WithModule} annotation. Note that scopes are also created
  for unannotated screens.