Store addUnambiguousImportsOnTheFly in kotlin code insight settings

store optimizeImportsOnTheFly in kotlin code insight workspace settings

#KT-36034 Fixed
This commit is contained in:
Vladimir Dolzhenko
2019-11-05 17:09:29 +01:00
parent 70ed03ac4b
commit 3a90e2dd75
6 changed files with 48 additions and 19 deletions
@@ -3483,6 +3483,10 @@
<projectService serviceInterface="org.jetbrains.kotlin.idea.codeInsight.KotlinCodeInsightWorkspaceSettings" <projectService serviceInterface="org.jetbrains.kotlin.idea.codeInsight.KotlinCodeInsightWorkspaceSettings"
serviceImplementation="org.jetbrains.kotlin.idea.codeInsight.KotlinCodeInsightWorkspaceSettings"/> serviceImplementation="org.jetbrains.kotlin.idea.codeInsight.KotlinCodeInsightWorkspaceSettings"/>
<applicationService serviceInterface="org.jetbrains.kotlin.idea.codeInsight.KotlinCodeInsightSettings"
serviceImplementation="org.jetbrains.kotlin.idea.codeInsight.KotlinCodeInsightSettings"/>
<referenceImporter implementation="org.jetbrains.kotlin.idea.quickfix.KotlinReferenceImporter"/> <referenceImporter implementation="org.jetbrains.kotlin.idea.quickfix.KotlinReferenceImporter"/>
<autoImportOptionsProvider instance="org.jetbrains.kotlin.idea.codeInsight.KotlinCodeInsightWorkspaceSettingsProvider"/> <autoImportOptionsProvider instance="org.jetbrains.kotlin.idea.codeInsight.KotlinCodeInsightWorkspaceSettingsProvider"/>
@@ -6,15 +6,13 @@
package org.jetbrains.kotlin.idea.codeInsight package org.jetbrains.kotlin.idea.codeInsight
import com.intellij.openapi.components.* import com.intellij.openapi.components.*
import com.intellij.openapi.components.StoragePathMacros.WORKSPACE_FILE
import com.intellij.openapi.project.Project import com.intellij.openapi.project.Project
import com.intellij.util.xmlb.XmlSerializerUtil import com.intellij.util.xmlb.XmlSerializerUtil
@State(name = "KotlinCodeInsightWorkspaceSettings", storages = [Storage("kotlinCodeInsightSettings.xml")]) @State(name = "KotlinCodeInsightWorkspaceSettings", storages = [Storage(WORKSPACE_FILE)])
class KotlinCodeInsightWorkspaceSettings : PersistentStateComponent<KotlinCodeInsightWorkspaceSettings> { class KotlinCodeInsightWorkspaceSettings : PersistentStateComponent<KotlinCodeInsightWorkspaceSettings> {
@JvmField
var addUnambiguousImportsOnTheFly = false
@JvmField @JvmField
var optimizeImportsOnTheFly = false var optimizeImportsOnTheFly = false
@@ -30,4 +28,24 @@ class KotlinCodeInsightWorkspaceSettings : PersistentStateComponent<KotlinCodeIn
} }
}
@State(name = "KotlinCodeInsightSettings", storages = [Storage("editor.codeinsight.xml")])
class KotlinCodeInsightSettings : PersistentStateComponent<KotlinCodeInsightSettings> {
@JvmField
var addUnambiguousImportsOnTheFly = false
override fun getState() = this
override fun loadState(state: KotlinCodeInsightSettings) = XmlSerializerUtil.copyBean(state, this)
companion object {
fun getInstance(): KotlinCodeInsightSettings {
return ServiceManager.getService(KotlinCodeInsightSettings::class.java)
}
}
} }
@@ -33,26 +33,32 @@ public class KotlinCodeInsightWorkspaceSettingsProvider implements AutoImportOpt
return myPanel; return myPanel;
} }
private KotlinCodeInsightWorkspaceSettings settings() { private KotlinCodeInsightSettings settings() {
return KotlinCodeInsightSettings.Companion.getInstance();
}
private KotlinCodeInsightWorkspaceSettings projectSettings() {
return KotlinCodeInsightWorkspaceSettings.Companion.getInstance(project); return KotlinCodeInsightWorkspaceSettings.Companion.getInstance(project);
} }
@Override @Override
public boolean isModified() { public boolean isModified() {
KotlinCodeInsightWorkspaceSettings settings = settings(); KotlinCodeInsightSettings settings = settings();
return settings.optimizeImportsOnTheFly != myOptimizeImportsOnTheFly.isSelected() KotlinCodeInsightWorkspaceSettings projectSettings = projectSettings();
return projectSettings.optimizeImportsOnTheFly != myOptimizeImportsOnTheFly.isSelected()
|| settings.addUnambiguousImportsOnTheFly != myAddUnambiguousImportsOnTheFly.isSelected(); || settings.addUnambiguousImportsOnTheFly != myAddUnambiguousImportsOnTheFly.isSelected();
} }
@Override @Override
public void apply() throws ConfigurationException { public void apply() throws ConfigurationException {
KotlinCodeInsightWorkspaceSettings settings = settings(); KotlinCodeInsightSettings settings = settings();
KotlinCodeInsightWorkspaceSettings projectSettings = projectSettings();
settings.optimizeImportsOnTheFly = myOptimizeImportsOnTheFly.isSelected(); projectSettings.optimizeImportsOnTheFly = myOptimizeImportsOnTheFly.isSelected();
settings.addUnambiguousImportsOnTheFly = myAddUnambiguousImportsOnTheFly.isSelected(); settings.addUnambiguousImportsOnTheFly = myAddUnambiguousImportsOnTheFly.isSelected();
final Map<String, String> data = new HashMap<>(); final Map<String, String> data = new HashMap<>();
data.put("optimizeImportsOnTheFly", Boolean.toString(settings.optimizeImportsOnTheFly)); data.put("optimizeImportsOnTheFly", Boolean.toString(projectSettings.optimizeImportsOnTheFly));
data.put("addUnambiguousImportsOnTheFly", Boolean.toString(settings.addUnambiguousImportsOnTheFly)); data.put("addUnambiguousImportsOnTheFly", Boolean.toString(settings.addUnambiguousImportsOnTheFly));
KotlinFUSLogger.Companion.log(FUSEventGroups.Settings, "KotlinCodeInsightWorkspaceSettings", data); KotlinFUSLogger.Companion.log(FUSEventGroups.Settings, "KotlinCodeInsightWorkspaceSettings", data);
@@ -60,8 +66,9 @@ public class KotlinCodeInsightWorkspaceSettingsProvider implements AutoImportOpt
@Override @Override
public void reset() { public void reset() {
KotlinCodeInsightWorkspaceSettings settings = settings(); KotlinCodeInsightSettings settings = settings();
myOptimizeImportsOnTheFly.setSelected(settings.optimizeImportsOnTheFly); KotlinCodeInsightWorkspaceSettings projectSettings = projectSettings();
myOptimizeImportsOnTheFly.setSelected(projectSettings.optimizeImportsOnTheFly);
myAddUnambiguousImportsOnTheFly.setSelected(settings.addUnambiguousImportsOnTheFly); myAddUnambiguousImportsOnTheFly.setSelected(settings.addUnambiguousImportsOnTheFly);
} }
} }
@@ -7,7 +7,7 @@ package org.jetbrains.kotlin.idea.quickfix
import com.intellij.openapi.editor.Editor import com.intellij.openapi.editor.Editor
import org.jetbrains.kotlin.diagnostics.Diagnostic import org.jetbrains.kotlin.diagnostics.Diagnostic
import org.jetbrains.kotlin.idea.codeInsight.KotlinCodeInsightWorkspaceSettings import org.jetbrains.kotlin.idea.codeInsight.KotlinCodeInsightSettings
import org.jetbrains.kotlin.psi.KtSimpleNameExpression import org.jetbrains.kotlin.psi.KtSimpleNameExpression
internal class ImportFix(expression: KtSimpleNameExpression) : AbstractImportFix(expression, MyFactory) { internal class ImportFix(expression: KtSimpleNameExpression) : AbstractImportFix(expression, MyFactory) {
@@ -15,7 +15,7 @@ internal class ImportFix(expression: KtSimpleNameExpression) : AbstractImportFix
if (isOutdated()) return false if (isOutdated()) return false
val element = element ?: return false val element = element ?: return false
val project = element.project val project = element.project
if (!KotlinCodeInsightWorkspaceSettings.getInstance(project).addUnambiguousImportsOnTheFly) return false if (!KotlinCodeInsightSettings.getInstance().addUnambiguousImportsOnTheFly) return false
val addImportAction = createAction(project, editor, element) val addImportAction = createAction(project, editor, element)
if (addImportAction.isUnambiguous()) { if (addImportAction.isUnambiguous()) {
addImportAction.execute() addImportAction.execute()
@@ -26,7 +26,7 @@ import org.jetbrains.kotlin.descriptors.ClassDescriptor
import org.jetbrains.kotlin.idea.actions.createSingleImportAction import org.jetbrains.kotlin.idea.actions.createSingleImportAction
import org.jetbrains.kotlin.idea.caches.resolve.analyze import org.jetbrains.kotlin.idea.caches.resolve.analyze
import org.jetbrains.kotlin.idea.caches.resolve.resolveImportReference import org.jetbrains.kotlin.idea.caches.resolve.resolveImportReference
import org.jetbrains.kotlin.idea.codeInsight.KotlinCodeInsightWorkspaceSettings import org.jetbrains.kotlin.idea.codeInsight.KotlinCodeInsightSettings
import org.jetbrains.kotlin.idea.core.targetDescriptors import org.jetbrains.kotlin.idea.core.targetDescriptors
import org.jetbrains.kotlin.idea.references.mainReference import org.jetbrains.kotlin.idea.references.mainReference
import org.jetbrains.kotlin.psi.KtFile import org.jetbrains.kotlin.psi.KtFile
@@ -47,7 +47,7 @@ class KotlinReferenceImporter : ReferenceImporter {
} }
fun KtSimpleNameExpression.autoImport(): Boolean { fun KtSimpleNameExpression.autoImport(): Boolean {
if (!KotlinCodeInsightWorkspaceSettings.getInstance(project).addUnambiguousImportsOnTheFly) return false if (!KotlinCodeInsightSettings.getInstance().addUnambiguousImportsOnTheFly) return false
if (!DaemonListeners.canChangeFileSilently(file)) return false if (!DaemonListeners.canChangeFileSilently(file)) return false
if (hasUnresolvedImportWhichCanImport(getReferencedName())) return false if (hasUnresolvedImportWhichCanImport(getReferencedName())) return false
@@ -27,7 +27,7 @@ import org.jetbrains.kotlin.descriptors.ClassDescriptor
import org.jetbrains.kotlin.idea.actions.createSingleImportAction import org.jetbrains.kotlin.idea.actions.createSingleImportAction
import org.jetbrains.kotlin.idea.caches.resolve.analyze import org.jetbrains.kotlin.idea.caches.resolve.analyze
import org.jetbrains.kotlin.idea.caches.resolve.resolveImportReference import org.jetbrains.kotlin.idea.caches.resolve.resolveImportReference
import org.jetbrains.kotlin.idea.codeInsight.KotlinCodeInsightWorkspaceSettings import org.jetbrains.kotlin.idea.codeInsight.KotlinCodeInsightSettings
import org.jetbrains.kotlin.idea.core.targetDescriptors import org.jetbrains.kotlin.idea.core.targetDescriptors
import org.jetbrains.kotlin.idea.references.mainReference import org.jetbrains.kotlin.idea.references.mainReference
import org.jetbrains.kotlin.psi.KtExpression import org.jetbrains.kotlin.psi.KtExpression
@@ -47,7 +47,7 @@ class KotlinReferenceImporter : ReferenceImporter {
val nameExpression = file.findElementAt(offset)?.parent as? KtSimpleNameExpression ?: return false val nameExpression = file.findElementAt(offset)?.parent as? KtSimpleNameExpression ?: return false
if (!KotlinCodeInsightWorkspaceSettings.getInstance(file.project).addUnambiguousImportsOnTheFly) return false if (!KotlinCodeInsightSettings.getInstance().addUnambiguousImportsOnTheFly) return false
val importFix: ImportFixBase<out KtExpression>? = findImportFixAt(editor, file, offset) val importFix: ImportFixBase<out KtExpression>? = findImportFixAt(editor, file, offset)
if (importFix != null && !importFix.isOutdated()) { if (importFix != null && !importFix.isOutdated()) {
@@ -107,7 +107,7 @@ class KotlinReferenceImporter : ReferenceImporter {
} }
private fun KtSimpleNameExpression.autoImport(editor: Editor, file: KtFile): Boolean { private fun KtSimpleNameExpression.autoImport(editor: Editor, file: KtFile): Boolean {
if (!KotlinCodeInsightWorkspaceSettings.getInstance(file.project).addUnambiguousImportsOnTheFly) return false if (!KotlinCodeInsightSettings.getInstance().addUnambiguousImportsOnTheFly) return false
if (!DaemonListeners.canChangeFileSilently(file)) return false if (!DaemonListeners.canChangeFileSilently(file)) return false
if (hasUnresolvedImportWhichCanImport(file, getReferencedName())) return false if (hasUnresolvedImportWhichCanImport(file, getReferencedName())) return false