Restore scratch options after IDE restart
^KT-23441 Fixed
This commit is contained in:
@@ -0,0 +1,19 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2010-2018 JetBrains s.r.o. 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.scratch.ui
|
||||||
|
|
||||||
|
import com.intellij.openapi.vfs.VirtualFile
|
||||||
|
import org.jetbrains.kotlin.idea.core.util.fileAttribute
|
||||||
|
|
||||||
|
var VirtualFile.scratchPanelConfig: ScratchPanelConfig? by fileAttribute(
|
||||||
|
name = "kotlin-scratch-panel-config",
|
||||||
|
version = 1,
|
||||||
|
read = { ScratchPanelConfig(readBoolean(), readBoolean()) },
|
||||||
|
write = {
|
||||||
|
writeBoolean(it.isRepl)
|
||||||
|
writeBoolean(it.isMakeBeforeRun)
|
||||||
|
}
|
||||||
|
)
|
||||||
@@ -66,13 +66,28 @@ class ScratchTopPanel private constructor(val scratchFile: ScratchFile) : JPanel
|
|||||||
|
|
||||||
isReplCheckbox = JCheckBox("Use REPL", false).customize()
|
isReplCheckbox = JCheckBox("Use REPL", false).customize()
|
||||||
add(isReplCheckbox)
|
add(isReplCheckbox)
|
||||||
|
isReplCheckbox.addItemListener {
|
||||||
|
scratchFile.getPsiFile()?.virtualFile?.apply {
|
||||||
|
scratchPanelConfig = (scratchPanelConfig ?: ScratchPanelConfig()).copy(isRepl = isReplCheckbox.isSelected)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
add(JSeparator(SwingConstants.VERTICAL))
|
add(JSeparator(SwingConstants.VERTICAL))
|
||||||
|
|
||||||
isMakeBeforeRunCheckbox = JCheckBox("Make before Run", false).customize()
|
isMakeBeforeRunCheckbox = JCheckBox("Make before Run", false).customize()
|
||||||
add(isMakeBeforeRunCheckbox)
|
add(isMakeBeforeRunCheckbox)
|
||||||
|
isMakeBeforeRunCheckbox.addItemListener {
|
||||||
|
scratchFile.getPsiFile()?.virtualFile?.apply {
|
||||||
|
scratchPanelConfig = (scratchPanelConfig ?: ScratchPanelConfig()).copy(isMakeBeforeRun = isMakeBeforeRunCheckbox.isSelected)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
add(JSeparator(SwingConstants.VERTICAL))
|
add(JSeparator(SwingConstants.VERTICAL))
|
||||||
|
|
||||||
|
(scratchFile.getPsiFile()?.virtualFile?.scratchPanelConfig ?: ScratchPanelConfig()).let {
|
||||||
|
isReplCheckbox.isSelected = it.isRepl
|
||||||
|
isMakeBeforeRunCheckbox.isSelected = it.isMakeBeforeRun
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fun getModule(): Module? = moduleChooser.selectedModule
|
fun getModule(): Module? = moduleChooser.selectedModule
|
||||||
@@ -99,6 +114,11 @@ class ScratchTopPanel private constructor(val scratchFile: ScratchFile) : JPanel
|
|||||||
isReplCheckbox.isSelected = isSelected
|
isReplCheckbox.isSelected = isSelected
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@TestOnly
|
||||||
|
fun setMakeBeforeRun(isSelected: Boolean) {
|
||||||
|
isMakeBeforeRunCheckbox.isSelected = isSelected
|
||||||
|
}
|
||||||
|
|
||||||
private fun JCheckBox.customize(): JCheckBox {
|
private fun JCheckBox.customize(): JCheckBox {
|
||||||
verticalTextPosition = SwingConstants.BOTTOM
|
verticalTextPosition = SwingConstants.BOTTOM
|
||||||
return this
|
return this
|
||||||
@@ -120,3 +140,5 @@ class ScratchTopPanel private constructor(val scratchFile: ScratchFile) : JPanel
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
data class ScratchPanelConfig(val isRepl: Boolean = false, val isMakeBeforeRun: Boolean = false)
|
||||||
|
|||||||
@@ -0,0 +1,57 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2010-2018 JetBrains s.r.o. 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.scratch
|
||||||
|
|
||||||
|
import com.intellij.ide.scratch.ScratchFileService
|
||||||
|
import com.intellij.ide.scratch.ScratchRootType
|
||||||
|
import junit.framework.Assert
|
||||||
|
import org.jetbrains.kotlin.idea.KotlinLanguage
|
||||||
|
import org.jetbrains.kotlin.idea.scratch.ui.ScratchTopPanel
|
||||||
|
import javax.swing.JCheckBox
|
||||||
|
import kotlin.reflect.full.createType
|
||||||
|
import kotlin.reflect.full.declaredMemberProperties
|
||||||
|
|
||||||
|
class ScratchOptionsSaveTest : AbstractScratchRunActionTest() {
|
||||||
|
|
||||||
|
fun testOptionsSaveOnClosingFile() {
|
||||||
|
val fileText = "val a = 1"
|
||||||
|
|
||||||
|
val scratchFile = ScratchRootType.getInstance().createScratchFile(
|
||||||
|
project,
|
||||||
|
"scratch_1.kts",
|
||||||
|
KotlinLanguage.INSTANCE,
|
||||||
|
fileText,
|
||||||
|
ScratchFileService.Option.create_if_missing
|
||||||
|
) ?: error("Couldn't create scratch file")
|
||||||
|
|
||||||
|
myManager.openFile(scratchFile, true)
|
||||||
|
|
||||||
|
val (_, scratchPanelBeforeClosingFile) = getEditorWithScratchPanel(myManager, scratchFile) ?: error("Couldn't find scratch panel")
|
||||||
|
|
||||||
|
Assert.assertEquals(
|
||||||
|
"This test checks that checkbox options are restored after file closing. Not all checkboxes are checked in this test",
|
||||||
|
2,
|
||||||
|
ScratchTopPanel::class.declaredMemberProperties.filter { it.returnType == JCheckBox::class.createType() }.size
|
||||||
|
)
|
||||||
|
|
||||||
|
val newIsReplValue = !scratchPanelBeforeClosingFile.isRepl()
|
||||||
|
val newIsMakeBeforeRunValue = !scratchPanelBeforeClosingFile.isMakeBeforeRun()
|
||||||
|
scratchPanelBeforeClosingFile.setReplMode(newIsReplValue)
|
||||||
|
scratchPanelBeforeClosingFile.setMakeBeforeRun(newIsMakeBeforeRunValue)
|
||||||
|
|
||||||
|
myManager.closeFile(scratchFile)
|
||||||
|
myManager.openFile(scratchFile, true)
|
||||||
|
|
||||||
|
val (_, scratchPanelAfterClosingFile) = getEditorWithScratchPanel(myManager, scratchFile) ?: error("Couldn't find scratch panel")
|
||||||
|
|
||||||
|
Assert.assertEquals("Wrong value for isRepl checkbox", newIsReplValue, scratchPanelAfterClosingFile.isRepl())
|
||||||
|
Assert.assertEquals(
|
||||||
|
"Wrong value for isMakeBeforeRun checkbox",
|
||||||
|
newIsMakeBeforeRunValue,
|
||||||
|
scratchPanelAfterClosingFile.isMakeBeforeRun()
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user