diff --git a/plugins/kotlin/refactorings/kotlin.refactorings.k2/resources/kotlin.refactorings.k2.xml b/plugins/kotlin/refactorings/kotlin.refactorings.k2/resources/kotlin.refactorings.k2.xml index 4e79127fafa1..ad5ac79388df 100644 --- a/plugins/kotlin/refactorings/kotlin.refactorings.k2/resources/kotlin.refactorings.k2.xml +++ b/plugins/kotlin/refactorings/kotlin.refactorings.k2/resources/kotlin.refactorings.k2.xml @@ -24,6 +24,12 @@ + + + + + + diff --git a/plugins/kotlin/refactorings/kotlin.refactorings.k2/src/org/jetbrains/kotlin/idea/k2/refactoring/internal/ShortenSelectionAction.kt b/plugins/kotlin/refactorings/kotlin.refactorings.k2/src/org/jetbrains/kotlin/idea/k2/refactoring/internal/ShortenSelectionAction.kt new file mode 100644 index 000000000000..9ced186cfbc2 --- /dev/null +++ b/plugins/kotlin/refactorings/kotlin.refactorings.k2/src/org/jetbrains/kotlin/idea/k2/refactoring/internal/ShortenSelectionAction.kt @@ -0,0 +1,41 @@ +// Copyright 2000-2023 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. +package org.jetbrains.kotlin.idea.k2.refactoring.internal + +import com.intellij.openapi.actionSystem.ActionUpdateThread +import com.intellij.openapi.actionSystem.AnAction +import com.intellij.openapi.actionSystem.AnActionEvent +import com.intellij.openapi.actionSystem.CommonDataKeys +import com.intellij.openapi.command.WriteCommandAction +import com.intellij.openapi.util.TextRange +import com.intellij.psi.PsiDocumentManager +import org.jetbrains.kotlin.analysis.api.KtAllowAnalysisFromWriteAction +import org.jetbrains.kotlin.analysis.api.KtAllowAnalysisOnEdt +import org.jetbrains.kotlin.analysis.api.analyze +import org.jetbrains.kotlin.analysis.api.lifetime.allowAnalysisFromWriteAction +import org.jetbrains.kotlin.analysis.api.lifetime.allowAnalysisOnEdt +import org.jetbrains.kotlin.idea.base.analysis.api.utils.shortenReferencesInRange +import org.jetbrains.kotlin.psi.KtFile + +class ShortenSelectionAction : AnAction() { + override fun getActionUpdateThread(): ActionUpdateThread = ActionUpdateThread.EDT + + override fun isDumbAware(): Boolean = false + + @OptIn(KtAllowAnalysisFromWriteAction::class, KtAllowAnalysisOnEdt::class) + override fun actionPerformed(e: AnActionEvent) { + val dataContext = e.dataContext + val project = CommonDataKeys.PROJECT.getData(dataContext) ?: return + val editor = CommonDataKeys.EDITOR.getData(dataContext) ?: return + val file = PsiDocumentManager.getInstance(project).getPsiFile(editor.document) as? KtFile ?: return + val selection = TextRange(editor.selectionModel.selectionStart, editor.selectionModel.selectionEnd) + WriteCommandAction.runWriteCommandAction(project, templateText, null, { + allowAnalysisOnEdt { + allowAnalysisFromWriteAction { + analyze(file) { + shortenReferencesInRange(file, selection) + } + } + } + }, file) + } +} \ No newline at end of file