From eac875b5d60cdad0285f2c6d78979fbf0bd2d94e Mon Sep 17 00:00:00 2001 From: Jinseong Jeon Date: Tue, 27 Apr 2021 00:07:00 -0700 Subject: [PATCH] FIR UAST: commonize utils from UAST Kotlin --- plugins/uast-kotlin-base/build.gradle.kts | 18 ++++++++ .../internal/KotlinUElementWithComments.kt | 0 .../internal/baseKotlinInternalUastUtils.kt | 32 ++++++++++++++ .../uast/kotlin/internal/converterUtils.kt | 42 +++++++++++++++++++ plugins/uast-kotlin-fir/build.gradle.kts | 1 + .../uast/kotlin/FirKotlinAbstractUElement.kt | 4 +- .../uast/kotlin/FirKotlinConverter.kt | 22 ---------- .../kotlin/FirKotlinUastLanguagePlugin.kt | 7 ---- .../kotlin/declarations/FirKotlinUMethod.kt | 14 +------ .../internal/FirKotlinUElementWithComments.kt | 39 ----------------- .../internal/firKotlinInternalUastUtils.kt | 24 ----------- plugins/uast-kotlin/build.gradle.kts | 1 + .../uast/kotlin/KotlinUastLanguagePlugin.kt | 35 ---------------- .../uast/kotlin/declarations/KotlinUMethod.kt | 6 --- .../internal/kotlinInternalUastUtils.kt | 11 ----- settings.gradle | 1 + 16 files changed, 99 insertions(+), 158 deletions(-) create mode 100644 plugins/uast-kotlin-base/build.gradle.kts rename plugins/{uast-kotlin => uast-kotlin-base}/src/org/jetbrains/uast/kotlin/internal/KotlinUElementWithComments.kt (100%) create mode 100644 plugins/uast-kotlin-base/src/org/jetbrains/uast/kotlin/internal/baseKotlinInternalUastUtils.kt create mode 100644 plugins/uast-kotlin-base/src/org/jetbrains/uast/kotlin/internal/converterUtils.kt delete mode 100644 plugins/uast-kotlin-fir/src/org/jetbrains/uast/kotlin/internal/FirKotlinUElementWithComments.kt diff --git a/plugins/uast-kotlin-base/build.gradle.kts b/plugins/uast-kotlin-base/build.gradle.kts new file mode 100644 index 00000000000..e5c08533088 --- /dev/null +++ b/plugins/uast-kotlin-base/build.gradle.kts @@ -0,0 +1,18 @@ +plugins { + kotlin("jvm") + id("jps-compatible") +} + +dependencies { + implementation(kotlinStdlib()) + implementation(project(":compiler:psi")) + implementation(project(":compiler:light-classes")) + + // BEWARE: Uast should not depend on IDEA. + compileOnly(intellijCoreDep()) { includeJars("intellij-core", "asm-all", rootProject = rootProject) } + compileOnly(intellijPluginDep("java")) { includeJars("java-api", "java-impl") } +} + +sourceSets { + "main" { projectDefault() } +} diff --git a/plugins/uast-kotlin/src/org/jetbrains/uast/kotlin/internal/KotlinUElementWithComments.kt b/plugins/uast-kotlin-base/src/org/jetbrains/uast/kotlin/internal/KotlinUElementWithComments.kt similarity index 100% rename from plugins/uast-kotlin/src/org/jetbrains/uast/kotlin/internal/KotlinUElementWithComments.kt rename to plugins/uast-kotlin-base/src/org/jetbrains/uast/kotlin/internal/KotlinUElementWithComments.kt diff --git a/plugins/uast-kotlin-base/src/org/jetbrains/uast/kotlin/internal/baseKotlinInternalUastUtils.kt b/plugins/uast-kotlin-base/src/org/jetbrains/uast/kotlin/internal/baseKotlinInternalUastUtils.kt new file mode 100644 index 00000000000..314a7bd41b8 --- /dev/null +++ b/plugins/uast-kotlin-base/src/org/jetbrains/uast/kotlin/internal/baseKotlinInternalUastUtils.kt @@ -0,0 +1,32 @@ +/* + * Copyright 2010-2021 JetBrains s.r.o. and Kotlin Programming Language contributors. + * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. + */ + +package org.jetbrains.uast.kotlin + +import com.intellij.psi.PsiElement +import com.intellij.psi.PsiFile +import org.jetbrains.kotlin.asJava.elements.FakeFileForLightClass +import org.jetbrains.kotlin.asJava.elements.KtLightElement +import org.jetbrains.kotlin.asJava.elements.KtLightMember +import org.jetbrains.kotlin.psi.KtDeclaration +import org.jetbrains.uast.UDeclaration +import org.jetbrains.uast.UElement + +fun lz(initializer: () -> T) = + lazy(LazyThreadSafetyMode.SYNCHRONIZED, initializer) + +inline fun unwrap(element: P): P { + val unwrapped = if (element is T) element.javaPsi else element + assert(unwrapped !is UElement) + return unwrapped as P +} + +fun unwrapFakeFileForLightClass(file: PsiFile): PsiFile = (file as? FakeFileForLightClass)?.ktFile ?: file + +fun getKotlinMemberOrigin(element: PsiElement?): KtDeclaration? { + (element as? KtLightMember<*>)?.lightMemberOrigin?.auxiliaryOriginalElement?.let { return it } + (element as? KtLightElement<*, *>)?.kotlinOrigin?.let { return it as? KtDeclaration } + return null +} diff --git a/plugins/uast-kotlin-base/src/org/jetbrains/uast/kotlin/internal/converterUtils.kt b/plugins/uast-kotlin-base/src/org/jetbrains/uast/kotlin/internal/converterUtils.kt new file mode 100644 index 00000000000..74968fa0c8e --- /dev/null +++ b/plugins/uast-kotlin-base/src/org/jetbrains/uast/kotlin/internal/converterUtils.kt @@ -0,0 +1,42 @@ +/* + * Copyright 2010-2021 JetBrains s.r.o. and Kotlin Programming Language contributors. + * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. + */ + +package org.jetbrains.uast.kotlin + +import org.jetbrains.uast.DEFAULT_EXPRESSION_TYPES_LIST +import org.jetbrains.uast.DEFAULT_TYPES_LIST +import org.jetbrains.uast.UElement +import org.jetbrains.uast.UExpression + +fun expressionTypes(requiredType: Class?) = + requiredType?.let { arrayOf(it) } ?: DEFAULT_EXPRESSION_TYPES_LIST + +fun elementTypes(requiredType: Class?) = + requiredType?.let { arrayOf(it) } ?: DEFAULT_TYPES_LIST + +fun Array>.nonEmptyOr(default: Array>) = + takeIf { it.isNotEmpty() } ?: default + +inline fun Array>.el(f: () -> UElement?): UElement? { + return if (isAssignableFrom(ActualT::class.java)) f() else null +} + +inline fun Array>.expr(f: () -> UExpression?): UExpression? { + return if (isAssignableFrom(ActualT::class.java)) f() else null +} + +fun Array>.isAssignableFrom(cls: Class<*>) = any { it.isAssignableFrom(cls) } + +fun Array>.accommodate(vararg makers: UElementAlternative): Sequence { + val makersSeq = makers.asSequence() + return this.asSequence() + .flatMap { requiredType -> makersSeq.filter { requiredType.isAssignableFrom(it.uType) } } + .distinct() + .mapNotNull { it.make.invoke() } +} + +inline fun alternative(noinline make: () -> U?) = UElementAlternative(U::class.java, make) + +class UElementAlternative(val uType: Class, val make: () -> U?) diff --git a/plugins/uast-kotlin-fir/build.gradle.kts b/plugins/uast-kotlin-fir/build.gradle.kts index 2fd5691bff7..6158fd7a853 100644 --- a/plugins/uast-kotlin-fir/build.gradle.kts +++ b/plugins/uast-kotlin-fir/build.gradle.kts @@ -7,6 +7,7 @@ dependencies { implementation(kotlinStdlib()) implementation(project(":compiler:psi")) implementation(project(":compiler:light-classes")) + implementation(project(":plugins:uast-kotlin-base")) // BEWARE: Uast should not depend on IDEA. compileOnly(intellijCoreDep()) { includeJars("intellij-core", "asm-all", rootProject = rootProject) } diff --git a/plugins/uast-kotlin-fir/src/org/jetbrains/uast/kotlin/FirKotlinAbstractUElement.kt b/plugins/uast-kotlin-fir/src/org/jetbrains/uast/kotlin/FirKotlinAbstractUElement.kt index 083a3583760..e38c327a0a1 100644 --- a/plugins/uast-kotlin-fir/src/org/jetbrains/uast/kotlin/FirKotlinAbstractUElement.kt +++ b/plugins/uast-kotlin-fir/src/org/jetbrains/uast/kotlin/FirKotlinAbstractUElement.kt @@ -8,11 +8,11 @@ package org.jetbrains.uast.kotlin import com.intellij.psi.PsiElement import org.jetbrains.uast.UElement import org.jetbrains.uast.UExpression -import org.jetbrains.uast.kotlin.internal.FirKotlinUElementWithComments +import org.jetbrains.uast.kotlin.internal.KotlinUElementWithComments abstract class FirKotlinAbstractUElement( private val givenParent: UElement? -) : FirKotlinUElementWithComments { +) : KotlinUElementWithComments { final override val uastParent: UElement? by lz { givenParent ?: convertParent() diff --git a/plugins/uast-kotlin-fir/src/org/jetbrains/uast/kotlin/FirKotlinConverter.kt b/plugins/uast-kotlin-fir/src/org/jetbrains/uast/kotlin/FirKotlinConverter.kt index ca8916dab9c..5756ce6b411 100644 --- a/plugins/uast-kotlin-fir/src/org/jetbrains/uast/kotlin/FirKotlinConverter.kt +++ b/plugins/uast-kotlin-fir/src/org/jetbrains/uast/kotlin/FirKotlinConverter.kt @@ -213,25 +213,3 @@ internal object FirKotlinConverter { } } } - -private inline fun Array>.el(f: () -> UElement?): UElement? { - return if (isAssignableFrom(ActualT::class.java)) f() else null -} - -private inline fun Array>.expr(f: () -> UExpression?): UExpression? { - return if (isAssignableFrom(ActualT::class.java)) f() else null -} - -private fun Array>.isAssignableFrom(cls: Class<*>) = any { it.isAssignableFrom(cls) } - -private fun Array>.accommodate(vararg makers: UElementAlternative): Sequence { - val makersSeq = makers.asSequence() - return this.asSequence() - .flatMap { requiredType -> makersSeq.filter { requiredType.isAssignableFrom(it.uType) } } - .distinct() - .mapNotNull { it.make.invoke() } -} - -private inline fun alternative(noinline make: () -> U?) = UElementAlternative(U::class.java, make) - -private class UElementAlternative(val uType: Class, val make: () -> U?) diff --git a/plugins/uast-kotlin-fir/src/org/jetbrains/uast/kotlin/FirKotlinUastLanguagePlugin.kt b/plugins/uast-kotlin-fir/src/org/jetbrains/uast/kotlin/FirKotlinUastLanguagePlugin.kt index fdae17e2168..34b3380c698 100644 --- a/plugins/uast-kotlin-fir/src/org/jetbrains/uast/kotlin/FirKotlinUastLanguagePlugin.kt +++ b/plugins/uast-kotlin-fir/src/org/jetbrains/uast/kotlin/FirKotlinUastLanguagePlugin.kt @@ -88,10 +88,3 @@ class FirKotlinUastLanguagePlugin : UastLanguagePlugin { TODO("Not yet implemented") } } - -private fun elementTypes(requiredType: Class?) = - requiredType?.let { arrayOf(it) } ?: DEFAULT_TYPES_LIST - -private fun Array>.nonEmptyOr(default: Array>) = - takeIf { it.isNotEmpty() } ?: default - diff --git a/plugins/uast-kotlin-fir/src/org/jetbrains/uast/kotlin/declarations/FirKotlinUMethod.kt b/plugins/uast-kotlin-fir/src/org/jetbrains/uast/kotlin/declarations/FirKotlinUMethod.kt index 2fcfb66d83e..d85706873db 100644 --- a/plugins/uast-kotlin-fir/src/org/jetbrains/uast/kotlin/declarations/FirKotlinUMethod.kt +++ b/plugins/uast-kotlin-fir/src/org/jetbrains/uast/kotlin/declarations/FirKotlinUMethod.kt @@ -7,7 +7,6 @@ package org.jetbrains.uast.kotlin import com.intellij.psi.PsiMethod import com.intellij.psi.PsiNameIdentifierOwner -import com.intellij.psi.PsiParameter import org.jetbrains.kotlin.asJava.LightClassUtil import org.jetbrains.kotlin.asJava.elements.* import org.jetbrains.kotlin.psi.* @@ -46,21 +45,12 @@ open class FirKotlinUMethod( } override val uastParameters: List by lz { - - fun parameterOrigin(psiParameter: PsiParameter?): KtElement? { - return when (psiParameter) { - is KtLightElement<*, *> -> psiParameter.kotlinOrigin - // TODO: UastKotlinPsiParameter? - else -> null - } - } - val lightParams = psi.parameterList.parameters val receiverTypeReference = - receiverTypeReference ?: return@lz lightParams.map { FirKotlinUParameter(it, parameterOrigin(it), this) } + receiverTypeReference ?: return@lz lightParams.map { FirKotlinUParameter(it, getKotlinMemberOrigin(it), this) } val lightReceiver = lightParams.firstOrNull() ?: return@lz emptyList() val uParameters = SmartList(FirKotlinReceiverUParameter(lightReceiver, receiverTypeReference, this)) - lightParams.drop(1).mapTo(uParameters) { FirKotlinUParameter(it, parameterOrigin(it), this) } + lightParams.drop(1).mapTo(uParameters) { FirKotlinUParameter(it, getKotlinMemberOrigin(it), this) } uParameters } diff --git a/plugins/uast-kotlin-fir/src/org/jetbrains/uast/kotlin/internal/FirKotlinUElementWithComments.kt b/plugins/uast-kotlin-fir/src/org/jetbrains/uast/kotlin/internal/FirKotlinUElementWithComments.kt deleted file mode 100644 index e5e2a2afcbf..00000000000 --- a/plugins/uast-kotlin-fir/src/org/jetbrains/uast/kotlin/internal/FirKotlinUElementWithComments.kt +++ /dev/null @@ -1,39 +0,0 @@ -/* - * Copyright 2010-2021 JetBrains s.r.o. and Kotlin Programming Language contributors. - * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. - */ - -package org.jetbrains.uast.kotlin.internal - -import com.intellij.psi.PsiComment -import com.intellij.psi.PsiElement -import com.intellij.psi.PsiWhiteSpace -import org.jetbrains.kotlin.psi.KtValueArgument -import org.jetbrains.uast.UComment -import org.jetbrains.uast.UElement -import org.jetbrains.uast.UExpression - -interface FirKotlinUElementWithComments : UElement { - override val comments: List - get() { - val psi = sourcePsi ?: return emptyList() - val childrenComments = psi.children.filterIsInstance().map { UComment(it, this) } - if (this !is UExpression) return childrenComments - val childrenAndSiblingComments = childrenComments + - psi.nearestCommentSibling(forward = true)?.let { listOf(UComment(it, this)) }.orEmpty() + - psi.nearestCommentSibling(forward = false)?.let { listOf(UComment(it, this)) }.orEmpty() - val parent = psi.parent as? KtValueArgument ?: return childrenAndSiblingComments - - return childrenAndSiblingComments + - parent.nearestCommentSibling(forward = true)?.let { listOf(UComment(it, this)) }.orEmpty() + - parent.nearestCommentSibling(forward = false)?.let { listOf(UComment(it, this)) }.orEmpty() - } - - private fun PsiElement.nearestCommentSibling(forward: Boolean): PsiComment? { - var sibling = if (forward) nextSibling else prevSibling - while (sibling is PsiWhiteSpace && !sibling.text.contains('\n')) { - sibling = if (forward) sibling.nextSibling else sibling.prevSibling - } - return sibling as? PsiComment - } -} diff --git a/plugins/uast-kotlin-fir/src/org/jetbrains/uast/kotlin/internal/firKotlinInternalUastUtils.kt b/plugins/uast-kotlin-fir/src/org/jetbrains/uast/kotlin/internal/firKotlinInternalUastUtils.kt index 7be11ee4cb1..9672a943642 100644 --- a/plugins/uast-kotlin-fir/src/org/jetbrains/uast/kotlin/internal/firKotlinInternalUastUtils.kt +++ b/plugins/uast-kotlin-fir/src/org/jetbrains/uast/kotlin/internal/firKotlinInternalUastUtils.kt @@ -7,27 +7,9 @@ package org.jetbrains.uast.kotlin import com.intellij.openapi.components.ServiceManager import com.intellij.psi.PsiElement -import com.intellij.psi.PsiFile -import org.jetbrains.kotlin.asJava.elements.FakeFileForLightClass -import org.jetbrains.kotlin.asJava.elements.KtLightElement -import org.jetbrains.kotlin.asJava.elements.KtLightMember import org.jetbrains.kotlin.idea.KotlinLanguage -import org.jetbrains.kotlin.psi.KtDeclaration -import org.jetbrains.uast.UDeclaration -import org.jetbrains.uast.UElement import org.jetbrains.uast.UastLanguagePlugin -internal fun lz(initializer: () -> T) = - lazy(LazyThreadSafetyMode.SYNCHRONIZED, initializer) - -internal inline fun unwrap(element: P): P { - val unwrapped = if (element is T) element.javaPsi else element - assert(unwrapped !is UElement) - return unwrapped as P -} - -internal fun unwrapFakeFileForLightClass(file: PsiFile): PsiFile = (file as? FakeFileForLightClass)?.ktFile ?: file - val firKotlinUastPlugin: UastLanguagePlugin by lz { UastLanguagePlugin.getInstances().find { it.language == KotlinLanguage.INSTANCE } ?: FirKotlinUastLanguagePlugin() @@ -37,9 +19,3 @@ internal val PsiElement.service: FirKotlinUastResolveProviderService get() { return ServiceManager.getService(project, FirKotlinUastResolveProviderService::class.java) } - -internal fun getKotlinMemberOrigin(element: PsiElement?): KtDeclaration? { - (element as? KtLightMember<*>)?.lightMemberOrigin?.auxiliaryOriginalElement?.let { return it } - (element as? KtLightElement<*, *>)?.kotlinOrigin?.let { return it as? KtDeclaration } - return null -} diff --git a/plugins/uast-kotlin/build.gradle.kts b/plugins/uast-kotlin/build.gradle.kts index 49832224ac2..e7c0bd90c8b 100644 --- a/plugins/uast-kotlin/build.gradle.kts +++ b/plugins/uast-kotlin/build.gradle.kts @@ -11,6 +11,7 @@ dependencies { compile(project(":compiler:frontend")) compile(project(":compiler:frontend.java")) compile(project(":compiler:light-classes")) + compile(project(":plugins:uast-kotlin-base")) // BEWARE: Uast should not depend on IDEA. compileOnly(intellijCoreDep()) { includeJars("intellij-core", "asm-all", rootProject = rootProject) } diff --git a/plugins/uast-kotlin/src/org/jetbrains/uast/kotlin/KotlinUastLanguagePlugin.kt b/plugins/uast-kotlin/src/org/jetbrains/uast/kotlin/KotlinUastLanguagePlugin.kt index 917972e8438..90b79672b36 100644 --- a/plugins/uast-kotlin/src/org/jetbrains/uast/kotlin/KotlinUastLanguagePlugin.kt +++ b/plugins/uast-kotlin/src/org/jetbrains/uast/kotlin/KotlinUastLanguagePlugin.kt @@ -169,22 +169,6 @@ class KotlinUastLanguagePlugin : UastLanguagePlugin { } } -internal inline fun Class<*>?.el(f: () -> UElement?): UElement? { - return if (this == null || isAssignableFrom(ActualT::class.java)) f() else null -} - -internal inline fun Array>.el(f: () -> UElement?): UElement? { - return if (isAssignableFrom(ActualT::class.java)) f() else null -} - -internal inline fun Array>.expr(f: () -> UExpression?): UExpression? { - return if (isAssignableFrom(ActualT::class.java)) f() else null -} - -internal fun Array>.isAssignableFrom(cls: Class<*>) = any { it.isAssignableFrom(cls) } - - - internal object KotlinConverter { internal tailrec fun unwrapElements(element: PsiElement?): PsiElement? = when (element) { is KtValueArgumentList -> unwrapElements(element.parent) @@ -743,22 +727,3 @@ val kotlinUastPlugin: UastLanguagePlugin by lz { UastLanguagePlugin.getInstances().find { it.language == KotlinLanguage.INSTANCE } ?: KotlinUastLanguagePlugin() } - -private fun expressionTypes(requiredType: Class?) = requiredType?.let { arrayOf(it) } ?: DEFAULT_EXPRESSION_TYPES_LIST - -private fun elementTypes(requiredType: Class?) = requiredType?.let { arrayOf(it) } ?: DEFAULT_TYPES_LIST - -private fun Array>.nonEmptyOr(default: Array>) = takeIf { it.isNotEmpty() } - ?: default - -private fun Array>.accommodate(vararg makers: UElementAlternative): Sequence { - val makersSeq = makers.asSequence() - return this.asSequence() - .flatMap { requiredType -> makersSeq.filter { requiredType.isAssignableFrom(it.uType) } } - .distinct() - .mapNotNull { it.make.invoke() } -} - -private inline fun alternative(noinline make: () -> U?) = UElementAlternative(U::class.java, make) - -private class UElementAlternative(val uType: Class, val make: () -> U?) diff --git a/plugins/uast-kotlin/src/org/jetbrains/uast/kotlin/declarations/KotlinUMethod.kt b/plugins/uast-kotlin/src/org/jetbrains/uast/kotlin/declarations/KotlinUMethod.kt index 12b796b8d61..afb49b9b9cc 100644 --- a/plugins/uast-kotlin/src/org/jetbrains/uast/kotlin/declarations/KotlinUMethod.kt +++ b/plugins/uast-kotlin/src/org/jetbrains/uast/kotlin/declarations/KotlinUMethod.kt @@ -126,12 +126,6 @@ open class KotlinUMethod( override fun equals(other: Any?) = other is KotlinUMethod && psi == other.psi companion object { - private fun getKotlinMemberOrigin(element: PsiElement?): KtDeclaration? { - (element as? KtLightMember<*>)?.lightMemberOrigin?.auxiliaryOriginalElement?.let { return it } - (element as? KtLightElement<*, *>)?.kotlinOrigin?.let { return it as? KtDeclaration } - return null - } - fun create(psi: KtLightMethod, containingElement: UElement?): KotlinUMethod { val kotlinOrigin = psi.kotlinOrigin return if (kotlinOrigin is KtConstructor<*>) { diff --git a/plugins/uast-kotlin/src/org/jetbrains/uast/kotlin/internal/kotlinInternalUastUtils.kt b/plugins/uast-kotlin/src/org/jetbrains/uast/kotlin/internal/kotlinInternalUastUtils.kt index 4ca7f22fe25..aaa97302f79 100644 --- a/plugins/uast-kotlin/src/org/jetbrains/uast/kotlin/internal/kotlinInternalUastUtils.kt +++ b/plugins/uast-kotlin/src/org/jetbrains/uast/kotlin/internal/kotlinInternalUastUtils.kt @@ -28,7 +28,6 @@ import com.intellij.psi.impl.compiled.StubBuildingVisitor import com.intellij.psi.util.PsiTypesUtil import org.jetbrains.kotlin.asJava.* import org.jetbrains.kotlin.asJava.classes.KtLightClass -import org.jetbrains.kotlin.asJava.elements.FakeFileForLightClass import org.jetbrains.kotlin.builtins.isBuiltinFunctionalTypeOrSubtype import org.jetbrains.kotlin.codegen.signature.BothSignatureWriter import org.jetbrains.kotlin.descriptors.* @@ -87,8 +86,6 @@ internal val KOTLIN_CACHED_UELEMENT_KEY = Key.create>("c @Suppress("NOTHING_TO_INLINE") internal inline fun String?.orAnonymous(kind: String = ""): String = this ?: "" -internal fun lz(initializer: () -> T) = lazy(LazyThreadSafetyMode.SYNCHRONIZED, initializer) - internal fun KtExpression.unwrapBlockOrParenthesis(): KtExpression { val innerExpression = KtPsiUtil.safeDeparenthesize(this) if (innerExpression is KtBlockExpression) { @@ -98,17 +95,9 @@ internal fun KtExpression.unwrapBlockOrParenthesis(): KtExpression { return innerExpression } -internal inline fun unwrap(element: P): P { - val unwrapped = if (element is T) element.javaPsi else element - assert(unwrapped !is UElement) - return unwrapped as P -} - internal fun getContainingLightClass(original: KtDeclaration): KtLightClass? = (original.containingClassOrObject?.toLightClass() ?: original.containingKtFile.findFacadeClass()) -internal fun unwrapFakeFileForLightClass(file: PsiFile): PsiFile = (file as? FakeFileForLightClass)?.ktFile ?: file - // mb merge with org.jetbrains.kotlin.idea.references.ReferenceAccess ? internal enum class ReferenceAccess(val isRead: Boolean, val isWrite: Boolean) { READ(true, false), WRITE(false, true), READ_WRITE(true, true) diff --git a/settings.gradle b/settings.gradle index bc192f49223..25541cb84b0 100644 --- a/settings.gradle +++ b/settings.gradle @@ -211,6 +211,7 @@ include ":benchmarks", ":sam-with-receiver-ide-plugin", ":kotlin-imports-dumper-compiler-plugin", ":plugins:uast-kotlin", + ":plugins:uast-kotlin-base", ":plugins:uast-kotlin-fir", ":plugins:uast-kotlin-idea", ":plugins:annotation-based-compiler-plugins-ide-support",