Don't show migration dialog if no actual migrations are available (KT-26889)
#KT-26889 Fixed
This commit is contained in:
+2
@@ -70,6 +70,8 @@ class GradleMigrateTest : GradleImportingTestCase() {
|
|||||||
MigrationInfo.create("1.1.0", ApiVersion.KOTLIN_1_2, LanguageVersion.KOTLIN_1_2, newStdlibVersion = "1.2.0"),
|
MigrationInfo.create("1.1.0", ApiVersion.KOTLIN_1_2, LanguageVersion.KOTLIN_1_2, newStdlibVersion = "1.2.0"),
|
||||||
migrateComponentState?.migrationInfo
|
migrateComponentState?.migrationInfo
|
||||||
)
|
)
|
||||||
|
|
||||||
|
Assert.assertEquals(false, migrateComponentState?.hasApplicableTools)
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun doMigrationTest(beforeText: String, afterText: String): MigrationTestState? {
|
private fun doMigrationTest(beforeText: String, afterText: String): MigrationTestState? {
|
||||||
|
|||||||
+14
-5
@@ -29,6 +29,7 @@ import org.jetbrains.kotlin.idea.framework.GRADLE_SYSTEM_ID
|
|||||||
import org.jetbrains.kotlin.idea.framework.MAVEN_SYSTEM_ID
|
import org.jetbrains.kotlin.idea.framework.MAVEN_SYSTEM_ID
|
||||||
import org.jetbrains.kotlin.idea.migration.CodeMigrationAction
|
import org.jetbrains.kotlin.idea.migration.CodeMigrationAction
|
||||||
import org.jetbrains.kotlin.idea.migration.CodeMigrationToggleAction
|
import org.jetbrains.kotlin.idea.migration.CodeMigrationToggleAction
|
||||||
|
import org.jetbrains.kotlin.idea.migration.applicableMigrationTools
|
||||||
import org.jetbrains.kotlin.idea.project.languageVersionSettings
|
import org.jetbrains.kotlin.idea.project.languageVersionSettings
|
||||||
import org.jetbrains.kotlin.idea.util.application.runReadAction
|
import org.jetbrains.kotlin.idea.util.application.runReadAction
|
||||||
import org.jetbrains.kotlin.idea.util.runReadActionInSmartMode
|
import org.jetbrains.kotlin.idea.util.runReadActionInSmartMode
|
||||||
@@ -48,7 +49,7 @@ class KotlinMigrationProjectComponent(val project: Project) {
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
class MigrationTestState(val migrationInfo: MigrationInfo?)
|
class MigrationTestState(val migrationInfo: MigrationInfo?, val hasApplicableTools: Boolean)
|
||||||
|
|
||||||
@TestOnly
|
@TestOnly
|
||||||
fun setImportFinishListener(newListener: ((MigrationTestState?) -> Unit)?) {
|
fun setImportFinishListener(newListener: ((MigrationTestState?) -> Unit)?) {
|
||||||
@@ -61,8 +62,8 @@ class KotlinMigrationProjectComponent(val project: Project) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun notifyFinish(migrationInfo: MigrationInfo?) {
|
private fun notifyFinish(migrationInfo: MigrationInfo?, hasApplicableTools: Boolean) {
|
||||||
importFinishListener?.invoke(MigrationTestState(migrationInfo))
|
importFinishListener?.invoke(MigrationTestState(migrationInfo, hasApplicableTools))
|
||||||
}
|
}
|
||||||
|
|
||||||
fun onImportAboutToStart() {
|
fun onImportAboutToStart() {
|
||||||
@@ -76,12 +77,13 @@ class KotlinMigrationProjectComponent(val project: Project) {
|
|||||||
|
|
||||||
fun onImportFinished() {
|
fun onImportFinished() {
|
||||||
if (!CodeMigrationToggleAction.isEnabled(project) || old == null) {
|
if (!CodeMigrationToggleAction.isEnabled(project) || old == null) {
|
||||||
notifyFinish(null)
|
notifyFinish(null, false)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
ApplicationManager.getApplication().executeOnPooledThread {
|
ApplicationManager.getApplication().executeOnPooledThread {
|
||||||
var migrationInfo: MigrationInfo? = null
|
var migrationInfo: MigrationInfo? = null
|
||||||
|
var hasApplicableTools = false
|
||||||
|
|
||||||
try {
|
try {
|
||||||
val new = project.runReadActionInSmartMode {
|
val new = project.runReadActionInSmartMode {
|
||||||
@@ -94,6 +96,13 @@ class KotlinMigrationProjectComponent(val project: Project) {
|
|||||||
|
|
||||||
migrationInfo = prepareMigrationInfo(localOld, new) ?: return@executeOnPooledThread
|
migrationInfo = prepareMigrationInfo(localOld, new) ?: return@executeOnPooledThread
|
||||||
|
|
||||||
|
if (applicableMigrationTools(migrationInfo).isEmpty()) {
|
||||||
|
hasApplicableTools = false
|
||||||
|
return@executeOnPooledThread
|
||||||
|
} else {
|
||||||
|
hasApplicableTools = true
|
||||||
|
}
|
||||||
|
|
||||||
if (ApplicationManager.getApplication().isUnitTestMode) {
|
if (ApplicationManager.getApplication().isUnitTestMode) {
|
||||||
return@executeOnPooledThread
|
return@executeOnPooledThread
|
||||||
}
|
}
|
||||||
@@ -114,7 +123,7 @@ class KotlinMigrationProjectComponent(val project: Project) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
} finally {
|
} finally {
|
||||||
notifyFinish(migrationInfo)
|
notifyFinish(migrationInfo, hasApplicableTools)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -47,7 +47,7 @@ public class CodeInspectionAction extends BaseAnalysisAction {
|
|||||||
GlobalInspectionContextImpl inspectionContext = getGlobalInspectionContext(project);
|
GlobalInspectionContextImpl inspectionContext = getGlobalInspectionContext(project);
|
||||||
|
|
||||||
InspectionManagerEx managerEx = (InspectionManagerEx) InspectionManager.getInstance(project);
|
InspectionManagerEx managerEx = (InspectionManagerEx) InspectionManager.getInstance(project);
|
||||||
myExternalProfile = createMigrationProfile(managerEx, null);
|
myExternalProfile = createMigrationProfile(managerEx, null, null);
|
||||||
|
|
||||||
inspectionContext.setExternalProfile(myExternalProfile);
|
inspectionContext.setExternalProfile(myExternalProfile);
|
||||||
inspectionContext.setCurrentScope(scope);
|
inspectionContext.setCurrentScope(scope);
|
||||||
|
|||||||
@@ -5,6 +5,8 @@
|
|||||||
|
|
||||||
package org.jetbrains.kotlin.idea.migration
|
package org.jetbrains.kotlin.idea.migration
|
||||||
|
|
||||||
|
import com.intellij.codeInspection.InspectionEP
|
||||||
|
import com.intellij.codeInspection.InspectionProfileEntry
|
||||||
import com.intellij.codeInspection.ex.InspectionManagerEx
|
import com.intellij.codeInspection.ex.InspectionManagerEx
|
||||||
import com.intellij.codeInspection.ex.InspectionProfileImpl
|
import com.intellij.codeInspection.ex.InspectionProfileImpl
|
||||||
import com.intellij.codeInspection.ex.InspectionToolWrapper
|
import com.intellij.codeInspection.ex.InspectionToolWrapper
|
||||||
@@ -14,18 +16,18 @@ import com.intellij.openapi.util.WriteExternalException
|
|||||||
import com.intellij.profile.codeInspection.InspectionProfileManager
|
import com.intellij.profile.codeInspection.InspectionProfileManager
|
||||||
import com.intellij.psi.PsiElement
|
import com.intellij.psi.PsiElement
|
||||||
import org.jdom.Element
|
import org.jdom.Element
|
||||||
|
import org.jetbrains.kotlin.idea.configuration.MigrationInfo
|
||||||
import org.jetbrains.kotlin.idea.quickfix.migration.MigrationFix
|
import org.jetbrains.kotlin.idea.quickfix.migration.MigrationFix
|
||||||
import java.util.LinkedHashSet
|
import java.util.*
|
||||||
|
|
||||||
fun createMigrationProfile(managerEx: InspectionManagerEx, psiElement: PsiElement?): InspectionProfileImpl {
|
fun createMigrationProfile(
|
||||||
|
managerEx: InspectionManagerEx,
|
||||||
|
psiElement: PsiElement?,
|
||||||
|
migrationInfo: MigrationInfo? = null
|
||||||
|
): InspectionProfileImpl {
|
||||||
val rootProfile = InspectionProfileManager.getInstance().currentProfile
|
val rootProfile = InspectionProfileManager.getInstance().currentProfile
|
||||||
|
|
||||||
val migrationFixWrappers = rootProfile.allTools.asSequence()
|
val migrationFixWrappers = applicableMigrationToolsImpl(migrationInfo)
|
||||||
.map { it.tool }
|
|
||||||
.filter { toolWrapper: InspectionToolWrapper<*, *> ->
|
|
||||||
toolWrapper.tool is MigrationFix
|
|
||||||
}
|
|
||||||
.toList()
|
|
||||||
|
|
||||||
val allWrappers = LinkedHashSet<InspectionToolWrapper<*, *>>()
|
val allWrappers = LinkedHashSet<InspectionToolWrapper<*, *>>()
|
||||||
for (toolWrapper in migrationFixWrappers) {
|
for (toolWrapper in migrationFixWrappers) {
|
||||||
@@ -50,4 +52,18 @@ fun createMigrationProfile(managerEx: InspectionManagerEx, psiElement: PsiElemen
|
|||||||
}
|
}
|
||||||
|
|
||||||
return model
|
return model
|
||||||
|
}
|
||||||
|
|
||||||
|
fun applicableMigrationTools(migrationInfo: MigrationInfo) = applicableMigrationToolsImpl(migrationInfo)
|
||||||
|
|
||||||
|
private fun applicableMigrationToolsImpl(migrationInfo: MigrationInfo?): List<InspectionToolWrapper<InspectionProfileEntry, InspectionEP>> {
|
||||||
|
val rootProfile = InspectionProfileManager.getInstance().currentProfile
|
||||||
|
|
||||||
|
return rootProfile.allTools.asSequence()
|
||||||
|
.map { it.tool }
|
||||||
|
.filter { toolWrapper: InspectionToolWrapper<*, *> ->
|
||||||
|
val tool = toolWrapper.tool
|
||||||
|
tool is MigrationFix && (migrationInfo == null || tool.isApplicable(migrationInfo))
|
||||||
|
}
|
||||||
|
.toList()
|
||||||
}
|
}
|
||||||
Reference in New Issue
Block a user