K2: Add extension point for additional KDoc resolution

Similar to K1 KDocLinkResolutionService used by Fe10KDocReference (to
support additional KDoc resolution), this commit adds K2 counterpart
AdditionalKDocResolutionProvider and uses it for KDocReferenceResolver.

^KT-62187
This commit is contained in:
Jaebaek Seo
2023-09-21 17:44:22 -07:00
committed by Space Team
parent 34ea0678ae
commit a6c432587f
3 changed files with 79 additions and 13 deletions
@@ -33,6 +33,7 @@ import org.jetbrains.kotlin.analysis.api.impl.base.java.source.JavaElementSource
import org.jetbrains.kotlin.analysis.api.impl.base.references.HLApiReferenceProviderService
import org.jetbrains.kotlin.analysis.api.impl.base.util.LibraryUtils
import org.jetbrains.kotlin.analysis.api.resolve.extensions.KtResolveExtensionProvider
import org.jetbrains.kotlin.analysis.api.symbols.AdditionalKDocResolutionProvider
import org.jetbrains.kotlin.analysis.decompiler.psi.BuiltInsVirtualFileProvider
import org.jetbrains.kotlin.analysis.decompiler.psi.BuiltInsVirtualFileProviderCliImpl
import org.jetbrains.kotlin.analysis.decompiler.stub.file.ClsKotlinBinaryClassCache
@@ -141,15 +142,26 @@ object StandaloneProjectFactory {
) {
val applicationArea = applicationEnvironment.application.extensionArea
if (applicationArea.hasExtensionPoint(ClassTypePointerFactory.EP_NAME)) return
KotlinCoreEnvironment.underApplicationLock {
if (applicationArea.hasExtensionPoint(ClassTypePointerFactory.EP_NAME)) return@underApplicationLock
CoreApplicationEnvironment.registerApplicationExtensionPoint(
ClassTypePointerFactory.EP_NAME,
ClassTypePointerFactory::class.java
)
applicationArea.getExtensionPoint(ClassTypePointerFactory.EP_NAME)
.registerExtension(PsiClassReferenceTypePointerFactory(), applicationDisposable)
if (!applicationArea.hasExtensionPoint(AdditionalKDocResolutionProvider.EP_NAME)) {
KotlinCoreEnvironment.underApplicationLock {
if (applicationArea.hasExtensionPoint(AdditionalKDocResolutionProvider.EP_NAME)) return@underApplicationLock
CoreApplicationEnvironment.registerApplicationExtensionPoint(
AdditionalKDocResolutionProvider.EP_NAME,
AdditionalKDocResolutionProvider::class.java
)
}
}
if (!applicationArea.hasExtensionPoint(ClassTypePointerFactory.EP_NAME)) {
KotlinCoreEnvironment.underApplicationLock {
if (applicationArea.hasExtensionPoint(ClassTypePointerFactory.EP_NAME)) return@underApplicationLock
CoreApplicationEnvironment.registerApplicationExtensionPoint(
ClassTypePointerFactory.EP_NAME,
ClassTypePointerFactory::class.java
)
applicationArea.getExtensionPoint(ClassTypePointerFactory.EP_NAME)
.registerExtension(PsiClassReferenceTypePointerFactory(), applicationDisposable)
}
}
}