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 ArraySuperTypeSet extends ArrayTypeSet { 24 public ArraySuperTypeSet(TypeSet s) { 25 super(s.getTypeSetEnvironment()); 26 if (s instanceof SuperTypesOfSingleton || s instanceof SuperTypesSet) 27 fElemTypeSet= s.lowerBound(); else 29 fElemTypeSet= s; 30 } 31 32 35 public TType anyMember() { 36 return getJavaLangObject(); 37 } 38 39 42 public boolean contains(TType t) { 43 if (t.equals(getJavaLangObject())) return true; 44 if (!(t instanceof ArrayType)) 45 return false; 46 47 ArrayType at= (ArrayType) t; 48 TType atElemType= at.getComponentType(); 49 50 if (fElemTypeSet.contains(atElemType)) return true; 52 53 for(Iterator iter= fElemTypeSet.iterator(); iter.hasNext(); ) { 54 TType elemType= (TType) iter.next(); 55 56 if (TTypes.canAssignTo(elemType, atElemType)) 57 return true; 58 } 59 return false; 60 } 61 62 65 public boolean containsAll(TypeSet s) { 66 if (s instanceof ArraySuperTypeSet) { 67 ArraySuperTypeSet ats= (ArraySuperTypeSet) s; 68 69 return fElemTypeSet.containsAll(ats.fElemTypeSet); 70 } else if (s instanceof ArrayTypeSet) { 71 ArrayTypeSet ats= (ArrayTypeSet) s; 72 73 return fElemTypeSet.containsAll(ats.fElemTypeSet); 74 } else 75 return enumerate().containsAll(s); 76 } 77 78 81 protected TypeSet specialCasesIntersectedWith(TypeSet s2) { 82 if (s2 instanceof ArraySuperTypeSet) { 83 ArraySuperTypeSet ats2= (ArraySuperTypeSet) s2; 84 85 if (ats2.fElemTypeSet.isUniverse()) 86 return new ArraySuperTypeSet(fElemTypeSet); 87 } else if (s2 instanceof ArrayTypeSet) { 88 ArrayTypeSet ats2= (ArrayTypeSet) s2; 89 90 if (ats2.fElemTypeSet.isUniverse()) 91 return new ArrayTypeSet(fElemTypeSet); } 93 return super.specialCasesIntersectedWith(s2); 94 } 95 96 private EnumeratedTypeSet fEnumCache= null; 97 98 101 public EnumeratedTypeSet enumerate() { 102 if (fEnumCache == null) { 103 fEnumCache= new EnumeratedTypeSet(getTypeSetEnvironment()); 104 TypeSet elemSupers= fElemTypeSet.superTypes(); 105 106 for(Iterator iter= elemSupers.iterator(); iter.hasNext(); ) { 107 TType elemSuper= (TType) iter.next(); 108 109 fEnumCache.add(TTypes.createArrayType(elemSuper, 1)); 110 } 111 112 fEnumCache.add(getJavaLangObject()); 113 fEnumCache.initComplete(); 114 } 115 return fEnumCache; 116 } 117 118 121 public boolean hasUniqueUpperBound() { 122 return true; } 124 125 128 public boolean isSingleton() { 129 return false; 130 } 131 132 135 public boolean isUniverse() { 136 return false; 137 } 138 139 142 public Iterator iterator() { 143 return enumerate().iterator(); 144 } 145 146 149 public TypeSet makeClone() { 150 return new ArraySuperTypeSet(fElemTypeSet); 151 } 152 153 156 public TypeSet superTypes() { 157 return makeClone(); 158 } 159 160 163 public TType uniqueUpperBound() { 164 return getJavaLangObject(); 165 } 166 167 170 public TypeSet upperBound() { 171 return new SingletonTypeSet(getJavaLangObject(), getTypeSetEnvironment()); 172 } 173 174 177 public boolean equals(Object obj) { 178 if (obj == this) return true; 179 if (obj instanceof ArraySuperTypeSet) { 180 ArraySuperTypeSet other= (ArraySuperTypeSet) obj; 181 182 return fElemTypeSet.equals(other.fElemTypeSet); 183 } 184 return false; 185 } 186 187 190 public TypeSet subTypes() { 191 return getTypeSetEnvironment().getUniverseTypeSet(); 192 } 193 194 public String toString() { 195 return "{" + fID + ": array-super(" + fElemTypeSet + ")}"; } 197 } 198 | Popular Tags |