Skip to content

Fix conditional factories #785

New issue

Have a question about this project? # for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “#”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? # to your account

Merged
merged 7 commits into from
Mar 29, 2025
Merged

Fix conditional factories #785

merged 7 commits into from
Mar 29, 2025

Conversation

SentryMan
Copy link
Collaborator

Now this:

@Factory
class MyServiceFactory {

  @Bean
  @RequiresProperty(value = "service.type", equalTo = "one")
  MyService myServiceOne() {
        return new MyServiceOne();
    }

  @Bean
  @RequiresProperty(value = "service.type", equalTo = "two")
  MyService myServiceTwo() {
        return new MyServiceTwo();
    }
}

will generate

  @Override
  public void build(Builder builder) {
    // create beans in order based on constructor dependencies
    // i.e. "provides" followed by "dependsOn"
    build_requires_MyServiceFactory(builder);
    build_requires_MyService(builder);
    build_requires_MyService__MyServiceFactory_build_myServiceTwo(builder);
  }

  @DependencyMeta(type = "io.avaje.inject.generator.models.valid.requires.MyServiceFactory")
  private void build_requires_MyServiceFactory(Builder builder) {
    MyServiceFactory$DI.build(builder);
  }

  @DependencyMeta(
      type = "io.avaje.inject.generator.models.valid.requires.MyService",
      method = "io.avaje.inject.generator.models.valid.requires.MyServiceFactory$DI.build_myServiceOne",
      dependsOn = {"io.avaje.inject.generator.models.valid.requires.MyServiceFactory"},
      autoProvides = {"io.avaje.inject.generator.models.valid.requires.MyService"})
  private void build_requires_MyService(Builder builder) {
    MyServiceFactory$DI.build_myServiceOne(builder);
  }

  @DependencyMeta(
      type = "io.avaje.inject.generator.models.valid.requires.MyService",
      method = "io.avaje.inject.generator.models.valid.requires.MyServiceFactory$DI.build_myServiceTwo",
      dependsOn = {"io.avaje.inject.generator.models.valid.requires.MyServiceFactory"},
      autoProvides = {"io.avaje.inject.generator.models.valid.requires.MyService"})
  private void build_requires_MyService__MyServiceFactory_build_myServiceTwo(Builder builder) {
    MyServiceFactory$DI.build_myServiceTwo(builder);
  }

Resolves #784

@SentryMan SentryMan added this to the 11.4 milestone Mar 28, 2025
@SentryMan SentryMan self-assigned this Mar 28, 2025
@SentryMan SentryMan enabled auto-merge (squash) March 28, 2025 19:47
@SentryMan SentryMan added the bug Something isn't working label Mar 28, 2025
@SentryMan SentryMan requested a review from rbygrave March 28, 2025 20:00
@SentryMan SentryMan merged commit 4fc43df into avaje:master Mar 29, 2025
7 checks passed
@SentryMan SentryMan deleted the factory-bug branch March 29, 2025 00:01
# for free to join this conversation on GitHub. Already have an account? # to comment
Labels
bug Something isn't working
Projects
None yet
Development

Successfully merging this pull request may close these issues.

Usage of @RequiresProperty on interface with different implementations
2 participants