blob: 900462ad88a0a605f43288c0e9659d45d63d1607 [file] [log] [blame]
/*
* Copyright 2000-2009 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.codeInsight.daemon;
import com.intellij.openapi.diagnostic.Logger;
import com.intellij.openapi.util.Comparing;
import com.intellij.openapi.util.Computable;
import gnu.trove.THashMap;
import org.jetbrains.annotations.NonNls;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import java.util.Map;
public class HighlightDisplayKey {
private static final Logger LOG = Logger.getInstance("#com.intellij.codeInsight.daemon.HighlightDisplayKey");
private static final Map<String,HighlightDisplayKey> ourNameToKeyMap = new THashMap<String, HighlightDisplayKey>();
private static final Map<String,HighlightDisplayKey> ourIdToKeyMap = new THashMap<String, HighlightDisplayKey>();
private static final Map<HighlightDisplayKey, Computable<String>> ourKeyToDisplayNameMap = new THashMap<HighlightDisplayKey, Computable<String>>();
private static final Map<HighlightDisplayKey, String> ourKeyToAlternativeIDMap = new THashMap<HighlightDisplayKey, String>();
private final String myName;
private final String myID;
public static HighlightDisplayKey find(@NonNls @NotNull final String name) {
return ourNameToKeyMap.get(name);
}
@Nullable
public static HighlightDisplayKey findById(@NonNls @NotNull final String id) {
HighlightDisplayKey key = ourIdToKeyMap.get(id);
if (key != null) return key;
key = ourNameToKeyMap.get(id);
if (key != null && key.getID().equals(id)) return key;
return null;
}
@Nullable
public static HighlightDisplayKey register(@NonNls @NotNull final String name) {
if (find(name) != null) {
LOG.info("Key with name \'" + name + "\' already registered");
return null;
}
return new HighlightDisplayKey(name);
}
/**
* @see #register(String, com.intellij.openapi.util.Computable)
*/
@Nullable
public static HighlightDisplayKey register(@NonNls @NotNull final String name, @NotNull final String displayName) {
return register(name, displayName, name);
}
@Nullable
public static HighlightDisplayKey register(@NonNls @NotNull final String name, @NotNull Computable<String> displayName) {
return register(name, displayName, name);
}
/**
* @see #register(String, com.intellij.openapi.util.Computable, String)
*/
@Nullable
public static HighlightDisplayKey register(@NonNls @NotNull final String name,
@NotNull final String displayName,
@NotNull @NonNls final String id) {
return register(name, new Computable.PredefinedValueComputable<String>(displayName), id);
}
@Nullable
public static HighlightDisplayKey register(@NonNls @NotNull final String name,
@NotNull final Computable<String> displayName,
@NotNull @NonNls final String id) {
if (find(name) != null) {
LOG.info("Key with name \'" + name + "\' already registered");
return null;
}
HighlightDisplayKey highlightDisplayKey = new HighlightDisplayKey(name, id);
ourKeyToDisplayNameMap.put(highlightDisplayKey, displayName);
return highlightDisplayKey;
}
@Nullable
public static HighlightDisplayKey register(@NonNls @NotNull final String name,
@NotNull final Computable<String> displayName,
@NonNls @NotNull final String id,
@NonNls @Nullable final String alternativeID) {
final HighlightDisplayKey key = register(name, displayName, id);
if (alternativeID != null) {
ourKeyToAlternativeIDMap.put(key, alternativeID);
}
return key;
}
@NotNull
public static HighlightDisplayKey findOrRegister(@NonNls @NotNull String name, @NotNull final String displayName) {
return findOrRegister(name, displayName, null);
}
@NotNull
public static HighlightDisplayKey findOrRegister(@NonNls @NotNull final String name,
@NotNull final String displayName,
@NonNls @Nullable final String id) {
HighlightDisplayKey key = find(name);
if (key == null) {
key = register(name, displayName, id != null ? id : name);
assert key != null : name;
}
return key;
}
@Nullable
public static String getDisplayNameByKey(@Nullable HighlightDisplayKey key) {
if (key == null) {
return null;
}
else {
final Computable<String> computable = ourKeyToDisplayNameMap.get(key);
return computable == null ? null : computable.compute();
}
}
public static String getAlternativeID(@NotNull HighlightDisplayKey key) {
return ourKeyToAlternativeIDMap.get(key);
}
private HighlightDisplayKey(@NonNls @NotNull final String name) {
this(name, name);
}
public HighlightDisplayKey(@NonNls @NotNull final String name, @NonNls @NotNull final String ID) {
myName = name;
myID = ID;
ourNameToKeyMap.put(myName, this);
if (!Comparing.equal(ID, name)) {
ourIdToKeyMap.put(ID, this);
}
}
public String toString() {
return myName;
}
@NotNull
public String getID(){
return myID;
}
}