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