Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--org.eclipse.jdt.core.tests.compiler/src/org/eclipse/jdt/core/tests/compiler/regression/GenericsRegressionTest.java57
-rw-r--r--org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/dom/ASTConverter15Test.java26
-rw-r--r--org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/lookup/Scope.java8
3 files changed, 87 insertions, 4 deletions
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 dce0bd85bc..fbe3303416 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
@@ -6375,5 +6375,62 @@ public void testBug532137() {
false
);
}
+
+public void testBug540313() {
+ Runner runner = new Runner();
+ runner.testFiles = new String[] {
+ "X/C120644mr.java",
+ "package X;\n" +
+ "\n" +
+ "public class C120644mr<V, X extends java.lang.Exception> extends X.C16280iv<V> {\n" +
+ "}\n"
+ };
+ runner.expectedCompilerLog =
+ "----------\n" +
+ "1. ERROR in X\\C120644mr.java (at line 3)\n" +
+ " public class C120644mr<V, X extends java.lang.Exception> extends X.C16280iv<V> {\n" +
+ " ^^^^^^^^^^\n" +
+ "X.C16280iv cannot be resolved to a type\n" +
+ "----------\n";
+ runner.runNegativeTest();
+}
+
+public void testBug540313a() {
+ Runner runner = new Runner();
+ runner.testFiles = new String[] {
+ "X/C120644mr.java",
+ "package X;\n" +
+ "\n" +
+ "class Outer {\n" +
+ " class Inner<Z> {}\n" +
+ "}\n" +
+ "public class C120644mr<V, X extends Outer> extends X.Inner<V> {\n" +
+ "}\n"
+ };
+ runner.expectedCompilerLog =
+ "----------\n" +
+ "1. ERROR in X\\C120644mr.java (at line 6)\n" +
+ " public class C120644mr<V, X extends Outer> extends X.Inner<V> {\n" +
+ " ^^^^^^^\n" +
+ "X.Inner cannot be resolved to a type\n" +
+ "----------\n";
+ runner.runNegativeTest();
+}
+
+public void testBug540313b() {
+ Runner runner = new Runner();
+ runner.testFiles = new String[] {
+ "X/C120644mr.java",
+ "package X;\n" +
+ "\n" +
+ "class Outer {\n" +
+ " class Inner<Z> {}\n" +
+ "}\n" +
+ "public class C120644mr<X extends Outer, V> {\n" +
+ " X.Inner<V> inner;\n" + // is this backed by JLS?
+ "}\n"
+ };
+ runner.runConformTest();
+}
}
diff --git a/org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/dom/ASTConverter15Test.java b/org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/dom/ASTConverter15Test.java
index c8dbe2562d..3a42702693 100644
--- a/org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/dom/ASTConverter15Test.java
+++ b/org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/dom/ASTConverter15Test.java
@@ -11912,4 +11912,28 @@ public class ASTConverter15Test extends ConverterTestSetup {
assertTrue("Bad field definition", fields != null && fields.length == 1);
assertEquals("Type binding mismatch", elem, fields[0].getType());
}
-} \ No newline at end of file
+
+ public void testBug540313() throws JavaModelException {
+ this.workingCopy = getWorkingCopy("/Converter15/src/X/C120644mr.java", true/*resolve*/);
+ String contents =
+ "package X;\n" +
+ "\n" +
+ "/* renamed from: X.4mr */\n" +
+ "public class C120644mr<V, X extends java.lang.Exception> extends X.C16280iv<V> {\n" +
+ "}\n";
+ ASTNode node = buildAST(
+ contents,
+ this.workingCopy,
+ false);
+ assertEquals("Not a compilation unit", ASTNode.COMPILATION_UNIT, node.getNodeType());
+ CompilationUnit unit = (CompilationUnit) node;
+ String expectedError = "X.C16280iv cannot be resolved to a type";
+ assertProblemsSize(unit, 1, expectedError);
+ node = (ASTNode) unit.types().get(0);
+ assertEquals("Not a type declaration", ASTNode.TYPE_DECLARATION, node.getNodeType());
+ Type superclassType = ((TypeDeclaration) node).getSuperclassType();
+ ITypeBinding typeBinding = superclassType.resolveBinding();
+ assertNull("Binding", typeBinding);
+ }
+
+}
diff --git a/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/lookup/Scope.java b/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/lookup/Scope.java
index eae863ffc9..da4f2cf817 100644
--- a/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/lookup/Scope.java
+++ b/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/lookup/Scope.java
@@ -1565,9 +1565,11 @@ public abstract class Scope {
ReferenceBinding sourceType = currentType.isParameterizedType()
? ((ParameterizedTypeBinding) currentType).genericType()
: currentType;
- if (sourceType.isHierarchyBeingConnected())
- return null; // looking for an undefined member type in its own superclass ref
- ((SourceTypeBinding) sourceType).scope.connectTypeHierarchy();
+ if (sourceType instanceof SourceTypeBinding) { // could be TypeVariableBinding
+ if (sourceType.isHierarchyBeingConnected())
+ return null; // looking for an undefined member type in its own superclass ref
+ ((SourceTypeBinding) sourceType).scope.connectTypeHierarchy();
+ }
itsInterfaces = currentType.superInterfaces();
}
if (itsInterfaces != null && itsInterfaces != Binding.NO_SUPERINTERFACES) {

Back to the top