Wizard: fix skip last step hack on mac

This commit is contained in:
Ilya Kirillov
2020-03-24 22:08:53 +03:00
parent ab59657e61
commit 2d9dc2994b
@@ -2,6 +2,7 @@ package org.jetbrains.kotlin.tools.projectWizard.wizard
import com.intellij.ide.RecentProjectsManager import com.intellij.ide.RecentProjectsManager
import com.intellij.ide.util.projectWizard.* import com.intellij.ide.util.projectWizard.*
import com.intellij.ide.wizard.AbstractWizard
import com.intellij.openapi.Disposable import com.intellij.openapi.Disposable
import com.intellij.openapi.application.ApplicationNamesInfo import com.intellij.openapi.application.ApplicationNamesInfo
import com.intellij.openapi.module.ModifiableModuleModel import com.intellij.openapi.module.ModifiableModuleModel
@@ -115,7 +116,7 @@ class NewProjectWizardModuleBuilder : EmptyModuleBuilder() {
private fun clickFinishButton() { private fun clickFinishButton() {
if (finishButtonClicked) return if (finishButtonClicked) return
finishButtonClicked = true finishButtonClicked = true
wizardContext?.getActionButtonWithText("Finish", "Next")?.doClick() wizardContext?.getNextButton()?.doClick()
} }
override fun modifySettingsStep(settingsStep: SettingsStep): ModuleWizardStep? { override fun modifySettingsStep(settingsStep: SettingsStep): ModuleWizardStep? {
@@ -227,10 +228,7 @@ class ModuleNewWizardSecondStep(
} }
override fun getPreferredFocusedComponent(): JComponent? { override fun getPreferredFocusedComponent(): JComponent? {
wizardContext.getActionButtonWithText("Next")?.apply { wizardContext.getNextButton()?.text = "Finish"
text = "Finish"
updateUI()
}
return super.getPreferredFocusedComponent() return super.getPreferredFocusedComponent()
} }
@@ -239,9 +237,10 @@ class ModuleNewWizardSecondStep(
} }
} }
private fun WizardContext.getActionButtonWithText(text: String, alternativeText: String? = null): JButton? = private fun WizardContext.getNextButton() = try {
wizard?.cancelButton?.parent?.components?.find { child -> AbstractWizard::class.java.getDeclaredMethod("getNextButton")
child.safeAs<JButton>()?.let { button -> .also { it.isAccessible = true }
button.text == text || alternativeText != null && button.text == alternativeText .invoke(wizard) as? JButton
} == true } catch (_: Throwable) {
} as? JButton null
}