]> git.uio.no Git - ifi-stolz-refaktor.git/blobdiff - case-study/jdt-after/core refactoring/org/eclipse/jdt/internal/corext/refactoring/typeconstraints/typesets/EnumeratedTypeSet.java
Case Study: adding data and statistics
[ifi-stolz-refaktor.git] / case-study / jdt-after / core refactoring / org / eclipse / jdt / internal / corext / refactoring / typeconstraints / typesets / EnumeratedTypeSet.java
diff --git a/case-study/jdt-after/core refactoring/org/eclipse/jdt/internal/corext/refactoring/typeconstraints/typesets/EnumeratedTypeSet.java b/case-study/jdt-after/core refactoring/org/eclipse/jdt/internal/corext/refactoring/typeconstraints/typesets/EnumeratedTypeSet.java
new file mode 100644 (file)
index 0000000..cd8ed4a
--- /dev/null
@@ -0,0 +1,579 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *   Robert M. Fuhrer (rfuhrer@watson.ibm.com), IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.jdt.internal.corext.refactoring.typeconstraints.typesets;
+
+import java.util.Iterator;
+import java.util.LinkedHashSet;
+import java.util.Set;
+
+import org.eclipse.core.runtime.Assert;
+
+import org.eclipse.jdt.internal.corext.refactoring.typeconstraints.types.ArrayType;
+import org.eclipse.jdt.internal.corext.refactoring.typeconstraints.types.TType;
+import org.eclipse.jdt.internal.corext.refactoring.typeconstraints2.TTypes;
+
+/**
+ * A type-safe wrapper for {@code Set<TType>} that also adds {@code TType}-specific
+ * functionality, e.g. subTypes() and superTypes().
+ */
+public class EnumeratedTypeSet extends TypeSet {
+       public static int sCount= 0;
+
+       static public int getCount() {
+               return sCount;
+       }
+
+       static public void resetCount() {
+               sCount= 0;
+       }
+
+       /**
+        * Set containing the TTypes in this EnumeratedTypeSet.
+        */
+       public Set<TType> fMembers= new LinkedHashSet<TType>();
+
+       /**
+        * Constructs a new EnumeratedTypeSet with the members of Set s in it.
+        * All elements of s must be TTypes.
+        * 
+        * @param types the types
+        * @param typeSetEnvironment the environment
+        */
+       public EnumeratedTypeSet(Iterator<TType> types, TypeSetEnvironment typeSetEnvironment) {
+               super(typeSetEnvironment);
+               while (types.hasNext()) {
+                       fMembers.add(types.next());
+               }
+               sCount++;
+       }
+
+       /**
+        * Constructs an empty EnumeratedTypeSet.
+        * 
+        * @param typeSetEnvironment the environment
+        */
+       public EnumeratedTypeSet(TypeSetEnvironment typeSetEnvironment) {
+               super(typeSetEnvironment);
+               sCount++;
+       }
+
+       /**
+        * Constructs a new EnumeratedTypeSet with the given single TType in it.
+        * 
+        * @param t the type
+        * @param typeSetEnvironment the environment
+        */
+       public EnumeratedTypeSet(TType t, TypeSetEnvironment typeSetEnvironment) {
+               super(typeSetEnvironment);
+               t.generated_3769340610219257430(this);
+       }
+
+       /**
+        * @return <code>true</code> iff this set represents the universe of TTypes
+        */
+       @Override
+       public boolean isUniverse() {
+               return false;
+       }
+
+       @Override
+       public boolean equals(Object o) {
+               if (this == o) return true;
+               if (o instanceof EnumeratedTypeSet) {
+                       EnumeratedTypeSet other= (EnumeratedTypeSet) o;
+
+                       return fMembers.equals(other.fMembers);
+               } else if (o instanceof SingletonTypeSet) {
+                       SingletonTypeSet other= (SingletonTypeSet) o;
+
+                       return (fMembers.size() == 1) && fMembers.contains(other.anyMember());
+               } else if (o instanceof TypeSet) {
+                       TypeSet other= (TypeSet) o;
+
+                       return other.generated_2869635024761535811(this);
+               } else
+                       return false;
+       }
+
+       @Override
+       public int hashCode() {
+               return 37 + fMembers.hashCode();
+       }
+
+       /**
+        * Computes and returns a <em>new</em> EnumeratedTypeSet representing the intersection of the
+        * receiver with s2. Does not modify the receiver.
+        * @param s2 the other type set
+        */
+       @Override
+       protected TypeSet specialCasesIntersectedWith(TypeSet s2) {
+               if (s2 instanceof EnumeratedTypeSet) {
+                       EnumeratedTypeSet result= new EnumeratedTypeSet(getTypeSetEnvironment());
+
+                       result.generated_3226133724554068663(s2, this);
+                       if (result.size() > 0)
+                               return result;
+                       else
+                               return getTypeSetEnvironment().getEmptyTypeSet();
+               }
+               return null;
+       }
+
+       /**
+        * Modifies this EnumeratedTypeSet to represent the intersection of the receiver with s2.
+        * @param s2 the other type set
+        */
+       public void intersectWith(TypeSet s2) {
+               s2.generated_8067823756310198788(this);
+       }
+
+       /**
+        * @return a new TypeSet representing the set of all sub-types of the
+        * types in the receiver
+        */
+       @Override
+       public TypeSet subTypes() {
+               if (isUniverse())
+                       return makeClone(); // subtypes(universe) = universe
+
+               if (fMembers.contains(getJavaLangObject()))
+                       return getTypeSetEnvironment().getUniverseTypeSet();
+
+               return getTypeSetEnvironment().createSubTypesSet(this);
+       }
+
+       public static EnumeratedTypeSet makeArrayTypesForElements(Iterator<TType> elemTypes, TypeSetEnvironment typeSetEnvironment) {
+               EnumeratedTypeSet result= new EnumeratedTypeSet(typeSetEnvironment);
+
+               while (elemTypes.hasNext()) {
+                       TType t= elemTypes.next();
+                       result.add(TTypes.createArrayType(t, 1));
+               }
+//             result.initComplete();
+               return result;
+       }
+
+       /**
+        * @return a new TypeSet representing the set of all super-types of the
+        * types in the receiver
+        */
+       @Override
+       public TypeSet superTypes() {
+               if (isUniverse())
+                       return makeClone(); // The supertypes of the universe is the universe
+
+               return getTypeSetEnvironment().createSuperTypesSet(this);
+       }
+
+       @Override
+       public TypeSet makeClone() {
+               EnumeratedTypeSet result= new EnumeratedTypeSet(getTypeSetEnvironment());
+
+               result.fMembers.addAll(fMembers);
+               return generated_5827134700953768926(result);
+       }
+
+       public TypeSet generated_5827134700953768926(EnumeratedTypeSet result) {
+               result.initComplete();
+               return result;
+       }
+
+       /* (non-Javadoc)
+        * @see java.util.Set#size()
+        */
+       public int size() {
+               return fMembers.size();
+       }
+
+       /* (non-Javadoc)
+        * @see java.util.Set#clear()
+        */
+       public void clear() {
+               if (isUniverse())
+                       fMembers= new LinkedHashSet<TType>();
+               else
+                       fMembers.clear();
+       }
+
+       /* (non-Javadoc)
+        * @see java.util.Set#isEmpty()
+        */
+       @Override
+       public boolean isEmpty() {
+               return fMembers.isEmpty();
+       }
+
+       /* (non-Javadoc)
+        * @see java.util.Set#toArray()
+        */
+       public TType[] toArray() {
+               return fMembers.toArray(new TType[fMembers.size()]);
+       }
+
+       /* (non-Javadoc)
+        * @see java.util.Set#add(java.lang.Object)
+        */
+       public boolean add(TType t) {
+               // Doesn't make sense to do here what other methods do (copy-and-modify)
+               Assert.isTrue(!isUniverse(), "Someone's trying to expand the universe!"); //$NON-NLS-1$
+               return fMembers.add(t);
+       }
+
+       /* (non-Javadoc)
+        * @see java.util.Set#contains(java.lang.Object)
+        */
+       @Override
+       public boolean contains(TType t) {
+               if (isUniverse())
+                       return true;
+               return fMembers.contains(t);
+       }
+
+       /* (non-Javadoc)
+        * @see java.util.Set#remove(java.lang.Object)
+        */
+       public boolean remove(TType t) {
+               if (isUniverse())
+                       fMembers= cloneSet(fMembers);
+               return fMembers.remove(t);
+       }
+
+       private Set<TType> cloneSet(Set<TType> members) {
+               Set<TType> result= new LinkedHashSet<TType>();
+               result.addAll(members);
+               return result;
+       }
+
+       /* (non-Javadoc)
+        * @see java.util.Set#addAll(java.util.Collection)
+        */
+       public boolean addAll(TypeSet s) {
+               return s.generated_6796883765105910290(this);
+       }
+
+       @Override
+       public TypeSet addedTo(TypeSet that) {
+               EnumeratedTypeSet result= new EnumeratedTypeSet(getTypeSetEnvironment());
+
+               return result.generated_6517476918444688818(that, this);
+       }
+
+       /* (non-Javadoc)
+        * @see java.util.Set#containsAll(java.util.Collection)
+        */
+       @Override
+       public boolean containsAll(TypeSet s) {
+               if (isUniverse())
+                       return true;
+               return s.generated_1664523987958239483(this);
+       }
+
+       /* (non-Javadoc)
+        * @see java.util.Set#removeAll(java.util.Collection)
+        */
+       public boolean removeAll(EnumeratedTypeSet s) {
+               return s.generated_7123627706191311488(this);
+       }
+
+       /* (non-Javadoc)
+        * @see java.util.Set#retainAll(java.util.Collection)
+        */
+       public boolean retainAll(TypeSet s) {
+               if (s.isUniverse()) return false;
+
+               EnumeratedTypeSet ets= (EnumeratedTypeSet) s;
+
+               return ets.generated_1055409160243982945(this);
+       }
+
+       /* (non-Javadoc)
+        * @see org.eclipse.jdt.internal.corext.refactoring.typeconstraints.typesets.TypeSet#isSingleton()
+        */
+       @Override
+       public boolean isSingleton() {
+               return fMembers.size() == 1;
+       }
+
+       /* (non-Javadoc)
+        * @see org.eclipse.jdt.internal.corext.refactoring.typeconstraints.typesets.TypeSet#anyMember()
+        */
+       @Override
+       public TType anyMember() {
+               return fMembers.iterator().next();
+       }
+
+       /* (non-Javadoc)
+        * @see org.eclipse.jdt.internal.corext.refactoring.typeconstraints.typesets.TypeSet#upperBound()
+        */
+       @Override
+       public TypeSet upperBound() {
+               if (fMembers.size() == 1)
+                       return new SingletonTypeSet(fMembers.iterator().next(), getTypeSetEnvironment());
+               if (fMembers.contains(getJavaLangObject()))
+                       return new SingletonTypeSet(getJavaLangObject(), getTypeSetEnvironment());
+
+               EnumeratedTypeSet result= new EnumeratedTypeSet(getTypeSetEnvironment());
+
+               // Add to result each element of fMembers that has no proper supertype in fMembers
+               result.fMembers.addAll(fMembers);
+               for(Iterator<TType> iter= fMembers.iterator(); iter.hasNext(); ) {
+                       TType t= iter.next();
+
+                       if (t.isArrayType()) {
+                               ArrayType at= (ArrayType) t;
+                               int numDims= at.getDimensions();
+                               for(Iterator<TType> subIter=TTypes.getAllSubTypesIterator(at.getElementType()); subIter.hasNext(); ) {
+                                       result.fMembers.remove(TTypes.createArrayType(subIter.next(), numDims));
+                               }
+                       } else {
+                               for (Iterator<TType> iterator= TTypes.getAllSubTypesIterator(t); iterator.hasNext();) {
+                                       result.fMembers.remove(iterator.next());
+                               }
+                       }
+               }
+               return generated_2336618344135692914(result);
+       }
+
+       public TypeSet generated_2336618344135692914(EnumeratedTypeSet result) {
+               result.initComplete();
+               return result;
+       }
+
+       /* (non-Javadoc)
+        * @see org.eclipse.jdt.internal.corext.refactoring.typeconstraints.typesets.TypeSet#lowerBound()
+        */
+       @Override
+       public TypeSet lowerBound() {
+               if (fMembers.size() == 1)
+                       return new SingletonTypeSet(fMembers.iterator().next(), getTypeSetEnvironment());
+
+               EnumeratedTypeSet result= new EnumeratedTypeSet(getTypeSetEnvironment());
+
+               // Add to result each element of fMembers that has no proper subtype in fMembers
+               result.fMembers.addAll(fMembers);
+
+               for(Iterator<TType> iter= fMembers.iterator(); iter.hasNext(); ) {
+                       TType t= iter.next();
+
+                       // java.lang.Object is only in the lower bound if fMembers consists
+                       // of only java.lang.Object, but that case is handled above.
+                       if (t.equals(getJavaLangObject())) {
+                               result.fMembers.remove(t);
+                               continue;
+                       }
+
+                       if (t instanceof ArrayType) {
+                               ArrayType at= (ArrayType) t;
+                               int numDims= at.getDimensions();
+                               for(Iterator<TType> superIter=TTypes.getAllSuperTypesIterator(at.getElementType()); superIter.hasNext(); ) {
+                                       result.fMembers.remove(TTypes.createArrayType(superIter.next(), numDims));
+                               }
+                       } else {
+                               for (Iterator<TType> iterator= TTypes.getAllSuperTypesIterator(t); iterator.hasNext();) {
+                                       result.generated_6359776099616909620(this, iterator);
+                               }
+                       }
+               }
+               if (result.size() > 0)
+                       return result;
+               else
+                       return getTypeSetEnvironment().getEmptyTypeSet();
+       }
+
+       /* (non-Javadoc)
+        * @see org.eclipse.jdt.internal.corext.refactoring.typeconstraints.typesets.TypeSet#hasUniqueLowerBound()
+        */
+       @Override
+       public boolean hasUniqueLowerBound() {
+               return fMembers.size() == 1;
+       }
+
+       /* (non-Javadoc)
+        * @see org.eclipse.jdt.internal.corext.refactoring.typeconstraints.typesets.TypeSet#hasUniqueUpperBound()
+        */
+       @Override
+       public boolean hasUniqueUpperBound() {
+               return fMembers.size() == 1;
+       }
+
+       /* (non-Javadoc)
+        * @see org.eclipse.jdt.internal.corext.refactoring.typeconstraints.typesets.TypeSet#uniqueLowerBound()
+        */
+       @Override
+       public TType uniqueLowerBound() {
+               if (fMembers.size() == 1)
+                       return fMembers.iterator().next();
+               return null;
+       }
+
+       /* (non-Javadoc)
+        * @see org.eclipse.jdt.internal.corext.refactoring.typeconstraints.typesets.TypeSet#uniqueUpperBound()
+        */
+       @Override
+       public TType uniqueUpperBound() {
+               if (fMembers.size() == 1)
+                       return fMembers.iterator().next();
+               return null;
+       }
+
+       /* (non-Javadoc)
+        * @see java.util.Set#iterator()
+        */
+       @Override
+       public Iterator<TType> iterator() {
+               return fMembers.iterator();
+       }
+
+       /**
+        * Limits the display of set elements to the first sMaxElements.
+        */
+       private static final int sMaxElements= 10; // Integer.MAX_VALUE;
+
+       /*
+        * (non-Javadoc)
+        * @see java.lang.Object#toString()
+        */
+       @Override
+       public String toString() {
+               StringBuffer b= new StringBuffer();
+               b.append("{" + fID+ ":"); //$NON-NLS-1$ //$NON-NLS-2$
+               if (isUniverse())
+                       b.append(" <universe>"); //$NON-NLS-1$
+               else {
+                       int count=0;
+                       Iterator<TType> iter;
+                       for(iter= iterator(); iter.hasNext() && count < sMaxElements; count++) {
+                               TType type= iter.next();
+                               b.append(' ')
+                                .append(type.getPrettySignature());
+                               if (iter.hasNext())
+                                       b.append(',');
+                       }
+                       if (iter.hasNext())
+                               b.append(" ..."); //$NON-NLS-1$
+               }
+               b.append(" }"); //$NON-NLS-1$
+               return b.toString();
+       }
+
+       /* (non-Javadoc)
+        * @see org.eclipse.jdt.internal.corext.refactoring.typeconstraints.typesets.TypeSet#enumerate()
+        */
+       @Override
+       public EnumeratedTypeSet enumerate() {
+               return this; // (EnumeratedTypeSet) makeClone();
+       }
+
+       public void initComplete() {
+               Assert.isTrue(! fMembers.isEmpty());
+       }
+
+       public TypeSet generated_5630666201266944978(TypeSet that) {
+               addAll(that);
+               return this;
+       }
+
+       public EnumeratedTypeSet generated_6250131234113279204(TypeSetUnion typesetunion) {
+               addAll(typesetunion.fRHS.enumerate());
+               return this;
+       }
+
+       public void generated_3226133724554068663(TypeSet s2, EnumeratedTypeSet enumeratedtypeset) {
+               addAll(enumeratedtypeset); // copy first since retainAll() modifies in-place
+               retainAll(s2);
+       }
+
+       public TypeSet generated_6517476918444688818(TypeSet that, EnumeratedTypeSet enumeratedtypeset) {
+               addAll(enumeratedtypeset);
+               addAll(that);
+               initComplete();
+               return this;
+       }
+
+       public boolean generated_7123627706191311488(EnumeratedTypeSet enumeratedtypeset) {
+               if (enumeratedtypeset.isUniverse())
+                       enumeratedtypeset.fMembers= enumeratedtypeset.cloneSet(enumeratedtypeset.fMembers);
+               return enumeratedtypeset.fMembers.removeAll(fMembers);
+       }
+
+       public boolean generated_1055409160243982945(EnumeratedTypeSet enumeratedtypeset) {
+               if (enumeratedtypeset.isUniverse()) {
+                       enumeratedtypeset.fMembers= enumeratedtypeset.cloneSet(fMembers);
+                       return true;
+               } else
+                       return enumeratedtypeset.fMembers.retainAll(fMembers);
+       }
+
+       public void generated_6359776099616909620(EnumeratedTypeSet enumeratedtypeset, Iterator<TType> iterator) {
+               fMembers.remove(iterator.next());
+       }
+
+       public void generated_1642096082428232797(ArrayTypeSet arraytypeset) {
+               for(Iterator<TType> iter= arraytypeset.fElemTypeSet.iterator(); iter.hasNext(); ) {
+                       TType t= iter.next();
+                       add(TTypes.createArrayType(t, 1));
+               }
+               initComplete();
+       }
+
+       public EnumeratedTypeSet generated_7528185341646899938() {
+               initComplete();
+               return this;
+       }
+
+       public void generated_6258089802901260053(SuperTypesOfSingleton supertypesofsingleton) {
+               add(supertypesofsingleton.fLowerBound);
+               initComplete();
+       }
+
+       public void generated_8080557805498483091(SubTypesSet subtypesset) {
+               for(Iterator<TType> iter= subtypesset.fUpperBounds.iterator(); iter.hasNext(); ) {
+                       TType ub= iter.next();
+       
+                       if (ub instanceof ArrayType) {
+                               ArrayType at= (ArrayType) ub;
+                               int numDims= at.getDimensions();
+                               for(Iterator<TType> elemSubIter=TTypes.getAllSubTypesIterator(at.getElementType()); elemSubIter.hasNext(); )
+                                       add(TTypes.createArrayType(elemSubIter.next(), numDims));
+                       } else {
+                               for (Iterator<TType> iterator= TTypes.getAllSubTypesIterator(ub); iterator.hasNext();) {
+                                       fMembers.add(iterator.next());
+                               }
+                       }
+                       add(ub);
+               }
+       }
+
+       public boolean generated_747711718974346131(SuperTypesSet supertypesset, boolean anyLBIsIntfOrArray) {
+               for(Iterator<TType> iter= supertypesset.fLowerBounds.iterator(); iter.hasNext(); ) {
+                       TType lb= iter.next();
+       
+                       if (lb instanceof ArrayType) {
+                               ArrayType at= (ArrayType) lb;
+                               int numDims= at.getDimensions();
+                               for(Iterator<TType> elemSuperIter=TTypes.getAllSuperTypesIterator(at.getElementType()); elemSuperIter.hasNext(); )
+                                       add(TTypes.createArrayType(elemSuperIter.next(), numDims));
+                               anyLBIsIntfOrArray= true;
+                       } else {
+                               for (Iterator<TType> iterator= TTypes.getAllSuperTypesIterator(lb); iterator.hasNext(); )
+                               fMembers.add(iterator.next());
+                       }
+                       add(lb);
+               }
+               return anyLBIsIntfOrArray;
+       }
+
+       public void generated_2584938505133572049(SubTypesOfSingleton subtypesofsingleton) {
+               add(subtypesofsingleton.fUpperBound);
+               initComplete();
+       }
+
+}