diff --git a/src/main/kotlin/com/getyourguide/paparazzi/PaparazziWindow.kt b/src/main/kotlin/com/getyourguide/paparazzi/PaparazziWindow.kt index f6f2460..3817dc8 100644 --- a/src/main/kotlin/com/getyourguide/paparazzi/PaparazziWindow.kt +++ b/src/main/kotlin/com/getyourguide/paparazzi/PaparazziWindow.kt @@ -136,7 +136,7 @@ private class ContextMenuHandler( val snapshot = model.getElementAt(index) val actionGroup = DefaultActionGroup( OpenFileAction(snapshot.file), - DeleteFileAction(snapshot.file) + DeleteFileAction(listOf(snapshot.file)) ) val popupMenu = actionManager.createActionPopupMenu(ActionPlaces.POPUP, actionGroup) popupMenu.setTargetComponent(list) diff --git a/src/main/kotlin/com/getyourguide/paparazzi/actions/DeleteFileAction.kt b/src/main/kotlin/com/getyourguide/paparazzi/actions/DeleteFileAction.kt index 01070fb..6f3056a 100644 --- a/src/main/kotlin/com/getyourguide/paparazzi/actions/DeleteFileAction.kt +++ b/src/main/kotlin/com/getyourguide/paparazzi/actions/DeleteFileAction.kt @@ -1,23 +1,51 @@ package com.getyourguide.paparazzi.actions import com.getyourguide.paparazzi.service.service +import com.getyourguide.paparazzi.service.toFileInfo import com.intellij.icons.AllIcons +import com.intellij.ide.util.DeleteHandler import com.intellij.openapi.actionSystem.AnAction import com.intellij.openapi.actionSystem.AnActionEvent -import com.intellij.openapi.application.WriteAction +import com.intellij.openapi.project.Project import com.intellij.openapi.vfs.VirtualFile - -private const val ACTION_NAME = "Delete snapshot" +import com.intellij.psi.PsiClass +import com.intellij.psi.PsiMethod +import org.jetbrains.kotlin.idea.core.util.toPsiFile /** * Action to delete the snapshot file */ -class DeleteFileAction(val file: VirtualFile) : AnAction(ACTION_NAME, null, AllIcons.Actions.GC) { +class DeleteFileAction( + private val files: List = emptyList(), + private val psiClass: PsiClass? = null, + private val psiMethod: PsiMethod? = null +) : AnAction(getActionName(files), null, AllIcons.Actions.GC) { override fun actionPerformed(e: AnActionEvent) { - WriteAction.run { - file.delete(this) - e.project?.service?.loadFromSelectedEditor(true) + val project = e.project ?: return + if (psiClass != null) { + val file = psiClass.containingFile?.virtualFile ?: return + val fileInfo = file.toFileInfo(project, false) + val methodName = psiMethod?.name + val snapshots = if (methodName != null) { + fileInfo.snapshotsForMethod(methodName) + } else { + fileInfo.allSnapshots() + } + val files = snapshots.map { it.file } + deleteSnapshots(project, files) + } else { + deleteSnapshots(project, files) } } + + private fun deleteSnapshots(project: Project, files: List) { + val psiFiles = files.mapNotNull { it.toPsiFile(project) } + DeleteHandler.deletePsiElement(psiFiles.toTypedArray(), project, true) + project.service.loadFromSelectedEditor(true) + } +} + +private fun getActionName(files: List): String { + return if (files.size == 1) "Delete Snapshot" else "Delete All Snapshots" } diff --git a/src/main/kotlin/com/getyourguide/paparazzi/markers/PaparazziRunLineMarkerContributor.kt b/src/main/kotlin/com/getyourguide/paparazzi/markers/PaparazziRunLineMarkerContributor.kt index 913fc31..9698faf 100644 --- a/src/main/kotlin/com/getyourguide/paparazzi/markers/PaparazziRunLineMarkerContributor.kt +++ b/src/main/kotlin/com/getyourguide/paparazzi/markers/PaparazziRunLineMarkerContributor.kt @@ -1,5 +1,6 @@ package com.getyourguide.paparazzi.markers +import com.getyourguide.paparazzi.actions.DeleteFileAction import com.getyourguide.paparazzi.actions.RecordPaparazziAction import com.getyourguide.paparazzi.actions.VerifyPaparazziAction import com.intellij.codeInsight.TestFrameworks @@ -32,7 +33,11 @@ class PaparazziRunLineMarkerContributor : RunLineMarkerContributor() { if (psiClass != null && psiMethod != null) { return Info( AllIcons.RunConfigurations.TestState.Run, - arrayOf(RecordPaparazziAction(psiClass, psiMethod), VerifyPaparazziAction(psiClass, psiMethod)), + arrayOf( + RecordPaparazziAction(psiClass, psiMethod), + VerifyPaparazziAction(psiClass, psiMethod), + DeleteFileAction(psiClass = psiClass, psiMethod = psiMethod) + ), null ) } @@ -40,7 +45,11 @@ class PaparazziRunLineMarkerContributor : RunLineMarkerContributor() { if (testClass != null) { return Info( AllIcons.RunConfigurations.TestState.Run, - arrayOf(RecordPaparazziAction(testClass, null), VerifyPaparazziAction(testClass, null)), + arrayOf( + RecordPaparazziAction(testClass, null), + VerifyPaparazziAction(testClass, null), + DeleteFileAction(psiClass = testClass) + ), null ) }