From 75dc8ce1c3121a960a374f20c6e3f661c611390e Mon Sep 17 00:00:00 2001 From: Denis Zharkov Date: Wed, 10 Oct 2018 15:19:24 +0300 Subject: [PATCH] Fix exception in light classes when type alias in MultifileClass #KT-27355 Fixed --- .../jetbrains/kotlin/codegen/MultifileClassCodegen.kt | 11 ++++++++++- .../testData/asJava/lightClasses/facades/MultiFile.kt | 2 ++ 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/compiler/backend/src/org/jetbrains/kotlin/codegen/MultifileClassCodegen.kt b/compiler/backend/src/org/jetbrains/kotlin/codegen/MultifileClassCodegen.kt index d3e37b67954..d8535d8ed7c 100644 --- a/compiler/backend/src/org/jetbrains/kotlin/codegen/MultifileClassCodegen.kt +++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/MultifileClassCodegen.kt @@ -246,7 +246,7 @@ class MultifileClassCodegenImpl( val facadeContext = state.rootContext.intoMultifileClass(packageFragment, facadeClassType, partType) val memberCodegen = createCodegenForDelegatesInMultifileFacade(facadeContext) for (declaration in CodegenUtil.getDeclarationsToGenerate(file, state.bindingContext)) { - if (declaration is KtNamedFunction || declaration is KtProperty || declaration is KtTypeAlias) { + if (shouldGenerateInFacade(declaration)) { val descriptor = state.bindingContext.get(BindingContext.DECLARATION_TO_DESCRIPTOR, declaration) if (descriptor !is MemberDescriptor) { throw AssertionError("Expected callable member, was " + descriptor + " for " + declaration.text) @@ -256,6 +256,15 @@ class MultifileClassCodegenImpl( } } + private fun shouldGenerateInFacade(declaration: KtDeclaration): Boolean { + if (declaration is KtNamedFunction || declaration is KtProperty) return true + + // In light classes, we intentionally do not analyze type aliases, since they're metadata-only + if (declaration is KtTypeAlias && state.classBuilderMode.generateMetadata) return true + + return false + } + private fun shouldGenerateInFacade(descriptor: MemberDescriptor): Boolean { if (Visibilities.isPrivate(descriptor.visibility)) return false if (AsmUtil.getVisibilityAccessFlag(descriptor) == Opcodes.ACC_PRIVATE) return false diff --git a/compiler/testData/asJava/lightClasses/facades/MultiFile.kt b/compiler/testData/asJava/lightClasses/facades/MultiFile.kt index 2267fe08d99..3174dced668 100644 --- a/compiler/testData/asJava/lightClasses/facades/MultiFile.kt +++ b/compiler/testData/asJava/lightClasses/facades/MultiFile.kt @@ -6,3 +6,5 @@ package test val foo = 42 + +typealias A = String