Skip to content

Commit 1174710

Browse files
lukesandbergcpovirk
authored andcommitted
Allow static provider methods to be deduped
------------- Created by MOE: https://github.com/google/moe MOE_MIGRATED_REVID=308639369
1 parent 581922a commit 1174710

File tree

2 files changed

+39
-1
lines changed

2 files changed

+39
-1
lines changed

core/src/com/google/inject/internal/ProviderMethodsModule.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -325,7 +325,7 @@ private <T> ProviderMethod<T> createProviderMethod(
325325
return ProviderMethod.create(
326326
key,
327327
method,
328-
isStaticModule() ? null : delegate,
328+
isStaticModule() || Modifier.isStatic(method.getModifiers()) ? null : delegate,
329329
ImmutableSet.copyOf(point.getDependencies()),
330330
scopeAnnotation,
331331
skipFastClassGeneration,

core/test/com/google/inject/spi/ProviderMethodsTest.java

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1047,6 +1047,44 @@ Integer fail() {
10471047
}
10481048
}
10491049

1050+
static final class DeduplicateModule extends AbstractModule {
1051+
@Provides
1052+
String provideString() {
1053+
return "";
1054+
}
1055+
}
1056+
1057+
public void testDeduplicateProviderMethodsBindings_sameInstance() {
1058+
Module module = new DeduplicateModule();
1059+
Guice.createInjector(Stage.PRODUCTION, module, module);
1060+
}
1061+
1062+
public void testDeduplicateProviderMethodsBindings_differentInstances() {
1063+
try {
1064+
Guice.createInjector(Stage.PRODUCTION, new DeduplicateModule(), new DeduplicateModule());
1065+
fail();
1066+
} catch (CreationException expected) {
1067+
assertContains(expected.getMessage(), "A binding to java.lang.String was already configured");
1068+
}
1069+
}
1070+
1071+
static final class DeduplicateStaticModule extends AbstractModule {
1072+
@Provides
1073+
static String provideString() {
1074+
return "";
1075+
}
1076+
}
1077+
1078+
public void testDeduplicateProviderMethodsBindings_sameInstance_staticMethod() {
1079+
Module module = new DeduplicateStaticModule();
1080+
Guice.createInjector(Stage.PRODUCTION, module, module);
1081+
}
1082+
1083+
public void testDeduplicateProviderMethodsBindings_differentInstances_staticMethod() {
1084+
Guice.createInjector(
1085+
Stage.PRODUCTION, new DeduplicateStaticModule(), new DeduplicateStaticModule());
1086+
}
1087+
10501088
private void runNullableTest(Injector injector, Dependency<?> dependency, Module module) {
10511089
switch (InternalFlags.getNullableProvidesOption()) {
10521090
case ERROR:

0 commit comments

Comments
 (0)