src/share/classes/com/sun/tools/javac/comp/Check.java

changeset 240
8c55d5b0ed71
parent 229
03bcd66bd8e7
parent 236
84a18d7da478
child 252
5caa6c45936a
equal deleted inserted replaced
230:2c0076945b1a 240:8c55d5b0ed71
1543 checkNonCyclicInternal(pos, t); 1543 checkNonCyclicInternal(pos, t);
1544 } 1544 }
1545 1545
1546 1546
1547 void checkNonCyclic(DiagnosticPosition pos, TypeVar t) { 1547 void checkNonCyclic(DiagnosticPosition pos, TypeVar t) {
1548 checkNonCyclic1(pos, t, new HashSet<TypeVar>()); 1548 checkNonCyclic1(pos, t, List.<TypeVar>nil());
1549 } 1549 }
1550 1550
1551 private void checkNonCyclic1(DiagnosticPosition pos, Type t, Set<TypeVar> seen) { 1551 private void checkNonCyclic1(DiagnosticPosition pos, Type t, List<TypeVar> seen) {
1552 final TypeVar tv; 1552 final TypeVar tv;
1553 if (t.tag == TYPEVAR && (t.tsym.flags() & UNATTRIBUTED) != 0) 1553 if (t.tag == TYPEVAR && (t.tsym.flags() & UNATTRIBUTED) != 0)
1554 return; 1554 return;
1555 if (seen.contains(t)) { 1555 if (seen.contains(t)) {
1556 tv = (TypeVar)t; 1556 tv = (TypeVar)t;
1557 tv.bound = types.createErrorType(t); 1557 tv.bound = types.createErrorType(t);
1558 log.error(pos, "cyclic.inheritance", t); 1558 log.error(pos, "cyclic.inheritance", t);
1559 } else if (t.tag == TYPEVAR) { 1559 } else if (t.tag == TYPEVAR) {
1560 tv = (TypeVar)t; 1560 tv = (TypeVar)t;
1561 seen.add(tv); 1561 seen = seen.prepend(tv);
1562 for (Type b : types.getBounds(tv)) 1562 for (Type b : types.getBounds(tv))
1563 checkNonCyclic1(pos, b, seen); 1563 checkNonCyclic1(pos, b, seen);
1564 } 1564 }
1565 } 1565 }
1566 1566

mercurial