org.junit.jupiter.engine.execution.InterceptingExecutableInvoker Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of junit-jupiter-engine Show documentation
Show all versions of junit-jupiter-engine Show documentation
Module "junit-jupiter-engine" of JUnit 5.
/*
* Copyright 2015-2022 the original author or authors.
*
* All rights reserved. This program and the accompanying materials are
* made available under the terms of the Eclipse Public License v2.0 which
* accompanies this distribution and is available at
*
* https://www.eclipse.org/legal/epl-v20.html
*/
package org.junit.jupiter.engine.execution;
import static org.apiguardian.api.API.Status.INTERNAL;
import static org.junit.jupiter.engine.execution.ParameterResolutionUtils.resolveParameters;
import java.lang.reflect.Constructor;
import java.lang.reflect.Executable;
import java.lang.reflect.Method;
import java.util.Optional;
import org.apiguardian.api.API;
import org.junit.jupiter.api.extension.ExtensionContext;
import org.junit.jupiter.api.extension.InvocationInterceptor;
import org.junit.jupiter.api.extension.InvocationInterceptor.Invocation;
import org.junit.jupiter.api.extension.ParameterResolver;
import org.junit.jupiter.api.extension.ReflectiveInvocationContext;
import org.junit.jupiter.engine.extension.ExtensionRegistry;
/**
* {@code InterceptingExecutableInvoker} encapsulates the invocation of a
* {@link java.lang.reflect.Executable} (i.e., method or constructor),
* including support for dynamic resolution of method parameters via
* {@link ParameterResolver ParameterResolvers}.
*
* @since 5.0
*/
@API(status = INTERNAL, since = "5.0")
public class InterceptingExecutableInvoker {
private static final InvocationInterceptorChain interceptorChain = new InvocationInterceptorChain();
/**
* Invoke the supplied constructor with the supplied outer instance and
* dynamic parameter resolution.
*
* @param constructor the constructor to invoke and resolve parameters for
* @param outerInstance the outer instance to supply as the first argument
* to the constructor; empty, for top-level classes
* @param extensionContext the current {@code ExtensionContext}
* @param extensionRegistry the {@code ExtensionRegistry} to retrieve
* {@code ParameterResolvers} from
* @param interceptorCall the call for intercepting this constructor
* invocation via all registered {@linkplain InvocationInterceptor
* interceptors}
*/
public T invoke(Constructor constructor, Optional
© 2015 - 2024 Weber Informatics LLC | Privacy Policy