Fix legacy definitions error propagation

also fixes script-util test with resolving errors
This commit is contained in:
Ilya Chernikov
2019-07-09 16:55:33 +02:00
parent 10e19bccb1
commit 382e55284c
4 changed files with 36 additions and 26 deletions
@@ -364,20 +364,22 @@ class ScriptTemplateTest : KtUsefulTestCase() {
val environment = KotlinCoreEnvironment.createForTests(rootDisposable, configuration, EnvironmentConfigFiles.JVM_CONFIG_FILES)
try {
return KotlinToJVMBytecodeCompiler.compileScript(environment, this::class.java.classLoader.takeUnless { runIsolated })
}
catch (e: CompilationException) {
messageCollector.report(CompilerMessageSeverity.EXCEPTION, OutputMessageUtil.renderException(e),
MessageUtil.psiElementToMessageLocation(e.element))
return null
}
catch (t: Throwable) {
return try {
KotlinToJVMBytecodeCompiler.compileScript(environment, this::class.java.classLoader.takeUnless { runIsolated })
} catch (e: CompilationException) {
messageCollector.report(
CompilerMessageSeverity.EXCEPTION, OutputMessageUtil.renderException(e),
MessageUtil.psiElementToMessageLocation(e.element)
)
null
} catch (e: IllegalStateException) {
messageCollector.report(CompilerMessageSeverity.EXCEPTION, OutputMessageUtil.renderException(e))
null
} catch (t: Throwable) {
MessageCollectorUtil.reportException(messageCollector, t)
throw t
}
}
finally {
} finally {
Disposer.dispose(rootDisposable)
}
}
@@ -170,21 +170,23 @@ done
val environment = KotlinCoreEnvironment.createForTests(rootDisposable, configuration, EnvironmentConfigFiles.JVM_CONFIG_FILES)
try {
return KotlinToJVMBytecodeCompiler.compileScript(environment)
}
catch (e: CompilationException) {
messageCollector.report(CompilerMessageSeverity.EXCEPTION, OutputMessageUtil.renderException(e),
MessageUtil.psiElementToMessageLocation(e.element))
return null
}
catch (t: Throwable) {
return try {
KotlinToJVMBytecodeCompiler.compileScript(environment)
} catch (e: CompilationException) {
messageCollector.report(
CompilerMessageSeverity.EXCEPTION, OutputMessageUtil.renderException(e),
MessageUtil.psiElementToMessageLocation(e.element)
)
null
} catch (e: IllegalStateException) {
messageCollector.report(CompilerMessageSeverity.EXCEPTION, OutputMessageUtil.renderException(e))
null
} catch (t: Throwable) {
MessageCollectorUtil.reportException(messageCollector, t)
throw t
}
}
finally {
} finally {
Disposer.dispose(rootDisposable)
}
}
@@ -11,6 +11,7 @@ import com.intellij.psi.PsiFile
import org.jetbrains.kotlin.psi.KtFile
import org.jetbrains.kotlin.scripting.resolve.ScriptCompilationConfigurationResult
import kotlin.script.experimental.api.ScriptCompilationConfiguration
import kotlin.script.experimental.api.ScriptDiagnostic
import kotlin.script.experimental.api.valueOr
fun PsiFile.findScriptCompilationConfiguration(): ScriptCompilationConfiguration? {
@@ -35,8 +36,12 @@ fun VirtualFile.findScriptCompilationConfiguration(project: Project): ScriptComp
}
private fun ScriptCompilationConfigurationResult.valueOrError() = valueOr { failure ->
throw IllegalArgumentException(
"Error retrieving script compilation configuration: ${failure.reports.joinToString { it.message }}",
failure.reports.find { it.exception != null }?.exception
)
val singleCause = failure.reports.singleOrNull { it.severity == ScriptDiagnostic.Severity.ERROR }
if (singleCause != null)
throw IllegalStateException(singleCause.message, singleCause.exception)
else
throw IllegalStateException(
"Error retrieving script compilation configuration: ${failure.reports.joinToString { it.message }}",
failure.reports.find { it.exception != null }?.exception
)
}
@@ -219,6 +219,7 @@ fun refineScriptCompilationConfiguration(
definition: ScriptDefinition,
project: Project
): ScriptCompilationConfigurationResult {
// TODO: add location information on refinement errors
val ktFileSource = script.toKtFileSource(definition, project)
val legacyDefinition = definition.asLegacyOrNull<KotlinScriptDefinition>()
if (legacyDefinition == null) {