[ULC] Better support for UL MultifileFacade classes
This commit is contained in:
+25
-17
@@ -6,13 +6,13 @@
|
|||||||
package org.jetbrains.kotlin.asJava.classes
|
package org.jetbrains.kotlin.asJava.classes
|
||||||
|
|
||||||
import com.intellij.psi.*
|
import com.intellij.psi.*
|
||||||
import com.intellij.psi.impl.PsiSuperMethodImplUtil
|
|
||||||
import com.intellij.psi.impl.java.stubs.PsiJavaFileStub
|
import com.intellij.psi.impl.java.stubs.PsiJavaFileStub
|
||||||
import com.intellij.psi.util.CachedValue
|
import com.intellij.psi.util.CachedValue
|
||||||
import org.jetbrains.kotlin.asJava.builder.LightClassData
|
import org.jetbrains.kotlin.asJava.builder.LightClassData
|
||||||
import org.jetbrains.kotlin.asJava.builder.LightClassDataHolder
|
import org.jetbrains.kotlin.asJava.builder.LightClassDataHolder
|
||||||
import org.jetbrains.kotlin.asJava.elements.KtLightField
|
import org.jetbrains.kotlin.asJava.elements.KtLightField
|
||||||
import org.jetbrains.kotlin.asJava.elements.KtLightMethod
|
import org.jetbrains.kotlin.asJava.elements.KtLightMethod
|
||||||
|
import org.jetbrains.kotlin.fileClasses.JvmFileClassUtil
|
||||||
import org.jetbrains.kotlin.name.FqName
|
import org.jetbrains.kotlin.name.FqName
|
||||||
import org.jetbrains.kotlin.psi.KtFile
|
import org.jetbrains.kotlin.psi.KtFile
|
||||||
import org.jetbrains.kotlin.psi.KtNamedFunction
|
import org.jetbrains.kotlin.psi.KtNamedFunction
|
||||||
@@ -61,31 +61,39 @@ class KtUltraLightClassForFacade(
|
|||||||
result: MutableList<KtLightMethod>
|
result: MutableList<KtLightMethod>
|
||||||
) {
|
) {
|
||||||
for (declaration in file.declarations.filterNot { it.isHiddenByDeprecation(support) }) {
|
for (declaration in file.declarations.filterNot { it.isHiddenByDeprecation(support) }) {
|
||||||
when (declaration) {
|
val methods = when (declaration) {
|
||||||
is KtNamedFunction -> result.addAll(creator.createMethods(declaration, true))
|
is KtNamedFunction -> creator.createMethods(
|
||||||
is KtProperty -> {
|
ktFunction = declaration,
|
||||||
result.addAll(
|
forceStatic = true
|
||||||
creator.propertyAccessors(
|
)
|
||||||
declaration, declaration.isVar,
|
is KtProperty -> creator.propertyAccessors(
|
||||||
forceStatic = true,
|
declaration, declaration.isVar,
|
||||||
onlyJvmStatic = false
|
forceStatic = true,
|
||||||
)
|
onlyJvmStatic = false,
|
||||||
)
|
)
|
||||||
|
else -> emptyList()
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
result.addAll(methods)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private val _ownMethods: List<KtLightMethod> by lazyPub {
|
private val _ownMethods: List<KtLightMethod> by lazyPub {
|
||||||
mutableListOf<KtLightMethod>().also { result ->
|
val result = mutableListOf<KtLightMethod>()
|
||||||
for ((file, support, creator) in filesWithSupportsWithCreators) {
|
for ((file, support, creator) in filesWithSupportsWithCreators) {
|
||||||
loadMethodsFromFile(file, support, creator, result)
|
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<KtLightField> by lazyPub {
|
private val _ownFields: List<KtLightField> by lazyPub {
|
||||||
|
if (multiFileClass) return@lazyPub emptyList()
|
||||||
|
|
||||||
hashSetOf<String>().let { nameCache ->
|
hashSetOf<String>().let { nameCache ->
|
||||||
filesWithSupportsWithCreators.flatMap { (file, _, creator) ->
|
filesWithSupportsWithCreators.flatMap { (file, _, creator) ->
|
||||||
file.declarations.filterIsInstance<KtProperty>().mapNotNull {
|
file.declarations.filterIsInstance<KtProperty>().mapNotNull {
|
||||||
|
|||||||
@@ -2,3 +2,7 @@
|
|||||||
@file:JvmName("multifileFacade")
|
@file:JvmName("multifileFacade")
|
||||||
|
|
||||||
fun foo() = 42
|
fun foo() = 42
|
||||||
|
|
||||||
|
val x = 24
|
||||||
|
|
||||||
|
private fun privateFoo(): Int = 3
|
||||||
@@ -2,3 +2,5 @@
|
|||||||
@file:JvmName("multifileFacade")
|
@file:JvmName("multifileFacade")
|
||||||
|
|
||||||
fun bar() = 24
|
fun bar() = 24
|
||||||
|
|
||||||
|
val y = 24
|
||||||
Reference in New Issue
Block a user