Revert "Use lazySync instead of lazyPub to avoid raise on creation LightClasses"
The commit causes deadlock in 183 branch in KotlinLintTestGenerated test.
This reverts commit d6c54b84
This commit is contained in:
+6
-3
@@ -56,10 +56,13 @@ class LightClassDataProviderForClassOrObject(
|
||||
}
|
||||
|
||||
override fun compute(): CachedValueProvider.Result<LightClassDataHolder.ForClass>? {
|
||||
val trackerService = KotlinModificationTrackerService.getInstance(classOrObject.project)
|
||||
return CachedValueProvider.Result.create(
|
||||
computeLightClassData(),
|
||||
if (classOrObject.isLocal) trackerService.modificationTracker else trackerService.outOfBlockModificationTracker
|
||||
computeLightClassData(),
|
||||
if (classOrObject.isLocal()) {
|
||||
KotlinModificationTrackerService.getInstance(classOrObject.project).modificationTracker
|
||||
} else {
|
||||
KotlinModificationTrackerService.getInstance(classOrObject.project).outOfBlockModificationTracker
|
||||
}
|
||||
)
|
||||
}
|
||||
|
||||
|
||||
@@ -19,17 +19,12 @@ package org.jetbrains.kotlin.asJava.classes
|
||||
import com.intellij.psi.PsiClass
|
||||
import com.intellij.psi.PsiManager
|
||||
import org.jetbrains.kotlin.asJava.builder.LightClassData
|
||||
import org.jetbrains.kotlin.asJava.elements.KtLightField
|
||||
import org.jetbrains.kotlin.asJava.elements.KtLightMethod
|
||||
|
||||
abstract class KtLazyLightClass(manager: PsiManager) : KtLightClassBase(manager) {
|
||||
abstract val lightClassData: LightClassData
|
||||
|
||||
override val clsDelegate: PsiClass by lazyPub { lightClassData.clsDelegate }
|
||||
|
||||
private val _getOwnFields: List<KtLightField> by lazySync { lightClassData.getOwnFields(this) }
|
||||
override fun getOwnFields() = _getOwnFields
|
||||
|
||||
private val _getOwnMethods: List<KtLightMethod> by lazySync { lightClassData.getOwnMethods(this) }
|
||||
override fun getOwnMethods() = _getOwnMethods
|
||||
override fun getOwnFields() = lightClassData.getOwnFields(this)
|
||||
override fun getOwnMethods() = lightClassData.getOwnMethods(this)
|
||||
}
|
||||
+1
-3
@@ -97,9 +97,7 @@ abstract class KtLightClassForSourceDeclaration(
|
||||
abstract override fun getQualifiedName(): String?
|
||||
|
||||
override val lightClassData: LightClassData
|
||||
get() = _findLightClassData
|
||||
|
||||
private val _findLightClassData: LightClassData by lazySync { findLightClassData() }
|
||||
get() = findLightClassData()
|
||||
|
||||
protected open fun findLightClassData() = getLightClassDataHolder().findDataForClassOrObject(classOrObject)
|
||||
|
||||
|
||||
@@ -20,8 +20,6 @@ import org.jetbrains.kotlin.resolve.descriptorUtil.fqNameUnsafe
|
||||
// NOTE: avoid using blocking lazy in light classes, it leads to deadlocks
|
||||
fun <T> lazyPub(initializer: () -> T) = lazy(LazyThreadSafetyMode.PUBLICATION, initializer)
|
||||
|
||||
fun <T> lazySync(initializer: () -> T) = lazy(LazyThreadSafetyMode.SYNCHRONIZED, initializer)
|
||||
|
||||
fun LightElement.cannotModify(): Nothing {
|
||||
throw IncorrectOperationException("Modification not implemented.")
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user