FIR/UAST: enforce the existence of BaseKotlinUastResolveProviderService

This commit is contained in:
Jinseong Jeon
2021-05-18 16:09:48 -07:00
committed by Ilya Kirillov
parent 240f86b109
commit f16f9a13fd
11 changed files with 27 additions and 17 deletions
@@ -12,15 +12,18 @@ import org.jetbrains.uast.UastLanguagePlugin
import org.jetbrains.uast.kotlin.internal.KotlinUElementWithComments
abstract class KotlinAbstractUElement(
givenParent: UElement?
givenParent: UElement?,
baseResolveProviderServiceSupplier: BaseResolveProviderServiceSupplier? = null,
) : KotlinUElementWithComments {
protected val languagePlugin: UastLanguagePlugin? by lz {
psi?.let { UastFacade.findPlugin(it) }
}
protected val baseResolveProviderService: BaseKotlinUastResolveProviderService? by lz {
psi?.project?.let { ServiceManager.getService(it, BaseKotlinUastResolveProviderService::class.java) }
protected val baseResolveProviderService: BaseKotlinUastResolveProviderService by lz {
baseResolveProviderServiceSupplier?.get()
?: psi?.project?.let { ServiceManager.getService(it, BaseKotlinUastResolveProviderService::class.java) }
?: error("${BaseKotlinUastResolveProviderService::class.java.name} is not available")
}
final override val uastParent: UElement? by lz {
@@ -28,7 +31,7 @@ abstract class KotlinAbstractUElement(
}
protected open fun convertParent(): UElement? {
return baseResolveProviderService?.convertParent(this)
return baseResolveProviderService.convertParent(this)
}
override fun equals(other: Any?): Boolean {
@@ -13,8 +13,9 @@ import org.jetbrains.uast.UExpression
import org.jetbrains.uast.convertOpt
abstract class KotlinAbstractUExpression(
givenParent: UElement?
) : KotlinAbstractUElement(givenParent), UExpression {
givenParent: UElement?,
baseResolveProviderServiceSupplier: BaseResolveProviderServiceSupplier? = null,
) : KotlinAbstractUElement(givenParent, baseResolveProviderServiceSupplier), UExpression {
override val javaPsi: PsiElement? = null
@@ -50,7 +50,7 @@ class KotlinUImportStatement(
override fun resolve(): PsiElement? {
val reference = sourcePsi.getQualifiedElementSelector() as? KtReferenceExpression ?: return null
return baseResolveProviderService?.resolveToDeclaration(reference)
return baseResolveProviderService.resolveToDeclaration(reference)
}
}
}
@@ -13,6 +13,9 @@ import org.jetbrains.kotlin.asJava.elements.KtLightMember
import org.jetbrains.kotlin.psi.KtDeclaration
import org.jetbrains.uast.UDeclaration
import org.jetbrains.uast.UElement
import java.util.function.Supplier
typealias BaseResolveProviderServiceSupplier = Supplier<BaseKotlinUastResolveProviderService>
fun <T> lz(initializer: () -> T) =
lazy(LazyThreadSafetyMode.SYNCHRONIZED, initializer)