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.ArrayType; 16 import org.eclipse.jdt.internal.corext.refactoring.typeconstraints.types.TType; 17 import org.eclipse.jdt.internal.corext.refactoring.typeconstraints2.TTypes; 18 19 23 public class ArrayTypeSet extends TypeSet { 24 protected TypeSet fElemTypeSet; 25 26 protected ArrayTypeSet(TypeSetEnvironment typeSetEnvironment) { 27 super(typeSetEnvironment); 28 } 29 30 public ArrayTypeSet(TypeSet s) { 31 super(s.getTypeSetEnvironment()); 32 fElemTypeSet= s; 33 } 34 35 38 public TypeSet getElemTypeSet() { 39 return fElemTypeSet; 40 } 41 42 45 public boolean isUniverse() { 46 return false; 47 } 48 49 52 public TypeSet makeClone() { 53 return new ArrayTypeSet(fElemTypeSet); 54 } 55 56 59 public boolean isEmpty() { 60 return fElemTypeSet.isEmpty(); 61 } 62 63 66 public TypeSet upperBound() { 67 return new ArrayTypeSet(fElemTypeSet.upperBound()); 68 } 69 70 73 public TypeSet lowerBound() { 74 return new ArrayTypeSet(fElemTypeSet.lowerBound()); 75 } 76 77 80 public boolean hasUniqueLowerBound() { 81 return fElemTypeSet.hasUniqueLowerBound(); 82 } 83 84 87 public boolean hasUniqueUpperBound() { 88 return fElemTypeSet.hasUniqueUpperBound(); 89 } 90 91 94 public TType uniqueLowerBound() { 95 return TTypes.createArrayType(fElemTypeSet.uniqueLowerBound(), 1); 96 } 97 98 101 public TType uniqueUpperBound() { 102 return TTypes.createArrayType(fElemTypeSet.uniqueUpperBound(), 1); 103 } 104 105 108 public boolean contains(TType t) { 109 if (!(t instanceof ArrayType)) 110 return false; 111 ArrayType at= (ArrayType) t; 112 return fElemTypeSet.contains(at.getComponentType()); 113 } 114 115 118 public boolean containsAll(TypeSet s) { 119 if (s instanceof ArrayTypeSet && !(s instanceof ArraySuperTypeSet)) { 120 ArrayTypeSet ats= (ArrayTypeSet) s; 121 122 return fElemTypeSet.containsAll(ats.fElemTypeSet); 123 } 124 for(Iterator iter= s.iterator(); iter.hasNext(); ) { 125 TType t= (TType) iter.next(); 126 if (!contains(t)) 127 return false; 128 } 129 return true; 130 } 131 132 135 public Iterator iterator() { 136 if (fEnumCache != null) return fEnumCache.iterator(); 137 138 return new Iterator () { 139 Iterator fElemIter= fElemTypeSet.iterator(); 140 public boolean hasNext() { 141 return fElemIter.hasNext(); 142 } 143 public Object next() { 144 return TTypes.createArrayType(((TType) fElemIter.next()), 1); 145 } 146 public void remove() { 147 throw new UnsupportedOperationException (); 148 } 149 }; 150 } 151 152 private EnumeratedTypeSet fEnumCache= null; 153 154 157 public EnumeratedTypeSet enumerate() { 158 if (fEnumCache == null) { 159 fEnumCache= new EnumeratedTypeSet(getTypeSetEnvironment()); 160 161 for(Iterator iter= fElemTypeSet.iterator(); iter.hasNext(); ) { 162 TType t= (TType) iter.next(); 163 fEnumCache.add(TTypes.createArrayType(t, 1)); 164 } 165 fEnumCache.initComplete(); 166 } 167 return fEnumCache; 168 } 169 170 173 public boolean isSingleton() { 174 return fElemTypeSet.isSingleton(); 175 } 176 177 180 public TType anyMember() { 181 return TTypes.createArrayType(fElemTypeSet.anyMember(), 1); 182 } 183 184 187 public TypeSet superTypes() { 188 return new ArraySuperTypeSet(fElemTypeSet); 189 } 190 191 194 public boolean equals(Object obj) { 195 if (obj == this) return true; 196 if (obj instanceof ArrayTypeSet) { 197 ArrayTypeSet other= (ArrayTypeSet) obj; 198 199 return fElemTypeSet.equals(other.fElemTypeSet); 200 } 201 return false; 202 } 203 204 public String toString() { 205 return "{" + fID + ": array(" + fElemTypeSet + ")}"; } 207 } 208 | Popular Tags |