diff --git a/compiler/frontend/src/org/jetbrains/kotlin/script/KotlinScriptDefinition.kt b/compiler/frontend/src/org/jetbrains/kotlin/script/KotlinScriptDefinition.kt index d8d443bdb47..a5c3a607dcf 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/script/KotlinScriptDefinition.kt +++ b/compiler/frontend/src/org/jetbrains/kotlin/script/KotlinScriptDefinition.kt @@ -20,6 +20,7 @@ import com.intellij.openapi.fileTypes.LanguageFileType import com.intellij.openapi.project.Project import org.jetbrains.kotlin.idea.KotlinFileType import org.jetbrains.kotlin.name.Name +import org.jetbrains.kotlin.name.NameUtils import org.jetbrains.kotlin.parsing.KotlinParserDefinition import org.jetbrains.kotlin.psi.KtScript import java.io.File @@ -41,7 +42,7 @@ open class KotlinScriptDefinition(val template: KClass) { getFileName(file).endsWith(KotlinParserDefinition.STD_SCRIPT_EXT) open fun getScriptName(script: KtScript): Name = - ScriptNameUtil.fileNameWithExtensionStripped(script) + NameUtils.getScriptNameForFile(script.containingKtFile.name) open fun getDependenciesFor(file: TF, project: Project, previousDependencies: KotlinScriptExternalDependencies?): KotlinScriptExternalDependencies? = null } diff --git a/compiler/frontend/src/org/jetbrains/kotlin/script/KotlinScriptDefinitionFromAnnotatedTemplate.kt b/compiler/frontend/src/org/jetbrains/kotlin/script/KotlinScriptDefinitionFromAnnotatedTemplate.kt index 53c6a59e7e6..839afb60c76 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/script/KotlinScriptDefinitionFromAnnotatedTemplate.kt +++ b/compiler/frontend/src/org/jetbrains/kotlin/script/KotlinScriptDefinitionFromAnnotatedTemplate.kt @@ -23,7 +23,7 @@ import com.intellij.openapi.vfs.VirtualFile import com.intellij.psi.PsiFile import com.intellij.psi.PsiManager import org.jetbrains.kotlin.name.Name -import org.jetbrains.kotlin.parsing.KotlinParserDefinition +import org.jetbrains.kotlin.name.NameUtils import org.jetbrains.kotlin.psi.KtAnnotationEntry import org.jetbrains.kotlin.psi.KtFile import org.jetbrains.kotlin.psi.KtScript @@ -85,7 +85,7 @@ open class KotlinScriptDefinitionFromAnnotatedTemplate( scriptFilePattern.let { Regex(it).matches(getFileName(file)) } // TODO: implement other strategy - e.g. try to extract something from match with ScriptFilePattern - override fun getScriptName(script: KtScript): Name = ScriptNameUtil.fileNameWithExtensionStripped(script) + override fun getScriptName(script: KtScript): Name = NameUtils.getScriptNameForFile(script.containingKtFile.name) override fun getDependenciesFor(file: TF, project: Project, previousDependencies: KotlinScriptExternalDependencies?): KotlinScriptExternalDependencies? { diff --git a/compiler/frontend/src/org/jetbrains/kotlin/script/ScriptNameUtil.kt b/compiler/frontend/src/org/jetbrains/kotlin/script/ScriptNameUtil.kt deleted file mode 100644 index 3c12bcd448e..00000000000 --- a/compiler/frontend/src/org/jetbrains/kotlin/script/ScriptNameUtil.kt +++ /dev/null @@ -1,33 +0,0 @@ -/* - * Copyright 2010-2015 JetBrains s.r.o. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.jetbrains.kotlin.script - -import org.jetbrains.kotlin.name.Name -import org.jetbrains.kotlin.psi.KtScript - -object ScriptNameUtil { - fun fileNameWithExtensionStripped(script: KtScript): Name = - Name.identifier(generateNameByFileName(script.containingKtFile.name)) - - fun generateNameByFileName(filePath: String): String { - val fileName = filePath.substringAfterLast('/') - val nameWithoutExtension = fileName.substringBeforeLast('.') - return nameWithoutExtension - .replace('.', '_') - .capitalize() - } -} diff --git a/compiler/testData/codegen/scriptCustom/1#@2.kts b/compiler/testData/codegen/scriptCustom/1#@2.kts new file mode 100644 index 00000000000..3661a9c341d --- /dev/null +++ b/compiler/testData/codegen/scriptCustom/1#@2.kts @@ -0,0 +1 @@ +val result = "OK" diff --git a/compiler/tests/org/jetbrains/kotlin/codegen/ScriptGenTest.kt b/compiler/tests/org/jetbrains/kotlin/codegen/ScriptGenTest.kt index 62b5f0bd369..0ea30ac1d33 100644 --- a/compiler/tests/org/jetbrains/kotlin/codegen/ScriptGenTest.kt +++ b/compiler/tests/org/jetbrains/kotlin/codegen/ScriptGenTest.kt @@ -90,6 +90,13 @@ class ScriptGenTest : CodegenTestCase() { assertEquals(239, invoke as Int / 2) } + fun testNameSanitation() { + setUpEnvironment("scriptCustom/1#@2.kts") + + val aClass = generateClass("_1__2") + assertEquals("OK", aClass.getDeclaredMethod("getResult")(aClass.newInstance())) + } + private fun setUpEnvironment(sourcePath: String) { setUpEnvironment(listOf(sourcePath)) } diff --git a/core/descriptors/src/org/jetbrains/kotlin/name/NameUtils.kt b/core/descriptors/src/org/jetbrains/kotlin/name/NameUtils.kt index d0ce2b24c64..f8233977f40 100644 --- a/core/descriptors/src/org/jetbrains/kotlin/name/NameUtils.kt +++ b/core/descriptors/src/org/jetbrains/kotlin/name/NameUtils.kt @@ -45,4 +45,9 @@ object NameUtils { str.substring(0, 1).toUpperCase(Locale.ENGLISH) + str.substring(1) else "_$str" + + // "pkg/someScript.kts" -> "SomeScript" + @JvmStatic + fun getScriptNameForFile(filePath: String): Name = + Name.identifier(NameUtils.getPackagePartClassNamePrefix(filePath.substringAfterLast('/').substringBeforeLast('.'))) } diff --git a/idea/src/org/jetbrains/kotlin/idea/run/script/standalone/KotlinStandaloneScriptRunConfiguration.kt b/idea/src/org/jetbrains/kotlin/idea/run/script/standalone/KotlinStandaloneScriptRunConfiguration.kt index ba559db8daf..7d88ba82436 100644 --- a/idea/src/org/jetbrains/kotlin/idea/run/script/standalone/KotlinStandaloneScriptRunConfiguration.kt +++ b/idea/src/org/jetbrains/kotlin/idea/run/script/standalone/KotlinStandaloneScriptRunConfiguration.kt @@ -35,9 +35,7 @@ import com.intellij.refactoring.listeners.RefactoringElementListener import org.jdom.Element import org.jetbrains.kotlin.idea.core.script.KotlinScriptConfigurationManager import org.jetbrains.kotlin.idea.run.script.standalone.KotlinStandaloneScriptRunConfigurationProducer.Companion.pathFromPsiElement -import org.jetbrains.kotlin.parsing.KotlinParserDefinition import org.jetbrains.kotlin.psi.KtFile -import org.jetbrains.kotlin.script.ScriptNameUtil import org.jetbrains.kotlin.utils.PathUtil import java.io.File import java.util.*