Bug 496591 - Incorrectly marking return types as incompatible
Change-Id: I3bccb599d0bff04e2eb57707ac3e683be8c135d1
Signed-off-by: Till Brychcy <register.eclipse@brychcy.de>
diff --git a/org.eclipse.jdt.core.tests.compiler/src/org/eclipse/jdt/core/tests/compiler/regression/NullTypeAnnotationTest.java b/org.eclipse.jdt.core.tests.compiler/src/org/eclipse/jdt/core/tests/compiler/regression/NullTypeAnnotationTest.java
index 05e71f8..3324c22 100644
--- a/org.eclipse.jdt.core.tests.compiler/src/org/eclipse/jdt/core/tests/compiler/regression/NullTypeAnnotationTest.java
+++ b/org.eclipse.jdt.core.tests.compiler/src/org/eclipse/jdt/core/tests/compiler/regression/NullTypeAnnotationTest.java
@@ -12289,4 +12289,60 @@
""
);
}
+public void testBug496591() {
+ runConformTestWithLibs(
+ new String[] {
+ "test2/Descriptors.java",
+ "package test2;\n" +
+ "\n" +
+ "public final class Descriptors {\n" +
+ " public static final class FieldDescriptor implements FieldSet.FieldDescriptorLite<FieldDescriptor> { }\n" +
+ "}\n" +
+ "",
+ "test2/FieldSet.java",
+ "package test2;\n" +
+ "\n" +
+ "public final class FieldSet<F1 extends FieldSet.FieldDescriptorLite<F1>> {\n" +
+ " public interface FieldDescriptorLite<F2 extends FieldDescriptorLite<F2>> { }\n" +
+ "\n" +
+ " void f(final Map.Entry<F1> entry) { }\n" +
+ "}\n" +
+ "",
+ "test2/Map.java",
+ "package test2;\n" +
+ "\n" +
+ "public class Map<K> {\n" +
+ " interface Entry<K1> { }\n" +
+ "}\n" +
+ "",
+ "test2/MessageOrBuilder.java",
+ "package test2;\n" +
+ "\n" +
+ "public interface MessageOrBuilder {\n" +
+ " Map<Descriptors.FieldDescriptor> getAllFields();\n" +
+ "}\n" +
+ "",
+ },
+ getCompilerOptions(),
+ ""
+ );
+ runConformTestWithLibs(
+ new String[] {
+ "test1/GeneratedMessage.java",
+ "package test1;\n" +
+ "\n" +
+ "import test2.Descriptors.FieldDescriptor;\n" +
+ "import test2.Map;\n" +
+ "import test2.MessageOrBuilder;\n" +
+ "\n" +
+ "public abstract class GeneratedMessage implements MessageOrBuilder {\n" +
+ " @Override\n" +
+ " public abstract Map<FieldDescriptor> getAllFields();\n" +
+ "}\n" +
+ "",
+ },
+ getCompilerOptions(),
+ ""
+ );
+}
}
diff --git a/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/lookup/TypeSystem.java b/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/lookup/TypeSystem.java
index eb9ff9b..8c7c2c7 100644
--- a/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/lookup/TypeSystem.java
+++ b/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/lookup/TypeSystem.java
@@ -168,7 +168,11 @@
urb = (UnresolvedReferenceBinding) type;
ReferenceBinding resolvedType = urb.resolvedType;
if (resolvedType != null) {
- type = this.environment.convertToRawType(resolvedType, false);
+ if(CharOperation.indexOf('$', type.sourceName()) > 0) {
+ type = this.environment.convertToRawType(resolvedType, false);
+ } else {
+ type = resolvedType;
+ }
} else if (CharOperation.indexOf('$', type.sourceName()) > 0) {
boolean mayTolerateMissingType = this.environment.mayTolerateMissingType;
this.environment.mayTolerateMissingType = true;