Configuraion: Defer initialization of facets UI
#KT-25410 Fixed
This commit is contained in:
@@ -45,64 +45,64 @@ class KotlinFacetEditorGeneralTab(
|
|||||||
) : FacetEditorTab() {
|
) : FacetEditorTab() {
|
||||||
class EditorComponent(
|
class EditorComponent(
|
||||||
private val project: Project,
|
private val project: Project,
|
||||||
configuration: KotlinFacetConfiguration?
|
private val configuration: KotlinFacetConfiguration?
|
||||||
) : JPanel(BorderLayout()) {
|
) : JPanel(BorderLayout()) {
|
||||||
private val isMultiEditor = configuration == null
|
private val isMultiEditor: Boolean
|
||||||
|
get() = configuration == null
|
||||||
|
|
||||||
private var editableCommonArguments: CommonCompilerArguments
|
private lateinit var editableCommonArguments: CommonCompilerArguments
|
||||||
private var editableJvmArguments: K2JVMCompilerArguments
|
private lateinit var editableJvmArguments: K2JVMCompilerArguments
|
||||||
private var editableJsArguments: K2JSCompilerArguments
|
private lateinit var editableJsArguments: K2JSCompilerArguments
|
||||||
private var editableCompilerSettings: CompilerSettings
|
private lateinit var editableCompilerSettings: CompilerSettings
|
||||||
|
|
||||||
val compilerConfigurable: KotlinCompilerConfigurableTab
|
lateinit var compilerConfigurable: KotlinCompilerConfigurableTab
|
||||||
|
private set
|
||||||
|
|
||||||
init {
|
lateinit var useProjectSettingsCheckBox: ThreeStateCheckBox
|
||||||
|
|
||||||
|
lateinit var targetPlatformComboBox: ComboBox<IdePlatform<*, *>>
|
||||||
|
|
||||||
|
private lateinit var projectSettingsLink: HoverHyperlinkLabel
|
||||||
|
|
||||||
|
fun initialize() {
|
||||||
if (isMultiEditor) {
|
if (isMultiEditor) {
|
||||||
editableCommonArguments = object : CommonCompilerArguments() {}
|
editableCommonArguments = object : CommonCompilerArguments() {}
|
||||||
editableJvmArguments = K2JVMCompilerArguments()
|
editableJvmArguments = K2JVMCompilerArguments()
|
||||||
editableJsArguments = K2JSCompilerArguments()
|
editableJsArguments = K2JSCompilerArguments()
|
||||||
editableCompilerSettings = CompilerSettings()
|
editableCompilerSettings = CompilerSettings()
|
||||||
|
} else {
|
||||||
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
editableCommonArguments = configuration!!.settings.compilerArguments!!
|
editableCommonArguments = configuration!!.settings.compilerArguments!!
|
||||||
editableJvmArguments = editableCommonArguments as? K2JVMCompilerArguments
|
editableJvmArguments = editableCommonArguments as? K2JVMCompilerArguments
|
||||||
?: Kotlin2JvmCompilerArgumentsHolder.getInstance(project).settings.unfrozen() as K2JVMCompilerArguments
|
?: Kotlin2JvmCompilerArgumentsHolder.getInstance(project).settings.unfrozen() as K2JVMCompilerArguments
|
||||||
editableJsArguments = editableCommonArguments as? K2JSCompilerArguments
|
editableJsArguments = editableCommonArguments as? K2JSCompilerArguments
|
||||||
?: Kotlin2JsCompilerArgumentsHolder.getInstance(project).settings.unfrozen() as K2JSCompilerArguments
|
?: Kotlin2JsCompilerArgumentsHolder.getInstance(project).settings.unfrozen() as K2JSCompilerArguments
|
||||||
editableCompilerSettings = configuration.settings.compilerSettings!!
|
editableCompilerSettings = configuration.settings.compilerSettings!!
|
||||||
}
|
}
|
||||||
|
|
||||||
compilerConfigurable = KotlinCompilerConfigurableTab(
|
compilerConfigurable = KotlinCompilerConfigurableTab(
|
||||||
project,
|
project,
|
||||||
editableCommonArguments,
|
editableCommonArguments,
|
||||||
editableJsArguments,
|
editableJsArguments,
|
||||||
editableJvmArguments,
|
editableJvmArguments,
|
||||||
editableCompilerSettings,
|
editableCompilerSettings,
|
||||||
null,
|
null,
|
||||||
false,
|
false,
|
||||||
isMultiEditor
|
isMultiEditor
|
||||||
)
|
)
|
||||||
}
|
|
||||||
|
|
||||||
val useProjectSettingsCheckBox = ThreeStateCheckBox("Use project settings").apply { isThirdStateEnabled = isMultiEditor }
|
useProjectSettingsCheckBox = ThreeStateCheckBox("Use project settings").apply { isThirdStateEnabled = isMultiEditor }
|
||||||
|
targetPlatformComboBox = ComboBox<IdePlatform<*, *>>(IdePlatformKind.All_PLATFORMS.toTypedArray()).apply {
|
||||||
val targetPlatformComboBox =
|
setRenderer(DescriptionListCellRenderer())
|
||||||
ComboBox<IdePlatform<*, *>>(IdePlatformKind.All_PLATFORMS.toTypedArray()).apply {
|
}
|
||||||
setRenderer(DescriptionListCellRenderer())
|
projectSettingsLink = HoverHyperlinkLabel("Edit project settings").apply {
|
||||||
}
|
addHyperlinkListener {
|
||||||
|
ShowSettingsUtilImpl.showSettingsDialog(project, compilerConfigurable.id, "")
|
||||||
private val projectSettingsLink = HoverHyperlinkLabel("Edit project settings").apply {
|
if (useProjectSettingsCheckBox.isSelected) {
|
||||||
addHyperlinkListener {
|
updateCompilerConfigurable()
|
||||||
ShowSettingsUtilImpl.showSettingsDialog(project, compilerConfigurable.id, "")
|
}
|
||||||
if (useProjectSettingsCheckBox.isSelected) {
|
|
||||||
updateCompilerConfigurable()
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
init {
|
|
||||||
val contentPanel = FormBuilder
|
val contentPanel = FormBuilder
|
||||||
.createFormBuilder()
|
.createFormBuilder()
|
||||||
.addComponent(JPanel(BorderLayout()).apply {
|
.addComponent(JPanel(BorderLayout()).apply {
|
||||||
@@ -205,38 +205,11 @@ class KotlinFacetEditorGeneralTab(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
val editor = EditorComponent(editorContext.project, configuration)
|
private var isInitialized = false
|
||||||
|
val editor by lazy { EditorComponent(editorContext.project, configuration) }
|
||||||
|
|
||||||
private var enableValidation = false
|
private var enableValidation = false
|
||||||
|
|
||||||
init {
|
|
||||||
for (creator in KotlinFacetValidatorCreator.EP_NAME.getExtensions()) {
|
|
||||||
validatorsManager.registerValidator(creator.create(editor, validatorsManager, editorContext))
|
|
||||||
}
|
|
||||||
|
|
||||||
validatorsManager.registerValidator(ArgumentConsistencyValidator())
|
|
||||||
|
|
||||||
with(editor.compilerConfigurable) {
|
|
||||||
reportWarningsCheckBox.validateOnChange()
|
|
||||||
additionalArgsOptionsField.textField.validateOnChange()
|
|
||||||
generateSourceMapsCheckBox.validateOnChange()
|
|
||||||
outputPrefixFile.textField.validateOnChange()
|
|
||||||
outputPostfixFile.textField.validateOnChange()
|
|
||||||
outputDirectory.textField.validateOnChange()
|
|
||||||
copyRuntimeFilesCheckBox.validateOnChange()
|
|
||||||
moduleKindComboBox.validateOnChange()
|
|
||||||
languageVersionComboBox.addActionListener {
|
|
||||||
onLanguageLevelChanged()
|
|
||||||
doValidate()
|
|
||||||
}
|
|
||||||
apiVersionComboBox.validateOnChange()
|
|
||||||
coroutineSupportComboBox.validateOnChange()
|
|
||||||
}
|
|
||||||
editor.targetPlatformComboBox.validateOnChange()
|
|
||||||
|
|
||||||
editor.updateCompilerConfigurable()
|
|
||||||
}
|
|
||||||
|
|
||||||
private fun onLanguageLevelChanged() {
|
private fun onLanguageLevelChanged() {
|
||||||
with(editor.compilerConfigurable) {
|
with(editor.compilerConfigurable) {
|
||||||
onLanguageLevelChanged(selectedLanguageVersionView)
|
onLanguageLevelChanged(selectedLanguageVersionView)
|
||||||
@@ -268,13 +241,54 @@ class KotlinFacetEditorGeneralTab(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fun initialize() {
|
||||||
|
if (isInitialized) return
|
||||||
|
|
||||||
|
editor.initialize()
|
||||||
|
|
||||||
|
for (creator in KotlinFacetValidatorCreator.EP_NAME.getExtensions()) {
|
||||||
|
validatorsManager.registerValidator(creator.create(editor, validatorsManager, editorContext))
|
||||||
|
}
|
||||||
|
|
||||||
|
validatorsManager.registerValidator(ArgumentConsistencyValidator())
|
||||||
|
|
||||||
|
with(editor.compilerConfigurable) {
|
||||||
|
reportWarningsCheckBox.validateOnChange()
|
||||||
|
additionalArgsOptionsField.textField.validateOnChange()
|
||||||
|
generateSourceMapsCheckBox.validateOnChange()
|
||||||
|
outputPrefixFile.textField.validateOnChange()
|
||||||
|
outputPostfixFile.textField.validateOnChange()
|
||||||
|
outputDirectory.textField.validateOnChange()
|
||||||
|
copyRuntimeFilesCheckBox.validateOnChange()
|
||||||
|
moduleKindComboBox.validateOnChange()
|
||||||
|
languageVersionComboBox.addActionListener {
|
||||||
|
onLanguageLevelChanged()
|
||||||
|
doValidate()
|
||||||
|
}
|
||||||
|
apiVersionComboBox.validateOnChange()
|
||||||
|
coroutineSupportComboBox.validateOnChange()
|
||||||
|
}
|
||||||
|
editor.targetPlatformComboBox.validateOnChange()
|
||||||
|
|
||||||
|
editor.updateCompilerConfigurable()
|
||||||
|
isInitialized = true
|
||||||
|
|
||||||
|
reset()
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun onTabEntering() {
|
||||||
|
initialize()
|
||||||
|
}
|
||||||
|
|
||||||
override fun isModified(): Boolean {
|
override fun isModified(): Boolean {
|
||||||
|
if (!isInitialized) return false
|
||||||
if (editor.useProjectSettingsCheckBox.isSelected != configuration.settings.useProjectSettings) return true
|
if (editor.useProjectSettingsCheckBox.isSelected != configuration.settings.useProjectSettings) return true
|
||||||
if (editor.chosenPlatform != configuration.settings.platform) return true
|
if (editor.chosenPlatform != configuration.settings.platform) return true
|
||||||
return !editor.useProjectSettingsCheckBox.isSelected && editor.compilerConfigurable.isModified
|
return !editor.useProjectSettingsCheckBox.isSelected && editor.compilerConfigurable.isModified
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun reset() {
|
override fun reset() {
|
||||||
|
if (!isInitialized) return
|
||||||
validateOnce {
|
validateOnce {
|
||||||
editor.useProjectSettingsCheckBox.isSelected = configuration.settings.useProjectSettings
|
editor.useProjectSettingsCheckBox.isSelected = configuration.settings.useProjectSettings
|
||||||
editor.targetPlatformComboBox.selectedItem = configuration.settings.platform
|
editor.targetPlatformComboBox.selectedItem = configuration.settings.platform
|
||||||
@@ -315,7 +329,9 @@ class KotlinFacetEditorGeneralTab(
|
|||||||
}
|
}
|
||||||
|
|
||||||
override fun disposeUIResources() {
|
override fun disposeUIResources() {
|
||||||
editor.compilerConfigurable.disposeUIResources()
|
if (isInitialized) {
|
||||||
|
editor.compilerConfigurable.disposeUIResources()
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -38,6 +38,8 @@ class MultipleKotlinFacetEditor(
|
|||||||
|
|
||||||
override fun createComponent(): JComponent? {
|
override fun createComponent(): JComponent? {
|
||||||
return KotlinFacetEditorGeneralTab.EditorComponent(project, null).apply {
|
return KotlinFacetEditorGeneralTab.EditorComponent(project, null).apply {
|
||||||
|
initialize()
|
||||||
|
editors.flatMap { it.editorTabs.filterIsInstance<KotlinFacetEditorGeneralTab>() }.forEach { it.initialize() }
|
||||||
helper.bind(useProjectSettingsCheckBox, editors) { it.tabEditor.useProjectSettingsCheckBox }
|
helper.bind(useProjectSettingsCheckBox, editors) { it.tabEditor.useProjectSettingsCheckBox }
|
||||||
helper.bind(targetPlatformComboBox, editors) { it.tabEditor.targetPlatformComboBox }
|
helper.bind(targetPlatformComboBox, editors) { it.tabEditor.targetPlatformComboBox }
|
||||||
with(compilerConfigurable) {
|
with(compilerConfigurable) {
|
||||||
|
|||||||
Reference in New Issue
Block a user