langtools/src/share/classes/com/sun/tools/javac/code/Type.java
changeset 18904 3c4c6457ec5b
parent 18902 972298345a83
child 18911 dcc1e26a8c9c
equal deleted inserted replaced
18903:99f42bd11bc2 18904:3c4c6457ec5b
  1512                 buf.append(b);
  1512                 buf.append(b);
  1513             }
  1513             }
  1514             return buf.toList();
  1514             return buf.toList();
  1515         }
  1515         }
  1516 
  1516 
       
  1517         /** internal method used to override an undetvar bounds */
       
  1518         public void setBounds(InferenceBound ib, List<Type> newBounds) {
       
  1519             bounds.put(ib, newBounds);
       
  1520         }
       
  1521 
  1517         /** add a bound of a given kind - this might trigger listener notification */
  1522         /** add a bound of a given kind - this might trigger listener notification */
  1518         public void addBound(InferenceBound ib, Type bound, Types types) {
  1523         public void addBound(InferenceBound ib, Type bound, Types types) {
  1519             Type bound2 = toTypeVarMap.apply(bound);
  1524             Type bound2 = boundMap.apply(bound);
  1520             List<Type> prevBounds = bounds.get(ib);
  1525             List<Type> prevBounds = bounds.get(ib);
  1521             for (Type b : prevBounds) {
  1526             for (Type b : prevBounds) {
  1522                 //check for redundancy - use strict version of isSameType on tvars
  1527                 //check for redundancy - use strict version of isSameType on tvars
  1523                 //(as the standard version will lead to false positives w.r.t. clones ivars)
  1528                 //(as the standard version will lead to false positives w.r.t. clones ivars)
  1524                 if (types.isSameType(b, bound2, true) || bound == qtype) return;
  1529                 if (types.isSameType(b, bound2, true) || bound == qtype) return;
  1525             }
  1530             }
  1526             bounds.put(ib, prevBounds.prepend(bound2));
  1531             bounds.put(ib, prevBounds.prepend(bound2));
  1527             notifyChange(EnumSet.of(ib));
  1532             notifyChange(EnumSet.of(ib));
  1528         }
  1533         }
  1529         //where
  1534         //where
  1530             Type.Mapping toTypeVarMap = new Mapping("toTypeVarMap") {
  1535             Type.Mapping boundMap = new Mapping("boundMap") {
  1531                 @Override
  1536                 @Override
  1532                 public Type apply(Type t) {
  1537                 public Type apply(Type t) {
  1533                     if (t.hasTag(UNDETVAR)) {
  1538                     if (t.hasTag(UNDETVAR)) {
  1534                         UndetVar uv = (UndetVar)t;
  1539                         UndetVar uv = (UndetVar)t;
  1535                         return uv.qtype;
  1540                         return uv.inst != null ? uv.inst : uv.qtype;
  1536                     } else {
  1541                     } else {
  1537                         return t.map(this);
  1542                         return t.map(this);
  1538                     }
  1543                     }
  1539                 }
  1544                 }
  1540             };
  1545             };