Disable highlighting for decompiled Kotlin files (KT-27284)

#KT-27284 Fixed
This commit is contained in:
Nikolay Krasko
2018-10-10 12:49:29 +03:00
parent b86211b434
commit fc4f7303d3
2 changed files with 9 additions and 1 deletions
@@ -9,12 +9,14 @@ import com.intellij.codeInsight.daemon.impl.analysis.DefaultHighlightingSettingP
import com.intellij.codeInsight.daemon.impl.analysis.FileHighlightingSetting
import com.intellij.openapi.project.Project
import com.intellij.openapi.vfs.VirtualFile
import org.jetbrains.kotlin.idea.internal.isKotlinDecompiledFile
import org.jetbrains.kotlin.idea.util.ProjectRootsUtil
class KotlinDefaultHighlightingSettingsProvider : DefaultHighlightingSettingProvider() {
override fun getDefaultSetting(project: Project, file: VirtualFile): FileHighlightingSetting? {
return when {
ProjectRootsUtil.isLibraryFile(project, file) -> FileHighlightingSetting.SKIP_INSPECTION
file.isKotlinDecompiledFile -> FileHighlightingSetting.SKIP_HIGHLIGHTING
else -> null
}
}
@@ -11,6 +11,7 @@ import com.intellij.openapi.progress.ProgressIndicator
import com.intellij.openapi.progress.ProgressManager
import com.intellij.openapi.progress.Task
import com.intellij.openapi.ui.Messages
import com.intellij.openapi.util.Key
import com.intellij.openapi.util.io.FileUtil
import com.intellij.openapi.vfs.VfsUtil
import com.intellij.openapi.vfs.VirtualFile
@@ -18,6 +19,7 @@ import com.intellij.openapi.vfs.VirtualFileManager
import com.intellij.openapi.vfs.ex.dummy.DummyFileSystem
import org.jetbrains.kotlin.idea.util.application.runWriteAction
import org.jetbrains.kotlin.psi.KtFile
import org.jetbrains.kotlin.psi.NotNullableUserDataProperty
fun showDecompiledCode(sourceFile: KtFile) {
ProgressManager.getInstance().run(KotlinBytecodeDecompilerTask(sourceFile))
@@ -44,11 +46,13 @@ class KotlinBytecodeDecompilerTask(val file: KtFile) : Task.Backgroundable(file.
return@runWriteAction
}
val root = getOrCreateDummyRoot()
val root: VirtualFile = getOrCreateDummyRoot()
val decompiledFileName = FileUtil.getNameWithoutExtension(file.name) + ".decompiled.java"
val result = DummyFileSystem.getInstance().createChildFile(null, root, decompiledFileName)
VfsUtil.saveText(result, decompiledText)
result.isKotlinDecompiledFile = true
OpenFileDescriptor(file.project, result).navigate(true)
}
}
@@ -58,6 +62,8 @@ class KotlinBytecodeDecompilerTask(val file: KtFile) : Task.Backgroundable(file.
val KOTLIN_DECOMPILED_FOLDER = "kotlinDecompiled"
val KOTLIN_DECOMPILED_ROOT = "dummy://$KOTLIN_DECOMPILED_FOLDER"
var VirtualFile.isKotlinDecompiledFile: Boolean by NotNullableUserDataProperty(Key.create("IS_KOTLIN_DECOMPILED_FILE"), false)
fun getOrCreateDummyRoot(): VirtualFile =
VirtualFileManager.getInstance().refreshAndFindFileByUrl(KOTLIN_DECOMPILED_ROOT) ?:
DummyFileSystem.getInstance().createRoot(KOTLIN_DECOMPILED_FOLDER)