Fix decompiler tests.
This commit is contained in:
@@ -284,7 +284,7 @@ class MultifileClassCodegenImpl(
|
||||
if (compiledPackageFragment == null) return
|
||||
|
||||
for (callable in previouslyCompiledCallables) {
|
||||
val partFqName = JvmFileClassUtil.getPartFqNameForDeserializedCallable(callable)
|
||||
val partFqName = JvmFileClassUtil.getPartFqNameForDeserialized(callable)
|
||||
val partType = AsmUtil.asmTypeByFqNameWithoutInnerClasses(partFqName)
|
||||
|
||||
addDelegateGenerationTaskIfNeeded(callable, { generateDelegateToCompiledMember(callable, compiledPackageFragment, partType) })
|
||||
|
||||
@@ -28,6 +28,7 @@ import org.jetbrains.kotlin.psi.*
|
||||
import org.jetbrains.kotlin.resolve.DescriptorToSourceUtils
|
||||
import org.jetbrains.kotlin.resolve.DescriptorUtils
|
||||
import org.jetbrains.kotlin.serialization.deserialization.descriptors.DeserializedCallableMemberDescriptor
|
||||
import org.jetbrains.kotlin.serialization.deserialization.descriptors.DeserializedMemberDescriptor
|
||||
|
||||
object JvmFileClassUtil {
|
||||
val JVM_NAME: FqName = FqName("kotlin.jvm.JvmName")
|
||||
@@ -55,14 +56,14 @@ object JvmFileClassUtil {
|
||||
private fun getFacadeFqName(file: KtFile, jvmFileClassAnnotations: ParsedJvmFileClassAnnotations): FqName =
|
||||
file.packageFqName.child(Name.identifier(jvmFileClassAnnotations.name))
|
||||
|
||||
@JvmStatic fun getPartFqNameForDeserializedCallable(callable: DeserializedCallableMemberDescriptor): FqName {
|
||||
val implClassName = getImplClassName(callable) ?: error("No implClassName for $callable")
|
||||
val packageFqName = (callable.containingDeclaration as PackageFragmentDescriptor).fqName
|
||||
@JvmStatic fun getPartFqNameForDeserialized(deserializedMemberDescriptor: DeserializedMemberDescriptor): FqName {
|
||||
val implClassName = getImplClassName(deserializedMemberDescriptor) ?: error("No implClassName for $deserializedMemberDescriptor")
|
||||
val packageFqName = (deserializedMemberDescriptor.containingDeclaration as PackageFragmentDescriptor).fqName
|
||||
return packageFqName.child(implClassName)
|
||||
}
|
||||
|
||||
@JvmStatic fun getImplClassName(callable: DeserializedCallableMemberDescriptor): Name? =
|
||||
callable.getImplClassNameForDeserialized()
|
||||
@JvmStatic fun getImplClassName(deserializedMemberDescriptor: DeserializedMemberDescriptor): Name? =
|
||||
deserializedMemberDescriptor.getImplClassNameForDeserialized()
|
||||
|
||||
private fun getHiddenPartFqName(file: KtFile, jvmFileClassAnnotations: ParsedJvmFileClassAnnotations): FqName =
|
||||
file.packageFqName.child(Name.identifier(manglePartName(jvmFileClassAnnotations.name, file.name)))
|
||||
|
||||
@@ -26,6 +26,7 @@ import org.jetbrains.kotlin.name.Name
|
||||
import org.jetbrains.kotlin.resolve.descriptorUtil.getSuperClassNotAny
|
||||
import org.jetbrains.kotlin.resolve.descriptorUtil.module
|
||||
import org.jetbrains.kotlin.serialization.deserialization.descriptors.DeserializedCallableMemberDescriptor
|
||||
import org.jetbrains.kotlin.serialization.deserialization.descriptors.DeserializedMemberDescriptor
|
||||
import org.jetbrains.kotlin.types.KotlinType
|
||||
|
||||
fun copyValueParameters(
|
||||
@@ -67,6 +68,9 @@ fun ClassDescriptor.getParentJavaStaticClassScope(): LazyJavaStaticClassScope? {
|
||||
return staticScope
|
||||
}
|
||||
|
||||
fun DeserializedCallableMemberDescriptor.getImplClassNameForDeserialized(): Name? {
|
||||
fun DeserializedMemberDescriptor.getImplClassNameForDeserialized(): Name? {
|
||||
return (containerSource as? JvmPackagePartSource)?.simpleName
|
||||
}
|
||||
|
||||
fun DeserializedMemberDescriptor.isFromJvmPackagePart(): Boolean =
|
||||
containerSource is JvmPackagePartSource
|
||||
|
||||
+8
-7
@@ -17,26 +17,27 @@
|
||||
package org.jetbrains.kotlin.idea.decompiler.textBuilder
|
||||
|
||||
import com.intellij.openapi.vfs.VirtualFile
|
||||
import org.jetbrains.kotlin.descriptors.CallableMemberDescriptor
|
||||
import org.jetbrains.kotlin.descriptors.MemberDescriptor
|
||||
import org.jetbrains.kotlin.descriptors.ModuleDescriptor
|
||||
import org.jetbrains.kotlin.fileClasses.JvmFileClassUtil
|
||||
import org.jetbrains.kotlin.idea.caches.resolve.IDEPackagePartProvider
|
||||
import org.jetbrains.kotlin.idea.decompiler.classFile.buildDecompiledTextForClassFile
|
||||
import org.jetbrains.kotlin.idea.test.KotlinWithJdkAndRuntimeLightProjectDescriptor
|
||||
import org.jetbrains.kotlin.idea.test.PluginTestCaseBase
|
||||
import org.jetbrains.kotlin.load.java.descriptors.isFromJvmPackagePart
|
||||
import org.jetbrains.kotlin.load.kotlin.JvmVirtualFileFinder
|
||||
import org.jetbrains.kotlin.load.kotlin.VirtualFileFinder
|
||||
import org.jetbrains.kotlin.name.FqName
|
||||
import org.jetbrains.kotlin.resolve.BindingTraceContext
|
||||
import org.jetbrains.kotlin.resolve.jvm.TopDownAnalyzerFacadeForJVM
|
||||
import org.jetbrains.kotlin.serialization.deserialization.descriptors.DeserializedCallableMemberDescriptor
|
||||
import org.jetbrains.kotlin.serialization.deserialization.descriptors.DeserializedMemberDescriptor
|
||||
import org.jetbrains.kotlin.test.KotlinTestUtils
|
||||
|
||||
class DecompiledTextConsistencyTest : TextConsistencyBaseTest() {
|
||||
|
||||
override fun getPackages(): List<FqName> = emptyList()
|
||||
|
||||
override fun getFacades(): List<FqName> = listOf(FqName("kotlin.collections.CollectionsKt"))
|
||||
override fun getFacades(): List<FqName> = listOf(FqName("kotlin.collections.CollectionsKt"), FqName("kotlin.collections.TypeAliasesKt"))
|
||||
|
||||
override fun getTopLevelMembers(): Map<String, String> = mapOf("kotlin.collections.CollectionsKt" to "mutableListOf")
|
||||
|
||||
@@ -56,8 +57,8 @@ class DecompiledTextConsistencyTest : TextConsistencyBaseTest() {
|
||||
override fun getSdk() = PluginTestCaseBase.fullJdk()
|
||||
}
|
||||
|
||||
override fun isFromFacade(descriptor: CallableMemberDescriptor, facadeFqName: FqName): Boolean =
|
||||
descriptor is DeserializedCallableMemberDescriptor &&
|
||||
JvmFileClassUtil.getImplClassName(descriptor) != null &&
|
||||
facadeFqName == JvmFileClassUtil.getPartFqNameForDeserializedCallable(descriptor)
|
||||
override fun isFromFacade(descriptor: MemberDescriptor, facadeFqName: FqName): Boolean =
|
||||
descriptor is DeserializedMemberDescriptor &&
|
||||
descriptor.isFromJvmPackagePart() &&
|
||||
facadeFqName == JvmFileClassUtil.getPartFqNameForDeserialized(descriptor)
|
||||
}
|
||||
|
||||
+2
-2
@@ -17,7 +17,7 @@
|
||||
package org.jetbrains.kotlin.idea.decompiler.textBuilder
|
||||
|
||||
import com.intellij.openapi.vfs.VirtualFile
|
||||
import org.jetbrains.kotlin.descriptors.CallableMemberDescriptor
|
||||
import org.jetbrains.kotlin.descriptors.MemberDescriptor
|
||||
import org.jetbrains.kotlin.descriptors.ModuleDescriptor
|
||||
import org.jetbrains.kotlin.descriptors.PackageFragmentDescriptor
|
||||
import org.jetbrains.kotlin.fileClasses.OldPackageFacadeClassUtils
|
||||
@@ -65,7 +65,7 @@ class KotlinJavaScriptDecompiledTextConsistencyTest : TextConsistencyBaseTest()
|
||||
|
||||
override fun getProjectDescriptor() = KotlinStdJSProjectDescriptor.instance
|
||||
|
||||
override fun isFromFacade(descriptor: CallableMemberDescriptor, facadeFqName: FqName): Boolean {
|
||||
override fun isFromFacade(descriptor: MemberDescriptor, facadeFqName: FqName): Boolean {
|
||||
val containingDeclaration = descriptor.containingDeclaration
|
||||
return containingDeclaration is PackageFragmentDescriptor &&
|
||||
facadeFqName == OldPackageFacadeClassUtils.getPackageClassFqName(containingDeclaration.fqName)
|
||||
|
||||
+2
-2
@@ -43,7 +43,7 @@ abstract class TextConsistencyBaseTest : KotlinLightCodeInsightFixtureTestCase()
|
||||
|
||||
protected abstract fun getModuleDescriptor(): ModuleDescriptor
|
||||
|
||||
protected abstract fun isFromFacade(descriptor: CallableMemberDescriptor, facadeFqName: FqName): Boolean
|
||||
protected abstract fun isFromFacade(descriptor: MemberDescriptor, facadeFqName: FqName): Boolean
|
||||
|
||||
fun testConsistency() {
|
||||
getPackages().forEach { doTestPackage(it) }
|
||||
@@ -76,7 +76,7 @@ abstract class TextConsistencyBaseTest : KotlinLightCodeInsightFixtureTestCase()
|
||||
|
||||
override fun resolveDeclarationsInFacade(facadeFqName: FqName): List<DeclarationDescriptor> =
|
||||
module.getPackage(facadeFqName.parent()).memberScope.getContributedDescriptors().filter {
|
||||
(it is CallableMemberDescriptor && isFromFacade(it, facadeFqName) || it is TypeAliasDescriptor) &&
|
||||
(it is MemberDescriptor && it !is ClassDescriptor && isFromFacade(it, facadeFqName)) &&
|
||||
!KotlinBuiltIns.isBuiltIn(it)
|
||||
}.sortedWith(MemberComparator.INSTANCE)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user