1 11 package org.eclipse.jdt.internal.corext.refactoring.typeconstraints.typesets; 12 13 import java.util.Iterator ; 14 15 import org.eclipse.jdt.internal.corext.refactoring.typeconstraints.types.TType; 16 import org.eclipse.jdt.internal.corext.refactoring.typeconstraints2.ITypeSet; 17 18 public abstract class TypeSet implements ITypeSet { 19 20 public TType chooseSingleType() { 21 return null; 22 } 23 24 public ITypeSet restrictedTo(ITypeSet restrictionSet) { 25 throw new UnsupportedOperationException (); 26 } 27 28 protected TType getJavaLangObject() { 29 return fTypeSetEnvironment.getJavaLangObject(); 30 } 31 32 protected TypeSetEnvironment getTypeSetEnvironment() { 33 return fTypeSetEnvironment; 34 } 35 36 static private int sID= 0; 37 38 static public int getCount() { return sID; } 39 static public void resetCount() { sID= 0; } 40 41 45 protected final int fID; 46 private final TypeSetEnvironment fTypeSetEnvironment; 47 48 protected TypeSet(TypeSetEnvironment typeSetEnvironment) { 49 fTypeSetEnvironment= typeSetEnvironment; 50 fID= sID++; 51 } 52 53 56 abstract public boolean isUniverse(); 57 58 abstract public TypeSet makeClone(); 59 60 protected TypeSet specialCasesIntersectedWith(TypeSet s2) { 61 return null; 62 } 63 64 70 public TypeSet intersectedWith(TypeSet s2) { 71 if (s2.isUniverse()) 72 return makeClone(); 73 else if (isUniverse()) 74 return s2.makeClone(); 75 else if (isEmpty() || s2.isEmpty()) 76 return getTypeSetEnvironment().getEmptyTypeSet(); 77 else if (isSingleton()) { 78 if (s2.contains(anyMember())) 79 return makeClone(); 80 else 81 return getTypeSetEnvironment().getEmptyTypeSet(); 82 } else if (s2.isSingleton()) { 83 if (contains(s2.anyMember())) 84 return s2.makeClone(); 85 else 86 return getTypeSetEnvironment().getEmptyTypeSet(); 87 } else if (s2 instanceof TypeSetIntersection) { 88 TypeSetIntersection x= (TypeSetIntersection) s2; 89 if (x.getLHS().equals(this) || x.getRHS().equals(this)) 92 return x; 93 } 94 95 TypeSet result= specialCasesIntersectedWith(s2); 96 97 if (result != null) 98 return result; 99 else 100 return new TypeSetIntersection(this, s2); 101 } 102 103 107 public TypeSet addedTo(TypeSet that) { 108 if (isUniverse() || that.isUniverse()) 109 return getTypeSetEnvironment().getUniverseTypeSet(); 110 if ((this instanceof EnumeratedTypeSet || this instanceof SingletonTypeSet) && 111 (that instanceof EnumeratedTypeSet || that instanceof SingletonTypeSet)) { 112 EnumeratedTypeSet result= enumerate(); 113 114 result.addAll(that); 115 return result; 116 } 117 return new TypeSetUnion(this, that); 118 } 119 120 124 public TypeSet subTypes() { 125 if (isUniverse() || contains(getJavaLangObject())) 126 return getTypeSetEnvironment().getUniverseTypeSet(); 127 128 if (isSingleton()) 129 return possiblyArraySubTypeSetFor(anyMember()); 130 131 return getTypeSetEnvironment().createSubTypesSet(this); 132 } 133 134 private TypeSet possiblyArraySubTypeSetFor(TType t) { 135 142 return getTypeSetEnvironment().createSubTypesOfSingleton(t); 143 } 144 145 private TypeSet possiblyArraySuperTypeSetFor(TType t) { 146 return getTypeSetEnvironment().createSuperTypesOfSingleton(t); 153 } 154 155 159 public TypeSet superTypes() { 160 if (isUniverse()) 161 return getTypeSetEnvironment().getUniverseTypeSet(); 162 163 if (isSingleton()) 164 return possiblyArraySuperTypeSetFor(anyMember()); 165 166 return getTypeSetEnvironment().createSuperTypesSet(this); 167 } 168 169 172 abstract public boolean isEmpty(); 173 174 177 abstract public TypeSet upperBound(); 178 179 182 abstract public TypeSet lowerBound(); 183 184 187 abstract public boolean hasUniqueLowerBound(); 188 189 193 abstract public boolean hasUniqueUpperBound(); 194 195 199 abstract public TType uniqueLowerBound(); 200 201 205 abstract public TType uniqueUpperBound(); 206 207 210 abstract public boolean contains(TType t); 211 212 215 abstract public boolean containsAll(TypeSet s); 216 217 220 abstract public Iterator iterator(); 221 222 225 abstract public EnumeratedTypeSet enumerate(); 226 227 230 abstract public boolean isSingleton(); 231 232 235 abstract public TType anyMember(); 236 } 237 | Popular Tags |