Simplify LazyLightClassDataHolder
- Use only stubs instead of full results in LazyLightClassData - Store only stubs for inexactStub
This commit is contained in:
+11
-11
@@ -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)
|
||||||
|
|||||||
Reference in New Issue
Block a user