LightClassDataProvider: FqName calculation is redundant now
This commit is contained in:
+2
-18
@@ -41,7 +41,6 @@ import org.jetbrains.kotlin.codegen.CompilationErrorHandler
|
|||||||
import org.jetbrains.kotlin.codegen.binding.CodegenBinding
|
import org.jetbrains.kotlin.codegen.binding.CodegenBinding
|
||||||
import org.jetbrains.kotlin.codegen.state.GenerationState
|
import org.jetbrains.kotlin.codegen.state.GenerationState
|
||||||
import org.jetbrains.kotlin.config.CompilerConfiguration
|
import org.jetbrains.kotlin.config.CompilerConfiguration
|
||||||
import org.jetbrains.kotlin.descriptors.ClassDescriptor
|
|
||||||
import org.jetbrains.kotlin.fileClasses.NoResolveFileClassesProvider
|
import org.jetbrains.kotlin.fileClasses.NoResolveFileClassesProvider
|
||||||
import org.jetbrains.kotlin.fileClasses.getFileClassType
|
import org.jetbrains.kotlin.fileClasses.getFileClassType
|
||||||
import org.jetbrains.kotlin.name.FqName
|
import org.jetbrains.kotlin.name.FqName
|
||||||
@@ -52,7 +51,6 @@ import org.jetbrains.kotlin.psi.KtScript
|
|||||||
import org.jetbrains.kotlin.resolve.BindingContext
|
import org.jetbrains.kotlin.resolve.BindingContext
|
||||||
import org.jetbrains.kotlin.resolve.DescriptorToSourceUtils.descriptorToDeclaration
|
import org.jetbrains.kotlin.resolve.DescriptorToSourceUtils.descriptorToDeclaration
|
||||||
import org.jetbrains.kotlin.resolve.diagnostics.Diagnostics
|
import org.jetbrains.kotlin.resolve.diagnostics.Diagnostics
|
||||||
import org.jetbrains.kotlin.resolve.jvm.JvmClassName
|
|
||||||
import org.jetbrains.kotlin.utils.sure
|
import org.jetbrains.kotlin.utils.sure
|
||||||
|
|
||||||
abstract class LightClassDataProvider<T : WithFileStubAndExtraDiagnostics>(
|
abstract class LightClassDataProvider<T : WithFileStubAndExtraDiagnostics>(
|
||||||
@@ -181,35 +179,21 @@ class LightClassDataProviderForClassOrObject(private val classOrObject: KtClassO
|
|||||||
extraDiagnostics: Diagnostics): WithFileStubAndExtraDiagnostics {
|
extraDiagnostics: Diagnostics): WithFileStubAndExtraDiagnostics {
|
||||||
val classDescriptor = bindingContext.get(BindingContext.CLASS, classOrObject) ?: return InvalidLightClassData
|
val classDescriptor = bindingContext.get(BindingContext.CLASS, classOrObject) ?: return InvalidLightClassData
|
||||||
|
|
||||||
val fqName = predictClassFqName(bindingContext, classDescriptor)
|
|
||||||
val allInnerClasses = CodegenBinding.getAllInnerClasses(bindingContext, classDescriptor)
|
val allInnerClasses = CodegenBinding.getAllInnerClasses(bindingContext, classDescriptor)
|
||||||
|
|
||||||
val innerClassesMap = ContainerUtil.newHashMap<KtClassOrObject, InnerKotlinClassLightClassData>()
|
val innerClassesMap = ContainerUtil.newHashMap<KtClassOrObject, InnerKotlinClassLightClassData>()
|
||||||
for (innerClassDescriptor in allInnerClasses) {
|
for (innerClassDescriptor in allInnerClasses) {
|
||||||
val declaration = descriptorToDeclaration(innerClassDescriptor)
|
val declaration = descriptorToDeclaration(innerClassDescriptor) as? KtClassOrObject ?: continue
|
||||||
if (declaration !is KtClassOrObject) continue
|
innerClassesMap.put(declaration, InnerKotlinClassLightClassData(declaration))
|
||||||
|
|
||||||
val innerLightClassData = InnerKotlinClassLightClassData(
|
|
||||||
predictClassFqName(bindingContext, innerClassDescriptor),
|
|
||||||
declaration)
|
|
||||||
|
|
||||||
innerClassesMap.put(declaration, innerLightClassData)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return OutermostKotlinClassLightClassData(
|
return OutermostKotlinClassLightClassData(
|
||||||
javaFileStub,
|
javaFileStub,
|
||||||
extraDiagnostics,
|
extraDiagnostics,
|
||||||
fqName,
|
|
||||||
classOrObject,
|
classOrObject,
|
||||||
innerClassesMap)
|
innerClassesMap)
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun predictClassFqName(bindingContext: BindingContext, classDescriptor: ClassDescriptor): FqName {
|
|
||||||
val asmType = CodegenBinding.getAsmType(bindingContext, classDescriptor)
|
|
||||||
//noinspection ConstantConditions
|
|
||||||
return JvmClassName.byInternalName(asmType.className.replace('.', '/')).fqNameForClassNameWithoutDollars
|
|
||||||
}
|
|
||||||
|
|
||||||
override val files: Collection<KtFile>
|
override val files: Collection<KtFile>
|
||||||
get() = listOf(file)
|
get() = listOf(file)
|
||||||
|
|
||||||
|
|||||||
-5
@@ -30,7 +30,6 @@ interface WithFileStubAndExtraDiagnostics: LightClassData {
|
|||||||
|
|
||||||
interface LightClassDataForKotlinClass: LightClassData {
|
interface LightClassDataForKotlinClass: LightClassData {
|
||||||
val classOrObject: KtClassOrObject
|
val classOrObject: KtClassOrObject
|
||||||
val jvmQualifiedName: FqName
|
|
||||||
}
|
}
|
||||||
|
|
||||||
object InvalidLightClassData: WithFileStubAndExtraDiagnostics, LightClassDataForKotlinClass {
|
object InvalidLightClassData: WithFileStubAndExtraDiagnostics, LightClassDataForKotlinClass {
|
||||||
@@ -40,8 +39,6 @@ object InvalidLightClassData: WithFileStubAndExtraDiagnostics, LightClassDataFor
|
|||||||
get() = shouldNotBeCalled()
|
get() = shouldNotBeCalled()
|
||||||
override val classOrObject: KtClassOrObject
|
override val classOrObject: KtClassOrObject
|
||||||
get() = shouldNotBeCalled()
|
get() = shouldNotBeCalled()
|
||||||
override val jvmQualifiedName: FqName
|
|
||||||
get() = shouldNotBeCalled()
|
|
||||||
|
|
||||||
private fun shouldNotBeCalled(): Nothing = throw UnsupportedOperationException("Should not be called")
|
private fun shouldNotBeCalled(): Nothing = throw UnsupportedOperationException("Should not be called")
|
||||||
}
|
}
|
||||||
@@ -52,14 +49,12 @@ data class KotlinFacadeLightClassData(
|
|||||||
): LightClassData, WithFileStubAndExtraDiagnostics
|
): LightClassData, WithFileStubAndExtraDiagnostics
|
||||||
|
|
||||||
data class InnerKotlinClassLightClassData(
|
data class InnerKotlinClassLightClassData(
|
||||||
override val jvmQualifiedName: FqName,
|
|
||||||
override val classOrObject: KtClassOrObject
|
override val classOrObject: KtClassOrObject
|
||||||
): LightClassDataForKotlinClass
|
): LightClassDataForKotlinClass
|
||||||
|
|
||||||
data class OutermostKotlinClassLightClassData(
|
data class OutermostKotlinClassLightClassData(
|
||||||
override val javaFileStub: PsiJavaFileStub,
|
override val javaFileStub: PsiJavaFileStub,
|
||||||
override val extraDiagnostics: Diagnostics,
|
override val extraDiagnostics: Diagnostics,
|
||||||
override val jvmQualifiedName: FqName,
|
|
||||||
override val classOrObject: KtClassOrObject,
|
override val classOrObject: KtClassOrObject,
|
||||||
val allInnerClasses: Map<KtClassOrObject, InnerKotlinClassLightClassData>
|
val allInnerClasses: Map<KtClassOrObject, InnerKotlinClassLightClassData>
|
||||||
): LightClassDataForKotlinClass, WithFileStubAndExtraDiagnostics {
|
): LightClassDataForKotlinClass, WithFileStubAndExtraDiagnostics {
|
||||||
|
|||||||
Reference in New Issue
Block a user