diff --git a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/KotlinBundle.properties b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/KotlinBundle.properties index 5451ec5c723..879f759fcf1 100644 --- a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/KotlinBundle.properties +++ b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/KotlinBundle.properties @@ -215,6 +215,7 @@ suppress.warning.for=Suppress ''{0}'' for {1} {2} reflection.not.found=Reflection not found in the classpath add.reflection.to.classpath=Add kotlin-reflect.jar to the classpath add.test.to.classpath=Add kotlin-test.jar to the classpath +add.script.runtime.to.classpath=Add kotlin-script-runtime.jar to the classpath # Kotlin Compiler Settings Tab diff --git a/idea/idea-jvm/src/org/jetbrains/kotlin/idea/inspections/AddKotlinLibQuickFix.kt b/idea/idea-jvm/src/org/jetbrains/kotlin/idea/inspections/AddKotlinLibQuickFix.kt index 9c5aeb61268..1a91f0eb31c 100644 --- a/idea/idea-jvm/src/org/jetbrains/kotlin/idea/inspections/AddKotlinLibQuickFix.kt +++ b/idea/idea-jvm/src/org/jetbrains/kotlin/idea/inspections/AddKotlinLibQuickFix.kt @@ -37,6 +37,7 @@ import org.jetbrains.kotlin.name.FqName import org.jetbrains.kotlin.psi.KtElement import org.jetbrains.kotlin.psi.KtFile import org.jetbrains.kotlin.psi.KtImportDirective +import org.jetbrains.kotlin.psi.KtScript class AddReflectionQuickFix(element: KtElement) : AddKotlinLibQuickFix(element, listOf(LibraryJarDescriptor.REFLECT_JAR, @@ -52,6 +53,29 @@ class AddReflectionQuickFix(element: KtElement) } } +class AddScriptRuntimeQuickFix(element: KtElement) : AddKotlinLibQuickFix(element, listOf(LibraryJarDescriptor.SCRIPT_RUNTIME_JAR)) { + override fun getText() = KotlinBundle.message("add.script.runtime.to.classpath") + override fun getFamilyName() = text + + override fun getLibraryDescriptor(module: Module) = MavenExternalLibraryDescriptor( + "org.jetbrains.kotlin", "kotlin-script-runtime", + getRuntimeLibraryVersion(module) ?: bundledRuntimeVersion() + ) + + companion object : KotlinSingleIntentionActionFactory() { + override fun createAction(diagnostic: Diagnostic): KotlinQuickFixAction? { + val ktScript = Errors.MISSING_SCRIPT_BASE_CLASS.cast(diagnostic).psiElement as? KtScript ?: return null + val templateClassName = ktScript.kotlinScriptDefinition.value.template.qualifiedName ?: return null + + if (templateClassName.startsWith("kotlin.script.templates.standard")) { + return diagnostic.createIntentionForFirstParentOfType(::AddScriptRuntimeQuickFix) + } + + return null + } + } +} + class AddTestLibQuickFix(element: KtElement) : AddKotlinLibQuickFix(element, listOf(LibraryJarDescriptor.TEST_JAR, LibraryJarDescriptor.TEST_SRC_JAR)) { diff --git a/idea/idea-jvm/src/org/jetbrains/kotlin/idea/quickfix/JvmQuickFixRegistrar.kt b/idea/idea-jvm/src/org/jetbrains/kotlin/idea/quickfix/JvmQuickFixRegistrar.kt index faa863a7fa0..02137fc932d 100644 --- a/idea/idea-jvm/src/org/jetbrains/kotlin/idea/quickfix/JvmQuickFixRegistrar.kt +++ b/idea/idea-jvm/src/org/jetbrains/kotlin/idea/quickfix/JvmQuickFixRegistrar.kt @@ -19,6 +19,7 @@ package org.jetbrains.kotlin.idea.quickfix import org.jetbrains.kotlin.diagnostics.DiagnosticFactory import org.jetbrains.kotlin.diagnostics.Errors.* import org.jetbrains.kotlin.idea.inspections.AddReflectionQuickFix +import org.jetbrains.kotlin.idea.inspections.AddScriptRuntimeQuickFix import org.jetbrains.kotlin.idea.inspections.AddTestLibQuickFix import org.jetbrains.kotlin.resolve.jvm.diagnostics.ErrorsJvm.NO_REFLECTION_IN_CLASS_PATH @@ -36,5 +37,7 @@ class JvmQuickFixRegistrar : QuickFixContributor { EXPERIMENTAL_FEATURE_WARNING.registerFactory(ChangeCoroutineSupportFix) NO_REFLECTION_IN_CLASS_PATH.registerFactory(AddReflectionQuickFix) + + MISSING_SCRIPT_BASE_CLASS.registerFactory(AddScriptRuntimeQuickFix) } } \ No newline at end of file