Revert "[light classes] drop old light classes and backend: iteration #5"
This reverts commit fa77c618bd.
This commit is contained in:
+13
-15
@@ -23,7 +23,6 @@ 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")
|
||||||
@@ -51,23 +50,22 @@ class CliExtraDiagnosticsProvider : KotlinExtraDiagnosticsProvider {
|
|||||||
.findFilesForFacade(facadeFqName, moduleScope)
|
.findFilesForFacade(facadeFqName, moduleScope)
|
||||||
.ifEmpty { return Diagnostics.EMPTY }
|
.ifEmpty { return Diagnostics.EMPTY }
|
||||||
|
|
||||||
return LightClassGenerationSupport.getInstance(project).cast<CliLightClassGenerationSupport>()
|
return LightClassGenerationSupport.getInstance(project).createDataHolderForFacade(files) { constructionContext ->
|
||||||
.createDataHolderForFacade { constructionContext ->
|
buildLightClass(facadeFqName.parent(), files, ClassFilterForFacade, constructionContext) generate@{ state, files ->
|
||||||
buildLightClass(facadeFqName.parent(), files, ClassFilterForFacade, constructionContext) generate@{ state, files ->
|
val representativeFile = files.first()
|
||||||
val representativeFile = files.first()
|
val fileClassInfo = JvmFileClassUtil.getFileClassInfoNoResolve(representativeFile)
|
||||||
val fileClassInfo = JvmFileClassUtil.getFileClassInfoNoResolve(representativeFile)
|
if (!fileClassInfo.withJvmMultifileClass) {
|
||||||
if (!fileClassInfo.withJvmMultifileClass) {
|
val codegen = state.factory.forPackage(representativeFile.packageFqName, files)
|
||||||
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
|
||||||
}
|
}
|
||||||
|
|
||||||
fun createDataHolderForClass(classOrObject: KtClassOrObject, builder: LightClassBuilder): LightClassDataHolder.ForClass {
|
override 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)
|
||||||
}
|
}
|
||||||
|
|
||||||
fun createDataHolderForFacade(builder: LightClassBuilder): LightClassDataHolder.ForFacade {
|
override fun createDataHolderForFacade(files: Collection<KtFile>, builder: LightClassBuilder): LightClassDataHolder.ForFacade {
|
||||||
val (_, _, diagnostics) = builder(getContext())
|
val (_, _, diagnostics) = builder(getContext())
|
||||||
return LightClassDataHolderImpl(diagnostics)
|
return LightClassDataHolderImpl(diagnostics)
|
||||||
}
|
}
|
||||||
|
|
||||||
fun createDataHolderForScript(builder: LightClassBuilder): LightClassDataHolder.ForScript {
|
override fun createDataHolderForScript(script: KtScript, builder: LightClassBuilder): LightClassDataHolder.ForScript {
|
||||||
val (_, _, diagnostics) = builder(getContext())
|
val (_, _, diagnostics) = builder(getContext())
|
||||||
return LightClassDataHolderImpl(diagnostics)
|
return LightClassDataHolderImpl(diagnostics)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -19,7 +19,6 @@ 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(
|
||||||
@@ -28,7 +27,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).cast<CliLightClassGenerationSupport>()
|
return LightClassGenerationSupport.getInstance(classOrObject.project)
|
||||||
.createDataHolderForClass(classOrObject) { constructionContext ->
|
.createDataHolderForClass(classOrObject) { constructionContext ->
|
||||||
buildLightClass(
|
buildLightClass(
|
||||||
packageFqName,
|
packageFqName,
|
||||||
@@ -45,7 +44,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(),
|
||||||
@@ -53,7 +52,9 @@ internal class LightClassDataProviderForClassOrObject(
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun toString(): String = this::class.java.name + " for " + classOrObject.name
|
override fun toString(): String {
|
||||||
|
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() {
|
||||||
@@ -101,21 +102,19 @@ 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)
|
return LightClassGenerationSupport.getInstance(script.project).createDataHolderForScript(script) { constructionContext ->
|
||||||
.cast<CliLightClassGenerationSupport>()
|
buildLightClass(
|
||||||
.createDataHolderForScript { constructionContext ->
|
script.fqName.parent(),
|
||||||
buildLightClass(
|
listOf(script.containingKtFile),
|
||||||
script.fqName.parent(),
|
ClassFilterForScript(script),
|
||||||
listOf(script.containingKtFile),
|
constructionContext
|
||||||
ClassFilterForScript(script),
|
) generate@{ state, files ->
|
||||||
constructionContext
|
val scriptFile = files.first()
|
||||||
) generate@{ state, files ->
|
val codegen = state.factory.forPackage(scriptFile.packageFqName, files)
|
||||||
val scriptFile = files.first()
|
codegen.generate()
|
||||||
val codegen = state.factory.forPackage(scriptFile.packageFqName, files)
|
state.factory.done()
|
||||||
codegen.generate()
|
|
||||||
state.factory.done()
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun compute(): CachedValueProvider.Result<LightClassDataHolder.ForScript> =
|
override fun compute(): CachedValueProvider.Result<LightClassDataHolder.ForScript> =
|
||||||
|
|||||||
@@ -10,6 +10,7 @@ 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
|
||||||
@@ -24,6 +25,12 @@ 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