From 54b290269966fb5f61f2d7e2f98fb5eab1e98d2b Mon Sep 17 00:00:00 2001 From: Olivier Gregoire Date: Tue, 9 Jun 2020 14:16:02 +0000 Subject: [PATCH] Actually call default methods in AssistedInject factories --- .../inject/assistedinject/FactoryProvider2.java | 10 ++++++---- .../inject/assistedinject/FactoryProvider2Test.java | 11 +++++++++++ 2 files changed, 17 insertions(+), 4 deletions(-) diff --git a/extensions/assistedinject/src/com/google/inject/assistedinject/FactoryProvider2.java b/extensions/assistedinject/src/com/google/inject/assistedinject/FactoryProvider2.java index 4022507b8b..2d8fddebfe 100644 --- a/extensions/assistedinject/src/com/google/inject/assistedinject/FactoryProvider2.java +++ b/extensions/assistedinject/src/com/google/inject/assistedinject/FactoryProvider2.java @@ -254,10 +254,12 @@ public TypeLiteral getImplementationType() { } // Skip default methods that java8 may have created. - if (isDefault(method) && (method.isBridge() || method.isSynthetic())) { - // Even synthetic default methods need the return type validation... - // unavoidable consequence of javac8. :-( - validateFactoryReturnType(errors, method.getReturnType(), factoryRawType); + if (isDefault(method)) { + if (method.isBridge() || method.isSynthetic()) { + // Even synthetic default methods need the return type validation... + // unavoidable consequence of javac8. :-( + validateFactoryReturnType(errors, method.getReturnType(), factoryRawType); + } defaultMethods.put(method.getName(), method); continue; } diff --git a/extensions/assistedinject/test/com/google/inject/assistedinject/FactoryProvider2Test.java b/extensions/assistedinject/test/com/google/inject/assistedinject/FactoryProvider2Test.java index 484134147e..36c9d7b036 100644 --- a/extensions/assistedinject/test/com/google/inject/assistedinject/FactoryProvider2Test.java +++ b/extensions/assistedinject/test/com/google/inject/assistedinject/FactoryProvider2Test.java @@ -1405,4 +1405,15 @@ protected void configure() { AbstractAssisted.Factory factory5 = injector.getInstance(concreteKey); factory5.create("foo"); } + + interface BeetleDefaultFactory { + Beetle create(@Assisted Color color); + default String id() { return "Beetle"; } + } + + public void testConcreteDefaultMethodsAreCalled() { + Injector injector = Guice.createInjector(binder -> binder.install(new FactoryModuleBuilder().build(BeetleDefaultFactory.class))); + BeetleDefaultFactory beetleFactory = injector.getInstance(BeetleDefaultFactory.class); + assertEquals("Beetle", beetleFactory.id()); + } }