Skip to content

Commit 192bf9c

Browse files
committed
#171 - Module (custom scope) dependencies aren't fully transitive
1 parent 625c75f commit 192bf9c

File tree

9 files changed

+80
-1
lines changed

9 files changed

+80
-1
lines changed

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

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -407,11 +407,18 @@ boolean providedByOtherModule(String dependency) {
407407
if (scopes.providedByDefaultModule(dependency)) {
408408
return true;
409409
}
410+
return providesDependencyRecursive(dependency);
411+
}
412+
413+
boolean providesDependencyRecursive(String dependency) {
414+
if (providesDependency(dependency)) {
415+
return true;
416+
}
410417
// look for required scopes ...
411418
for (String require : requires) {
412419
final ScopeInfo requiredScope = scopes.get(require);
413420
if (requiredScope != null) {
414-
if (requiredScope.providesDependency(dependency)) {
421+
if (requiredScope.providesDependencyRecursive(dependency)) {
415422
// context.logWarn("dependency " + dependency + " provided by other scope " + requiredScope.name);
416423
return true;
417424
}
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
package org.example.custom4;
2+
3+
public class Build {
4+
}
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
package org.example.custom4;
2+
3+
@BuildScope
4+
public class BuildOne {
5+
6+
private final Build build;
7+
8+
BuildOne(Build build) {
9+
this.build = build;
10+
}
11+
}
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
package org.example.custom4;
2+
3+
import io.avaje.inject.InjectModule;
4+
import jakarta.inject.Scope;
5+
6+
@Scope
7+
@InjectModule(requires = Build.class )
8+
public @interface BuildScope {
9+
}
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
package org.example.custom4;
2+
3+
@LinuxScope
4+
public class LinuxOne {
5+
6+
private final Machine machine;
7+
private final Build build;
8+
9+
LinuxOne(Machine machine, Build build) {
10+
this.machine = machine;
11+
this.build = build;
12+
}
13+
}
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
package org.example.custom4;
2+
3+
import io.avaje.inject.InjectModule;
4+
import jakarta.inject.Scope;
5+
6+
@Scope
7+
@InjectModule(requires = {MachineScope.class})
8+
public @interface LinuxScope {
9+
}
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
package org.example.custom4;
2+
3+
public class Machine {
4+
}
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
package org.example.custom4;
2+
3+
@MachineScope
4+
public class MachineOne {
5+
6+
private final Build build;
7+
private final Machine machine;
8+
9+
MachineOne(Build build, Machine machine) {
10+
this.build = build;
11+
this.machine = machine;
12+
}
13+
}
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
package org.example.custom4;
2+
3+
import io.avaje.inject.InjectModule;
4+
import jakarta.inject.Scope;
5+
6+
@Scope
7+
@InjectModule(requires = {Machine.class, BuildScope.class})
8+
public @interface MachineScope {
9+
}

0 commit comments

Comments
 (0)