mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
MissingRecentApiInspection test: replace unnecessary IDE JDK and library project descriptors.
GitOrigin-RevId: 801bc9ff02ffe3ff91ebfee40a25f719a89fb0ac
This commit is contained in:
committed by
intellij-monorepo-bot
parent
f0f28abbc5
commit
a77a0d7b3e
+24
-24
@@ -2,24 +2,44 @@
|
||||
package org.jetbrains.idea.devkit.kotlin.inspections.missingApi
|
||||
|
||||
import com.intellij.codeInsight.AnnotationUtil
|
||||
import com.intellij.openapi.module.Module
|
||||
import com.intellij.openapi.roots.ContentEntry
|
||||
import com.intellij.openapi.roots.JavaModuleExternalPaths
|
||||
import com.intellij.openapi.roots.ModifiableRootModel
|
||||
import com.intellij.openapi.roots.ModuleRootModificationUtil
|
||||
import com.intellij.pom.java.LanguageLevel
|
||||
import com.intellij.testFramework.PsiTestUtil
|
||||
import com.intellij.testFramework.TestDataPath
|
||||
import com.intellij.testFramework.fixtures.LightCodeInsightFixtureTestCase
|
||||
import com.intellij.util.PathUtil
|
||||
import org.jetbrains.annotations.ApiStatus
|
||||
import org.jetbrains.idea.devkit.DevkitJavaTestsUtil
|
||||
import org.jetbrains.idea.devkit.inspections.PluginModuleTestCase
|
||||
import org.jetbrains.idea.devkit.inspections.missingApi.MissingRecentApiInspection
|
||||
import org.jetbrains.idea.devkit.inspections.missingApi.MissingRecentApiUsageProcessor
|
||||
import org.jetbrains.idea.devkit.kotlin.inspections.missingApi.project.PluginProjectWithIdeaJdkDescriptor
|
||||
import org.jetbrains.idea.devkit.kotlin.inspections.missingApi.project.PluginProjectWithIdeaLibraryDescriptor
|
||||
import org.jetbrains.idea.devkit.module.PluginModuleType
|
||||
|
||||
/**
|
||||
* Base class for tests of [MissingRecentApiInspection] on Java and Kotlin sources.
|
||||
*/
|
||||
@TestDataPath("\$CONTENT_ROOT/testData/inspections/missingApi")
|
||||
abstract class MissingRecentApiInspectionTestBase : PluginModuleTestCase() {
|
||||
class MissingRecentApiInspectionTestBase : PluginModuleTestCase() {
|
||||
|
||||
private val projectDescriptor = object : LightCodeInsightFixtureTestCase.ProjectDescriptor(LanguageLevel.HIGHEST) {
|
||||
override fun configureModule(module: Module, model: ModifiableRootModel, contentEntry: ContentEntry) {
|
||||
super.configureModule(module, model, contentEntry)
|
||||
PsiTestUtil.addProjectLibrary(model, "annotations", listOf(PathUtil.getJarPathForClass(ApiStatus.OverrideOnly::class.java)))
|
||||
PsiTestUtil.addProjectLibrary(model, "library", listOf(testDataPath))
|
||||
PsiTestUtil.addProjectLibrary(model, "kotlin-stdlib", listOf(PathUtil.getJarPathForClass(Function::class.java)))
|
||||
}
|
||||
|
||||
override fun getModuleType() = PluginModuleType.getInstance()
|
||||
}
|
||||
|
||||
private var inspection = MissingRecentApiInspection()
|
||||
|
||||
override fun getProjectDescriptor() = projectDescriptor
|
||||
|
||||
override fun setUp() {
|
||||
super.setUp()
|
||||
configureInspection()
|
||||
@@ -35,19 +55,13 @@ abstract class MissingRecentApiInspectionTestBase : PluginModuleTestCase() {
|
||||
override fun tearDown() {
|
||||
try {
|
||||
myFixture.disableInspections(inspection)
|
||||
//Dispose IDEA module or JDK and all attached roots.
|
||||
PluginProjectWithIdeaLibraryDescriptor.disposeIdeaLibrary(project)
|
||||
PluginProjectWithIdeaJdkDescriptor.disposeIdeaJdk()
|
||||
}
|
||||
catch (e: Throwable) {
|
||||
addSuppressedException(e)
|
||||
}
|
||||
finally {
|
||||
super.tearDown()
|
||||
}
|
||||
}
|
||||
|
||||
final override fun getTestDataPath() = DevkitJavaTestsUtil.TESTDATA_ABSOLUTE_PATH + "inspections/missingApi"
|
||||
override fun getTestDataPath() = DevkitJavaTestsUtil.TESTDATA_ABSOLUTE_PATH + "inspections/missingApi"
|
||||
|
||||
/**
|
||||
* "Library" classes are put to the same test source root as "client" one,
|
||||
@@ -103,18 +117,4 @@ abstract class MissingRecentApiInspectionTestBase : PluginModuleTestCase() {
|
||||
myFixture.testHighlighting("plugin/missingApiUsages.kt")
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Implementation of [MissingRecentApiInspectionTestBase] for sources with configured IDEA library.
|
||||
*/
|
||||
class MissingRecentApiWithIdeaLibraryInspectionTest : MissingRecentApiInspectionTestBase() {
|
||||
override fun getProjectDescriptor() = PluginProjectWithIdeaLibraryDescriptor()
|
||||
}
|
||||
|
||||
/**
|
||||
* Implementation of [MissingRecentApiInspectionTestBase] for sources with configured IDEA JDK.
|
||||
*/
|
||||
class MissingRecentApiWithIdeaJdkInspectionTest : MissingRecentApiInspectionTestBase() {
|
||||
override fun getProjectDescriptor() = PluginProjectWithIdeaJdkDescriptor()
|
||||
}
|
||||
-89
@@ -1,89 +0,0 @@
|
||||
// Copyright 2000-2018 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file.
|
||||
package org.jetbrains.idea.devkit.kotlin.inspections.missingApi.project
|
||||
|
||||
import com.intellij.openapi.application.PathManager
|
||||
import com.intellij.openapi.application.runWriteAction
|
||||
import com.intellij.openapi.components.BaseState
|
||||
import com.intellij.openapi.editor.Editor
|
||||
import com.intellij.openapi.module.Module
|
||||
import com.intellij.openapi.module.ModuleType
|
||||
import com.intellij.openapi.projectRoots.ProjectJdkTable
|
||||
import com.intellij.openapi.projectRoots.Sdk
|
||||
import com.intellij.openapi.projectRoots.SdkModificator
|
||||
import com.intellij.openapi.roots.ContentEntry
|
||||
import com.intellij.openapi.roots.LanguageLevelModuleExtension
|
||||
import com.intellij.openapi.roots.ModifiableRootModel
|
||||
import com.intellij.openapi.roots.OrderRootType
|
||||
import com.intellij.openapi.util.io.FileUtil
|
||||
import com.intellij.openapi.vfs.VfsUtil
|
||||
import com.intellij.pom.java.LanguageLevel
|
||||
import com.intellij.testFramework.IdeaTestUtil
|
||||
import com.intellij.testFramework.LightProjectDescriptor
|
||||
import com.intellij.testFramework.PsiTestUtil
|
||||
import com.intellij.util.PathUtil
|
||||
import org.jetbrains.idea.devkit.module.PluginModuleType
|
||||
import org.jetbrains.idea.devkit.projectRoots.IdeaJdk
|
||||
import org.jetbrains.idea.devkit.projectRoots.Sandbox
|
||||
import java.io.File
|
||||
|
||||
/**
|
||||
* Descriptor of an IDEA plugin project with configured IDEA JDK.
|
||||
*/
|
||||
class PluginProjectWithIdeaJdkDescriptor : LightProjectDescriptor() {
|
||||
|
||||
companion object {
|
||||
|
||||
private const val IDEA_SDK_NAME = "IDEA plugin SDK"
|
||||
|
||||
fun disposeIdeaJdk() {
|
||||
val ideaSdk = ProjectJdkTable.getInstance().findJdk(IDEA_SDK_NAME) ?: return
|
||||
runWriteAction {
|
||||
ProjectJdkTable.getInstance().removeJdk(ideaSdk)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
override fun getModuleType(): ModuleType<*> = PluginModuleType.getInstance()
|
||||
|
||||
override fun getSdk(): Sdk =
|
||||
runWriteAction {
|
||||
val jdkTable = ProjectJdkTable.getInstance()
|
||||
val sdkType = IdeaJdk.getInstance()
|
||||
val ideaSdk = jdkTable.createSdk(IDEA_SDK_NAME, sdkType)
|
||||
val sdkModificator = ideaSdk.sdkModificator
|
||||
|
||||
sdkModificator.setupInternalJdk(ideaSdk, IdeaTestUtil.getMockJdk18())
|
||||
|
||||
sdkModificator.addIdeaJarContainingClassToClassPath(Editor::class.java)
|
||||
sdkModificator.addIdeaJarContainingClassToClassPath(BaseState::class.java)
|
||||
|
||||
sdkModificator.commitChanges()
|
||||
jdkTable.addJdk(ideaSdk)
|
||||
ideaSdk
|
||||
}
|
||||
|
||||
override fun configureModule(module: Module, model: ModifiableRootModel, contentEntry: ContentEntry) {
|
||||
super.configureModule(module, model, contentEntry)
|
||||
val moduleExtension = model.getModuleExtension(LanguageLevelModuleExtension::class.java)
|
||||
moduleExtension.languageLevel = LanguageLevel.HIGHEST
|
||||
|
||||
val kotlinStdlibJar = File(PathUtil.getJarPathForClass(Function::class.java))
|
||||
PsiTestUtil.addLibrary(model, "kotlin-stdlib", kotlinStdlibJar.parent, kotlinStdlibJar.name)
|
||||
}
|
||||
|
||||
private fun SdkModificator.setupInternalJdk(ideaSdk: Sdk, javaJdk: Sdk) {
|
||||
for (javaRoot in javaJdk.rootProvider.getFiles(OrderRootType.CLASSES)) {
|
||||
addRoot(javaRoot, OrderRootType.CLASSES)
|
||||
}
|
||||
val sandboxHome = FileUtil.join(FileUtil.getTempDirectory(), "plugins-sandbox")
|
||||
sdkAdditionalData = Sandbox(sandboxHome, javaJdk, ideaSdk)
|
||||
versionString = javaJdk.versionString
|
||||
}
|
||||
|
||||
private fun SdkModificator.addIdeaJarContainingClassToClassPath(clazz: Class<*>) {
|
||||
val jarFile = File(FileUtil.toSystemIndependentName(PathManager.getJarPathForClass(clazz)!!))
|
||||
val virtualFile = VfsUtil.findFileByIoFile(jarFile, true)
|
||||
addRoot(virtualFile!!, OrderRootType.CLASSES)
|
||||
}
|
||||
|
||||
}
|
||||
-89
@@ -1,89 +0,0 @@
|
||||
// Copyright 2000-2018 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file.
|
||||
package org.jetbrains.idea.devkit.kotlin.inspections.missingApi.project
|
||||
|
||||
import com.intellij.openapi.application.PathManager
|
||||
import com.intellij.openapi.application.runReadAction
|
||||
import com.intellij.openapi.application.runWriteAction
|
||||
import com.intellij.openapi.components.BaseState
|
||||
import com.intellij.openapi.editor.Editor
|
||||
import com.intellij.openapi.module.Module
|
||||
import com.intellij.openapi.module.ModuleType
|
||||
import com.intellij.openapi.project.Project
|
||||
import com.intellij.openapi.projectRoots.Sdk
|
||||
import com.intellij.openapi.roots.ContentEntry
|
||||
import com.intellij.openapi.roots.LanguageLevelModuleExtension
|
||||
import com.intellij.openapi.roots.ModifiableRootModel
|
||||
import com.intellij.openapi.roots.OrderRootType
|
||||
import com.intellij.openapi.roots.libraries.Library
|
||||
import com.intellij.openapi.roots.libraries.LibraryTablesRegistrar
|
||||
import com.intellij.openapi.util.io.FileUtil
|
||||
import com.intellij.openapi.vfs.VfsUtil
|
||||
import com.intellij.pom.java.LanguageLevel
|
||||
import com.intellij.testFramework.IdeaTestUtil
|
||||
import com.intellij.testFramework.LightProjectDescriptor
|
||||
import com.intellij.testFramework.PsiTestUtil
|
||||
import com.intellij.util.PathUtil
|
||||
import org.jetbrains.idea.devkit.module.PluginModuleType
|
||||
import java.io.File
|
||||
|
||||
/**
|
||||
* Descriptor of an IDEA plugin project with configured IDEA library (not JDK).
|
||||
*/
|
||||
class PluginProjectWithIdeaLibraryDescriptor : LightProjectDescriptor() {
|
||||
|
||||
companion object {
|
||||
private const val IDEA_LIBRARY_NAME = "IDEA library"
|
||||
|
||||
fun disposeIdeaLibrary(project: Project) {
|
||||
val libraryTable = LibraryTablesRegistrar.getInstance().getLibraryTable(project)
|
||||
val library = runReadAction {
|
||||
libraryTable.getLibraryByName(IDEA_LIBRARY_NAME)
|
||||
} ?: return
|
||||
|
||||
runWriteAction {
|
||||
libraryTable.removeLibrary(library)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
override fun getModuleType(): ModuleType<*> = PluginModuleType.getInstance()
|
||||
|
||||
override fun configureModule(module: Module, model: ModifiableRootModel, contentEntry: ContentEntry) {
|
||||
super.configureModule(module, model, contentEntry)
|
||||
|
||||
val moduleExtension = model.getModuleExtension(LanguageLevelModuleExtension::class.java)
|
||||
moduleExtension.languageLevel = LanguageLevel.HIGHEST
|
||||
|
||||
val library = createIdeaLibrary(module)
|
||||
model.addLibraryEntry(library)
|
||||
|
||||
val kotlinStdlibJar = File(PathUtil.getJarPathForClass(Function::class.java))
|
||||
PsiTestUtil.addLibrary(model, "kotlin-stdlib", kotlinStdlibJar.parent, kotlinStdlibJar.name)
|
||||
}
|
||||
|
||||
private fun createIdeaLibrary(module: Module): Library {
|
||||
val libraryTable = LibraryTablesRegistrar.getInstance().getLibraryTable(module.project)
|
||||
val library = runWriteAction {
|
||||
libraryTable.createLibrary(IDEA_LIBRARY_NAME)
|
||||
}
|
||||
|
||||
runWriteAction {
|
||||
val modifiableModel = library.modifiableModel
|
||||
|
||||
modifiableModel.addIdeaJarContainingClassToClassPath(Editor::class.java)
|
||||
modifiableModel.addIdeaJarContainingClassToClassPath(BaseState::class.java)
|
||||
|
||||
modifiableModel.commit()
|
||||
}
|
||||
return library
|
||||
}
|
||||
|
||||
override fun getSdk(): Sdk = IdeaTestUtil.getMockJdk18()
|
||||
|
||||
private fun Library.ModifiableModel.addIdeaJarContainingClassToClassPath(clazz: Class<*>) {
|
||||
val jarFile = File(FileUtil.toSystemIndependentName(PathManager.getJarPathForClass(clazz)!!))
|
||||
val virtualFile = VfsUtil.findFileByIoFile(jarFile, true)
|
||||
addRoot(virtualFile!!, OrderRootType.CLASSES)
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user