Index: compiler/javatests/com/google/dart/compiler/type/TypeAnalyzerTest.java |
diff --git a/compiler/javatests/com/google/dart/compiler/type/TypeAnalyzerTest.java b/compiler/javatests/com/google/dart/compiler/type/TypeAnalyzerTest.java |
index 4dc6348002c9da4cd93cbe6b1325edcde530e735..903e62d97402de3fb99be3079b76e24757f34d0c 100644 |
--- a/compiler/javatests/com/google/dart/compiler/type/TypeAnalyzerTest.java |
+++ b/compiler/javatests/com/google/dart/compiler/type/TypeAnalyzerTest.java |
@@ -309,6 +309,29 @@ public class TypeAnalyzerTest extends TypeAnalyzerTestCase { |
analyzeClass(classes.get("OptionalParameter"), 1); |
} |
+ public void testCyclicTypeVariable() { |
+ Map<String, ClassElement> classes = loadSource( |
+ "interface A<T> { }", |
+ "typedef funcType<T>(T arg);", |
+ "class B<T extends T> {}", |
+ "class C<T extends A<T>> {}", |
+ "class D<T extends funcType<T>> {}"); |
+ analyzeClasses(classes, |
+ TypeErrorCode.CYCLIC_REFERENCE_TO_TYPE_VARIABLE, |
+ TypeErrorCode.CYCLIC_REFERENCE_TO_TYPE_VARIABLE, |
+ TypeErrorCode.CYCLIC_REFERENCE_TO_TYPE_VARIABLE); |
+ ClassElement B = classes.get("B"); |
+ analyzeClass(B, 1); |
+ assertEquals(1, B.getType().getArguments().size()); |
+ ClassElement C = classes.get("C"); |
+ analyzeClass(C, 1); |
+ assertEquals(1, C.getType().getArguments().size()); |
+ ClassElement D = classes.get("D"); |
+ analyzeClass(D, 1); |
+ assertEquals(1, D.getType().getArguments().size()); |
+ |
+ } |
+ |
public void testDoWhileStatement() { |
analyze("do {} while (true);"); |
analyze("do {} while (null);"); |