From 894db730b20633a8f53f9f214cd0ee664cf1c63f Mon Sep 17 00:00:00 2001 From: Nikolay Krasko Date: Mon, 29 Jan 2018 15:52:04 +0300 Subject: [PATCH] Fix modification check for Kotlin import settings (KT-22557) #KT-22557 Fixed --- .../idea/formatter/ImportSettingsPanel.kt | 37 ++++++++++++++++--- 1 file changed, 31 insertions(+), 6 deletions(-) diff --git a/idea/src/org/jetbrains/kotlin/idea/formatter/ImportSettingsPanel.kt b/idea/src/org/jetbrains/kotlin/idea/formatter/ImportSettingsPanel.kt index 98061448776..cd0ba5f8b86 100644 --- a/idea/src/org/jetbrains/kotlin/idea/formatter/ImportSettingsPanel.kt +++ b/idea/src/org/jetbrains/kotlin/idea/formatter/ImportSettingsPanel.kt @@ -25,7 +25,6 @@ import com.intellij.psi.codeStyle.CodeStyleSettings import com.intellij.psi.codeStyle.PackageEntryTable import com.intellij.ui.OptionGroup import com.intellij.ui.components.JBScrollPane -import org.jdom.Element import org.jetbrains.kotlin.idea.core.formatter.KotlinCodeStyleSettings import java.awt.BorderLayout import java.awt.GridBagConstraints @@ -122,11 +121,37 @@ class ImportSettingsPanel(private val commonSettings: CodeStyleSettings) : JPane } fun isModified(settings: KotlinCodeStyleSettings): Boolean { - val tempSettings = KotlinCodeStyleSettings(commonSettings) - apply(tempSettings, dropEmptyPackages = false) - val root = Element("fake") - tempSettings.writeExternal(root, settings) - return root.children.isNotEmpty() + return with(settings) { + var isModified: Boolean = false + isModified = isModified || nameCountToUseStarImportSelector.value != NAME_COUNT_TO_USE_STAR_IMPORT + isModified = isModified || nameCountToUseStarImportForMembersSelector.value != NAME_COUNT_TO_USE_STAR_IMPORT_FOR_MEMBERS + isModified = isModified || isModified(cbImportNestedClasses, IMPORT_NESTED_CLASSES) + isModified = isModified || isModified(starImportPackageEntryTable, PACKAGES_TO_USE_STAR_IMPORTS) + + isModified + } + } + + companion object { + private fun isModified(checkBox: JCheckBox, value: Boolean): Boolean { + return checkBox.isSelected != value + } + + private fun isModified(list: PackageEntryTable, table: PackageEntryTable): Boolean { + if (list.entryCount != table.entryCount) { + return true + } + + for (i in 0 until list.entryCount) { + val entry1 = list.getEntryAt(i) + val entry2 = table.getEntryAt(i) + if (entry1 != entry2) { + return true + } + } + + return false + } } private class NameCountToUseStarImportSelector(title: String) : OptionGroup(title) {