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