diff options
| author | ssankaran | 2014-02-13 11:04:26 +0000 |
|---|---|---|
| committer | ssankaran | 2014-02-13 11:15:31 +0000 |
| commit | 0174bc81f7d2de8d27eebb7df04fb04a776d1f62 (patch) | |
| tree | c0e8d3bac1657a0d983d3423f8ae80af48782e00 | |
| parent | b35f620685806d93a7b32cb38ddc1e568690ed0f (diff) | |
| download | eclipse.jdt.core-0174bc81f7d2de8d27eebb7df04fb04a776d1f62.tar.gz eclipse.jdt.core-0174bc81f7d2de8d27eebb7df04fb04a776d1f62.tar.xz eclipse.jdt.core-0174bc81f7d2de8d27eebb7df04fb04a776d1f62.zip | |
Fixed Bug 428071 - [1.8][compiler] Bogus error about incompatible return
type during override
3 files changed, 83 insertions, 3 deletions
diff --git a/org.eclipse.jdt.core.tests.builder/src/org/eclipse/jdt/core/tests/builder/IncrementalTests18.java b/org.eclipse.jdt.core.tests.builder/src/org/eclipse/jdt/core/tests/builder/IncrementalTests18.java index 5360d28223..cc8ae7a274 100644 --- a/org.eclipse.jdt.core.tests.builder/src/org/eclipse/jdt/core/tests/builder/IncrementalTests18.java +++ b/org.eclipse.jdt.core.tests.builder/src/org/eclipse/jdt/core/tests/builder/IncrementalTests18.java @@ -30,7 +30,7 @@ public class IncrementalTests18 extends BuilderTests { public static Test suite() { return buildTestSuite(IncrementalTests18.class); } - + // https://bugs.eclipse.org/bugs/show_bug.cgi?id=423122, [1.8] Missing incremental build dependency from lambda expression to functional interface. public void test423122() throws JavaModelException { @@ -232,4 +232,47 @@ public class IncrementalTests18 extends BuilderTests { "Problem : List is a raw type. References to generic type List<E> should be parameterized [ resource : </Project/src/X.java> range : <71,75> category : <130> severity : <1>]" ); } + + // https://bugs.eclipse.org/bugs/show_bug.cgi?id=428071, [1.8][compiler] Bogus error about incompatible return type during override + public void test428071() throws JavaModelException { + IPath projectPath = env.addProject("Project", "1.8"); + env.addExternalJars(projectPath, Util.getJavaClassLibs()); + + // remove old package fragment root so that names don't collide + env.removePackageFragmentRoot(projectPath, ""); + + IPath root = env.addPackageFragmentRoot(projectPath, "src"); + env.setOutputFolder(projectPath, "bin"); + + env.addClass(root, "", "K1", + "import java.util.List;\n" + + "import java.util.Map;\n" + + "interface K1 {\n" + + " public Map<String,List> get();\n" + + "}\n" + ); + env.addClass(root, "", "K", + "import java.util.List;\n" + + "import java.util.Map;\n" + + "public class K implements K1 {\n" + + " public Map<String, List> get() {\n" + + " return null;\n" + + " }\n" + + "}\n" + ); + env.getJavaProject("Project").setOption(JavaCore.COMPILER_PB_RAW_TYPE_REFERENCE, JavaCore.IGNORE); + fullBuild(projectPath); + expectingNoProblems(); + env.addClass(root, "", "K", + "import java.util.List;\n" + + "import java.util.Map;\n" + + "public class K implements K1 {\n" + + " public Map<String, List> get() {\n" + + " return null;\n" + + " }\n" + + "}\n" + ); + incrementalBuild(projectPath); + expectingNoProblems(); + } } diff --git a/org.eclipse.jdt.core.tests.compiler/src/org/eclipse/jdt/core/tests/compiler/regression/GenericsRegressionTest.java b/org.eclipse.jdt.core.tests.compiler/src/org/eclipse/jdt/core/tests/compiler/regression/GenericsRegressionTest.java index 2176293373..5aff586967 100644 --- a/org.eclipse.jdt.core.tests.compiler/src/org/eclipse/jdt/core/tests/compiler/regression/GenericsRegressionTest.java +++ b/org.eclipse.jdt.core.tests.compiler/src/org/eclipse/jdt/core/tests/compiler/regression/GenericsRegressionTest.java @@ -4143,5 +4143,42 @@ public void test426836() { "Type mismatch: cannot convert from Class<capture#1-of ? extends X> to Class<? extends String>\n" + "----------\n"); } +// https://bugs.eclipse.org/bugs/show_bug.cgi?id=428071, [1.8][compiler] Bogus error about incompatible return type during override +public void test428071() { + Map customOptions = getCompilerOptions(); + customOptions.put(CompilerOptions.OPTION_Store_Annotations, CompilerOptions.ENABLED); + runNegativeTest( + new String[] { + "K1.java", + "import java.util.List;\n" + + "import java.util.Map;\n" + + "interface K1 {\n" + + " public Map<String,List> get();\n" + + "}\n", + "K.java", + "import java.util.List;\n" + + "import java.util.Map;\n" + + "public class K implements K1 {\n" + + " public Map<String, List> get() {\n" + + " return null;\n" + + " }\n" + + "}\n" + }, + "----------\n" + + "1. WARNING in K1.java (at line 4)\n" + + " public Map<String,List> get();\n" + + " ^^^^\n" + + "List is a raw type. References to generic type List<E> should be parameterized\n" + + "----------\n" + + "----------\n" + + "1. WARNING in K.java (at line 4)\n" + + " public Map<String, List> get() {\n" + + " ^^^^\n" + + "List is a raw type. References to generic type List<E> should be parameterized\n" + + "----------\n", + null, + true, + customOptions); +} } diff --git a/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/lookup/UnresolvedReferenceBinding.java b/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/lookup/UnresolvedReferenceBinding.java index 3ef182bbf8..b3ff6c4b25 100644 --- a/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/lookup/UnresolvedReferenceBinding.java +++ b/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/lookup/UnresolvedReferenceBinding.java @@ -125,12 +125,12 @@ void setResolvedType(ReferenceBinding targetType, LookupEnvironment environment) // targetType may be a source or binary type this.resolvedType = targetType; + environment.updateCaches(this, targetType); // must ensure to update any other type bindings that can contain the resolved type // otherwise we could create 2 : 1 for this unresolved type & 1 for the resolved type if (this.wrappers != null) for (int i = 0, l = this.wrappers.length; i < l; i++) this.wrappers[i].swapUnresolved(this, targetType, environment); - environment.updateCaches(this, targetType); } public void swapUnresolved(UnresolvedReferenceBinding unresolvedType, ReferenceBinding unannotatedType, LookupEnvironment environment) { @@ -139,10 +139,10 @@ public void swapUnresolved(UnresolvedReferenceBinding unresolvedType, ReferenceB this.resolvedType = annotatedType; annotatedType.setTypeAnnotations(getTypeAnnotations(), environment.globalOptions.isAnnotationBasedNullAnalysisEnabled); annotatedType.id = unannotatedType.id = this.id; + environment.updateCaches(this, annotatedType); if (this.wrappers != null) for (int i = 0, l = this.wrappers.length; i < l; i++) this.wrappers[i].swapUnresolved(this, annotatedType, environment); - environment.updateCaches(this, annotatedType); } public String toString() { |
