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"
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"/>
<autoImportOptionsProvider instance="org.jetbrains.kotlin.idea.codeInsight.KotlinCodeInsightWorkspaceSettingsProvider"/>
@@ -6,15 +6,13 @@
package org.jetbrains.kotlin.idea.codeInsight
import com.intellij.openapi.components.*
import com.intellij.openapi.components.StoragePathMacros.WORKSPACE_FILE
import com.intellij.openapi.project.Project
import com.intellij.util.xmlb.XmlSerializerUtil
@State(name = "KotlinCodeInsightWorkspaceSettings", storages = [Storage("kotlinCodeInsightSettings.xml")])
@State(name = "KotlinCodeInsightWorkspaceSettings", storages = [Storage(WORKSPACE_FILE)])
class KotlinCodeInsightWorkspaceSettings : PersistentStateComponent<KotlinCodeInsightWorkspaceSettings> {
@JvmField
var addUnambiguousImportsOnTheFly = false
@JvmField
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;
}
private KotlinCodeInsightWorkspaceSettings settings() {
private KotlinCodeInsightSettings settings() {
return KotlinCodeInsightSettings.Companion.getInstance();
}
private KotlinCodeInsightWorkspaceSettings projectSettings() {
return KotlinCodeInsightWorkspaceSettings.Companion.getInstance(project);
}
@Override
public boolean isModified() {
KotlinCodeInsightWorkspaceSettings settings = settings();
return settings.optimizeImportsOnTheFly != myOptimizeImportsOnTheFly.isSelected()
KotlinCodeInsightSettings settings = settings();
KotlinCodeInsightWorkspaceSettings projectSettings = projectSettings();
return projectSettings.optimizeImportsOnTheFly != myOptimizeImportsOnTheFly.isSelected()
|| settings.addUnambiguousImportsOnTheFly != myAddUnambiguousImportsOnTheFly.isSelected();
}
@Override
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();
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));
KotlinFUSLogger.Companion.log(FUSEventGroups.Settings, "KotlinCodeInsightWorkspaceSettings", data);
@@ -60,8 +66,9 @@ public class KotlinCodeInsightWorkspaceSettingsProvider implements AutoImportOpt
@Override
public void reset() {
KotlinCodeInsightWorkspaceSettings settings = settings();
myOptimizeImportsOnTheFly.setSelected(settings.optimizeImportsOnTheFly);
KotlinCodeInsightSettings settings = settings();
KotlinCodeInsightWorkspaceSettings projectSettings = projectSettings();
myOptimizeImportsOnTheFly.setSelected(projectSettings.optimizeImportsOnTheFly);
myAddUnambiguousImportsOnTheFly.setSelected(settings.addUnambiguousImportsOnTheFly);
}
}
@@ -7,7 +7,7 @@ package org.jetbrains.kotlin.idea.quickfix
import com.intellij.openapi.editor.Editor
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
internal class ImportFix(expression: KtSimpleNameExpression) : AbstractImportFix(expression, MyFactory) {
@@ -15,7 +15,7 @@ internal class ImportFix(expression: KtSimpleNameExpression) : AbstractImportFix
if (isOutdated()) return false
val element = element ?: return false
val project = element.project
if (!KotlinCodeInsightWorkspaceSettings.getInstance(project).addUnambiguousImportsOnTheFly) return false
if (!KotlinCodeInsightSettings.getInstance().addUnambiguousImportsOnTheFly) return false
val addImportAction = createAction(project, editor, element)
if (addImportAction.isUnambiguous()) {
addImportAction.execute()
@@ -26,7 +26,7 @@ import org.jetbrains.kotlin.descriptors.ClassDescriptor
import org.jetbrains.kotlin.idea.actions.createSingleImportAction
import org.jetbrains.kotlin.idea.caches.resolve.analyze
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.references.mainReference
import org.jetbrains.kotlin.psi.KtFile
@@ -47,7 +47,7 @@ class KotlinReferenceImporter : ReferenceImporter {
}
fun KtSimpleNameExpression.autoImport(): Boolean {
if (!KotlinCodeInsightWorkspaceSettings.getInstance(project).addUnambiguousImportsOnTheFly) return false
if (!KotlinCodeInsightSettings.getInstance().addUnambiguousImportsOnTheFly) return false
if (!DaemonListeners.canChangeFileSilently(file)) 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.caches.resolve.analyze
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.references.mainReference
import org.jetbrains.kotlin.psi.KtExpression
@@ -47,7 +47,7 @@ class KotlinReferenceImporter : ReferenceImporter {
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)
if (importFix != null && !importFix.isOutdated()) {
@@ -107,7 +107,7 @@ class KotlinReferenceImporter : ReferenceImporter {
}
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 (hasUnresolvedImportWhichCanImport(file, getReferencedName())) return false