Skip to content

Commit a506608

Browse files
committed
Make ExtensionContextSupplier a functional interface
To allow simple constant lambda implementations
1 parent e3c5383 commit a506608

File tree

4 files changed

+29
-20
lines changed

4 files changed

+29
-20
lines changed

junit-jupiter-engine/src/main/java/org/junit/jupiter/engine/descriptor/ClassBasedTestDescriptor.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -287,7 +287,7 @@ private TestInstances instantiateAndPostProcessTestInstance(JupiterEngineExecuti
287287
ClassExtensionContext ourExtensionContext, ExtensionRegistry registry,
288288
JupiterEngineExecutionContext context) {
289289

290-
ExtensionContextSupplier extensionContext = new ExtensionContextSupplier(context.getExtensionContext(),
290+
ExtensionContextSupplier extensionContext = ExtensionContextSupplier.create(context.getExtensionContext(),
291291
ourExtensionContext);
292292
TestInstances instances = instantiateTestClass(parentExecutionContext, extensionContext, registry, context);
293293
context.getThrowableCollector().execute(() -> {

junit-jupiter-engine/src/main/java/org/junit/jupiter/engine/execution/ExtensionContextSupplier.java

Lines changed: 26 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -24,28 +24,38 @@
2424
* @since 5.12
2525
* @see TestInstantiationAwareExtension
2626
*/
27+
@FunctionalInterface
2728
@API(status = INTERNAL, since = "5.12")
28-
public final class ExtensionContextSupplier {
29+
public interface ExtensionContextSupplier {
2930

30-
private final ExtensionContext currentExtensionContext;
31-
private final ExtensionContext legacyExtensionContext;
32-
33-
public ExtensionContextSupplier(ExtensionContext currentExtensionContext, ExtensionContext legacyExtensionContext) {
34-
this.currentExtensionContext = currentExtensionContext;
35-
this.legacyExtensionContext = legacyExtensionContext;
31+
static ExtensionContextSupplier create(ExtensionContext currentExtensionContext,
32+
ExtensionContext legacyExtensionContext) {
33+
if (currentExtensionContext == legacyExtensionContext) {
34+
return __ -> currentExtensionContext;
35+
}
36+
return new ScopeBasedExtensionContextSupplier(currentExtensionContext, legacyExtensionContext);
3637
}
3738

38-
public ExtensionContext get(TestInstantiationAwareExtension extension) {
39-
if (currentExtensionContext == legacyExtensionContext || isTestScoped(extension)) {
40-
return currentExtensionContext;
39+
ExtensionContext get(TestInstantiationAwareExtension extension);
40+
41+
class ScopeBasedExtensionContextSupplier implements ExtensionContextSupplier {
42+
43+
private final ExtensionContext currentExtensionContext;
44+
private final ExtensionContext legacyExtensionContext;
45+
46+
private ScopeBasedExtensionContextSupplier(ExtensionContext currentExtensionContext,
47+
ExtensionContext legacyExtensionContext) {
48+
this.currentExtensionContext = currentExtensionContext;
49+
this.legacyExtensionContext = legacyExtensionContext;
4150
}
42-
else {
43-
return legacyExtensionContext;
51+
52+
public ExtensionContext get(TestInstantiationAwareExtension extension) {
53+
return isTestScoped(extension) ? currentExtensionContext : legacyExtensionContext;
4454
}
45-
}
4655

47-
private boolean isTestScoped(TestInstantiationAwareExtension extension) {
48-
ExtensionContext rootContext = currentExtensionContext.getRoot();
49-
return extension.getTestInstantiationExtensionContextScope(rootContext) == TEST_METHOD;
56+
private boolean isTestScoped(TestInstantiationAwareExtension extension) {
57+
ExtensionContext rootContext = legacyExtensionContext.getRoot();
58+
return extension.getTestInstantiationExtensionContextScope(rootContext) == TEST_METHOD;
59+
}
5060
}
5161
}

junit-jupiter-engine/src/main/java/org/junit/jupiter/engine/execution/ParameterResolutionUtils.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -83,8 +83,7 @@ public static Object[] resolveParameters(Method method, Optional<Object> target,
8383
*/
8484
public static Object[] resolveParameters(Executable executable, Optional<Object> target,
8585
Optional<Object> outerInstance, ExtensionContext extensionContext, ExtensionRegistry extensionRegistry) {
86-
ExtensionContextSupplier context = new ExtensionContextSupplier(extensionContext, extensionContext);
87-
return resolveParameters(executable, target, outerInstance, context, extensionRegistry);
86+
return resolveParameters(executable, target, outerInstance, __ -> extensionContext, extensionRegistry);
8887
}
8988

9089
public static Object[] resolveParameters(Executable executable, Optional<Object> target,

jupiter-tests/src/test/java/org/junit/jupiter/engine/execution/InterceptingExecutableInvokerTests.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ void invokeMethod() {
3131

3232
@Override
3333
<T> T invokeConstructor(Constructor<T> constructor, Object outerInstance) {
34-
ExtensionContextSupplier context = new ExtensionContextSupplier(extensionContext, extensionContext);
34+
ExtensionContextSupplier context = ExtensionContextSupplier.create(extensionContext, extensionContext);
3535
return newInvoker().invoke(constructor, Optional.ofNullable(outerInstance), context, extensionRegistry,
3636
passthroughInterceptor());
3737
}

0 commit comments

Comments
 (0)