blob: e21c3d67dcbcde7f59df71bb0293eda37d7b396c [file] [log] [blame]
/*
* Copyright 2000-2011 JetBrains s.r.o.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.intellij.xdebugger.impl.frame;
import com.intellij.xdebugger.frame.XValue;
import com.intellij.xdebugger.frame.XValueMarkerProvider;
import com.intellij.xdebugger.impl.ui.tree.ValueMarkup;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import java.util.Collections;
import java.util.HashMap;
import java.util.Map;
/**
* @author nik
*/
public class XValueMarkers<V extends XValue, M> {
private final XValueMarkerProvider<V, M> myProvider;
private final Map<M, ValueMarkup> myMarkers;
private XValueMarkers(@NotNull XValueMarkerProvider<V, M> provider) {
myProvider = provider;
myMarkers = new HashMap<M, ValueMarkup>();
}
public static <V extends XValue, M> XValueMarkers<V, M> createValueMarkers(@NotNull XValueMarkerProvider<V, M> provider) {
return new XValueMarkers<V, M>(provider);
}
@Nullable
public ValueMarkup getMarkup(@NotNull XValue value) {
Class<V> valueClass = myProvider.getValueClass();
if (!valueClass.isInstance(value)) return null;
V v = valueClass.cast(value);
if (!myProvider.canMark(v)) return null;
M m = myProvider.getMarker(v);
if (m == null) return null;
return myMarkers.get(m);
}
public boolean canMarkValue(@NotNull XValue value) {
Class<V> valueClass = myProvider.getValueClass();
if (!valueClass.isInstance(value)) return false;
return myProvider.canMark(valueClass.cast(value));
}
public void markValue(@NotNull XValue value, @NotNull ValueMarkup markup) {
//noinspection unchecked
M m = myProvider.markValue((V)value);
myMarkers.put(m, markup);
}
public void unmarkValue(@NotNull XValue value) {
//noinspection unchecked
final V v = (V)value;
M m = myProvider.getMarker(v);
if (m != null) {
myProvider.unmarkValue(v, m);
myMarkers.remove(m);
}
}
public Map<M, ValueMarkup> getAllMarkers() {
return Collections.unmodifiableMap(myMarkers);
}
public void clear() {
myMarkers.clear();
}
}