in freemarker-core/src/main/java/freemarker/ext/beans/HashAdapter.java [90:178]
public Set entrySet() {
if (entrySet != null) {
return entrySet;
}
return entrySet = new AbstractSet() {
@Override
public Iterator iterator() {
final TemplateModelIterator i;
try {
i = getModelEx().keys().iterator();
} catch (TemplateModelException e) {
throw new UndeclaredThrowableException(e);
}
return new Iterator() {
@Override
public boolean hasNext() {
try {
return i.hasNext();
} catch (TemplateModelException e) {
throw new UndeclaredThrowableException(e);
}
}
@Override
public Object next() {
final Object key;
try {
key = wrapper.unwrap(i.next());
} catch (TemplateModelException e) {
throw new UndeclaredThrowableException(e);
}
return new Map.Entry() {
@Override
public Object getKey() {
return key;
}
@Override
public Object getValue() {
return get(key);
}
@Override
public Object setValue(Object value) {
throw new UnsupportedOperationException();
}
@Override
public boolean equals(Object o) {
if (!(o instanceof Map.Entry))
return false;
Map.Entry e = (Map.Entry) o;
Object k1 = getKey();
Object k2 = e.getKey();
if (k1 == k2 || (k1 != null && k1.equals(k2))) {
Object v1 = getValue();
Object v2 = e.getValue();
if (v1 == v2 || (v1 != null && v1.equals(v2)))
return true;
}
return false;
}
@Override
public int hashCode() {
Object value = getValue();
return (key == null ? 0 : key.hashCode()) ^
(value == null ? 0 : value.hashCode());
}
};
}
@Override
public void remove() {
throw new UnsupportedOperationException();
}
};
}
@Override
public int size() {
try {
return getModelEx().size();
} catch (TemplateModelException e) {
throw new UndeclaredThrowableException(e);
}
}
};
}