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,
)
}
}