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.state.GenerationState
import org.jetbrains.kotlin.config.CompilerConfiguration
import org.jetbrains.kotlin.descriptors.ClassDescriptor
import org.jetbrains.kotlin.fileClasses.NoResolveFileClassesProvider
import org.jetbrains.kotlin.fileClasses.getFileClassType
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.DescriptorToSourceUtils.descriptorToDeclaration
import org.jetbrains.kotlin.resolve.diagnostics.Diagnostics
import org.jetbrains.kotlin.resolve.jvm.JvmClassName
import org.jetbrains.kotlin.utils.sure
abstract class LightClassDataProvider<T : WithFileStubAndExtraDiagnostics>(
@@ -181,35 +179,21 @@ class LightClassDataProviderForClassOrObject(private val classOrObject: KtClassO
extraDiagnostics: Diagnostics): WithFileStubAndExtraDiagnostics {
val classDescriptor = bindingContext.get(BindingContext.CLASS, classOrObject) ?: return InvalidLightClassData
val fqName = predictClassFqName(bindingContext, classDescriptor)
val allInnerClasses = CodegenBinding.getAllInnerClasses(bindingContext, classDescriptor)
val innerClassesMap = ContainerUtil.newHashMap<KtClassOrObject, InnerKotlinClassLightClassData>()
for (innerClassDescriptor in allInnerClasses) {
val declaration = descriptorToDeclaration(innerClassDescriptor)
if (declaration !is KtClassOrObject) continue
val innerLightClassData = InnerKotlinClassLightClassData(
predictClassFqName(bindingContext, innerClassDescriptor),
declaration)
innerClassesMap.put(declaration, innerLightClassData)
val declaration = descriptorToDeclaration(innerClassDescriptor) as? KtClassOrObject ?: continue
innerClassesMap.put(declaration, InnerKotlinClassLightClassData(declaration))
}
return OutermostKotlinClassLightClassData(
javaFileStub,
extraDiagnostics,
fqName,
classOrObject,
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>
get() = listOf(file)
@@ -30,7 +30,6 @@ interface WithFileStubAndExtraDiagnostics: LightClassData {
interface LightClassDataForKotlinClass: LightClassData {
val classOrObject: KtClassOrObject
val jvmQualifiedName: FqName
}
object InvalidLightClassData: WithFileStubAndExtraDiagnostics, LightClassDataForKotlinClass {
@@ -40,8 +39,6 @@ object InvalidLightClassData: WithFileStubAndExtraDiagnostics, LightClassDataFor
get() = shouldNotBeCalled()
override val classOrObject: KtClassOrObject
get() = shouldNotBeCalled()
override val jvmQualifiedName: FqName
get() = shouldNotBeCalled()
private fun shouldNotBeCalled(): Nothing = throw UnsupportedOperationException("Should not be called")
}
@@ -52,14 +49,12 @@ data class KotlinFacadeLightClassData(
): LightClassData, WithFileStubAndExtraDiagnostics
data class InnerKotlinClassLightClassData(
override val jvmQualifiedName: FqName,
override val classOrObject: KtClassOrObject
): LightClassDataForKotlinClass
data class OutermostKotlinClassLightClassData(
override val javaFileStub: PsiJavaFileStub,
override val extraDiagnostics: Diagnostics,
override val jvmQualifiedName: FqName,
override val classOrObject: KtClassOrObject,
val allInnerClasses: Map<KtClassOrObject, InnerKotlinClassLightClassData>
): LightClassDataForKotlinClass, WithFileStubAndExtraDiagnostics {