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
@@ -14,7 +14,7 @@ import com.intellij.psi.impl.java.stubs.PsiJavaFileStub
import org.jetbrains.kotlin.asJava.LightClassBuilder
import org.jetbrains.kotlin.asJava.builder.*
import org.jetbrains.kotlin.asJava.classes.KtLightClass
import org.jetbrains.kotlin.asJava.classes.lazySync
import org.jetbrains.kotlin.asJava.classes.lazyPub
import org.jetbrains.kotlin.asJava.elements.KtLightField
import org.jetbrains.kotlin.asJava.elements.KtLightFieldImpl
import org.jetbrains.kotlin.asJava.elements.KtLightMethod
@@ -43,11 +43,9 @@ sealed class LazyLightClassDataHolder(
cache.computeIfAbsent(lazyLightClassDataHolder, diagnostics)
}
private val _builderExactContextProvider: LightClassBuilderResult by lazySync { builder(exactContextProvider()) }
private val exactResultLazyValue = lazyPub { builder(exactContextProvider()).stub }
private val exactResultLazyValue = lazySync { _builderExactContextProvider.stub }
private val lazyInexactStub by lazySync {
private val lazyInexactStub by lazyPub {
dummyContextProvider?.let { provider -> provider()?.let { context -> builder.invoke(context).stub } }
}
@@ -58,7 +56,7 @@ sealed class LazyLightClassDataHolder(
override val extraDiagnostics: Diagnostics
get() = diagnosticsHolderProvider().getOrCompute(this) {
_builderExactContextProvider.diagnostics
builder(exactContextProvider()).diagnostics
// Force lazy diagnostics computation because otherwise a lot of memory is retained by computation.
// NB: Laziness here is not crucial anyway since somebody already has requested diagnostics and we hope one will use them
.takeUnless { it.isEmpty() } ?: Diagnostics.EMPTY
@@ -102,9 +100,9 @@ sealed class LazyLightClassDataHolder(
private inner class LazyLightClassData(
findDelegate: (PsiJavaFileStub) -> PsiClass
) : LightClassData {
override val clsDelegate: PsiClass by lazySync { findDelegate(javaFileStub) }
override val clsDelegate: PsiClass by lazyPub { findDelegate(javaFileStub) }
private val dummyDelegate: PsiClass? by lazySync { inexactStub?.let(findDelegate) }
private val dummyDelegate: PsiClass? by lazyPub { inexactStub?.let(findDelegate) }
override fun getOwnFields(containingClass: KtLightClass): List<KtLightField> {
if (dummyDelegate == null) return KtLightFieldImpl.fromClsFields(clsDelegate, containingClass)