From 025e2f2fe9946d32694ba71a2e3a73b1a3421fc6 Mon Sep 17 00:00:00 2001 From: Igor Yakovlev Date: Wed, 20 May 2020 23:44:39 +0300 Subject: [PATCH] [ULC] Better support for UL MultifileFacade classes --- .../classes/ultraKtLightClassForFacade.kt | 42 +++++++++++-------- .../ultraLightFacades/multifileFacade.kt | 6 ++- .../ultraLightFacades/multifileFacade.kt.1 | 4 +- 3 files changed, 33 insertions(+), 19 deletions(-) diff --git a/compiler/light-classes/src/org/jetbrains/kotlin/asJava/classes/ultraKtLightClassForFacade.kt b/compiler/light-classes/src/org/jetbrains/kotlin/asJava/classes/ultraKtLightClassForFacade.kt index fab51e0858f..f3d1a558a29 100644 --- a/compiler/light-classes/src/org/jetbrains/kotlin/asJava/classes/ultraKtLightClassForFacade.kt +++ b/compiler/light-classes/src/org/jetbrains/kotlin/asJava/classes/ultraKtLightClassForFacade.kt @@ -6,13 +6,13 @@ package org.jetbrains.kotlin.asJava.classes import com.intellij.psi.* -import com.intellij.psi.impl.PsiSuperMethodImplUtil import com.intellij.psi.impl.java.stubs.PsiJavaFileStub import com.intellij.psi.util.CachedValue import org.jetbrains.kotlin.asJava.builder.LightClassData import org.jetbrains.kotlin.asJava.builder.LightClassDataHolder import org.jetbrains.kotlin.asJava.elements.KtLightField import org.jetbrains.kotlin.asJava.elements.KtLightMethod +import org.jetbrains.kotlin.fileClasses.JvmFileClassUtil import org.jetbrains.kotlin.name.FqName import org.jetbrains.kotlin.psi.KtFile import org.jetbrains.kotlin.psi.KtNamedFunction @@ -61,31 +61,39 @@ class KtUltraLightClassForFacade( result: MutableList ) { for (declaration in file.declarations.filterNot { it.isHiddenByDeprecation(support) }) { - when (declaration) { - is KtNamedFunction -> result.addAll(creator.createMethods(declaration, true)) - is KtProperty -> { - result.addAll( - creator.propertyAccessors( - declaration, declaration.isVar, - forceStatic = true, - onlyJvmStatic = false - ) - ) - - } + val methods = when (declaration) { + is KtNamedFunction -> creator.createMethods( + ktFunction = declaration, + forceStatic = true + ) + is KtProperty -> creator.propertyAccessors( + declaration, declaration.isVar, + forceStatic = true, + onlyJvmStatic = false, + ) + else -> emptyList() } + result.addAll(methods) } } private val _ownMethods: List by lazyPub { - mutableListOf().also { result -> - for ((file, support, creator) in filesWithSupportsWithCreators) { - loadMethodsFromFile(file, support, creator, result) - } + val result = mutableListOf() + for ((file, support, creator) in filesWithSupportsWithCreators) { + loadMethodsFromFile(file, support, creator, result) + } + if (!multiFileClass) result else result.filterNot { it.hasModifierProperty(PsiModifier.PRIVATE) } + } + + private val multiFileClass: Boolean by lazyPub { + filesWithSupports.any { + it.second.findAnnotation(it.first, JvmFileClassUtil.JVM_MULTIFILE_CLASS) != null } } private val _ownFields: List by lazyPub { + if (multiFileClass) return@lazyPub emptyList() + hashSetOf().let { nameCache -> filesWithSupportsWithCreators.flatMap { (file, _, creator) -> file.declarations.filterIsInstance().mapNotNull { diff --git a/compiler/testData/asJava/ultraLightFacades/multifileFacade.kt b/compiler/testData/asJava/ultraLightFacades/multifileFacade.kt index 80ac73702af..43e11fd82e3 100644 --- a/compiler/testData/asJava/ultraLightFacades/multifileFacade.kt +++ b/compiler/testData/asJava/ultraLightFacades/multifileFacade.kt @@ -1,4 +1,8 @@ @file:JvmMultifileClass @file:JvmName("multifileFacade") -fun foo() = 42 \ No newline at end of file +fun foo() = 42 + +val x = 24 + +private fun privateFoo(): Int = 3 \ No newline at end of file diff --git a/compiler/testData/asJava/ultraLightFacades/multifileFacade.kt.1 b/compiler/testData/asJava/ultraLightFacades/multifileFacade.kt.1 index 3ee8c99cde2..a05d67d9562 100644 --- a/compiler/testData/asJava/ultraLightFacades/multifileFacade.kt.1 +++ b/compiler/testData/asJava/ultraLightFacades/multifileFacade.kt.1 @@ -1,4 +1,6 @@ @file:JvmMultifileClass @file:JvmName("multifileFacade") -fun bar() = 24 \ No newline at end of file +fun bar() = 24 + +val y = 24 \ No newline at end of file