From 0928a5be08e4f2a70c285a5b80db7b21f63dd509 Mon Sep 17 00:00:00 2001 From: Dmitrii Gridin Date: Wed, 1 Feb 2023 20:35:59 +0100 Subject: [PATCH] [SLC] migrate from AtomicFieldUpdater to AtomicReferenceFieldUpdater ^KT-56046 --- .../classes/symbol/annotations/LazyAnnotationsBox.kt | 8 ++++++-- .../classes/symbol/annotations/SimpleAnnotationsBox.kt | 8 ++++++-- .../classes/symbol/modifierLists/LazyModifiersBox.kt | 10 +++++++--- 3 files changed, 19 insertions(+), 7 deletions(-) diff --git a/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/annotations/LazyAnnotationsBox.kt b/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/annotations/LazyAnnotationsBox.kt index a161071b1af..b4598551147 100644 --- a/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/annotations/LazyAnnotationsBox.kt +++ b/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/annotations/LazyAnnotationsBox.kt @@ -7,11 +7,11 @@ package org.jetbrains.kotlin.light.classes.symbol.annotations import com.intellij.psi.PsiAnnotation import com.intellij.psi.PsiModifierList -import com.intellij.util.concurrency.AtomicFieldUpdater import org.jetbrains.kotlin.light.classes.symbol.toArrayIfNotEmptyOrDefault import org.jetbrains.kotlin.name.ClassId import org.jetbrains.kotlin.name.StandardClassIds import org.jetbrains.kotlin.utils.SmartList +import java.util.concurrent.atomic.AtomicReferenceFieldUpdater internal class LazyAnnotationsBox( private val annotationsProvider: AnnotationsProvider, @@ -83,7 +83,11 @@ internal class LazyAnnotationsBox( } companion object { - private val fieldUpdater = AtomicFieldUpdater.forFieldOfType(LazyAnnotationsBox::class.java, Collection::class.java) + private val fieldUpdater = AtomicReferenceFieldUpdater.newUpdater( + /* tclass = */ LazyAnnotationsBox::class.java, + /* vclass = */ Collection::class.java, + /* fieldName = */ "cachedAnnotations", + ) /** * @see org.jetbrains.kotlin.fir.resolve.transformers.plugin.CompilerRequiredAnnotationsHelper diff --git a/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/annotations/SimpleAnnotationsBox.kt b/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/annotations/SimpleAnnotationsBox.kt index b548187999c..177a3af597f 100644 --- a/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/annotations/SimpleAnnotationsBox.kt +++ b/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/annotations/SimpleAnnotationsBox.kt @@ -7,8 +7,8 @@ package org.jetbrains.kotlin.light.classes.symbol.annotations import com.intellij.psi.PsiAnnotation import com.intellij.psi.PsiModifierList -import com.intellij.util.concurrency.AtomicFieldUpdater import org.jetbrains.kotlin.light.classes.symbol.toArrayIfNotEmptyOrDefault +import java.util.concurrent.atomic.AtomicReferenceFieldUpdater internal class SimpleAnnotationsBox(private val annotationsComputer: (PsiModifierList) -> Collection) : AnnotationsBox { @Volatile @@ -33,6 +33,10 @@ internal class SimpleAnnotationsBox(private val annotationsComputer: (PsiModifie ): PsiAnnotation? = getOrComputeAnnotations(owner).find { it.qualifiedName == qualifiedName } companion object { - private val fieldUpdater = AtomicFieldUpdater.forFieldOfType(SimpleAnnotationsBox::class.java, Collection::class.java) + private val fieldUpdater = AtomicReferenceFieldUpdater.newUpdater( + /* tclass = */ SimpleAnnotationsBox::class.java, + /* vclass = */ Collection::class.java, + /* fieldName = */ "cachedAnnotations", + ) } } diff --git a/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/modifierLists/LazyModifiersBox.kt b/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/modifierLists/LazyModifiersBox.kt index ff60673fbe5..75869c5317e 100644 --- a/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/modifierLists/LazyModifiersBox.kt +++ b/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/modifierLists/LazyModifiersBox.kt @@ -6,7 +6,6 @@ package org.jetbrains.kotlin.light.classes.symbol.modifierLists import com.intellij.psi.PsiModifier -import com.intellij.util.concurrency.AtomicFieldUpdater import kotlinx.collections.immutable.PersistentMap import kotlinx.collections.immutable.toPersistentHashMap import org.jetbrains.kotlin.analysis.api.symbols.markers.KtSymbolWithModality @@ -17,6 +16,7 @@ import org.jetbrains.kotlin.light.classes.symbol.computeSimpleModality import org.jetbrains.kotlin.light.classes.symbol.toPsiVisibilityForMember import org.jetbrains.kotlin.light.classes.symbol.withSymbol import org.jetbrains.kotlin.utils.keysToMap +import java.util.concurrent.atomic.AtomicReferenceFieldUpdater internal typealias LazyModifiersComputer = (modifier: String) -> Map? @@ -36,13 +36,17 @@ internal class LazyModifiersBox( currentMap[modifier]?.let { return it } val newMap = currentMap.putAll(newValues) - } while (fieldUpdater.compareAndSet(/* owner = */ this, /* expected = */ currentMap, /* newValue = */ newMap)) + } while (fieldUpdater.weakCompareAndSet(/* obj = */ this, /* expect = */ currentMap, /* update = */ newMap)) return newValues[modifier] ?: error("Inconsistent state: $modifier") } companion object { - private val fieldUpdater = AtomicFieldUpdater.forFieldOfType(LazyModifiersBox::class.java, PersistentMap::class.java) + private val fieldUpdater = AtomicReferenceFieldUpdater.newUpdater( + /* tclass = */ LazyModifiersBox::class.java, + /* vclass = */ PersistentMap::class.java, + /* fieldName = */ "modifiersMapReference", + ) internal val VISIBILITY_MODIFIERS = setOf(PsiModifier.PUBLIC, PsiModifier.PACKAGE_LOCAL, PsiModifier.PROTECTED, PsiModifier.PRIVATE) internal val VISIBILITY_MODIFIERS_MAP: PersistentMap =