Skip to content

Commit

Permalink
Added ability to Delete snapshots for entire method or entire class
Browse files Browse the repository at this point in the history
  • Loading branch information
thsaravana committed Jul 14, 2023
1 parent 23af8ec commit c09c9d2
Show file tree
Hide file tree
Showing 3 changed files with 47 additions and 10 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand Down
Original file line number Diff line number Diff line change
@@ -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<VirtualFile> = 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<Throwable> {
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<VirtualFile>) {
val psiFiles = files.mapNotNull { it.toPsiFile(project) }
DeleteHandler.deletePsiElement(psiFiles.toTypedArray(), project, true)
project.service.loadFromSelectedEditor(true)
}
}

private fun getActionName(files: List<VirtualFile>): String {
return if (files.size == 1) "Delete Snapshot" else "Delete All Snapshots"
}
Original file line number Diff line number Diff line change
@@ -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
Expand Down Expand Up @@ -32,15 +33,23 @@ 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
)
}
val testClass = getTestClass(element)
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
)
}
Expand Down

0 comments on commit c09c9d2

Please sign in to comment.