Simplify LazyLightClassDataHolder

- Use only stubs instead of full results in LazyLightClassData
- Store only stubs for inexactStub
This commit is contained in:
Denis Zharkov
2017-11-13 19:34:24 +03:00
parent aaee401240
commit f1cbf21f96
@@ -45,28 +45,28 @@ sealed class LazyLightClassDataHolder(
private val exactResult: LightClassBuilderResult by exactResultLazyValue private val exactResult: LightClassBuilderResult by exactResultLazyValue
private val lazyInexactResult by lazyPub { private val lazyInexactStub by lazyPub {
dummyContextProvider?.let { provider -> provider()?.let { context -> builder.invoke(context) } } dummyContextProvider?.let { provider -> provider()?.let { context -> builder.invoke(context).stub } }
} }
private val inexactResult: LightClassBuilderResult? private val inexactStub: PsiJavaFileStub?
get() = if (exactResultLazyValue.isInitialized()) null else lazyInexactResult get() = if (exactResultLazyValue.isInitialized()) null else lazyInexactStub
override val javaFileStub get() = exactResult.stub override val javaFileStub get() = exactResult.stub
override val extraDiagnostics get() = exactResult.diagnostics override val extraDiagnostics get() = exactResult.diagnostics
// for facade or defaultImpls // for facade or defaultImpls
override fun findData(findDelegate: (PsiJavaFileStub) -> PsiClass): LightClassData = override fun findData(findDelegate: (PsiJavaFileStub) -> PsiClass): LightClassData =
LazyLightClassData { lightClassBuilderResult -> LazyLightClassData { stub ->
findDelegate(lightClassBuilderResult.stub) findDelegate(stub)
} }
class ForClass( class ForClass(
builder: LightClassBuilder, exactContextProvider: ExactLightClassContextProvider, dummyContextProvider: DummyLightClassContextProvider builder: LightClassBuilder, exactContextProvider: ExactLightClassContextProvider, dummyContextProvider: DummyLightClassContextProvider
) : LazyLightClassDataHolder(builder, exactContextProvider, dummyContextProvider), LightClassDataHolder.ForClass { ) : LazyLightClassDataHolder(builder, exactContextProvider, dummyContextProvider), LightClassDataHolder.ForClass {
override fun findDataForClassOrObject(classOrObject: KtClassOrObject): LightClassData = override fun findDataForClassOrObject(classOrObject: KtClassOrObject): LightClassData =
LazyLightClassData { lightClassBuilderResult -> LazyLightClassData { stub ->
lightClassBuilderResult.stub.findDelegate(classOrObject) stub.findDelegate(classOrObject)
} }
} }
@@ -79,11 +79,11 @@ sealed class LazyLightClassDataHolder(
) : LazyLightClassDataHolder(builder, exactContextProvider, dummyContextProvider), LightClassDataHolder.ForScript ) : LazyLightClassDataHolder(builder, exactContextProvider, dummyContextProvider), LightClassDataHolder.ForScript
private inner class LazyLightClassData( private inner class LazyLightClassData(
findDelegate: (LightClassBuilderResult) -> PsiClass findDelegate: (PsiJavaFileStub) -> PsiClass
) : LightClassData { ) : LightClassData {
override val clsDelegate: PsiClass by lazyPub { findDelegate(exactResult) } override val clsDelegate: PsiClass by lazyPub { findDelegate(javaFileStub) }
private val dummyDelegate: PsiClass? by lazyPub { inexactResult?.let(findDelegate) } private val dummyDelegate: PsiClass? by lazyPub { inexactStub?.let(findDelegate) }
override fun getOwnFields(containingClass: KtLightClass): List<KtLightField> { override fun getOwnFields(containingClass: KtLightClass): List<KtLightField> {
if (dummyDelegate == null) return KtLightFieldImpl.fromClsFields(clsDelegate, containingClass) if (dummyDelegate == null) return KtLightFieldImpl.fromClsFields(clsDelegate, containingClass)