Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorssankaran2014-02-13 11:04:26 +0000
committerssankaran2014-02-13 11:15:31 +0000
commit0174bc81f7d2de8d27eebb7df04fb04a776d1f62 (patch)
treec0e8d3bac1657a0d983d3423f8ae80af48782e00
parentb35f620685806d93a7b32cb38ddc1e568690ed0f (diff)
downloadeclipse.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
-rw-r--r--org.eclipse.jdt.core.tests.builder/src/org/eclipse/jdt/core/tests/builder/IncrementalTests18.java45
-rw-r--r--org.eclipse.jdt.core.tests.compiler/src/org/eclipse/jdt/core/tests/compiler/regression/GenericsRegressionTest.java37
-rw-r--r--org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/lookup/UnresolvedReferenceBinding.java4
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() {

Back to the top