[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.KtFile
|
||||||
import org.jetbrains.kotlin.psi.KtScript
|
import org.jetbrains.kotlin.psi.KtScript
|
||||||
import org.jetbrains.kotlin.resolve.diagnostics.Diagnostics
|
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_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")
|
private val JAVA_API_STUB = Key.create<CachedValue<LightClassDataHolder.ForClass>>("JAVA_API_STUB")
|
||||||
@@ -50,22 +51,23 @@ class CliExtraDiagnosticsProvider : KotlinExtraDiagnosticsProvider {
|
|||||||
.findFilesForFacade(facadeFqName, moduleScope)
|
.findFilesForFacade(facadeFqName, moduleScope)
|
||||||
.ifEmpty { return Diagnostics.EMPTY }
|
.ifEmpty { return Diagnostics.EMPTY }
|
||||||
|
|
||||||
return LightClassGenerationSupport.getInstance(project).createDataHolderForFacade(files) { constructionContext ->
|
return LightClassGenerationSupport.getInstance(project).cast<CliLightClassGenerationSupport>()
|
||||||
buildLightClass(facadeFqName.parent(), files, ClassFilterForFacade, constructionContext) generate@{ state, files ->
|
.createDataHolderForFacade { constructionContext ->
|
||||||
val representativeFile = files.first()
|
buildLightClass(facadeFqName.parent(), files, ClassFilterForFacade, constructionContext) generate@{ state, files ->
|
||||||
val fileClassInfo = JvmFileClassUtil.getFileClassInfoNoResolve(representativeFile)
|
val representativeFile = files.first()
|
||||||
if (!fileClassInfo.withJvmMultifileClass) {
|
val fileClassInfo = JvmFileClassUtil.getFileClassInfoNoResolve(representativeFile)
|
||||||
val codegen = state.factory.forPackage(representativeFile.packageFqName, files)
|
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()
|
codegen.generate()
|
||||||
state.factory.done()
|
state.factory.done()
|
||||||
return@generate
|
|
||||||
}
|
}
|
||||||
|
}.extraDiagnostics
|
||||||
val codegen = state.factory.forMultifileClass(facadeFqName, files)
|
|
||||||
codegen.generate()
|
|
||||||
state.factory.done()
|
|
||||||
}
|
|
||||||
}.extraDiagnostics
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+3
-3
@@ -93,7 +93,7 @@ class CliLightClassGenerationSupport(
|
|||||||
return ultraLightSupport
|
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
|
//force resolve companion for light class generation
|
||||||
traceHolder.bindingContext.get(BindingContext.CLASS, classOrObject)?.companionObjectDescriptor
|
traceHolder.bindingContext.get(BindingContext.CLASS, classOrObject)?.companionObjectDescriptor
|
||||||
|
|
||||||
@@ -104,12 +104,12 @@ class CliLightClassGenerationSupport(
|
|||||||
return LightClassDataHolderImpl(diagnostics)
|
return LightClassDataHolderImpl(diagnostics)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun createDataHolderForFacade(files: Collection<KtFile>, builder: LightClassBuilder): LightClassDataHolder.ForFacade {
|
fun createDataHolderForFacade(builder: LightClassBuilder): LightClassDataHolder.ForFacade {
|
||||||
val (_, _, diagnostics) = builder(getContext())
|
val (_, _, diagnostics) = builder(getContext())
|
||||||
return LightClassDataHolderImpl(diagnostics)
|
return LightClassDataHolderImpl(diagnostics)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun createDataHolderForScript(script: KtScript, builder: LightClassBuilder): LightClassDataHolder.ForScript {
|
fun createDataHolderForScript(builder: LightClassBuilder): LightClassDataHolder.ForScript {
|
||||||
val (_, _, diagnostics) = builder(getContext())
|
val (_, _, diagnostics) = builder(getContext())
|
||||||
return LightClassDataHolderImpl(diagnostics)
|
return LightClassDataHolderImpl(diagnostics)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -19,6 +19,7 @@ import org.jetbrains.kotlin.codegen.state.GenerationState
|
|||||||
import org.jetbrains.kotlin.fileClasses.JvmFileClassUtil
|
import org.jetbrains.kotlin.fileClasses.JvmFileClassUtil
|
||||||
import org.jetbrains.kotlin.psi.*
|
import org.jetbrains.kotlin.psi.*
|
||||||
import org.jetbrains.kotlin.psi.psiUtil.isAncestor
|
import org.jetbrains.kotlin.psi.psiUtil.isAncestor
|
||||||
|
import org.jetbrains.kotlin.utils.addToStdlib.cast
|
||||||
import org.jetbrains.org.objectweb.asm.Type
|
import org.jetbrains.org.objectweb.asm.Type
|
||||||
|
|
||||||
internal class LightClassDataProviderForClassOrObject(
|
internal class LightClassDataProviderForClassOrObject(
|
||||||
@@ -27,7 +28,7 @@ internal class LightClassDataProviderForClassOrObject(
|
|||||||
private fun computeLightClassData(): LightClassDataHolder.ForClass {
|
private fun computeLightClassData(): LightClassDataHolder.ForClass {
|
||||||
val file = classOrObject.containingKtFile
|
val file = classOrObject.containingKtFile
|
||||||
val packageFqName = file.packageFqName
|
val packageFqName = file.packageFqName
|
||||||
return LightClassGenerationSupport.getInstance(classOrObject.project)
|
return LightClassGenerationSupport.getInstance(classOrObject.project).cast<CliLightClassGenerationSupport>()
|
||||||
.createDataHolderForClass(classOrObject) { constructionContext ->
|
.createDataHolderForClass(classOrObject) { constructionContext ->
|
||||||
buildLightClass(
|
buildLightClass(
|
||||||
packageFqName,
|
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)
|
val trackerService = KotlinModificationTrackerService.getInstance(classOrObject.project)
|
||||||
return CachedValueProvider.Result.create(
|
return CachedValueProvider.Result.create(
|
||||||
computeLightClassData(),
|
computeLightClassData(),
|
||||||
@@ -52,9 +53,7 @@ internal class LightClassDataProviderForClassOrObject(
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun toString(): String {
|
override fun toString(): String = this::class.java.name + " for " + classOrObject.name
|
||||||
return this::class.java.name + " for " + classOrObject.name
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private class ClassFilterForClassOrObject(private val classOrObject: KtClassOrObject) : GenerationState.GenerateClassFilter() {
|
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> {
|
internal class LightClassDataProviderForScript(private val script: KtScript) : CachedValueProvider<LightClassDataHolder.ForScript> {
|
||||||
private fun computeLightClassData(): LightClassDataHolder.ForScript {
|
private fun computeLightClassData(): LightClassDataHolder.ForScript {
|
||||||
return LightClassGenerationSupport.getInstance(script.project).createDataHolderForScript(script) { constructionContext ->
|
return LightClassGenerationSupport.getInstance(script.project)
|
||||||
buildLightClass(
|
.cast<CliLightClassGenerationSupport>()
|
||||||
script.fqName.parent(),
|
.createDataHolderForScript { constructionContext ->
|
||||||
listOf(script.containingKtFile),
|
buildLightClass(
|
||||||
ClassFilterForScript(script),
|
script.fqName.parent(),
|
||||||
constructionContext
|
listOf(script.containingKtFile),
|
||||||
) generate@{ state, files ->
|
ClassFilterForScript(script),
|
||||||
val scriptFile = files.first()
|
constructionContext
|
||||||
val codegen = state.factory.forPackage(scriptFile.packageFqName, files)
|
) generate@{ state, files ->
|
||||||
codegen.generate()
|
val scriptFile = files.first()
|
||||||
state.factory.done()
|
val codegen = state.factory.forPackage(scriptFile.packageFqName, files)
|
||||||
|
codegen.generate()
|
||||||
|
state.factory.done()
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun compute(): CachedValueProvider.Result<LightClassDataHolder.ForScript> =
|
override fun compute(): CachedValueProvider.Result<LightClassDataHolder.ForScript> =
|
||||||
|
|||||||
@@ -10,7 +10,6 @@ import com.intellij.openapi.project.Project
|
|||||||
import com.intellij.psi.PsiManager
|
import com.intellij.psi.PsiManager
|
||||||
import org.jetbrains.kotlin.asJava.builder.LightClassBuilderResult
|
import org.jetbrains.kotlin.asJava.builder.LightClassBuilderResult
|
||||||
import org.jetbrains.kotlin.asJava.builder.LightClassConstructionContext
|
import org.jetbrains.kotlin.asJava.builder.LightClassConstructionContext
|
||||||
import org.jetbrains.kotlin.asJava.builder.LightClassDataHolder
|
|
||||||
import org.jetbrains.kotlin.asJava.classes.*
|
import org.jetbrains.kotlin.asJava.classes.*
|
||||||
import org.jetbrains.kotlin.config.AnalysisFlags
|
import org.jetbrains.kotlin.config.AnalysisFlags
|
||||||
import org.jetbrains.kotlin.descriptors.DeclarationDescriptor
|
import org.jetbrains.kotlin.descriptors.DeclarationDescriptor
|
||||||
@@ -25,12 +24,6 @@ import org.jetbrains.kotlin.resolve.lazy.descriptors.LazyClassDescriptor
|
|||||||
typealias LightClassBuilder = (LightClassConstructionContext) -> LightClassBuilderResult
|
typealias LightClassBuilder = (LightClassConstructionContext) -> LightClassBuilderResult
|
||||||
|
|
||||||
abstract class LightClassGenerationSupport {
|
abstract class LightClassGenerationSupport {
|
||||||
abstract fun createDataHolderForClass(classOrObject: KtClassOrObject, builder: LightClassBuilder): LightClassDataHolder.ForClass
|
|
||||||
|
|
||||||
abstract fun createDataHolderForFacade(files: Collection<KtFile>, builder: LightClassBuilder): LightClassDataHolder.ForFacade
|
|
||||||
|
|
||||||
abstract fun createDataHolderForScript(script: KtScript, builder: LightClassBuilder): LightClassDataHolder.ForScript
|
|
||||||
|
|
||||||
abstract fun resolveToDescriptor(declaration: KtDeclaration): DeclarationDescriptor?
|
abstract fun resolveToDescriptor(declaration: KtDeclaration): DeclarationDescriptor?
|
||||||
|
|
||||||
abstract fun analyze(element: KtElement): BindingContext
|
abstract fun analyze(element: KtElement): BindingContext
|
||||||
|
|||||||
Reference in New Issue
Block a user