From f5d1eb37ed1bbe928fe22c24bb25d239636fd4bf Mon Sep 17 00:00:00 2001 From: Gregory Shrago Date: Mon, 26 Jul 2010 18:39:25 +0400 Subject: [PATCH] NULL object --- .../src/com/intellij/psi/impl/PsiCachedValueImpl.java | 3 +++ .../intellij/psi/impl/PsiParameterizedCachedValue.java | 3 +++ .../src/com/intellij/util/CachedValueBase.java | 5 +++-- .../src/com/intellij/util/CachedValueImpl.java | 4 ++-- .../com/intellij/util/ParameterizedCachedValueImpl.java | 2 ++ .../src/com/intellij/openapi/util/NullableLazyKey.java | 6 +++--- platform/util/src/com/intellij/util/ObjectUtils.java | 2 ++ .../util/src/com/intellij/util/containers/FactoryMap.java | 3 ++- .../src/com/intellij/util/containers/SoftFactoryMap.java | 8 +++++--- .../src/com/intellij/util/containers/WeakFactoryMap.java | 8 +++++--- 10 files changed, 30 insertions(+), 14 deletions(-) diff --git a/platform/lang-impl/src/com/intellij/psi/impl/PsiCachedValueImpl.java b/platform/lang-impl/src/com/intellij/psi/impl/PsiCachedValueImpl.java index d4af0c93a429..e301e75b77fd 100644 --- a/platform/lang-impl/src/com/intellij/psi/impl/PsiCachedValueImpl.java +++ b/platform/lang-impl/src/com/intellij/psi/impl/PsiCachedValueImpl.java @@ -19,8 +19,11 @@ package com.intellij.psi.impl; import com.intellij.psi.PsiManager; import com.intellij.psi.util.CachedValue; import com.intellij.psi.util.CachedValueProvider; +import com.intellij.util.ObjectUtils; import org.jetbrains.annotations.Nullable; +import static com.intellij.util.ObjectUtils.*; + /** * @author Dmitry Avdeev */ diff --git a/platform/lang-impl/src/com/intellij/psi/impl/PsiParameterizedCachedValue.java b/platform/lang-impl/src/com/intellij/psi/impl/PsiParameterizedCachedValue.java index 5d93119e8550..778931575c04 100644 --- a/platform/lang-impl/src/com/intellij/psi/impl/PsiParameterizedCachedValue.java +++ b/platform/lang-impl/src/com/intellij/psi/impl/PsiParameterizedCachedValue.java @@ -28,9 +28,12 @@ import com.intellij.psi.util.CachedValueProvider; import com.intellij.psi.util.ParameterizedCachedValueProvider; import com.intellij.psi.util.ParameterizedCachedValue; import com.intellij.psi.PsiManager; +import com.intellij.util.ObjectUtils; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import static com.intellij.util.ObjectUtils.*; + public abstract class PsiParameterizedCachedValue extends PsiCachedValue implements ParameterizedCachedValue { private final ParameterizedCachedValueProvider myProvider; diff --git a/platform/platform-impl/src/com/intellij/util/CachedValueBase.java b/platform/platform-impl/src/com/intellij/util/CachedValueBase.java index 80133bde1163..13edf8142a59 100644 --- a/platform/platform-impl/src/com/intellij/util/CachedValueBase.java +++ b/platform/platform-impl/src/com/intellij/util/CachedValueBase.java @@ -35,11 +35,12 @@ import java.lang.ref.Reference; import java.util.ArrayList; import java.util.List; +import static com.intellij.util.ObjectUtils.*; + /** * @author Dmitry Avdeev */ public abstract class CachedValueBase { - protected static final Object NULL = new Object(); private static final Logger LOG = Logger.getInstance("#com.intellij.psi.impl.CachedValueImpl"); private final MyTimedReference myData = new MyTimedReference(); @@ -66,7 +67,7 @@ public abstract class CachedValueBase { } protected void setValue(final T value, final CachedValueProvider.Result result) { - myData.setData(computeData(value == null ? (T) NULL : value, getDependencies(result))); + myData.setData(computeData(value == null ? (T)NULL : value, getDependencies(result))); if (result != null) { myData.setIsLocked(result.isLockValue()); } diff --git a/platform/platform-impl/src/com/intellij/util/CachedValueImpl.java b/platform/platform-impl/src/com/intellij/util/CachedValueImpl.java index f6a9890319b4..aef384fae2d7 100644 --- a/platform/platform-impl/src/com/intellij/util/CachedValueImpl.java +++ b/platform/platform-impl/src/com/intellij/util/CachedValueImpl.java @@ -47,7 +47,7 @@ public abstract class CachedValueImpl extends CachedValueBase implements C try { value = getUpToDateOrNull(); if (value != null) { - return value == NULL ? null : value; + return value == ObjectUtils.NULL ? null : value; } } finally { r.unlock(); @@ -58,7 +58,7 @@ public abstract class CachedValueImpl extends CachedValueBase implements C try { value = getUpToDateOrNull(); if (value != null) { - return value == NULL ? null : value; + return value == ObjectUtils.NULL ? null : value; } CachedValueProvider.Result result = myProvider.compute(); diff --git a/platform/platform-impl/src/com/intellij/util/ParameterizedCachedValueImpl.java b/platform/platform-impl/src/com/intellij/util/ParameterizedCachedValueImpl.java index e83faa460ad2..32aa6f157f11 100644 --- a/platform/platform-impl/src/com/intellij/util/ParameterizedCachedValueImpl.java +++ b/platform/platform-impl/src/com/intellij/util/ParameterizedCachedValueImpl.java @@ -30,6 +30,8 @@ import com.intellij.psi.util.ParameterizedCachedValueProvider; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import static com.intellij.util.ObjectUtils.*; + public abstract class ParameterizedCachedValueImpl extends CachedValueBase implements ParameterizedCachedValue { private final ParameterizedCachedValueProvider myProvider; diff --git a/platform/util/src/com/intellij/openapi/util/NullableLazyKey.java b/platform/util/src/com/intellij/openapi/util/NullableLazyKey.java index 7b17675b3c3c..a4e4924f2eee 100644 --- a/platform/util/src/com/intellij/openapi/util/NullableLazyKey.java +++ b/platform/util/src/com/intellij/openapi/util/NullableLazyKey.java @@ -16,6 +16,7 @@ package com.intellij.openapi.util; import com.intellij.util.NullableFunction; +import com.intellij.util.ObjectUtils; import org.jetbrains.annotations.NonNls; import org.jetbrains.annotations.Nullable; @@ -23,7 +24,6 @@ import org.jetbrains.annotations.Nullable; * @author peter */ public class NullableLazyKey extends Key{ - private static final Object NULL = new Object(); private final NullableFunction myFunction; private NullableLazyKey(@NonNls String name, final NullableFunction function) { @@ -36,9 +36,9 @@ public class NullableLazyKey extends Key{ T data = h.getUserData(this); if (data == null) { data = myFunction.fun(h); - h.putUserData(this, data == null ? (T)NULL : data); + h.putUserData(this, data == null ? (T)ObjectUtils.NULL : data); } - return data == NULL ? null : data; + return data == ObjectUtils.NULL ? null : data; } public static NullableLazyKey create(@NonNls String name, final NullableFunction function) { diff --git a/platform/util/src/com/intellij/util/ObjectUtils.java b/platform/util/src/com/intellij/util/ObjectUtils.java index 82adc4900eb9..bf0c2de574a9 100644 --- a/platform/util/src/com/intellij/util/ObjectUtils.java +++ b/platform/util/src/com/intellij/util/ObjectUtils.java @@ -25,6 +25,8 @@ public class ObjectUtils { private ObjectUtils() { } + public static final Object NULL = new Object(); + @NotNull public static T assertNotNull(@Nullable final T t) { return _assertNotNull(t); diff --git a/platform/util/src/com/intellij/util/containers/FactoryMap.java b/platform/util/src/com/intellij/util/containers/FactoryMap.java index 0133310a92ca..08395cbd08df 100644 --- a/platform/util/src/com/intellij/util/containers/FactoryMap.java +++ b/platform/util/src/com/intellij/util/containers/FactoryMap.java @@ -21,11 +21,12 @@ import org.jetbrains.annotations.Nullable; import java.util.*; import java.util.HashSet; +import static com.intellij.util.ObjectUtils.NULL; + /** * @author peter */ public abstract class FactoryMap implements Map { - static final Object NULL = new Object(); protected Map myMap; protected Map createMap() { diff --git a/platform/util/src/com/intellij/util/containers/SoftFactoryMap.java b/platform/util/src/com/intellij/util/containers/SoftFactoryMap.java index 24748e7d9501..17ba065ea122 100644 --- a/platform/util/src/com/intellij/util/containers/SoftFactoryMap.java +++ b/platform/util/src/com/intellij/util/containers/SoftFactoryMap.java @@ -19,6 +19,8 @@ package com.intellij.util.containers; import java.lang.ref.SoftReference; import java.util.concurrent.ConcurrentMap; +import static com.intellij.util.ObjectUtils.NULL; + /** * @author peter */ @@ -32,15 +34,15 @@ public abstract class SoftFactoryMap { if (reference != null) { final V v = reference.get(); if (v != null) { - return v == FactoryMap.NULL ? null : v; + return v == NULL ? null : v; } } final V value = create(key); - SoftReference valueRef = new SoftReference(value == null ? (V)FactoryMap.NULL : value); + SoftReference valueRef = new SoftReference(value == null ? (V)NULL : value); SoftReference prevRef = myMap.putIfAbsent(key, valueRef); V prev = prevRef == null ? null : prevRef.get(); - return prev == null || prev == FactoryMap.NULL? value : prev; + return prev == null || prev == NULL ? value : prev; } public final boolean containsKey(T key) { diff --git a/platform/util/src/com/intellij/util/containers/WeakFactoryMap.java b/platform/util/src/com/intellij/util/containers/WeakFactoryMap.java index e01baa50b28a..2df74cd24c94 100644 --- a/platform/util/src/com/intellij/util/containers/WeakFactoryMap.java +++ b/platform/util/src/com/intellij/util/containers/WeakFactoryMap.java @@ -18,6 +18,8 @@ package com.intellij.util.containers; import java.lang.ref.WeakReference; import java.util.concurrent.ConcurrentMap; +import static com.intellij.util.ObjectUtils.NULL; + /** * @author peter */ @@ -31,15 +33,15 @@ public abstract class WeakFactoryMap { if (reference != null) { final V v = reference.get(); if (v != null) { - return v == FactoryMap.NULL ? null : v; + return v == NULL ? null : v; } } final V value = create(key); - WeakReference valueRef = new WeakReference(value == null ? (V)FactoryMap.NULL : value); + WeakReference valueRef = new WeakReference(value == null ? (V)NULL : value); WeakReference prevRef = myMap.putIfAbsent(key, valueRef); V prev = prevRef == null ? null : prevRef.get(); - return prev == null || prev == FactoryMap.NULL? value : prev; + return prev == null || prev == NULL ? value : prev; } public final boolean containsKey(T key) {