diff --git a/src/org/jetbrains/java/decompiler/main/rels/LambdaProcessor.java b/src/org/jetbrains/java/decompiler/main/rels/LambdaProcessor.java index 0704efd..b5ac0fb 100644 --- a/src/org/jetbrains/java/decompiler/main/rels/LambdaProcessor.java +++ b/src/org/jetbrains/java/decompiler/main/rels/LambdaProcessor.java @@ -1,5 +1,5 @@ /* - * Copyright 2000-2015 JetBrains s.r.o. + * Copyright 2000-2016 JetBrains s.r.o. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -115,7 +115,9 @@ public class LambdaProcessor { node_lambda.parent = node; clProcessor.getMapRootClasses().put(node_lambda.simpleName, node_lambda); - mapMethodsLambda.put(node_lambda.lambdaInformation.content_method_key, node_lambda.simpleName); + if (!node_lambda.lambdaInformation.is_method_reference) { + mapMethodsLambda.put(node_lambda.lambdaInformation.content_method_key, node_lambda.simpleName); + } } } } diff --git a/test/org/jetbrains/java/decompiler/SingleClassesTest.java b/test/org/jetbrains/java/decompiler/SingleClassesTest.java index b8869b0..6ef71c0 100644 --- a/test/org/jetbrains/java/decompiler/SingleClassesTest.java +++ b/test/org/jetbrains/java/decompiler/SingleClassesTest.java @@ -79,6 +79,7 @@ public class SingleClassesTest { @Test public void testShadowing() { doTest("pkg/TestShadowing", "pkg/Shadow", "ext/Shadow"); } @Test public void testStringConcat() { doTest("pkg/TestStringConcat"); } @Test public void testJava9StringConcat() { doTest("java9/TestJava9StringConcat"); } + @Test public void testMethodReferenceSameName() { doTest("pkg/TestMethodReferenceSameName"); } protected void doTest(String testFile, String... companionFiles) { ConsoleDecompiler decompiler = fixture.getDecompiler(); diff --git a/testData/classes/pkg/TestMethodReferenceSameName$R1.class b/testData/classes/pkg/TestMethodReferenceSameName$R1.class new file mode 100644 index 0000000..895110b Binary files /dev/null and b/testData/classes/pkg/TestMethodReferenceSameName$R1.class differ diff --git a/testData/classes/pkg/TestMethodReferenceSameName.class b/testData/classes/pkg/TestMethodReferenceSameName.class new file mode 100644 index 0000000..600e551 Binary files /dev/null and b/testData/classes/pkg/TestMethodReferenceSameName.class differ diff --git a/testData/results/TestMethodReferenceSameName.dec b/testData/results/TestMethodReferenceSameName.dec new file mode 100644 index 0000000..3449a8c --- /dev/null +++ b/testData/results/TestMethodReferenceSameName.dec @@ -0,0 +1,34 @@ +public class TestMethodReferenceSameName { + TestMethodReferenceSameName.R1 r; + + private void foo() { + TestMethodReferenceSameName.R1 var10000 = this.r;// 5 + this.r.getClass(); + (var10000::foo).run(); + }// 6 + + class R1 { + void foo() { + }// 9 + } +} + +class 'TestMethodReferenceSameName' { + method 'foo ()V' { + 1 4 + 5 5 + e 6 + 13 7 + } +} + +class 'TestMethodReferenceSameName$R1' { + method 'foo ()V' { + 0 11 + } +} + +Lines mapping: +5 <-> 5 +6 <-> 8 +9 <-> 12 diff --git a/testData/src/pkg/TestMethodReferenceSameName.java b/testData/src/pkg/TestMethodReferenceSameName.java new file mode 100644 index 0000000..58d18d3 --- /dev/null +++ b/testData/src/pkg/TestMethodReferenceSameName.java @@ -0,0 +1,26 @@ +/* + * Copyright 2000-2016 JetBrains s.r.o. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +public class TestMethodReferenceSameName { + R1 r; + + private void foo() { + ((Runnable)r::foo).run(); + } + + class R1 { + void foo() {} + } +}