diff options
author | Sasikanth Bharadwaj | 2015-07-22 08:32:39 +0000 |
---|---|---|
committer | Sasikanth Bharadwaj | 2015-07-31 05:48:32 +0000 |
commit | 94200ed39d00137579089415688a6cedf88ddec1 (patch) | |
tree | 4c03ef8a597e4ed28a3c577c34f5152f63ba0086 | |
parent | 8db4906e6220f222d10f8f23475147fcad83b2f9 (diff) | |
download | eclipse.jdt.core-94200ed39d00137579089415688a6cedf88ddec1.tar.gz eclipse.jdt.core-94200ed39d00137579089415688a6cedf88ddec1.tar.xz eclipse.jdt.core-94200ed39d00137579089415688a6cedf88ddec1.zip |
bug 461004: Multiple spurious errors compiling FunctionalJava project
Change-Id: I940d52f87ee3898c71a31e04e3411d6e2b6c5694
Change-Id: I6f9ad6d47622db21821a406b31eef094718025ce
Task-Url: https://bugs.eclipse.org/bugs/show_bug.cgi?id=461004
2 files changed, 32 insertions, 1 deletions
diff --git a/org.eclipse.jdt.core.tests.compiler/src/org/eclipse/jdt/core/tests/compiler/regression/LambdaExpressionsTest.java b/org.eclipse.jdt.core.tests.compiler/src/org/eclipse/jdt/core/tests/compiler/regression/LambdaExpressionsTest.java index e489fbdfbc..0ce42081b9 100644 --- a/org.eclipse.jdt.core.tests.compiler/src/org/eclipse/jdt/core/tests/compiler/regression/LambdaExpressionsTest.java +++ b/org.eclipse.jdt.core.tests.compiler/src/org/eclipse/jdt/core/tests/compiler/regression/LambdaExpressionsTest.java @@ -5672,6 +5672,33 @@ public void test467825a() { "}\n" }); } +//https://bugs.eclipse.org/bugs/show_bug.cgi?id=461004 Multiple spurious errors compiling FunctionalJava project +public void test461004() { + this.runConformTest( + new String[] { + "Ice.java", + "import java.util.function.BiPredicate;\n" + + "import java.util.function.Function;\n" + + "class Ice {\n" + + " static <T> BiPredicate<T, T> create(BiPredicate<? super T, ? super T> fn) {\n" + + " return null;\n" + + " }\n" + + " static <T, K> BiPredicate<T, T> create(Function<? super T, ? super K> map) {\n" + + " return null;\n" + + " }\n" + + " void someMethod(BiPredicate<String, String> b) {}\n" + + " void method() {\n" + + " BiPredicate<String, String> eq = String::equalsIgnoreCase;\n" + + " // these all compile:\n" + + " BiPredicate<String, String> ok1 = create( eq );\n" + + " BiPredicate<String, String> ok2 = create( (a, b) -> true );\n" + + " BiPredicate<String, String> ok3 = create( String::valueOf );\n" + + " // this causes an internal compiler error, ArrayIndexOutOfBoundsException: 1\n" + + " someMethod(create( String::equalsIgnoreCase ));\n" + + " }\n" + + "}\n" + }); +} public static Class testClass() { return LambdaExpressionsTest.class; } diff --git a/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/ReferenceExpression.java b/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/ReferenceExpression.java index eee548af2e..ad776771a5 100644 --- a/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/ReferenceExpression.java +++ b/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/ReferenceExpression.java @@ -844,7 +844,11 @@ public class ReferenceExpression extends FunctionalExpression implements IPolyEx return null; int n = functionType.parameters.length; int k = this.exactMethodBinding.parameters.length; - return (n == k || n == k + 1) ? this : null; + + if (!this.haveReceiver && this.isMethodReference() && !this.exactMethodBinding.isStatic()) { + k++; + } + return (n == k) ? this : null; } // descriptors parameters should be free of inference variables. ReferenceExpression copy = cachedResolvedCopy(targetType); |