From 160e3daf446e508eb17c6fc21a0932246848206b Mon Sep 17 00:00:00 2001 From: Rafael Winterhalter Date: Mon, 22 Aug 2022 22:30:03 +0200 Subject: [PATCH] Drop varargs collector before invoking a user method. --- .../InstrumentationMemberAccessor.java | 3 +++ .../java/org/mockitoinline/StaticMockTest.java | 17 +++++++++++++++++ 2 files changed, 20 insertions(+) diff --git a/src/main/java/org/mockito/internal/util/reflection/InstrumentationMemberAccessor.java b/src/main/java/org/mockito/internal/util/reflection/InstrumentationMemberAccessor.java index 0a972d8019..13d8416586 100644 --- a/src/main/java/org/mockito/internal/util/reflection/InstrumentationMemberAccessor.java +++ b/src/main/java/org/mockito/internal/util/reflection/InstrumentationMemberAccessor.java @@ -235,6 +235,9 @@ public Object invoke(Method method, Object target, Object... arguments) if (!Modifier.isStatic(method.getModifiers())) { handle = handle.bindTo(target); } + if (handle.isVarargsCollector()) { + handle = handle.asFixedArity(); + } try { return DISPATCHER.invokeWithArguments(handle, arguments); } catch (Throwable t) { diff --git a/subprojects/inline/src/test/java/org/mockitoinline/StaticMockTest.java b/subprojects/inline/src/test/java/org/mockitoinline/StaticMockTest.java index eaa3ed1970..c9f7a58cce 100644 --- a/subprojects/inline/src/test/java/org/mockitoinline/StaticMockTest.java +++ b/subprojects/inline/src/test/java/org/mockitoinline/StaticMockTest.java @@ -212,6 +212,15 @@ public void testStaticMockMustUseValidMatchers() { } } + @Test + public void testStaticMockVarargs() { + assertEquals("foobar", Dummy.fooVarargs("foo", "bar")); + try (MockedStatic ignored = Mockito.mockStatic(Dummy.class)) { + assertNull(Dummy.fooVarargs("foo", "bar")); + } + assertEquals("foobar", Dummy.fooVarargs("foo", "bar")); + } + static class Dummy { static String var1 = null; @@ -227,5 +236,13 @@ static void fooVoid(String var2) { static void fooVoid(String var2, String var3) { var1 = var2; } + + static String fooVarargs(String... args) { + StringBuilder sb = new StringBuilder(); + for (String arg : args) { + sb.append(arg); + } + return sb.toString(); + } } }