Skip to content

Commit d53002d

Browse files
authored
Fix Lazy Priority Generation (#937)
It seems that the `asPrimary` code was not getting generated
1 parent f2b6ad1 commit d53002d

File tree

7 files changed

+78
-17
lines changed

7 files changed

+78
-17
lines changed
Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
package org.example.myapp.lazy;
2+
3+
import io.avaje.inject.Lazy;
4+
import io.avaje.inject.Primary;
5+
import jakarta.inject.Singleton;
6+
7+
interface GreetingService {
8+
String greet();
9+
}
10+
11+
@Lazy(Lazy.Kind.PROVIDER)
12+
@Singleton
13+
class EnglishGreeting implements GreetingService {
14+
@Override
15+
public String greet() {
16+
return "Hello";
17+
}
18+
}
19+
20+
@Primary
21+
@Lazy(Lazy.Kind.PROVIDER)
22+
@Singleton
23+
class SpanishGreeting implements GreetingService {
24+
@Override
25+
public String greet() {
26+
return "Hola";
27+
}
28+
}
29+
30+
@Lazy(Lazy.Kind.PROVIDER)
31+
@Singleton
32+
class Greeter {
33+
private final GreetingService service;
34+
35+
Greeter(GreetingService service) {
36+
this.service = service;
37+
}
38+
39+
String run() {
40+
return service.greet();
41+
}
42+
}

blackbox-test-inject/src/test/java/org/example/myapp/lazy/LazyTest.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -97,6 +97,14 @@ void testAOP() {
9797
}
9898
}
9999

100+
@Test
101+
void testLazyPriority() {
102+
try (var scope = BeanScope.builder().build()) {
103+
var greeter = scope.get(Greeter.class);
104+
assertThat(greeter.run()).isEqualTo("Hola");
105+
}
106+
}
107+
100108
@Test
101109
void testOldLazyBehavior() {
102110
var initialized = new AtomicBoolean();

inject-generator/src/main/java/io/avaje/inject/generator/BeanReader.java

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -367,14 +367,18 @@ void buildRegister(Append writer) {
367367
writer.append("var $bean = ");
368368
}
369369
writer.append("builder.");
370+
writePriority(writer);
371+
writer.append("register(bean);").eol();
372+
}
373+
374+
void writePriority(Append writer) {
370375
if (primary) {
371376
writer.append("asPrimary().");
372377
} else if (secondary) {
373378
writer.append("asSecondary().");
374379
} else if (priority != null) {
375380
writer.append("asPriority(%s).", priority);
376381
}
377-
writer.append("register(bean);").eol();
378382
}
379383

380384
void addLifecycleCallbacks(Append writer, String indent) {
@@ -599,17 +603,15 @@ String shortName() {
599603
String packageName() {
600604
if (importedComponent) {
601605
return beanPackageName() + ".di";
602-
} else {
603-
return beanPackageName();
604606
}
607+
return beanPackageName();
605608
}
606609

607610
private String beanPackageName() {
608611
if (beanType.getNestingKind().isNested()) {
609612
return Util.nestedPackageOf(beanQualifiedName());
610-
} else {
611-
return ProcessorUtils.packageOf(beanQualifiedName());
612613
}
614+
return ProcessorUtils.packageOf(beanQualifiedName());
613615
}
614616

615617
private String beanQualifiedName() {

inject-generator/src/main/java/io/avaje/inject/generator/MethodReader.java

Lines changed: 14 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -281,12 +281,9 @@ void builderAddBeanProvider(Append writer) {
281281

282282
String indent = " ";
283283
writer.indent(indent).append(" builder");
284+
writePriority(writer);
284285
if (prototype) {
285286
writer.append(".asPrototype()");
286-
} else if (secondary) {
287-
writer.append(".asSecondary()");
288-
} else if (priority != null) {
289-
writer.append(".asPriority(%s)", priority);
290287
}
291288

292289
if (proxyLazy) {
@@ -341,13 +338,9 @@ void builderBuildAddBean(Append writer) {
341338
}
342339

343340
writer.append("builder");
344-
if (primary) {
345-
writer.append(".asPrimary()");
346-
} else if (secondary) {
347-
writer.append(".asSecondary()");
348-
} else if (priority != null) {
349-
writer.append(".asPriority(%s)", priority);
350-
} else if (prototype) {
341+
writePriority(writer);
342+
343+
if (prototype) {
351344
writer.append(".asPrototype()");
352345
}
353346

@@ -412,6 +405,16 @@ void builderBuildAddBean(Append writer) {
412405
}
413406
}
414407

408+
void writePriority(Append writer) {
409+
if (primary) {
410+
writer.append(".asPrimary()");
411+
} else if (secondary) {
412+
writer.append(".asSecondary()");
413+
} else if (priority != null) {
414+
writer.append(".asPriority(%s)", priority);
415+
}
416+
}
417+
415418
static String priority(Integer priority) {
416419
return priority == null || priority == 1000 ? "" : ", " + priority;
417420
}

inject-generator/src/main/java/io/avaje/inject/generator/SimpleBeanWriter.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -186,7 +186,9 @@ private void writeAddFor(MethodReader constructor) {
186186
registerProvider = "asPrototype().registerProvider";
187187
}
188188

189-
writer.append(" builder.%s(() -> {", registerProvider).eol();
189+
writer.append(" builder.");
190+
beanReader.writePriority(writer);
191+
writer.append("%s(() -> {", registerProvider).eol();
190192
}
191193
constructor.startTry(writer);
192194
writeCreateBean(constructor);

inject-generator/src/test/java/io/avaje/inject/generator/models/valid/lazy/LazyBean.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,12 +3,14 @@
33
import java.io.IOException;
44

55
import io.avaje.inject.Lazy;
6+
import io.avaje.inject.Primary;
67
import jakarta.inject.Inject;
78
import jakarta.inject.Provider;
89
import jakarta.inject.Singleton;
910

1011
@Lazy
1112
@Singleton
13+
@Primary
1214
public class LazyBean {
1315

1416
Provider<Integer> intProvider;

inject-generator/src/test/java/io/avaje/inject/generator/models/valid/lazy/LazyFactory.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import io.avaje.inject.Bean;
44
import io.avaje.inject.Factory;
55
import io.avaje.inject.Lazy;
6+
import io.avaje.inject.Primary;
67

78
@Lazy
89
@Factory
@@ -13,6 +14,7 @@ Integer lazyInt() {
1314
return 0;
1415
}
1516

17+
@Primary
1618
@Bean
1719
LazyInterface lazyInterface() {
1820
return null;

0 commit comments

Comments
 (0)