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:
Nikolay Krasko
2019-09-03 12:42:56 +03:00
parent d0c02a1a34
commit 63f43d9b2e
5 changed files with 15 additions and 23 deletions
@@ -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)
}
@@ -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.")
}