get rid of intellij.build.toolbox.litegen parameter and use BuildOptions.TOOLBOX_LITE...
[idea/community.git] / jvm / jvm-analysis-impl / src / com / intellij / analysis / internal / DumpUastTreeAction.kt
1 // Copyright 2000-2019 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file.
2 package com.intellij.analysis.internal
3
4 import com.intellij.notification.Notification
5 import com.intellij.notification.NotificationType
6 import com.intellij.notification.Notifications
7 import com.intellij.openapi.actionSystem.AnAction
8 import com.intellij.openapi.actionSystem.AnActionEvent
9 import com.intellij.openapi.actionSystem.LangDataKeys
10 import com.intellij.openapi.application.ApplicationManager
11 import com.intellij.openapi.application.runReadAction
12 import com.intellij.openapi.fileEditor.FileEditorManager
13 import com.intellij.openapi.fileEditor.OpenFileDescriptor
14 import com.intellij.openapi.fileTypes.PlainTextLanguage
15 import com.intellij.testFramework.LightVirtualFile
16 import org.jetbrains.uast.UastLanguagePlugin
17 import org.jetbrains.uast.asRecursiveLogString
18 import org.jetbrains.uast.toUElement
19
20 class DumpUastTreeAction : AnAction() {
21
22   override fun actionPerformed(e: AnActionEvent) {
23     val file = e.getData(LangDataKeys.PSI_FILE) ?: return
24     val project = e.project ?: return
25
26     val dump = runReadAction { file.toUElement()?.asRecursiveLogString() }
27     if (dump == null) {
28       Notifications.Bus.notify(
29         Notification("UAST", "UAST", "Can't build UAST tree for file '${file.name}'", NotificationType.ERROR)
30       )
31       return
32     }
33
34     FileEditorManager.getInstance(project).openEditor(
35       OpenFileDescriptor(project, LightVirtualFile(file.name + ".uast-log", PlainTextLanguage.INSTANCE, dump)),
36       true
37     )
38   }
39
40   override fun update(e: AnActionEvent) {
41     e.presentation.isEnabledAndVisible = ApplicationManager.getApplication().isInternal && run {
42       val file = e.getData(LangDataKeys.PSI_FILE) ?: return@run false
43       UastLanguagePlugin.byLanguage(file.language) != null
44     }
45   }
46 }