[light classes] drop old light classes and backend: iteration #5

drop LightClassDataHolder from LightClassGenerationSupport

^KT-48773
This commit is contained in:
Dmitry Gridin
2022-06-22 13:08:26 +02:00
committed by Space
parent 9d1fe58f9d
commit fa77c618bd
4 changed files with 36 additions and 40 deletions
@@ -23,6 +23,7 @@ import org.jetbrains.kotlin.psi.KtClassOrObject
import org.jetbrains.kotlin.psi.KtFile
import org.jetbrains.kotlin.psi.KtScript
import org.jetbrains.kotlin.resolve.diagnostics.Diagnostics
import org.jetbrains.kotlin.utils.addToStdlib.cast
private val JAVA_API_STUB_FOR_SCRIPT = Key.create<CachedValue<LightClassDataHolder.ForScript>>("JAVA_API_STUB_FOR_SCRIPT")
private val JAVA_API_STUB = Key.create<CachedValue<LightClassDataHolder.ForClass>>("JAVA_API_STUB")
@@ -50,22 +51,23 @@ class CliExtraDiagnosticsProvider : KotlinExtraDiagnosticsProvider {
.findFilesForFacade(facadeFqName, moduleScope)
.ifEmpty { return Diagnostics.EMPTY }
return LightClassGenerationSupport.getInstance(project).createDataHolderForFacade(files) { constructionContext ->
buildLightClass(facadeFqName.parent(), files, ClassFilterForFacade, constructionContext) generate@{ state, files ->
val representativeFile = files.first()
val fileClassInfo = JvmFileClassUtil.getFileClassInfoNoResolve(representativeFile)
if (!fileClassInfo.withJvmMultifileClass) {
val codegen = state.factory.forPackage(representativeFile.packageFqName, files)
return LightClassGenerationSupport.getInstance(project).cast<CliLightClassGenerationSupport>()
.createDataHolderForFacade { constructionContext ->
buildLightClass(facadeFqName.parent(), files, ClassFilterForFacade, constructionContext) generate@{ state, files ->
val representativeFile = files.first()
val fileClassInfo = JvmFileClassUtil.getFileClassInfoNoResolve(representativeFile)
if (!fileClassInfo.withJvmMultifileClass) {
val codegen = state.factory.forPackage(representativeFile.packageFqName, files)
codegen.generate()
state.factory.done()
return@generate
}
val codegen = state.factory.forMultifileClass(facadeFqName, files)
codegen.generate()
state.factory.done()
return@generate
}
val codegen = state.factory.forMultifileClass(facadeFqName, files)
codegen.generate()
state.factory.done()
}
}.extraDiagnostics
}.extraDiagnostics
}
}
@@ -93,7 +93,7 @@ class CliLightClassGenerationSupport(
return ultraLightSupport
}
override fun createDataHolderForClass(classOrObject: KtClassOrObject, builder: LightClassBuilder): LightClassDataHolder.ForClass {
fun createDataHolderForClass(classOrObject: KtClassOrObject, builder: LightClassBuilder): LightClassDataHolder.ForClass {
//force resolve companion for light class generation
traceHolder.bindingContext.get(BindingContext.CLASS, classOrObject)?.companionObjectDescriptor
@@ -104,12 +104,12 @@ class CliLightClassGenerationSupport(
return LightClassDataHolderImpl(diagnostics)
}
override fun createDataHolderForFacade(files: Collection<KtFile>, builder: LightClassBuilder): LightClassDataHolder.ForFacade {
fun createDataHolderForFacade(builder: LightClassBuilder): LightClassDataHolder.ForFacade {
val (_, _, diagnostics) = builder(getContext())
return LightClassDataHolderImpl(diagnostics)
}
override fun createDataHolderForScript(script: KtScript, builder: LightClassBuilder): LightClassDataHolder.ForScript {
fun createDataHolderForScript(builder: LightClassBuilder): LightClassDataHolder.ForScript {
val (_, _, diagnostics) = builder(getContext())
return LightClassDataHolderImpl(diagnostics)
}
@@ -19,6 +19,7 @@ import org.jetbrains.kotlin.codegen.state.GenerationState
import org.jetbrains.kotlin.fileClasses.JvmFileClassUtil
import org.jetbrains.kotlin.psi.*
import org.jetbrains.kotlin.psi.psiUtil.isAncestor
import org.jetbrains.kotlin.utils.addToStdlib.cast
import org.jetbrains.org.objectweb.asm.Type
internal class LightClassDataProviderForClassOrObject(
@@ -27,7 +28,7 @@ internal class LightClassDataProviderForClassOrObject(
private fun computeLightClassData(): LightClassDataHolder.ForClass {
val file = classOrObject.containingKtFile
val packageFqName = file.packageFqName
return LightClassGenerationSupport.getInstance(classOrObject.project)
return LightClassGenerationSupport.getInstance(classOrObject.project).cast<CliLightClassGenerationSupport>()
.createDataHolderForClass(classOrObject) { constructionContext ->
buildLightClass(
packageFqName,
@@ -44,7 +45,7 @@ internal class LightClassDataProviderForClassOrObject(
}
}
override fun compute(): CachedValueProvider.Result<LightClassDataHolder.ForClass>? {
override fun compute(): CachedValueProvider.Result<LightClassDataHolder.ForClass> {
val trackerService = KotlinModificationTrackerService.getInstance(classOrObject.project)
return CachedValueProvider.Result.create(
computeLightClassData(),
@@ -52,9 +53,7 @@ internal class LightClassDataProviderForClassOrObject(
)
}
override fun toString(): String {
return this::class.java.name + " for " + classOrObject.name
}
override fun toString(): String = this::class.java.name + " for " + classOrObject.name
}
private class ClassFilterForClassOrObject(private val classOrObject: KtClassOrObject) : GenerationState.GenerateClassFilter() {
@@ -102,19 +101,21 @@ private class ClassFilterForClassOrObject(private val classOrObject: KtClassOrOb
internal class LightClassDataProviderForScript(private val script: KtScript) : CachedValueProvider<LightClassDataHolder.ForScript> {
private fun computeLightClassData(): LightClassDataHolder.ForScript {
return LightClassGenerationSupport.getInstance(script.project).createDataHolderForScript(script) { constructionContext ->
buildLightClass(
script.fqName.parent(),
listOf(script.containingKtFile),
ClassFilterForScript(script),
constructionContext
) generate@{ state, files ->
val scriptFile = files.first()
val codegen = state.factory.forPackage(scriptFile.packageFqName, files)
codegen.generate()
state.factory.done()
return LightClassGenerationSupport.getInstance(script.project)
.cast<CliLightClassGenerationSupport>()
.createDataHolderForScript { constructionContext ->
buildLightClass(
script.fqName.parent(),
listOf(script.containingKtFile),
ClassFilterForScript(script),
constructionContext
) generate@{ state, files ->
val scriptFile = files.first()
val codegen = state.factory.forPackage(scriptFile.packageFqName, files)
codegen.generate()
state.factory.done()
}
}
}
}
override fun compute(): CachedValueProvider.Result<LightClassDataHolder.ForScript> =