LightClassDataProvider: FqName calculation is redundant now

This commit is contained in:
Pavel V. Talanov
2016-07-27 15:49:05 +03:00
parent ae0d450acf
commit 82a2b94490
2 changed files with 2 additions and 23 deletions
@@ -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)
@@ -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 {