diff options
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) { |