Copyright (c) 2004, 2015 IBM Corporation and others.
This program and the accompanying materials
are made available under the terms of the Eclipse Public License 2.0
which accompanies this distribution, and is available at
https://www.eclipse.org/legal/epl-2.0/
SPDX-License-Identifier: EPL-2.0
Contributors:
IBM Corporation - initial API and implementation
Jan-Ove Weichel (janove.weichel@vogella.com) - bug 474359
/*******************************************************************************
* Copyright (c) 2004, 2015 IBM Corporation and others.
*
* This program and the accompanying materials
* are made available under the terms of the Eclipse Public License 2.0
* which accompanies this distribution, and is available at
* https://www.eclipse.org/legal/epl-2.0/
*
* SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* IBM Corporation - initial API and implementation
* Jan-Ove Weichel (janove.weichel@vogella.com) - bug 474359
*******************************************************************************/
package org.eclipse.core.internal.preferences;
import java.util.*;
import java.util.Map.Entry;
A Properties
class whose entries are sorted by key; can only be used in limited scenarios
like storing properties to a file.
Implementation note: The implementations of the keys()
and entrySet()
methods violate the contracts of Hashtable<Object,Object>.keySet()
and Hashtable<Object,Object>.entrySet()
, because the returned sets are not backed by this map.
Overriding both methods is necessary to support Oracle and IBM VMS, see
bug 325000.
/**
* A {@link Properties} class whose entries are sorted by key; can <strong>only</strong> be used in limited scenarios
* like storing properties to a file.
* <p>
* <b>Implementation note</b>: The implementations of the {@link #keys()} and {@link #entrySet()} methods
* violate the contracts of {@link Properties#keySet()} and {@link Properties#entrySet()}, because the returned sets
* are <em>not</em> backed by this map.
* Overriding both methods is necessary to support Oracle and IBM VMS, see
* <a href="https://bugs.eclipse.org/325000">bug 325000</a>.
* </p>
*/
public class SortedProperties extends Properties {
// Warning: This class is referenced by our friend org.eclipse.core.internal.resources.ProjectPreferences
private static final long serialVersionUID = 1L;
@Override
public synchronized Enumeration<Object> keys() {
TreeSet<Object> set = new TreeSet<>();
for (Enumeration<?> e = super.keys(); e.hasMoreElements();) {
set.add(e.nextElement());
}
return Collections.enumeration(set);
}
@Override
public Set<Entry<Object, Object>> entrySet() {
TreeSet<Entry<Object, Object>> set = new TreeSet<>((Entry<Object, Object> e1, Entry<Object, Object> e2) -> {
String s1 = (String) e1.getKey();
String s2 = (String) e2.getKey();
return s1.compareTo(s2);
});
for (Iterator<Entry<Object, Object>> i = super.entrySet().iterator(); i.hasNext();) {
set.add(i.next());
}
return set;
}
}