ColorKey (@NonNls @NotNull String externalName, @Nullable Color defaultColor) { ColorKey existing = ourRegistry.get(externalName); if (existing != null) { if (Comparing.equal(existing.getDefaultColor(), defaultColor)) return existing; // some crazy life cycle assumes we should overwrite default color // (e.g. when read from external schema HintUtil.INFORMATION_COLOR_KEY with null color, then try to re-create it with not-null color in HintUtil initializer) ourRegistry.remove(externalName, existing); } ColorKey newKey = new ColorKey(externalName, defaultColor, existing == null ? null : existing.getFallbackColorKey()); return ConcurrencyUtil.cacheOrGet(ourRegistry, externalName, newKey); }