From a77a0d7b3eb7019ad019954972e575855cc554fa Mon Sep 17 00:00:00 2001 From: Sergey Patrikeev Date: Fri, 17 May 2019 13:29:03 +0300 Subject: [PATCH] MissingRecentApiInspection test: replace unnecessary IDE JDK and library project descriptors. GitOrigin-RevId: 801bc9ff02ffe3ff91ebfee40a25f719a89fb0ac --- .../MissingRecentApiInspectionTestBase.kt | 48 +++++----- .../PluginProjectWithIdeaJdkDescriptor.kt | 89 ------------------- .../PluginProjectWithIdeaLibraryDescriptor.kt | 89 ------------------- 3 files changed, 24 insertions(+), 202 deletions(-) delete mode 100644 plugins/devkit/devkit-kotlin-tests/testSrc/org/jetbrains/idea/devkit/kotlin/inspections/missingApi/project/PluginProjectWithIdeaJdkDescriptor.kt delete mode 100644 plugins/devkit/devkit-kotlin-tests/testSrc/org/jetbrains/idea/devkit/kotlin/inspections/missingApi/project/PluginProjectWithIdeaLibraryDescriptor.kt diff --git a/plugins/devkit/devkit-kotlin-tests/testSrc/org/jetbrains/idea/devkit/kotlin/inspections/missingApi/MissingRecentApiInspectionTestBase.kt b/plugins/devkit/devkit-kotlin-tests/testSrc/org/jetbrains/idea/devkit/kotlin/inspections/missingApi/MissingRecentApiInspectionTestBase.kt index 9ce7f79846a9..9a7e7be5dab4 100644 --- a/plugins/devkit/devkit-kotlin-tests/testSrc/org/jetbrains/idea/devkit/kotlin/inspections/missingApi/MissingRecentApiInspectionTestBase.kt +++ b/plugins/devkit/devkit-kotlin-tests/testSrc/org/jetbrains/idea/devkit/kotlin/inspections/missingApi/MissingRecentApiInspectionTestBase.kt @@ -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() } \ No newline at end of file diff --git a/plugins/devkit/devkit-kotlin-tests/testSrc/org/jetbrains/idea/devkit/kotlin/inspections/missingApi/project/PluginProjectWithIdeaJdkDescriptor.kt b/plugins/devkit/devkit-kotlin-tests/testSrc/org/jetbrains/idea/devkit/kotlin/inspections/missingApi/project/PluginProjectWithIdeaJdkDescriptor.kt deleted file mode 100644 index 2cffe8d14c8b..000000000000 --- a/plugins/devkit/devkit-kotlin-tests/testSrc/org/jetbrains/idea/devkit/kotlin/inspections/missingApi/project/PluginProjectWithIdeaJdkDescriptor.kt +++ /dev/null @@ -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) - } - -} \ No newline at end of file diff --git a/plugins/devkit/devkit-kotlin-tests/testSrc/org/jetbrains/idea/devkit/kotlin/inspections/missingApi/project/PluginProjectWithIdeaLibraryDescriptor.kt b/plugins/devkit/devkit-kotlin-tests/testSrc/org/jetbrains/idea/devkit/kotlin/inspections/missingApi/project/PluginProjectWithIdeaLibraryDescriptor.kt deleted file mode 100644 index b80662ffead9..000000000000 --- a/plugins/devkit/devkit-kotlin-tests/testSrc/org/jetbrains/idea/devkit/kotlin/inspections/missingApi/project/PluginProjectWithIdeaLibraryDescriptor.kt +++ /dev/null @@ -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) - } - -} \ No newline at end of file