override suspend fun doExecute()

in plugin-bazel/src/main/kotlin/org/jetbrains/bazel/kotlin/ideStarter/MoveClassCommand.kt [29:64]


  override suspend fun doExecute(context: PlaybackContext) {
    val (sourceFilePath, destinationDirectoryPath) =
      try {
        extractCommandArgument(PREFIX).split(" ")
      } catch (_: Exception) {
        throw IllegalArgumentException("Usage: $PREFIX sourceFile destinationDirectory")
      }
    val project = context.project
    val rootDir = project.rootDir
    val sourceFile = checkNotNull(rootDir.resolveFromRootOrRelative(sourceFilePath))
    val destinationDirectory = checkNotNull(rootDir.resolveFromRootOrRelative(destinationDirectoryPath))

    val targetDirectory =
      readAction {
        checkNotNull(PsiManager.getInstance(project).findDirectory(destinationDirectory))
      }
    val sourceClass =
      readAction {
        val sourcePsiFile = PsiManager.getInstance(project).findFile(sourceFile) as PsiClassOwner
        var sourceClass: PsiElement = sourcePsiFile.classes.single()
        if (sourceClass is KtLightClass) {
          sourceClass = checkNotNull(sourceClass.kotlinOrigin)
        }
        sourceClass
      }

    withContext(Dispatchers.EDT) {
      MoveHandler.doMove(
        project,
        arrayOf(sourceClass),
        targetDirectory,
        SimpleDataContext.getProjectContext(project),
        null,
      )
    }
  }