[light classes] drop old light classes and backend: iteration #5
drop LightClassDataHolder from LightClassGenerationSupport ^KT-48773
This commit is contained in:
+15
-13
@@ -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
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
+3
-3
@@ -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> =
|
||||
|
||||
Reference in New Issue
Block a user