From 027c60080b99ae00ebd5c71142a1fef3ac7fe0e5 Mon Sep 17 00:00:00 2001 From: Vladimir Dolzhenko Date: Mon, 23 Sep 2019 16:05:11 +0200 Subject: [PATCH] Added KotlinCodeInsightWorkspaceSettings in place of sharing kotlin settings with java CodeInsightSettings --- .../kotlin/idea/statistics/FUSEventGroups.kt | 3 +- idea/resources/META-INF/plugin-common.xml | 4 ++ .../KotlinCodeInsightWorkspaceSettings.kt | 33 +++++++++ ...nCodeInsightWorkspaceSettingsProvider.form | 40 +++++++++++ ...nCodeInsightWorkspaceSettingsProvider.java | 67 +++++++++++++++++++ .../idea/quickfix/KotlinReferenceImporter.kt | 6 +- 6 files changed, 149 insertions(+), 4 deletions(-) create mode 100644 idea/src/org/jetbrains/kotlin/idea/codeInsight/KotlinCodeInsightWorkspaceSettings.kt create mode 100644 idea/src/org/jetbrains/kotlin/idea/codeInsight/KotlinCodeInsightWorkspaceSettingsProvider.form create mode 100644 idea/src/org/jetbrains/kotlin/idea/codeInsight/KotlinCodeInsightWorkspaceSettingsProvider.java diff --git a/idea/idea-core/src/org/jetbrains/kotlin/idea/statistics/FUSEventGroups.kt b/idea/idea-core/src/org/jetbrains/kotlin/idea/statistics/FUSEventGroups.kt index e35f566778a..8a55a64d54a 100644 --- a/idea/idea-core/src/org/jetbrains/kotlin/idea/statistics/FUSEventGroups.kt +++ b/idea/idea-core/src/org/jetbrains/kotlin/idea/statistics/FUSEventGroups.kt @@ -22,7 +22,8 @@ enum class FUSEventGroups(groupIdSuffix: String, val events: Set = setOf NPWizards("ide.npwizards", NPWizardsEvents), Debug("ide.debugger"), J2K("ide.j2k"), - Editor("ide.editor"); + Editor("ide.editor"), + Settings("ide.settings"); val GROUP_ID: String = "kotlin.$groupIdSuffix" } diff --git a/idea/resources/META-INF/plugin-common.xml b/idea/resources/META-INF/plugin-common.xml index 2cd678a5349..e48b3988439 100644 --- a/idea/resources/META-INF/plugin-common.xml +++ b/idea/resources/META-INF/plugin-common.xml @@ -778,6 +778,7 @@ + + + diff --git a/idea/src/org/jetbrains/kotlin/idea/codeInsight/KotlinCodeInsightWorkspaceSettings.kt b/idea/src/org/jetbrains/kotlin/idea/codeInsight/KotlinCodeInsightWorkspaceSettings.kt new file mode 100644 index 00000000000..032d4c854af --- /dev/null +++ b/idea/src/org/jetbrains/kotlin/idea/codeInsight/KotlinCodeInsightWorkspaceSettings.kt @@ -0,0 +1,33 @@ +/* + * Copyright 2010-2019 JetBrains s.r.o. and Kotlin Programming Language contributors. + * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. + */ + +package org.jetbrains.kotlin.idea.codeInsight + +import com.intellij.openapi.components.* +import com.intellij.openapi.project.Project +import com.intellij.util.xmlb.XmlSerializerUtil + +@State(name = "KotlinCodeInsightWorkspaceSettings", storages = [Storage("kotlinCodeInsightSettings.xml")]) +class KotlinCodeInsightWorkspaceSettings : PersistentStateComponent { + + @JvmField + var addUnambiguousImportsOnTheFly = false + + @JvmField + var optimizeImportsOnTheFly = false + + override fun getState() = this + + override fun loadState(state: KotlinCodeInsightWorkspaceSettings) = XmlSerializerUtil.copyBean(state, this) + + companion object { + + fun getInstance(project: Project): KotlinCodeInsightWorkspaceSettings { + return ServiceManager.getService(project, KotlinCodeInsightWorkspaceSettings::class.java) + } + + } + +} \ No newline at end of file diff --git a/idea/src/org/jetbrains/kotlin/idea/codeInsight/KotlinCodeInsightWorkspaceSettingsProvider.form b/idea/src/org/jetbrains/kotlin/idea/codeInsight/KotlinCodeInsightWorkspaceSettingsProvider.form new file mode 100644 index 00000000000..6de7a3ddba4 --- /dev/null +++ b/idea/src/org/jetbrains/kotlin/idea/codeInsight/KotlinCodeInsightWorkspaceSettingsProvider.form @@ -0,0 +1,40 @@ + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
diff --git a/idea/src/org/jetbrains/kotlin/idea/codeInsight/KotlinCodeInsightWorkspaceSettingsProvider.java b/idea/src/org/jetbrains/kotlin/idea/codeInsight/KotlinCodeInsightWorkspaceSettingsProvider.java new file mode 100644 index 00000000000..5d96c941d5e --- /dev/null +++ b/idea/src/org/jetbrains/kotlin/idea/codeInsight/KotlinCodeInsightWorkspaceSettingsProvider.java @@ -0,0 +1,67 @@ +/* + * Copyright 2010-2019 JetBrains s.r.o. and Kotlin Programming Language contributors. + * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. + */ + +package org.jetbrains.kotlin.idea.codeInsight; + +import com.intellij.application.options.editor.AutoImportOptionsProvider; +import com.intellij.openapi.options.ConfigurationException; +import com.intellij.openapi.project.Project; +import org.jetbrains.annotations.Nullable; +import org.jetbrains.kotlin.idea.statistics.FUSEventGroups; +import org.jetbrains.kotlin.idea.statistics.KotlinFUSLogger; + +import javax.swing.*; +import java.util.HashMap; +import java.util.Map; + +public class KotlinCodeInsightWorkspaceSettingsProvider implements AutoImportOptionsProvider { + private final Project project; + + private JPanel myPanel; + private JCheckBox myOptimizeImportsOnTheFly; + private JCheckBox myAddUnambiguousImportsOnTheFly; + + public KotlinCodeInsightWorkspaceSettingsProvider(Project project) { + this.project = project; + } + + @Nullable + @Override + public JComponent createComponent() { + return myPanel; + } + + private KotlinCodeInsightWorkspaceSettings settings() { + return KotlinCodeInsightWorkspaceSettings.Companion.getInstance(project); + } + + @Override + public boolean isModified() { + KotlinCodeInsightWorkspaceSettings settings = settings(); + return settings.optimizeImportsOnTheFly != myOptimizeImportsOnTheFly.isSelected() + || settings.addUnambiguousImportsOnTheFly != myAddUnambiguousImportsOnTheFly.isSelected(); + } + + @Override + public void apply() throws ConfigurationException { + KotlinCodeInsightWorkspaceSettings settings = settings(); + + settings.optimizeImportsOnTheFly = myOptimizeImportsOnTheFly.isSelected(); + settings.addUnambiguousImportsOnTheFly = myAddUnambiguousImportsOnTheFly.isSelected(); + + final Map data = new HashMap<>(); + data.put("optimizeImportsOnTheFly", Boolean.toString(settings.optimizeImportsOnTheFly)); + data.put("addUnambiguousImportsOnTheFly", Boolean.toString(settings.addUnambiguousImportsOnTheFly)); + + KotlinFUSLogger.Companion.log(FUSEventGroups.Settings, "KotlinCodeInsightWorkspaceSettings", data); + } + + @Override + public void reset() { + KotlinCodeInsightWorkspaceSettings settings = settings(); + myOptimizeImportsOnTheFly.setSelected(settings.optimizeImportsOnTheFly); + myAddUnambiguousImportsOnTheFly.setSelected(settings.addUnambiguousImportsOnTheFly); + } +} diff --git a/idea/src/org/jetbrains/kotlin/idea/quickfix/KotlinReferenceImporter.kt b/idea/src/org/jetbrains/kotlin/idea/quickfix/KotlinReferenceImporter.kt index 7b01f864933..74e4362c238 100644 --- a/idea/src/org/jetbrains/kotlin/idea/quickfix/KotlinReferenceImporter.kt +++ b/idea/src/org/jetbrains/kotlin/idea/quickfix/KotlinReferenceImporter.kt @@ -16,7 +16,6 @@ package org.jetbrains.kotlin.idea.quickfix -import com.intellij.codeInsight.CodeInsightSettings import com.intellij.codeInsight.daemon.ReferenceImporter import com.intellij.codeInsight.daemon.impl.DaemonCodeAnalyzerEx import com.intellij.codeInsight.daemon.impl.DaemonListeners @@ -28,6 +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.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 (!CodeInsightSettings.getInstance().ADD_UNAMBIGIOUS_IMPORTS_ON_THE_FLY) return false + if (!KotlinCodeInsightWorkspaceSettings.getInstance(file.project).addUnambiguousImportsOnTheFly) return false val importFix: ImportFixBase? = 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 (!CodeInsightSettings.getInstance().ADD_UNAMBIGIOUS_IMPORTS_ON_THE_FLY) return false + if (!KotlinCodeInsightWorkspaceSettings.getInstance(project).addUnambiguousImportsOnTheFly) return false if (!DaemonListeners.canChangeFileSilently(file)) return false if (hasUnresolvedImportWhichCanImport(file, getReferencedName())) return false