diff --git a/ChangeLog.md b/ChangeLog.md index 8fe57c25b32..82995d7bd40 100644 --- a/ChangeLog.md +++ b/ChangeLog.md @@ -141,6 +141,7 @@ These artifacts include extensions for the types available in the latter JDKs, s - [`KT-13901`](https://youtrack.jetbrains.com/issue/KT-13901) Move: Do not ignore target directory selected in the dialog (DnD mode) - [`KT-13904`](https://youtrack.jetbrains.com/issue/KT-13904) Move Nested Class to Upper Level: Preserve state of "Search in comments"/"Search for text occurrences" checkboxes - [`KT-13909`](https://youtrack.jetbrains.com/issue/KT-13909) Move Files/Directories: Fix behavior of "Open moved files in editor" checkbox +- [`KT-14004`](https://youtrack.jetbrains.com/issue/KT-14004) Introduce Variable: Fix exception on trying to extract variable of functional type ##### New features diff --git a/idea/src/org/jetbrains/kotlin/idea/refactoring/introduce/introduceVariable/KotlinVariableInplaceIntroducer.kt b/idea/src/org/jetbrains/kotlin/idea/refactoring/introduce/introduceVariable/KotlinVariableInplaceIntroducer.kt index 37a9eaffca1..ff2ce9c9720 100644 --- a/idea/src/org/jetbrains/kotlin/idea/refactoring/introduce/introduceVariable/KotlinVariableInplaceIntroducer.kt +++ b/idea/src/org/jetbrains/kotlin/idea/refactoring/introduce/introduceVariable/KotlinVariableInplaceIntroducer.kt @@ -65,7 +65,7 @@ class KotlinVariableInplaceIntroducer( editor ) { private val suggestedNames = suggestedNames.toTypedArray() - private lateinit var expressionTypeCheckBox: JCheckBox + private var expressionTypeCheckBox: JCheckBox? = null init { initFormComponents { @@ -86,22 +86,24 @@ class KotlinVariableInplaceIntroducer( } if (expressionType != null && !noTypeInference) { - expressionTypeCheckBox = NonFocusableCheckBox("Specify type explicitly") - expressionTypeCheckBox.isSelected = false - expressionTypeCheckBox.setMnemonic('t') - expressionTypeCheckBox.addActionListener { - runWriteCommandAndRestart { - updateVariableName() - if (expressionTypeCheckBox.isSelected) { - val renderedType = IdeDescriptorRenderers.SOURCE_CODE_SHORT_NAMES_IN_TYPES.renderType(expressionType) - addedVariable.setTypeReference(KtPsiFactory(myProject).createType(renderedType)) - } - else { - addedVariable.setTypeReference(null) + expressionTypeCheckBox = NonFocusableCheckBox("Specify type explicitly").apply { + isSelected = false + setMnemonic('t') + addActionListener { + runWriteCommandAndRestart { + updateVariableName() + if (isSelected) { + val renderedType = IdeDescriptorRenderers.SOURCE_CODE_SHORT_NAMES_IN_TYPES.renderType(expressionType) + addedVariable.setTypeReference(KtPsiFactory(myProject).createType(renderedType)) + } + else { + addedVariable.setTypeReference(null) + } } } + + addComponent(this) } - addComponent(expressionTypeCheckBox) } } } @@ -140,7 +142,7 @@ class KotlinVariableInplaceIntroducer( override fun getInitialName() = super.getInitialName().quoteIfNeeded() override fun updateTitle(variable: KtProperty?, value: String?) { - expressionTypeCheckBox.isEnabled = value == null || KotlinNameSuggester.isIdentifier(value) + expressionTypeCheckBox?.isEnabled = value == null || KotlinNameSuggester.isIdentifier(value) // No preview to update }