KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > eclipse > jdt > internal > corext > refactoring > typeconstraints > typesets > ArrayTypeSet


1 /*******************************************************************************
2  * Copyright (c) 2000, 2005 IBM Corporation and others.
3  * All rights reserved. This program and the accompanying materials
4  * are made available under the terms of the Eclipse Public License v1.0
5  * which accompanies this distribution, and is available at
6  * http://www.eclipse.org/legal/epl-v10.html
7  *
8  * Contributors:
9  * Robert M. Fuhrer (rfuhrer@watson.ibm.com), IBM Corporation - initial API and implementation
10  *******************************************************************************/

11 package org.eclipse.jdt.internal.corext.refactoring.typeconstraints.typesets;
12
13 import java.util.Iterator JavaDoc;
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 /**
20  * Represents the set of array types whose element types are in a given TypeSet.
21  * I.e., ArrayTypeSet(S) = { x[] | x \in S }
22  */

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     /**
36      * @return Returns the element TypeSet.
37      */

38     public TypeSet getElemTypeSet() {
39         return fElemTypeSet;
40     }
41
42     /* (non-Javadoc)
43      * @see org.eclipse.jdt.internal.corext.refactoring.typeconstraints.typesets.TypeSet#isUniverse()
44      */

45     public boolean isUniverse() {
46         return false;
47     }
48
49     /* (non-Javadoc)
50      * @see org.eclipse.jdt.internal.corext.refactoring.typeconstraints.typesets.TypeSet#makeClone()
51      */

52     public TypeSet makeClone() {
53         return new ArrayTypeSet(fElemTypeSet);
54     }
55
56     /* (non-Javadoc)
57      * @see org.eclipse.jdt.internal.corext.refactoring.typeconstraints.typesets.TypeSet#isEmpty()
58      */

59     public boolean isEmpty() {
60         return fElemTypeSet.isEmpty();
61     }
62
63     /* (non-Javadoc)
64      * @see org.eclipse.jdt.internal.corext.refactoring.typeconstraints.typesets.TypeSet#upperBound()
65      */

66     public TypeSet upperBound() {
67         return new ArrayTypeSet(fElemTypeSet.upperBound());
68     }
69
70     /* (non-Javadoc)
71      * @see org.eclipse.jdt.internal.corext.refactoring.typeconstraints.typesets.TypeSet#lowerBound()
72      */

73     public TypeSet lowerBound() {
74         return new ArrayTypeSet(fElemTypeSet.lowerBound());
75     }
76
77     /* (non-Javadoc)
78      * @see org.eclipse.jdt.internal.corext.refactoring.typeconstraints.typesets.TypeSet#hasUniqueLowerBound()
79      */

80     public boolean hasUniqueLowerBound() {
81         return fElemTypeSet.hasUniqueLowerBound();
82     }
83
84     /* (non-Javadoc)
85      * @see org.eclipse.jdt.internal.corext.refactoring.typeconstraints.typesets.TypeSet#hasUniqueUpperBound()
86      */

87     public boolean hasUniqueUpperBound() {
88         return fElemTypeSet.hasUniqueUpperBound();
89     }
90
91     /* (non-Javadoc)
92      * @see org.eclipse.jdt.internal.corext.refactoring.typeconstraints.typesets.TypeSet#uniqueLowerBound()
93      */

94     public TType uniqueLowerBound() {
95         return TTypes.createArrayType(fElemTypeSet.uniqueLowerBound(), 1);
96     }
97
98     /* (non-Javadoc)
99      * @see org.eclipse.jdt.internal.corext.refactoring.typeconstraints.typesets.TypeSet#uniqueUpperBound()
100      */

101     public TType uniqueUpperBound() {
102         return TTypes.createArrayType(fElemTypeSet.uniqueUpperBound(), 1);
103     }
104
105     /* (non-Javadoc)
106      * @see org.eclipse.jdt.internal.corext.refactoring.typeconstraints.typesets.TypeSet#contains(TType)
107      */

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     /* (non-Javadoc)
116      * @see org.eclipse.jdt.internal.corext.refactoring.typeconstraints.typesets.TypeSet#containsAll(org.eclipse.jdt.internal.corext.refactoring.typeconstraints.typesets.TypeSet)
117      */

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 JavaDoc 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     /* (non-Javadoc)
133      * @see org.eclipse.jdt.internal.corext.refactoring.typeconstraints.typesets.TypeSet#iterator()
134      */

135     public Iterator JavaDoc iterator() {
136         if (fEnumCache != null) return fEnumCache.iterator();
137
138         return new Iterator JavaDoc() {
139             Iterator JavaDoc fElemIter= fElemTypeSet.iterator();
140             public boolean hasNext() {
141                 return fElemIter.hasNext();
142             }
143             public Object JavaDoc next() {
144                 return TTypes.createArrayType(((TType) fElemIter.next()), 1);
145             }
146             public void remove() {
147                 throw new UnsupportedOperationException JavaDoc();
148             }
149         };
150     }
151
152     private EnumeratedTypeSet fEnumCache= null;
153
154     /* (non-Javadoc)
155      * @see org.eclipse.jdt.internal.corext.refactoring.typeconstraints.typesets.TypeSet#enumerate()
156      */

157     public EnumeratedTypeSet enumerate() {
158         if (fEnumCache == null) {
159             fEnumCache= new EnumeratedTypeSet(getTypeSetEnvironment());
160
161             for(Iterator JavaDoc 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     /* (non-Javadoc)
171      * @see org.eclipse.jdt.internal.corext.refactoring.typeconstraints.typesets.TypeSet#isSingleton()
172      */

173     public boolean isSingleton() {
174         return fElemTypeSet.isSingleton();
175     }
176
177     /* (non-Javadoc)
178      * @see org.eclipse.jdt.internal.corext.refactoring.typeconstraints.typesets.TypeSet#anyMember()
179      */

180     public TType anyMember() {
181         return TTypes.createArrayType(fElemTypeSet.anyMember(), 1);
182     }
183
184     /* (non-Javadoc)
185      * @see org.eclipse.jdt.internal.corext.refactoring.typeconstraints.typesets.TypeSet#superTypes()
186      */

187     public TypeSet superTypes() {
188         return new ArraySuperTypeSet(fElemTypeSet);
189     }
190
191     /* (non-Javadoc)
192      * @see java.lang.Object#equals(java.lang.Object)
193      */

194     public boolean equals(Object JavaDoc 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 JavaDoc toString() {
205         return "{" + fID + ": array(" + fElemTypeSet + ")}"; //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
206
}
207 }
208
Popular Tags