diff options
author | Stephan Herrmann | 2018-10-30 19:02:12 +0000 |
---|---|---|
committer | Stephan Herrmann | 2018-10-30 20:18:41 +0000 |
commit | 1d1468f56bf9e54149c9b9759e0d4e70fd0d999b (patch) | |
tree | 6c714f6e799e204b7d307e79987f455775d62128 | |
parent | 6504b5e1cf9b5fc5fc315e8c943599e1d162a6f3 (diff) | |
download | eclipse.jdt.core-I20181031-0540.tar.gz eclipse.jdt.core-I20181031-0540.tar.xz eclipse.jdt.core-I20181031-0540.zip |
Bug 540631 - [1.8] wrong classification of name in name::newI20181031-1800I20181031-0550I20181031-0540
Change-Id: Iac8813b561829af474ae44a6180452ad02e1154f
3 files changed, 36 insertions, 4 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 e20a31370b..120b628ff5 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 @@ -5536,7 +5536,7 @@ public void testBug470542() { "1. ERROR in X.java (at line 5)\n" + " process(missing::new);\n" + " ^^^^^^^\n" + - "missing cannot be resolved\n" + + "missing cannot be resolved to a type\n" + "----------\n"); } public void testBug471280_comment0() { 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 2ab5c9ea6b..da0ddf9b4a 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 @@ -1277,8 +1277,8 @@ public void test045() { "----------\n" + "5. ERROR in X.java (at line 15)\n" + " i = X.Y::new;\n" + - " ^\n" + - "Y cannot be resolved or is not a field\n" + + " ^^^\n" + + "X.Y cannot be resolved to a type\n" + "----------\n" + "6. ERROR in X.java (at line 27)\n" + " new X().new Y().f();\n" + @@ -7065,7 +7065,35 @@ public void testBug540520() { "}\n" }; runner.runConformTest(); - +} +public void testBug540631() { + Runner runner = new Runner(); + runner.testFiles = new String[] { + "EclipseCompileBug.java", + "public enum EclipseCompileBug {\n" + + " /*\n" + + " * Next line fails with these errors in Eclipse, works with javac:\n" + + " * <li>Test cannot be resolved to a type\n" + + " * <li>Cannot reference a field before it is defined\n" + + " */\n" + + " Test(Test::new);\n" + + "\n" + + " @FunctionalInterface\n" + + " public interface IConstructor<T extends Object> {\n" + + " T apply();\n" + + " }\n" + + "\n" + + " private final IConstructor<?> constructor;\n" + + " private EclipseCompileBug (IConstructor<?> newObj) {\n" + + " constructor = newObj;\n" + + " }\n" + + " \n" + + " public static class Test {\n" + + " \n" + + " }\n" + + "}\n" + }; + runner.runConformTest(); } public static Class testClass() { return LambdaExpressionsTest.class; diff --git a/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/parser/Parser.java b/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/parser/Parser.java index e7849ee0fa..885fc4cc3a 100644 --- a/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/parser/Parser.java +++ b/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/parser/Parser.java @@ -58,6 +58,7 @@ import org.eclipse.jdt.internal.compiler.lookup.BlockScope; import org.eclipse.jdt.internal.compiler.lookup.ClassScope; import org.eclipse.jdt.internal.compiler.lookup.ExtraCompilerModifiers; import org.eclipse.jdt.internal.compiler.lookup.MethodScope; +import org.eclipse.jdt.internal.compiler.lookup.TypeConstants; import org.eclipse.jdt.internal.compiler.lookup.TypeIds; import org.eclipse.jdt.internal.compiler.parser.diagnose.DiagnoseParser; import org.eclipse.jdt.internal.compiler.problem.AbortCompilation; @@ -8724,6 +8725,9 @@ protected void consumeReferenceExpressionTypeForm(boolean isPrimitive) { // actu } else { referenceExpression.initialize(this.compilationUnit.compilationResult, getUnspecifiedReference(), typeArguments, selector, sourceEnd); } + if (CharOperation.equals(selector, TypeConstants.INIT) && referenceExpression.lhs instanceof NameReference) { + referenceExpression.lhs.bits &= ~Binding.VARIABLE; + } consumeReferenceExpression(referenceExpression); } protected void consumeReferenceExpressionPrimaryForm() { |