public boolean equals(Object obj) {
   if (this == obj) {
     return true;
   }
   IdentityWeakReference ref = (IdentityWeakReference) obj;
   return this.get() == ref.get();
 }
 public Set keySet() {
   reap();
   Set ret = new HashSet();
   for (Iterator i = this.backingStore.keySet().iterator(); i.hasNext(); ) {
     IdentityWeakReference ref = (IdentityWeakReference) i.next();
     ret.add(ref.get());
   }
   return Collections.unmodifiableSet(ret);
 }
 public boolean equals(Object o) {
   if (this == o) {
     return true;
   }
   IdentityWeakReference ref = (IdentityWeakReference) o;
   if (get() == ref.get()) {
     return true;
   }
   return false;
 }
 public boolean equals(Object o) {
   if (this == o) {
     return true;
   }
   if (o instanceof IdentityWeakReference) {
     final IdentityWeakReference ref = (IdentityWeakReference) o;
     if (this.get() == ref.get()) {
       return true;
     }
   }
   return false;
 }
 private void cleanMetaClassOfInstance(MetaClassRegistryImpl registry) {
   List<IdentityWeakReference> keys =
       new ArrayList<IdentityWeakReference>(alteredInstances.keySet());
   for (IdentityWeakReference key : keys) {
     Object instance = key.get();
     if (instance != null) {
       Object alteredMetaClass = alteredInstances.get(key);
       if (alteredMetaClass == NO_CUSTOM_METACLASS) {
         alteredMetaClass = null;
       }
       registry.setMetaClass(instance, (MetaClass) alteredMetaClass);
     }
   }
   alteredInstances.clear();
 }