public Set entrySet()

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);
                }
            }
        };
    }