diff --git a/jadx-core/src/main/java/jadx/core/codegen/InsnGen.java b/jadx-core/src/main/java/jadx/core/codegen/InsnGen.java index bee09d490..1d80e7c4e 100644 --- a/jadx-core/src/main/java/jadx/core/codegen/InsnGen.java +++ b/jadx-core/src/main/java/jadx/core/codegen/InsnGen.java @@ -1003,6 +1003,9 @@ public class InsnGen { } else { int callArgsCount = callArgs.size(); int startArg = callArgsCount - implArgs.size(); + if (callArgsCount - startArg > 1) { + code.add('('); + } for (int i = startArg; i < callArgsCount; i++) { if (i != startArg) { code.add(", "); @@ -1010,6 +1013,9 @@ public class InsnGen { CodeVar argCodeVar = callArgs.get(i).getSVar().getCodeVar(); defVar(code, argCodeVar); } + if (callArgsCount - startArg > 1) { + code.add(')'); + } } // force set external arg names into call method args int extArgsCount = customNode.getArgsCount(); diff --git a/jadx-core/src/test/java/jadx/tests/integration/java8/TestLambdaArgs.java b/jadx-core/src/test/java/jadx/tests/integration/java8/TestLambdaArgs.java new file mode 100644 index 000000000..563fc30f1 --- /dev/null +++ b/jadx-core/src/test/java/jadx/tests/integration/java8/TestLambdaArgs.java @@ -0,0 +1,37 @@ +package jadx.tests.integration.java8; + +import java.util.function.BiFunction; +import java.util.function.Function; + +import org.junit.jupiter.api.Test; + +import jadx.tests.api.IntegrationTest; + +import static jadx.tests.api.utils.assertj.JadxAssertions.assertThat; + +public class TestLambdaArgs extends IntegrationTest { + + public static class TestCls { + public void test1() { + call1(a -> -a); + } + + public void test2() { + call2((a, b) -> a - b); + } + + private void call1(Function func) { + } + + private void call2(BiFunction func) { + } + } + + @Test + public void test() { + assertThat(getClassNode(TestCls.class)) + .code() + .containsOne("call1(a ->") + .containsOne("call2((a, b) ->"); + } +}