Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSasikanth Bharadwaj2015-07-22 08:32:39 +0000
committerSasikanth Bharadwaj2015-07-31 05:48:32 +0000
commit94200ed39d00137579089415688a6cedf88ddec1 (patch)
tree4c03ef8a597e4ed28a3c577c34f5152f63ba0086
parent8db4906e6220f222d10f8f23475147fcad83b2f9 (diff)
downloadeclipse.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
-rw-r--r--org.eclipse.jdt.core.tests.compiler/src/org/eclipse/jdt/core/tests/compiler/regression/LambdaExpressionsTest.java27
-rw-r--r--org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/ReferenceExpression.java6
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);

Back to the top