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"),
|
||||
migrateComponentState?.migrationInfo
|
||||
)
|
||||
|
||||
Assert.assertEquals(false, migrateComponentState?.hasApplicableTools)
|
||||
}
|
||||
|
||||
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.migration.CodeMigrationAction
|
||||
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.util.application.runReadAction
|
||||
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
|
||||
fun setImportFinishListener(newListener: ((MigrationTestState?) -> Unit)?) {
|
||||
@@ -61,8 +62,8 @@ class KotlinMigrationProjectComponent(val project: Project) {
|
||||
}
|
||||
}
|
||||
|
||||
private fun notifyFinish(migrationInfo: MigrationInfo?) {
|
||||
importFinishListener?.invoke(MigrationTestState(migrationInfo))
|
||||
private fun notifyFinish(migrationInfo: MigrationInfo?, hasApplicableTools: Boolean) {
|
||||
importFinishListener?.invoke(MigrationTestState(migrationInfo, hasApplicableTools))
|
||||
}
|
||||
|
||||
fun onImportAboutToStart() {
|
||||
@@ -76,12 +77,13 @@ class KotlinMigrationProjectComponent(val project: Project) {
|
||||
|
||||
fun onImportFinished() {
|
||||
if (!CodeMigrationToggleAction.isEnabled(project) || old == null) {
|
||||
notifyFinish(null)
|
||||
notifyFinish(null, false)
|
||||
return
|
||||
}
|
||||
|
||||
ApplicationManager.getApplication().executeOnPooledThread {
|
||||
var migrationInfo: MigrationInfo? = null
|
||||
var hasApplicableTools = false
|
||||
|
||||
try {
|
||||
val new = project.runReadActionInSmartMode {
|
||||
@@ -94,6 +96,13 @@ class KotlinMigrationProjectComponent(val project: Project) {
|
||||
|
||||
migrationInfo = prepareMigrationInfo(localOld, new) ?: return@executeOnPooledThread
|
||||
|
||||
if (applicableMigrationTools(migrationInfo).isEmpty()) {
|
||||
hasApplicableTools = false
|
||||
return@executeOnPooledThread
|
||||
} else {
|
||||
hasApplicableTools = true
|
||||
}
|
||||
|
||||
if (ApplicationManager.getApplication().isUnitTestMode) {
|
||||
return@executeOnPooledThread
|
||||
}
|
||||
@@ -114,7 +123,7 @@ class KotlinMigrationProjectComponent(val project: Project) {
|
||||
}
|
||||
}
|
||||
} finally {
|
||||
notifyFinish(migrationInfo)
|
||||
notifyFinish(migrationInfo, hasApplicableTools)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -47,7 +47,7 @@ public class CodeInspectionAction extends BaseAnalysisAction {
|
||||
GlobalInspectionContextImpl inspectionContext = getGlobalInspectionContext(project);
|
||||
|
||||
InspectionManagerEx managerEx = (InspectionManagerEx) InspectionManager.getInstance(project);
|
||||
myExternalProfile = createMigrationProfile(managerEx, null);
|
||||
myExternalProfile = createMigrationProfile(managerEx, null, null);
|
||||
|
||||
inspectionContext.setExternalProfile(myExternalProfile);
|
||||
inspectionContext.setCurrentScope(scope);
|
||||
|
||||
@@ -5,6 +5,8 @@
|
||||
|
||||
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.InspectionProfileImpl
|
||||
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.psi.PsiElement
|
||||
import org.jdom.Element
|
||||
import org.jetbrains.kotlin.idea.configuration.MigrationInfo
|
||||
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 migrationFixWrappers = rootProfile.allTools.asSequence()
|
||||
.map { it.tool }
|
||||
.filter { toolWrapper: InspectionToolWrapper<*, *> ->
|
||||
toolWrapper.tool is MigrationFix
|
||||
}
|
||||
.toList()
|
||||
val migrationFixWrappers = applicableMigrationToolsImpl(migrationInfo)
|
||||
|
||||
val allWrappers = LinkedHashSet<InspectionToolWrapper<*, *>>()
|
||||
for (toolWrapper in migrationFixWrappers) {
|
||||
@@ -50,4 +52,18 @@ fun createMigrationProfile(managerEx: InspectionManagerEx, psiElement: PsiElemen
|
||||
}
|
||||
|
||||
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