diff options
author | Stephan Herrmann | 2019-05-09 16:29:59 +0000 |
---|---|---|
committer | Stephan Herrmann | 2019-05-09 16:29:59 +0000 |
commit | 752fbc656301185a7a6ecbffce294c8b25e839a2 (patch) | |
tree | 4730537159b4b89995bd67c86a636eae7ddf3a9c | |
parent | a0eca8b50fc813cb95b189171f5872e3c1c42852 (diff) | |
download | eclipse.jdt.core-752fbc656301185a7a6ecbffce294c8b25e839a2.tar.gz eclipse.jdt.core-752fbc656301185a7a6ecbffce294c8b25e839a2.tar.xz eclipse.jdt.core-752fbc656301185a7a6ecbffce294c8b25e839a2.zip |
Bug 547061 - [1.8][inference] Unresolved compilation problem forI20190509-1800
exception in lambda
Change-Id: I5704a6e714d842156b6509a99e84d618a362be51
Signed-off-by: Stephan Herrmann <stephan.herrmann@berlin.de>
2 files changed, 49 insertions, 3 deletions
diff --git a/org.eclipse.jdt.core.tests.compiler/src/org/eclipse/jdt/core/tests/compiler/regression/GenericsRegressionTest_1_8.java b/org.eclipse.jdt.core.tests.compiler/src/org/eclipse/jdt/core/tests/compiler/regression/GenericsRegressionTest_1_8.java index 8a1217eb45..0b7af701e4 100644 --- a/org.eclipse.jdt.core.tests.compiler/src/org/eclipse/jdt/core/tests/compiler/regression/GenericsRegressionTest_1_8.java +++ b/org.eclipse.jdt.core.tests.compiler/src/org/eclipse/jdt/core/tests/compiler/regression/GenericsRegressionTest_1_8.java @@ -9777,4 +9777,52 @@ public void testBug508834_comment0() { "}\n" }); } + public void testBug547061() { + runConformTest( + new String[] { + "test2/Problematic.java", + "package test2;\n" + + "\n" + + "import java.io.IOException;\n" + + "import java.util.Collections;\n" + + "import java.util.Set;\n" + + "import java.util.function.Consumer;\n" + + "\n" + + "public class Problematic {\n" + + "\n" + + " @FunctionalInterface\n" + + " private interface ThrowingConsumer<T, E extends Throwable> {\n" + + " void accept(T t) throws E;\n" + + " }\n" + + "\n" + + " private class FileAsset {\n" + + " public FileAsset move(String path) throws IOException {\n" + + " System.out.println(path);\n" + + " return null;\n" + + " }\n" + + " }\n" + + "\n" + + " static <T, E extends Exception> void process(Consumer<Consumer<T>> code, ThrowingConsumer<T, E> throwingConsumer)\n" + + " throws E {\n" + + " code.accept(t -> {\n" + + " try {\n" + + " throwingConsumer.accept(t);\n" + + " } catch (Exception e) {\n" + + " e.printStackTrace();\n" + + " }\n" + + " });\n" + + " }\n" + + "\n" + + " public void execute(String path) throws IOException {\n" + + " Set<FileAsset> set = Collections.singleton(new FileAsset());\n" + + " process(set::forEach, (asset) -> {\n" + + " process(set::forEach, (asset2) -> {\n" + + " asset2.move(path);\n" + + " });\n" + + " });\n" + + "\n" + + " }\n" + + "}\n" + }); + } } diff --git a/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/MessageSend.java b/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/MessageSend.java index 6e7970e621..f6e8a51e2d 100644 --- a/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/MessageSend.java +++ b/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/MessageSend.java @@ -70,7 +70,6 @@ import static org.eclipse.jdt.internal.compiler.ast.ExpressionContext.*; import java.util.HashMap; import org.eclipse.jdt.core.compiler.CharOperation; -import org.eclipse.jdt.core.compiler.IProblem; import org.eclipse.jdt.internal.compiler.ASTVisitor; import org.eclipse.jdt.internal.compiler.classfmt.ClassFileConstants; import org.eclipse.jdt.internal.compiler.codegen.CodeStream; @@ -678,8 +677,7 @@ public TypeBinding resolveType(BlockScope scope) { } this.actualReceiverType = this.receiver.resolveType(scope); if (this.actualReceiverType instanceof InferenceVariable) { - scope.referenceContext().tagAsHavingIgnoredMandatoryErrors(IProblem.UndefinedMethod); - return null; // not yet ready for resolving + return null; // not yet ready for resolving } this.receiverIsType = this.receiver instanceof NameReference && (((NameReference) this.receiver).bits & Binding.TYPE) != 0; if (receiverCast && this.actualReceiverType != null) { |