From c315c0be49e79340ef934b412434dc33362303f8 Mon Sep 17 00:00:00 2001 From: Bart van Helvert Date: Sun, 10 Dec 2023 17:37:54 +0100 Subject: [PATCH] [kotlin] Add internal action for reference shortening by selection #KTIJ-28116 GitOrigin-RevId: b82e2477fcd3469894765a1480425bf1592bcbd6 --- .../resources/kotlin.refactorings.k2.xml | 6 +++ .../internal/ShortenSelectionAction.kt | 41 +++++++++++++++++++ 2 files changed, 47 insertions(+) create mode 100644 plugins/kotlin/refactorings/kotlin.refactorings.k2/src/org/jetbrains/kotlin/idea/k2/refactoring/internal/ShortenSelectionAction.kt 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