FIR/UAST: enforce the existence of BaseKotlinUastResolveProviderService
This commit is contained in:
committed by
Ilya Kirillov
parent
240f86b109
commit
f16f9a13fd
@@ -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
|
||||
|
||||
|
||||
+1
-1
@@ -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)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+3
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user