Disable highlighting for decompiled Kotlin files (KT-27284)
#KT-27284 Fixed
This commit is contained in:
+2
@@ -9,12 +9,14 @@ import com.intellij.codeInsight.daemon.impl.analysis.DefaultHighlightingSettingP
|
|||||||
import com.intellij.codeInsight.daemon.impl.analysis.FileHighlightingSetting
|
import com.intellij.codeInsight.daemon.impl.analysis.FileHighlightingSetting
|
||||||
import com.intellij.openapi.project.Project
|
import com.intellij.openapi.project.Project
|
||||||
import com.intellij.openapi.vfs.VirtualFile
|
import com.intellij.openapi.vfs.VirtualFile
|
||||||
|
import org.jetbrains.kotlin.idea.internal.isKotlinDecompiledFile
|
||||||
import org.jetbrains.kotlin.idea.util.ProjectRootsUtil
|
import org.jetbrains.kotlin.idea.util.ProjectRootsUtil
|
||||||
|
|
||||||
class KotlinDefaultHighlightingSettingsProvider : DefaultHighlightingSettingProvider() {
|
class KotlinDefaultHighlightingSettingsProvider : DefaultHighlightingSettingProvider() {
|
||||||
override fun getDefaultSetting(project: Project, file: VirtualFile): FileHighlightingSetting? {
|
override fun getDefaultSetting(project: Project, file: VirtualFile): FileHighlightingSetting? {
|
||||||
return when {
|
return when {
|
||||||
ProjectRootsUtil.isLibraryFile(project, file) -> FileHighlightingSetting.SKIP_INSPECTION
|
ProjectRootsUtil.isLibraryFile(project, file) -> FileHighlightingSetting.SKIP_INSPECTION
|
||||||
|
file.isKotlinDecompiledFile -> FileHighlightingSetting.SKIP_HIGHLIGHTING
|
||||||
else -> null
|
else -> null
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -11,6 +11,7 @@ import com.intellij.openapi.progress.ProgressIndicator
|
|||||||
import com.intellij.openapi.progress.ProgressManager
|
import com.intellij.openapi.progress.ProgressManager
|
||||||
import com.intellij.openapi.progress.Task
|
import com.intellij.openapi.progress.Task
|
||||||
import com.intellij.openapi.ui.Messages
|
import com.intellij.openapi.ui.Messages
|
||||||
|
import com.intellij.openapi.util.Key
|
||||||
import com.intellij.openapi.util.io.FileUtil
|
import com.intellij.openapi.util.io.FileUtil
|
||||||
import com.intellij.openapi.vfs.VfsUtil
|
import com.intellij.openapi.vfs.VfsUtil
|
||||||
import com.intellij.openapi.vfs.VirtualFile
|
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 com.intellij.openapi.vfs.ex.dummy.DummyFileSystem
|
||||||
import org.jetbrains.kotlin.idea.util.application.runWriteAction
|
import org.jetbrains.kotlin.idea.util.application.runWriteAction
|
||||||
import org.jetbrains.kotlin.psi.KtFile
|
import org.jetbrains.kotlin.psi.KtFile
|
||||||
|
import org.jetbrains.kotlin.psi.NotNullableUserDataProperty
|
||||||
|
|
||||||
fun showDecompiledCode(sourceFile: KtFile) {
|
fun showDecompiledCode(sourceFile: KtFile) {
|
||||||
ProgressManager.getInstance().run(KotlinBytecodeDecompilerTask(sourceFile))
|
ProgressManager.getInstance().run(KotlinBytecodeDecompilerTask(sourceFile))
|
||||||
@@ -44,11 +46,13 @@ class KotlinBytecodeDecompilerTask(val file: KtFile) : Task.Backgroundable(file.
|
|||||||
return@runWriteAction
|
return@runWriteAction
|
||||||
}
|
}
|
||||||
|
|
||||||
val root = getOrCreateDummyRoot()
|
val root: VirtualFile = getOrCreateDummyRoot()
|
||||||
val decompiledFileName = FileUtil.getNameWithoutExtension(file.name) + ".decompiled.java"
|
val decompiledFileName = FileUtil.getNameWithoutExtension(file.name) + ".decompiled.java"
|
||||||
val result = DummyFileSystem.getInstance().createChildFile(null, root, decompiledFileName)
|
val result = DummyFileSystem.getInstance().createChildFile(null, root, decompiledFileName)
|
||||||
VfsUtil.saveText(result, decompiledText)
|
VfsUtil.saveText(result, decompiledText)
|
||||||
|
|
||||||
|
result.isKotlinDecompiledFile = true
|
||||||
|
|
||||||
OpenFileDescriptor(file.project, result).navigate(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_FOLDER = "kotlinDecompiled"
|
||||||
val KOTLIN_DECOMPILED_ROOT = "dummy://$KOTLIN_DECOMPILED_FOLDER"
|
val KOTLIN_DECOMPILED_ROOT = "dummy://$KOTLIN_DECOMPILED_FOLDER"
|
||||||
|
|
||||||
|
var VirtualFile.isKotlinDecompiledFile: Boolean by NotNullableUserDataProperty(Key.create("IS_KOTLIN_DECOMPILED_FILE"), false)
|
||||||
|
|
||||||
fun getOrCreateDummyRoot(): VirtualFile =
|
fun getOrCreateDummyRoot(): VirtualFile =
|
||||||
VirtualFileManager.getInstance().refreshAndFindFileByUrl(KOTLIN_DECOMPILED_ROOT) ?:
|
VirtualFileManager.getInstance().refreshAndFindFileByUrl(KOTLIN_DECOMPILED_ROOT) ?:
|
||||||
DummyFileSystem.getInstance().createRoot(KOTLIN_DECOMPILED_FOLDER)
|
DummyFileSystem.getInstance().createRoot(KOTLIN_DECOMPILED_FOLDER)
|
||||||
|
|||||||
Reference in New Issue
Block a user