Fix exception from kotlin bytecode window on common code

Do not show bytecode window for non-jvm platform modules

 #KT-24159 Fixed
This commit is contained in:
Pavel V. Talanov
2018-06-06 18:27:17 +02:00
parent d18846201a
commit e67f449476
2 changed files with 13 additions and 4 deletions
@@ -22,6 +22,7 @@ import com.intellij.openapi.util.text.StringUtil
import com.intellij.openapi.wm.ToolWindow
import com.intellij.util.Alarm
import org.jetbrains.kotlin.backend.jvm.JvmIrCodegenFactory
import org.jetbrains.kotlin.caches.resolve.KotlinCacheService
import org.jetbrains.kotlin.codegen.ClassBuilderFactories
import org.jetbrains.kotlin.codegen.CompilationErrorHandler
import org.jetbrains.kotlin.codegen.DefaultCodegenFactory
@@ -29,15 +30,17 @@ import org.jetbrains.kotlin.codegen.KotlinCodegenFacade
import org.jetbrains.kotlin.codegen.state.GenerationState
import org.jetbrains.kotlin.config.*
import org.jetbrains.kotlin.diagnostics.rendering.DefaultErrorMessages
import org.jetbrains.kotlin.idea.caches.resolve.getResolutionFacade
import org.jetbrains.kotlin.idea.debugger.DebuggerUtils
import org.jetbrains.kotlin.idea.project.languageVersionSettings
import org.jetbrains.kotlin.idea.project.platform
import org.jetbrains.kotlin.idea.util.InfinitePeriodicalTask
import org.jetbrains.kotlin.idea.util.LongRunningReadTask
import org.jetbrains.kotlin.idea.util.ProjectRootsUtil
import org.jetbrains.kotlin.psi.KtClassOrObject
import org.jetbrains.kotlin.psi.KtFile
import org.jetbrains.kotlin.psi.KtScript
import org.jetbrains.kotlin.resolve.TargetPlatform
import org.jetbrains.kotlin.resolve.jvm.platform.JvmPlatform
import org.jetbrains.kotlin.utils.join
import java.awt.BorderLayout
import java.awt.FlowLayout
@@ -234,6 +237,7 @@ class KotlinBytecodeToolWindow(private val myProject: Project, private val toolW
val state: GenerationState
try {
state = compileSingleFile(ktFile, configuration)
?: return BytecodeGenerationResult.Error("Cannot compile ${ktFile.name} to bytecode.")
} catch (e: ProcessCanceledException) {
throw e
} catch (e: Exception) {
@@ -271,8 +275,13 @@ class KotlinBytecodeToolWindow(private val myProject: Project, private val toolW
fun compileSingleFile(
ktFile: KtFile,
configuration: CompilerConfiguration
): GenerationState {
val resolutionFacade = ktFile.getResolutionFacade()
): GenerationState? {
val platform = ktFile.platform
if (platform != TargetPlatform.Common && platform != JvmPlatform) return null
val resolutionFacade = KotlinCacheService.getInstance(ktFile.project)
.getResolutionFacadeByFile(ktFile, JvmPlatform)
?: return null
val bindingContextForFile = resolutionFacade.analyzeWithAllCompilerChecks(listOf(ktFile)).bindingContext
@@ -83,7 +83,7 @@ class KotlinDecompilerServiceImpl : KotlinDecompilerService {
val configuration = CompilerConfiguration().apply {
languageVersionSettings = file.languageVersionSettings
}
val generationState = KotlinBytecodeToolWindow.compileSingleFile(file, configuration)
val generationState = KotlinBytecodeToolWindow.compileSingleFile(file, configuration) ?: return emptyMap()
val bytecodeMap = hashMapOf<File, () -> ByteArray>()
generationState.factory.asList().filter { FileUtilRt.extensionEquals(it.relativePath, "class") }.forEach {