Added KotlinCodeInsightWorkspaceSettings in place of sharing kotlin settings with java CodeInsightSettings
This commit is contained in:
@@ -22,7 +22,8 @@ enum class FUSEventGroups(groupIdSuffix: String, val events: Set<String> = setOf
|
|||||||
NPWizards("ide.npwizards", NPWizardsEvents),
|
NPWizards("ide.npwizards", NPWizardsEvents),
|
||||||
Debug("ide.debugger"),
|
Debug("ide.debugger"),
|
||||||
J2K("ide.j2k"),
|
J2K("ide.j2k"),
|
||||||
Editor("ide.editor");
|
Editor("ide.editor"),
|
||||||
|
Settings("ide.settings");
|
||||||
|
|
||||||
val GROUP_ID: String = "kotlin.$groupIdSuffix"
|
val GROUP_ID: String = "kotlin.$groupIdSuffix"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -778,6 +778,7 @@
|
|||||||
|
|
||||||
<applicationService serviceInterface="org.jetbrains.kotlin.idea.editor.KotlinEditorOptions"
|
<applicationService serviceInterface="org.jetbrains.kotlin.idea.editor.KotlinEditorOptions"
|
||||||
serviceImplementation="org.jetbrains.kotlin.idea.editor.KotlinEditorOptions"/>
|
serviceImplementation="org.jetbrains.kotlin.idea.editor.KotlinEditorOptions"/>
|
||||||
|
|
||||||
<editorSmartKeysConfigurable instance="org.jetbrains.kotlin.idea.editor.KotlinEditorOptionsConfigurable"/>
|
<editorSmartKeysConfigurable instance="org.jetbrains.kotlin.idea.editor.KotlinEditorOptionsConfigurable"/>
|
||||||
|
|
||||||
<applicationService serviceInterface="org.jetbrains.kotlin.idea.refactoring.KotlinRefactoringSettings"
|
<applicationService serviceInterface="org.jetbrains.kotlin.idea.refactoring.KotlinRefactoringSettings"
|
||||||
@@ -3447,7 +3448,10 @@
|
|||||||
language="kotlin"
|
language="kotlin"
|
||||||
/>
|
/>
|
||||||
|
|
||||||
|
<applicationService serviceInterface="org.jetbrains.kotlin.idea.codeInsight.KotlinCodeInsightWorkspaceSettings"
|
||||||
|
serviceImplementation="org.jetbrains.kotlin.idea.codeInsight.KotlinCodeInsightWorkspaceSettings"/>
|
||||||
<referenceImporter implementation="org.jetbrains.kotlin.idea.quickfix.KotlinReferenceImporter"/>
|
<referenceImporter implementation="org.jetbrains.kotlin.idea.quickfix.KotlinReferenceImporter"/>
|
||||||
|
<autoImportOptionsProvider instance="org.jetbrains.kotlin.idea.codeInsight.KotlinCodeInsightWorkspaceSettingsProvider"/>
|
||||||
|
|
||||||
<fileType.fileViewProviderFactory filetype="KJSM" implementationClass="com.intellij.psi.ClassFileViewProviderFactory"/>
|
<fileType.fileViewProviderFactory filetype="KJSM" implementationClass="com.intellij.psi.ClassFileViewProviderFactory"/>
|
||||||
<filetype.stubBuilder filetype="KJSM" implementationClass="com.intellij.psi.impl.compiled.ClassFileStubBuilder"/>
|
<filetype.stubBuilder filetype="KJSM" implementationClass="com.intellij.psi.impl.compiled.ClassFileStubBuilder"/>
|
||||||
|
|||||||
@@ -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<KotlinCodeInsightWorkspaceSettings> {
|
||||||
|
|
||||||
|
@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)
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
+40
@@ -0,0 +1,40 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<form bind-to-class="org.jetbrains.kotlin.idea.codeInsight.KotlinCodeInsightWorkspaceSettingsProvider" version="1" xmlns="http://www.intellij.com/uidesigner/form/">
|
||||||
|
<grid column-count="1" hgap="-1" id="ccd61" layout-manager="GridLayoutManager" row-count="1" same-size-horizontally="false" same-size-vertically="false" vgap="-1">
|
||||||
|
<margin bottom="0" left="0" right="0" top="0"/>
|
||||||
|
<constraints/>
|
||||||
|
<properties/>
|
||||||
|
<border type="none"/>
|
||||||
|
<children>
|
||||||
|
<grid binding="myPanel" column-count="1" hgap="-1" id="ccd62" layout-manager="GridLayoutManager" row-count="2" same-size-horizontally="false" same-size-vertically="false" vgap="-1">
|
||||||
|
<margin bottom="0" left="0" right="0" top="0"/>
|
||||||
|
<constraints>
|
||||||
|
<grid anchor="9" col-span="1" column="0" fill="0" hsize-policy="0" indent="0" row="0" row-span="1" use-parent-layout="false" vsize-policy="3"/>
|
||||||
|
</constraints>
|
||||||
|
<properties/>
|
||||||
|
<clientProperties>
|
||||||
|
<BorderFactoryClass class="java.lang.String" value="com.intellij.ui.IdeBorderFactory$PlainSmallWithIndent"/>
|
||||||
|
</clientProperties>
|
||||||
|
<border title="Kotlin" type="etched"/>
|
||||||
|
<children>
|
||||||
|
<component binding="myAddUnambiguousImportsOnTheFly" class="javax.swing.JCheckBox" default-binding="true" id="ccd64">
|
||||||
|
<constraints>
|
||||||
|
<grid anchor="8" col-span="1" column="0" fill="0" hsize-policy="3" indent="0" row="0" row-span="1" use-parent-layout="false" vsize-policy="0"/>
|
||||||
|
</constraints>
|
||||||
|
<properties>
|
||||||
|
<text key="checkbox.add.unambiguous.imports.on.the.fly" resource-bundle="messages/ApplicationBundle"/>
|
||||||
|
</properties>
|
||||||
|
</component>
|
||||||
|
<component binding="myOptimizeImportsOnTheFly" class="javax.swing.JCheckBox" default-binding="true" id="ccd63">
|
||||||
|
<constraints>
|
||||||
|
<grid anchor="8" col-span="1" column="0" fill="0" hsize-policy="3" indent="0" row="1" row-span="1" use-parent-layout="false" vsize-policy="0"/>
|
||||||
|
</constraints>
|
||||||
|
<properties>
|
||||||
|
<text key="checkbox.optimize.imports.on.the.fly" resource-bundle="messages/ApplicationBundle"/>
|
||||||
|
</properties>
|
||||||
|
</component>
|
||||||
|
</children>
|
||||||
|
</grid>
|
||||||
|
</children>
|
||||||
|
</grid>
|
||||||
|
</form>
|
||||||
+67
@@ -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<String, String> 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);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -16,7 +16,6 @@
|
|||||||
|
|
||||||
package org.jetbrains.kotlin.idea.quickfix
|
package org.jetbrains.kotlin.idea.quickfix
|
||||||
|
|
||||||
import com.intellij.codeInsight.CodeInsightSettings
|
|
||||||
import com.intellij.codeInsight.daemon.ReferenceImporter
|
import com.intellij.codeInsight.daemon.ReferenceImporter
|
||||||
import com.intellij.codeInsight.daemon.impl.DaemonCodeAnalyzerEx
|
import com.intellij.codeInsight.daemon.impl.DaemonCodeAnalyzerEx
|
||||||
import com.intellij.codeInsight.daemon.impl.DaemonListeners
|
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.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.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 (!CodeInsightSettings.getInstance().ADD_UNAMBIGIOUS_IMPORTS_ON_THE_FLY) return false
|
if (!KotlinCodeInsightWorkspaceSettings.getInstance(file.project).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 (!CodeInsightSettings.getInstance().ADD_UNAMBIGIOUS_IMPORTS_ON_THE_FLY) return false
|
if (!KotlinCodeInsightWorkspaceSettings.getInstance(project).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
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user