From 0e7413b5b16fdb7a460bc905d1a01db923381686 Mon Sep 17 00:00:00 2001 From: Ilya Chernikov Date: Fri, 25 Nov 2016 18:24:33 +0100 Subject: [PATCH] Generalizing error handling when working with (potentially 3rd-party) script templates, fixing #EA-91412 and alike --- ...inScriptDefinitionFromAnnotatedTemplate.kt | 38 +++++++++---------- 1 file changed, 19 insertions(+), 19 deletions(-) diff --git a/compiler/frontend/src/org/jetbrains/kotlin/script/KotlinScriptDefinitionFromAnnotatedTemplate.kt b/compiler/frontend/src/org/jetbrains/kotlin/script/KotlinScriptDefinitionFromAnnotatedTemplate.kt index bf359e8c62e..49795a92077 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/script/KotlinScriptDefinitionFromAnnotatedTemplate.kt +++ b/compiler/frontend/src/org/jetbrains/kotlin/script/KotlinScriptDefinitionFromAnnotatedTemplate.kt @@ -89,34 +89,34 @@ open class KotlinScriptDefinitionFromAnnotatedTemplate( override fun getDependenciesFor(file: TF, project: Project, previousDependencies: KotlinScriptExternalDependencies?): KotlinScriptExternalDependencies? { - val script = BasicScriptContents(file, getAnnotations = { - val classLoader = (template as Any).javaClass.classLoader - getAnnotationEntries(file, project) - .mapNotNull { psiAnn -> - // TODO: consider advanced matching using semantic similar to actual resolving - acceptedAnnotations.find { ann -> - psiAnn.typeName.let { it == ann.simpleName || it == ann.qualifiedName } - }?.let { KtAnnotationWrapper(psiAnn, classLoader.loadClass(it.qualifiedName).kotlin as KClass) } - } - .map { it.getProxy(classLoader) } - }) - fun logClassloadingError(ex: Throwable) { logScriptDefMessage(ScriptDependenciesResolver.ReportSeverity.WARNING, ex.message ?: "Invalid script template: ${template.qualifiedName}", null) } + val script = BasicScriptContents(file, getAnnotations = { + val classLoader = (template as Any).javaClass.classLoader + try { + getAnnotationEntries(file, project) + .mapNotNull { psiAnn -> + // TODO: consider advanced matching using semantic similar to actual resolving + acceptedAnnotations.find { ann -> + psiAnn.typeName.let { it == ann.simpleName || it == ann.qualifiedName } + }?.let { KtAnnotationWrapper(psiAnn, classLoader.loadClass(it.qualifiedName).kotlin as KClass) } + } + .map { it.getProxy(classLoader) } + } + catch (ex: Throwable) { + logClassloadingError(ex) + emptyList() + } + }) + try { val fileDeps = resolver?.resolve(script, environment, ::logScriptDefMessage, previousDependencies) // TODO: use it as a Future return fileDeps?.get() } - catch (ex: ClassNotFoundException) { - logClassloadingError(ex) - } - catch (ex: NoClassDefFoundError) { - logClassloadingError(ex) - } - catch (ex: ClassCastException) { + catch (ex: Throwable) { logClassloadingError(ex) } return null