LightClassDataHolder: refactor, extract subinterfaces

This commit is contained in:
Pavel V. Talanov
2017-03-15 14:36:16 +03:00
parent 6d595e30c2
commit 04591bb938
8 changed files with 56 additions and 43 deletions
@@ -60,16 +60,16 @@ class IDELightClassGenerationSupport(private val project: Project) : LightClassG
private val scopeFileComparator = JavaElementFinder.byClasspathComparator(GlobalSearchScope.allScope(project))
private val psiManager: PsiManager = PsiManager.getInstance(project)
override fun createDataHolderForClassOrObject(classOrObject: KtClassOrObject, builder: LightClassBuilder): LightClassDataHolder {
override fun createDataHolderForClass(classOrObject: KtClassOrObject, builder: LightClassBuilder): LightClassDataHolder.ForClass {
return if (classOrObject.isLocal) {
LazyLightClassDataHolder(
LazyLightClassDataHolder.ForClass(
builder,
exactContextProvider = { IDELightClassContexts.contextForLocalClassOrObject(classOrObject) },
dummyContextProvider = null
)
}
else {
LazyLightClassDataHolder(
LazyLightClassDataHolder.ForClass(
builder,
exactContextProvider = { IDELightClassContexts.contextForNonLocalClassOrObject(classOrObject) },
dummyContextProvider = { IDELightClassContexts.lightContextForClassOrObject(classOrObject) }
@@ -78,12 +78,12 @@ class IDELightClassGenerationSupport(private val project: Project) : LightClassG
}
override fun createDataHolderForFacade(files: Collection<KtFile>, builder: LightClassBuilder): LightClassDataHolder {
override fun createDataHolderForFacade(files: Collection<KtFile>, builder: LightClassBuilder): LightClassDataHolder.ForFacade {
assert(!files.isEmpty()) { "No files in facade" }
val sortedFiles = files.sortedWith(scopeFileComparator)
return LazyLightClassDataHolder(
return LazyLightClassDataHolder.ForFacade(
builder,
exactContextProvider = { IDELightClassContexts.contextForFacade(sortedFiles) },
dummyContextProvider = { IDELightClassContexts.lightContextForFacade(sortedFiles) }
@@ -31,7 +31,7 @@ import org.jetbrains.kotlin.psi.KtClassOrObject
typealias LightClassContextProvider = () -> LightClassConstructionContext
class LazyLightClassDataHolder(
sealed class LazyLightClassDataHolder(
builder: LightClassBuilder,
exactContextProvider: LightClassContextProvider,
dummyContextProvider: LightClassContextProvider?
@@ -57,10 +57,18 @@ class LazyLightClassDataHolder(
findDelegate(lightClassBuilderResult.stub)
}
override fun findDataForClassOrObject(classOrObject: KtClassOrObject): LightClassData =
LazyLightClassData(relyOnDummySupertypes = classOrObject.getSuperTypeList() == null) { lightClassBuilderResult ->
lightClassBuilderResult.stub.findDelegate(classOrObject)
}
class ForClass(
builder: LightClassBuilder, exactContextProvider: LightClassContextProvider, dummyContextProvider: LightClassContextProvider?
) : LazyLightClassDataHolder(builder, exactContextProvider, dummyContextProvider), LightClassDataHolder.ForClass {
override fun findDataForClassOrObject(classOrObject: KtClassOrObject): LightClassData =
LazyLightClassData(relyOnDummySupertypes = classOrObject.getSuperTypeList() == null) { lightClassBuilderResult ->
lightClassBuilderResult.stub.findDelegate(classOrObject)
}
}
class ForFacade(
builder: LightClassBuilder, exactContextProvider: LightClassContextProvider, dummyContextProvider: LightClassContextProvider?
) : LazyLightClassDataHolder(builder, exactContextProvider, dummyContextProvider), LightClassDataHolder.ForFacade
private inner class LazyLightClassData(
private val relyOnDummySupertypes: Boolean,