Copyright (c) 2000, 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
/******************************************************************************* * Copyright (c) 2000, 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 *******************************************************************************/
package org.eclipse.jface.text.source; import java.util.ArrayList; import java.util.Collection; import java.util.HashMap; import java.util.Iterator; import java.util.Map; import java.util.Set; import org.eclipse.jface.text.Position;
Internal implementation of IAnnotationMap.
Since:3.0
/** * Internal implementation of {@link org.eclipse.jface.text.source.IAnnotationMap}. * * @since 3.0 */
class AnnotationMap implements IAnnotationMap {
The lock object used to synchronize the operations explicitly defined by IAnnotationMap
/** * The lock object used to synchronize the operations explicitly defined by * <code>IAnnotationMap</code> */
private Object fLockObject;
The internal lock object used if fLockObject is null.
Since:3.2
/** * The internal lock object used if <code>fLockObject</code> is <code>null</code>. * @since 3.2 */
private final Object fInternalLockObject= new Object();
The map holding the annotations
/** The map holding the annotations */
private Map<Annotation, Position> fInternalMap;
Creates a new annotation map with the given capacity.
Params:
  • capacity – the capacity
/** * Creates a new annotation map with the given capacity. * * @param capacity the capacity */
public AnnotationMap(int capacity) { fInternalMap= new HashMap<>(capacity); } @Override public synchronized void setLockObject(Object lockObject) { fLockObject= lockObject; } @Override public synchronized Object getLockObject() { if (fLockObject == null) return fInternalLockObject; return fLockObject; } @Override public Iterator<Position> valuesIterator() { synchronized (getLockObject()) { return new ArrayList<>(fInternalMap.values()).iterator(); } } @Override public Iterator<Annotation> keySetIterator() { synchronized (getLockObject()) { return new ArrayList<>(fInternalMap.keySet()).iterator(); } } @Override public boolean containsKey(Object annotation) { synchronized (getLockObject()) { return fInternalMap.containsKey(annotation); } } @Override public Position put(Annotation annotation, Position position) { synchronized (getLockObject()) { return fInternalMap.put(annotation, position); } } @Override public Position get(Object annotation) { synchronized (getLockObject()) { return fInternalMap.get(annotation); } } @Override public void clear() { synchronized (getLockObject()) { fInternalMap.clear(); } } @Override public Position remove(Object annotation) { synchronized (getLockObject()) { return fInternalMap.remove(annotation); } } @Override public int size() { synchronized (getLockObject()) { return fInternalMap.size(); } } @Override public boolean isEmpty() { synchronized (getLockObject()) { return fInternalMap.isEmpty(); } } @Override public boolean containsValue(Object value) { synchronized(getLockObject()) { return fInternalMap.containsValue(value); } } @Override public void putAll(Map<? extends Annotation, ? extends Position> map) { synchronized (getLockObject()) { fInternalMap.putAll(map); } } @Override public Set<Entry<Annotation, Position>> entrySet() { synchronized (getLockObject()) { return fInternalMap.entrySet(); } } @Override public Set<Annotation> keySet() { synchronized (getLockObject()) { return fInternalMap.keySet(); } } @Override public Collection<Position> values() { synchronized (getLockObject()) { return fInternalMap.values(); } } }