diff --git a/java/java-psi-api/src/com/intellij/psi/LambdaUtil.java b/java/java-psi-api/src/com/intellij/psi/LambdaUtil.java index 5a0520e24ac8..e6021cb6c052 100644 --- a/java/java-psi-api/src/com/intellij/psi/LambdaUtil.java +++ b/java/java-psi-api/src/com/intellij/psi/LambdaUtil.java @@ -157,8 +157,7 @@ public class LambdaUtil { @Contract("null -> null") public static @Nullable MethodSignature getFunction(final PsiClass psiClass) { if (isPlainInterface(psiClass)) { - return CachedValuesManager.getCachedValue(psiClass, () -> CachedValueProvider.Result - .create(calcFunction(psiClass), PsiModificationTracker.MODIFICATION_COUNT)); + return CachedValuesManager.getProjectPsiDependentCache(psiClass, () -> calcFunction(psiClass)); } return null; } diff --git a/java/java-psi-impl/src/com/intellij/psi/impl/source/PsiTypeElementImpl.java b/java/java-psi-impl/src/com/intellij/psi/impl/source/PsiTypeElementImpl.java index 5560d1471baa..1387159a8fa6 100644 --- a/java/java-psi-impl/src/com/intellij/psi/impl/source/PsiTypeElementImpl.java +++ b/java/java-psi-impl/src/com/intellij/psi/impl/source/PsiTypeElementImpl.java @@ -71,8 +71,7 @@ public class PsiTypeElementImpl extends CompositePsiElement implements PsiTypeEl } private TypeInfo getTypeInfo() { - return CachedValuesManager.getCachedValue( - this, () -> CachedValueProvider.Result.create(calculateTypeInfo(), PsiModificationTracker.MODIFICATION_COUNT)); + return CachedValuesManager.getProjectPsiDependentCache(this, this::calculateTypeInfo); } private @NotNull TypeInfo calculateTypeInfo() { diff --git a/java/java-psi-impl/src/com/intellij/psi/impl/source/resolve/JavaResolveCache.java b/java/java-psi-impl/src/com/intellij/psi/impl/source/resolve/JavaResolveCache.java index 53a01677256a..6cfc2a256b15 100644 --- a/java/java-psi-impl/src/com/intellij/psi/impl/source/resolve/JavaResolveCache.java +++ b/java/java-psi-impl/src/com/intellij/psi/impl/source/resolve/JavaResolveCache.java @@ -16,9 +16,7 @@ import com.intellij.psi.impl.AnyPsiChangeListener; import com.intellij.psi.impl.PsiManagerImpl; import com.intellij.psi.impl.source.resolve.graphInference.PsiPolyExpressionUtil; import com.intellij.psi.infos.MethodCandidateInfo; -import com.intellij.psi.util.CachedValueProvider; import com.intellij.psi.util.CachedValuesManager; -import com.intellij.psi.util.PsiModificationTracker; import com.intellij.util.ConcurrencyUtil; import com.intellij.util.Function; import com.intellij.util.containers.ContainerUtil; @@ -64,8 +62,7 @@ public class JavaResolveCache { return f.fun(expr); } - return CachedValuesManager.getCachedValue(expr, () -> - CachedValueProvider.Result.create(f.fun(expr), PsiModificationTracker.MODIFICATION_COUNT)); + return CachedValuesManager.getProjectPsiDependentCache(expr, () -> f.fun(expr)); } @Nullable diff --git a/platform/core-api/src/com/intellij/psi/util/CachedValuesManager.java b/platform/core-api/src/com/intellij/psi/util/CachedValuesManager.java index 36f0d2e71a73..d58a74e87fda 100644 --- a/platform/core-api/src/com/intellij/psi/util/CachedValuesManager.java +++ b/platform/core-api/src/com/intellij/psi/util/CachedValuesManager.java @@ -14,6 +14,7 @@ import org.jetbrains.annotations.Nullable; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ConcurrentMap; +import java.util.function.Supplier; /** * A service used to create and store {@link CachedValue} objects.
@@ -119,6 +120,16 @@ public abstract class CachedValuesManager { return getCachedValue(psi, getKeyForClass(provider.getClass(), globalKeyForProvider), provider); } + /** + * @return a cached value computed via the given provider, + * associated with the given PSI element, + * recalculated after any PSI change in the project. + */ + public static