Fix deprecation warnings related to Project extensions

This commit is contained in:
Alexander Udalov
2020-08-13 19:47:58 +02:00
parent 196893bc4d
commit 7fb7dc0210
15 changed files with 37 additions and 68 deletions
@@ -5,7 +5,6 @@
package org.jetbrains.kotlin.benchmarks
import com.intellij.openapi.Disposable
import com.intellij.openapi.extensions.Extensions
import com.intellij.openapi.project.Project
import com.intellij.openapi.vfs.CharsetToolkit
import com.intellij.psi.PsiElementFinder
@@ -104,9 +103,7 @@ abstract class AbstractSimpleFileBenchmark {
)
if (isIR) {
Extensions.getArea(env.project)
.getExtensionPoint(PsiElementFinder.EP_NAME)
.unregisterExtension(JavaElementFinder::class.java)
PsiElementFinder.EP.getPoint(env.project).unregisterExtension(JavaElementFinder::class.java)
}
file = createFile(
@@ -163,8 +160,8 @@ abstract class AbstractSimpleFileBenchmark {
totalTransformer.process(listOf(firFile))
bh.consume(firFile.hashCode())
Extensions.getArea(env.project)
.getExtensionPoint(PsiElementFinder.EP_NAME)
env.project.extensionArea
.getExtensionPoint<PsiElementFinder>(PsiElementFinder.EP.name)
.unregisterExtension(FirJavaElementFinder::class.java)
}
@@ -120,7 +120,7 @@ class KotlinCoreEnvironment private constructor(
private var extensionRegistered = false
override fun preregisterServices() {
registerProjectExtensionPoints(Extensions.getArea(project))
registerProjectExtensionPoints(project.extensionArea)
}
fun registerExtensionsFromPlugins(configuration: CompilerConfiguration) {
@@ -598,9 +598,9 @@ class KotlinCoreEnvironment private constructor(
@JvmStatic
fun registerProjectExtensionPoints(area: ExtensionsArea) {
CoreApplicationEnvironment.registerExtensionPoint(
area, PsiTreeChangePreprocessor.EP_NAME, PsiTreeChangePreprocessor::class.java
area, PsiTreeChangePreprocessor.EP.name, PsiTreeChangePreprocessor::class.java
)
CoreApplicationEnvironment.registerExtensionPoint(area, PsiElementFinder.EP_NAME, PsiElementFinder::class.java)
CoreApplicationEnvironment.registerExtensionPoint(area, PsiElementFinder.EP.name, PsiElementFinder::class.java)
IdeaExtensionPoints.registerVersionSpecificProjectExtensionPoints(area)
}
@@ -644,12 +644,15 @@ class KotlinCoreEnvironment private constructor(
registerService(KotlinAsJavaSupport::class.java, kotlinAsJavaSupport)
registerService(CodeAnalyzerInitializer::class.java, traceHolder)
val area = Extensions.getArea(this)
area.getExtensionPoint(PsiElementFinder.EP_NAME).registerExtension(JavaElementFinder(this, kotlinAsJavaSupport))
area.getExtensionPoint(PsiElementFinder.EP_NAME).registerExtension(
PsiElementFinderImpl(this, ServiceManager.getService(this, JavaFileManager::class.java))
)
// We don't pass Disposable because in some tests, we manually unregister these extensions, and that leads to LOG.error
// exception from `ExtensionPointImpl.doRegisterExtension`, because the registered extension can no longer be found
// when the project is being disposed.
// For example, see the `unregisterExtension` call in `GenerationUtils.compileFilesUsingFrontendIR`.
// TODO: refactor this to avoid registering unneeded extensions in the first place, and avoid using deprecated API.
@Suppress("DEPRECATION")
PsiElementFinder.EP.getPoint(project).registerExtension(JavaElementFinder(this, kotlinAsJavaSupport))
@Suppress("DEPRECATION")
PsiElementFinder.EP.getPoint(project).registerExtension(PsiElementFinderImpl(this))
}
}
@@ -5,7 +5,6 @@
package org.jetbrains.kotlin.fir
import com.intellij.openapi.extensions.Extensions
import com.intellij.openapi.project.Project
import com.intellij.psi.PsiElementFinder
import org.jetbrains.kotlin.asJava.finder.JavaElementFinder
@@ -20,9 +19,6 @@ abstract class AbstractFirResolveWithSessionTestCase : KotlinTestWithEnvironment
}
protected fun prepareProjectExtensions(project: Project) {
Extensions.getArea(project)
.getExtensionPoint(PsiElementFinder.EP_NAME)
.unregisterExtension(JavaElementFinder::class.java)
PsiElementFinder.EP.getPoint(project).unregisterExtension(JavaElementFinder::class.java)
}
}
@@ -5,7 +5,6 @@
package org.jetbrains.kotlin.fir.java
import com.intellij.openapi.extensions.Extensions
import com.intellij.psi.PsiElementFinder
import com.intellij.psi.impl.compiled.ClsClassImpl
import com.intellij.psi.search.GlobalSearchScope
@@ -20,8 +19,7 @@ abstract class AbstractFirOldFrontendLightClassesTest : AbstractFirOldFrontendDi
override fun checkResultingFirFiles(firFiles: List<FirFile>, testDataFile: File) {
super.checkResultingFirFiles(firFiles, testDataFile)
val ourFinders =
Extensions.getArea(project).getExtensionPoint(PsiElementFinder.EP_NAME).extensions.filterIsInstance<FirJavaElementFinder>()
val ourFinders = PsiElementFinder.EP.getPoint(project).extensions.filterIsInstance<FirJavaElementFinder>()
assertNotEmpty(ourFinders)
@@ -6,7 +6,6 @@
package org.jetbrains.kotlin.fir.java
import com.intellij.lang.java.JavaLanguage
import com.intellij.openapi.extensions.Extensions
import com.intellij.openapi.project.Project
import com.intellij.openapi.util.io.FileUtil
import com.intellij.openapi.util.text.StringUtilRt
@@ -82,9 +81,7 @@ abstract class AbstractFirTypeEnhancementTest : KtUsefulTestCase() {
),
EnvironmentConfigFiles.JVM_CONFIG_FILES
).apply {
Extensions.getArea(project)
.getExtensionPoint(PsiElementFinder.EP_NAME)
.unregisterExtension(JavaElementFinder::class.java)
PsiElementFinder.EP.getPoint(project).unregisterExtension(JavaElementFinder::class.java)
}
}
@@ -5,7 +5,6 @@
package org.jetbrains.kotlin.fir
import com.intellij.openapi.extensions.Extensions
import com.intellij.openapi.project.Project
import com.intellij.psi.PsiElementFinder
import com.intellij.psi.search.GlobalSearchScope
@@ -20,9 +19,7 @@ import java.io.File
abstract class AbstractFir2IrTextTest : AbstractIrTextTestCase() {
private fun prepareProjectExtensions(project: Project) {
Extensions.getArea(project)
.getExtensionPoint(PsiElementFinder.EP_NAME)
.unregisterExtension(JavaElementFinder::class.java)
PsiElementFinder.EP.getPoint(project).unregisterExtension(JavaElementFinder::class.java)
}
override fun doTest(wholeFile: File, testFiles: List<TestFile>) {
@@ -5,7 +5,6 @@
package org.jetbrains.kotlin.fir
import com.intellij.openapi.extensions.Extensions
import com.intellij.openapi.util.Disposer
import com.intellij.psi.PsiElementFinder
import com.intellij.psi.search.GlobalSearchScope
@@ -167,13 +166,10 @@ class FirResolveModularizedTotalKotlinTest : AbstractModularizedTest() {
override fun processModule(moduleData: ModuleData): ProcessorAction {
val disposable = Disposer.newDisposable()
val configuration = createDefaultConfiguration(moduleData)
val environment = KotlinCoreEnvironment.createForTests(disposable, configuration, EnvironmentConfigFiles.JVM_CONFIG_FILES)
Extensions.getArea(environment.project)
.getExtensionPoint(PsiElementFinder.EP_NAME)
PsiElementFinder.EP.getPoint(environment.project)
.unregisterExtension(JavaElementFinder::class.java)
runAnalysis(moduleData, environment)
@@ -5,6 +5,7 @@
package org.jetbrains.kotlin.extensions
import com.intellij.openapi.Disposable
import com.intellij.openapi.extensions.ExtensionPoint
import com.intellij.openapi.extensions.ExtensionPointName
import com.intellij.openapi.extensions.Extensions
@@ -20,8 +21,8 @@ open class ApplicationExtensionDescriptor<T : Any>(name: String, private val ext
)
}
fun registerExtension(extension: T) {
Extensions.getRootArea().getExtensionPoint(extensionPointName).registerExtension(extension)
fun registerExtension(extension: T, disposable: Disposable) {
Extensions.getRootArea().getExtensionPoint(extensionPointName).registerExtension(extension, disposable)
}
fun getInstances(): List<T> {
@@ -18,14 +18,13 @@ package org.jetbrains.kotlin.extensions
import com.intellij.openapi.extensions.ExtensionPoint
import com.intellij.openapi.extensions.ExtensionPointName
import com.intellij.openapi.extensions.Extensions
import com.intellij.openapi.project.Project
open class ProjectExtensionDescriptor<T : Any>(name: String, private val extensionClass: Class<T>) {
val extensionPointName: ExtensionPointName<T> = ExtensionPointName.create(name)
fun registerExtensionPoint(project: Project) {
Extensions.getArea(project).registerExtensionPoint(
project.extensionArea.registerExtensionPoint(
extensionPointName.name,
extensionClass.name,
ExtensionPoint.Kind.INTERFACE
@@ -33,11 +32,11 @@ open class ProjectExtensionDescriptor<T : Any>(name: String, private val extensi
}
fun registerExtension(project: Project, extension: T) {
Extensions.getArea(project).getExtensionPoint(extensionPointName).registerExtension(extension)
project.extensionArea.getExtensionPoint(extensionPointName).registerExtension(extension, project)
}
fun getInstances(project: Project): List<T> {
val projectArea = Extensions.getArea(project)
val projectArea = project.extensionArea
if (!projectArea.hasExtensionPoint(extensionPointName.name)) return listOf()
return projectArea.getExtensionPoint(extensionPointName).extensions.toList()
@@ -40,7 +40,7 @@ protected constructor(
private fun update(): R {
val newVal = ApplicationManager.getApplication().let { app ->
Pair(app, map(app.getExtensions(epName).toList()))
Pair(app, map(app.extensionArea.getExtensionPoint(epName).extensionList))
}
cached = WeakReference(newVal)
return newVal.second
@@ -17,7 +17,6 @@
package org.jetbrains.kotlin.asJava.finder
import com.google.common.collect.Sets
import com.intellij.openapi.extensions.Extensions
import com.intellij.openapi.project.Project
import com.intellij.openapi.util.Condition
import com.intellij.psi.*
@@ -36,6 +35,7 @@ import org.jetbrains.kotlin.psi.KtClass
import org.jetbrains.kotlin.psi.KtEnumEntry
import org.jetbrains.kotlin.psi.KtFile
import org.jetbrains.kotlin.resolve.jvm.KotlinFinderMarker
import org.jetbrains.kotlin.utils.addToStdlib.firstIsInstanceOrNull
import java.util.*
class JavaElementFinder(
@@ -172,16 +172,9 @@ class JavaElementFinder(
}
companion object {
fun getInstance(project: Project): JavaElementFinder {
val extensions = Extensions.getArea(project).getExtensionPoint(PsiElementFinder.EP_NAME).extensions
for (extension in extensions) {
if (extension is JavaElementFinder) {
return extension
}
}
throw IllegalStateException(JavaElementFinder::class.java.simpleName + " is not found for project " + project)
}
fun getInstance(project: Project): JavaElementFinder =
EP.getPoint(project).extensions.firstIsInstanceOrNull()
?: error(JavaElementFinder::class.java.simpleName + " is not found for project " + project)
fun byClasspathComparator(searchScope: GlobalSearchScope): Comparator<PsiElement> {
return Comparator { o1, o2 ->
@@ -208,7 +208,7 @@ public class KotlinJavaPsiFacade {
);
List<PsiElementFinder> nonKotlinFinders = ArraysKt.filter(
getProject().getExtensions(PsiElementFinder.EP_NAME),
PsiElementFinder.EP.getPoint(getProject()).getExtensions(),
finder -> (finder instanceof KotlinSafeClassFinder) ||
!(finder instanceof NonClasspathClassFinder ||
finder instanceof KotlinFinderMarker ||
@@ -16,7 +16,6 @@
package org.jetbrains.kotlin.codegen
import com.intellij.openapi.extensions.Extensions
import com.intellij.openapi.project.Project
import com.intellij.psi.PsiElementFinder
import com.intellij.psi.search.GlobalSearchScope
@@ -109,9 +108,7 @@ object GenerationUtils {
packagePartProvider: (GlobalSearchScope) -> PackagePartProvider,
trace: BindingTrace
): GenerationState {
Extensions.getArea(project)
.getExtensionPoint(PsiElementFinder.EP_NAME)
.unregisterExtension(JavaElementFinder::class.java)
PsiElementFinder.EP.getPoint(project).unregisterExtension(JavaElementFinder::class.java)
val scope = GlobalSearchScope.filesScope(project, files.map { it.virtualFile })
.uniteWith(TopDownAnalyzerFacadeForJVM.AllJavaSourcesInProjectScope(project))
@@ -5,7 +5,6 @@
package org.jetbrains.kotlin.fir
import com.intellij.openapi.extensions.Extensions
import com.intellij.openapi.util.TextRange
import com.intellij.psi.PsiElement
import com.intellij.psi.PsiElementFinder
@@ -58,9 +57,7 @@ abstract class AbstractFirBaseDiagnosticsTest : BaseDiagnosticsTest() {
get() = false
override fun setupEnvironment(environment: KotlinCoreEnvironment) {
Extensions.getArea(environment.project)
.getExtensionPoint(PsiElementFinder.EP_NAME)
.unregisterExtension(JavaElementFinder::class.java)
PsiElementFinder.EP.getPoint(environment.project).unregisterExtension(JavaElementFinder::class.java)
}
open fun analyzeAndCheckUnhandled(testDataFile: File, files: List<TestFile>, useLightTree: Boolean = false) {
@@ -5,7 +5,6 @@
package org.jetbrains.kotlin.visualizer.fir
import com.intellij.openapi.extensions.Extensions
import com.intellij.psi.PsiElementFinder
import com.intellij.psi.search.GlobalSearchScope
import org.jetbrains.kotlin.asJava.finder.JavaElementFinder
@@ -25,8 +24,7 @@ import java.io.File
abstract class AbstractFirVisualizer : AbstractVisualizer() {
override fun doVisualizerTest(file: File, environment: KotlinCoreEnvironment) {
Extensions.getArea(environment.project)
.getExtensionPoint(PsiElementFinder.EP_NAME)
PsiElementFinder.EP.getPoint(environment.project)
.unregisterExtension(JavaElementFinder::class.java)
val ktFiles = environment.getSourceFiles()