From fc2a965d2ae3a36a5b11f1d262d51591aa358110 Mon Sep 17 00:00:00 2001 From: Dmitry Petrov Date: Tue, 22 Nov 2016 12:21:23 +0300 Subject: [PATCH] Fix decompiler tests. --- .../kotlin/codegen/MultifileClassCodegen.kt | 2 +- .../kotlin/fileClasses/JvmFileClassUtil.kt | 11 ++++++----- .../kotlin/load/java/descriptors/util.kt | 6 +++++- .../textBuilder/DecompiledTextConsistencyTest.kt | 15 ++++++++------- ...tlinJavaScriptDecompiledTextConsistencyTest.kt | 4 ++-- .../textBuilder/TextConsistencyBaseTest.kt | 4 ++-- 6 files changed, 24 insertions(+), 18 deletions(-) diff --git a/compiler/backend/src/org/jetbrains/kotlin/codegen/MultifileClassCodegen.kt b/compiler/backend/src/org/jetbrains/kotlin/codegen/MultifileClassCodegen.kt index 66f90cbc491..1f432e74d90 100644 --- a/compiler/backend/src/org/jetbrains/kotlin/codegen/MultifileClassCodegen.kt +++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/MultifileClassCodegen.kt @@ -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) }) diff --git a/compiler/frontend.java/src/org/jetbrains/kotlin/fileClasses/JvmFileClassUtil.kt b/compiler/frontend.java/src/org/jetbrains/kotlin/fileClasses/JvmFileClassUtil.kt index 499fdc3eed3..77dc01bb6ea 100644 --- a/compiler/frontend.java/src/org/jetbrains/kotlin/fileClasses/JvmFileClassUtil.kt +++ b/compiler/frontend.java/src/org/jetbrains/kotlin/fileClasses/JvmFileClassUtil.kt @@ -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))) diff --git a/core/descriptor.loader.java/src/org/jetbrains/kotlin/load/java/descriptors/util.kt b/core/descriptor.loader.java/src/org/jetbrains/kotlin/load/java/descriptors/util.kt index 9e6cd2e1d69..602f1efb821 100644 --- a/core/descriptor.loader.java/src/org/jetbrains/kotlin/load/java/descriptors/util.kt +++ b/core/descriptor.loader.java/src/org/jetbrains/kotlin/load/java/descriptors/util.kt @@ -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 diff --git a/idea/tests/org/jetbrains/kotlin/idea/decompiler/textBuilder/DecompiledTextConsistencyTest.kt b/idea/tests/org/jetbrains/kotlin/idea/decompiler/textBuilder/DecompiledTextConsistencyTest.kt index b78a536b6b0..608f2c8c6c4 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/decompiler/textBuilder/DecompiledTextConsistencyTest.kt +++ b/idea/tests/org/jetbrains/kotlin/idea/decompiler/textBuilder/DecompiledTextConsistencyTest.kt @@ -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 = emptyList() - override fun getFacades(): List = listOf(FqName("kotlin.collections.CollectionsKt")) + override fun getFacades(): List = listOf(FqName("kotlin.collections.CollectionsKt"), FqName("kotlin.collections.TypeAliasesKt")) override fun getTopLevelMembers(): Map = 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) } diff --git a/idea/tests/org/jetbrains/kotlin/idea/decompiler/textBuilder/KotlinJavaScriptDecompiledTextConsistencyTest.kt b/idea/tests/org/jetbrains/kotlin/idea/decompiler/textBuilder/KotlinJavaScriptDecompiledTextConsistencyTest.kt index f3c243cba34..6dea18706c8 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/decompiler/textBuilder/KotlinJavaScriptDecompiledTextConsistencyTest.kt +++ b/idea/tests/org/jetbrains/kotlin/idea/decompiler/textBuilder/KotlinJavaScriptDecompiledTextConsistencyTest.kt @@ -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) diff --git a/idea/tests/org/jetbrains/kotlin/idea/decompiler/textBuilder/TextConsistencyBaseTest.kt b/idea/tests/org/jetbrains/kotlin/idea/decompiler/textBuilder/TextConsistencyBaseTest.kt index 53a68c77b1a..7435005ed67 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/decompiler/textBuilder/TextConsistencyBaseTest.kt +++ b/idea/tests/org/jetbrains/kotlin/idea/decompiler/textBuilder/TextConsistencyBaseTest.kt @@ -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 = 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) }