diff --git a/analysis/decompiled/decompiler-to-file-stubs/testData/clsFileStubBuilder/SpecialNames/SpecialNames.kt b/analysis/decompiled/decompiler-to-file-stubs/testData/clsFileStubBuilder/SpecialNames/SpecialNames.kt new file mode 100644 index 00000000000..f126cf28511 --- /dev/null +++ b/analysis/decompiled/decompiler-to-file-stubs/testData/clsFileStubBuilder/SpecialNames/SpecialNames.kt @@ -0,0 +1,3 @@ +object SpecialNames { + val `1M` = 1 +} \ No newline at end of file diff --git a/analysis/decompiled/decompiler-to-file-stubs/testData/clsFileStubBuilder/SpecialNames/SpecialNames.txt b/analysis/decompiled/decompiler-to-file-stubs/testData/clsFileStubBuilder/SpecialNames/SpecialNames.txt new file mode 100644 index 00000000000..6126c1d6108 --- /dev/null +++ b/analysis/decompiled/decompiler-to-file-stubs/testData/clsFileStubBuilder/SpecialNames/SpecialNames.txt @@ -0,0 +1,13 @@ +PsiJetFileStubImpl[package=] + PACKAGE_DIRECTIVE + IMPORT_LIST + OBJECT_DECLARATION[classId=/SpecialNames, fqName=SpecialNames, isCompanion=false, isLocal=false, isObjectLiteral=false, isTopLevel=true, name=SpecialNames, superNames=[]] + MODIFIER_LIST[public] + CLASS_BODY + PROPERTY[fqName=SpecialNames.1M, hasDelegate=false, hasDelegateExpression=false, hasInitializer=false, hasReturnTypeRef=true, isExtension=false, isTopLevel=false, isVar=false, name=1M] + MODIFIER_LIST[public final] + TYPE_REFERENCE + USER_TYPE + USER_TYPE + REFERENCE_EXPRESSION[referencedName=kotlin] + REFERENCE_EXPRESSION[referencedName=Int] diff --git a/analysis/decompiled/decompiler-to-file-stubs/tests/org/jetbrains/kotlin/analysis/decompiler/stub/files/ClsStubBuilderTestGenerated.java b/analysis/decompiled/decompiler-to-file-stubs/tests/org/jetbrains/kotlin/analysis/decompiler/stub/files/ClsStubBuilderTestGenerated.java index 39d0d8abaad..c948587ce21 100644 --- a/analysis/decompiled/decompiler-to-file-stubs/tests/org/jetbrains/kotlin/analysis/decompiler/stub/files/ClsStubBuilderTestGenerated.java +++ b/analysis/decompiled/decompiler-to-file-stubs/tests/org/jetbrains/kotlin/analysis/decompiler/stub/files/ClsStubBuilderTestGenerated.java @@ -246,6 +246,12 @@ public class ClsStubBuilderTestGenerated extends AbstractClsStubBuilderTest { runTest("analysis/decompiled/decompiler-to-file-stubs/testData/clsFileStubBuilder/SecondaryConstructors/"); } + @Test + @TestMetadata("SpecialNames") + public void testSpecialNames() throws Exception { + runTest("analysis/decompiled/decompiler-to-file-stubs/testData/clsFileStubBuilder/SpecialNames/"); + } + @Test @TestMetadata("SuspendLambda") public void testSuspendLambda() throws Exception { diff --git a/analysis/decompiled/decompiler-to-psi/tests/org/jetbrains/kotlin/analysis/decompiler/psi/ByDecompiledPsiStubBuilderTestGenerated.java b/analysis/decompiled/decompiler-to-psi/tests/org/jetbrains/kotlin/analysis/decompiler/psi/ByDecompiledPsiStubBuilderTestGenerated.java index d3a1653563c..86cabc39ce2 100644 --- a/analysis/decompiled/decompiler-to-psi/tests/org/jetbrains/kotlin/analysis/decompiler/psi/ByDecompiledPsiStubBuilderTestGenerated.java +++ b/analysis/decompiled/decompiler-to-psi/tests/org/jetbrains/kotlin/analysis/decompiler/psi/ByDecompiledPsiStubBuilderTestGenerated.java @@ -246,6 +246,12 @@ public class ByDecompiledPsiStubBuilderTestGenerated extends AbstractByDecompile runTest("analysis/decompiled/decompiler-to-file-stubs/testData/clsFileStubBuilder/SecondaryConstructors/"); } + @Test + @TestMetadata("SpecialNames") + public void testSpecialNames() throws Exception { + runTest("analysis/decompiled/decompiler-to-file-stubs/testData/clsFileStubBuilder/SpecialNames/"); + } + @Test @TestMetadata("SuspendLambda") public void testSuspendLambda() throws Exception { diff --git a/core/compiler.common/src/org/jetbrains/kotlin/renderer/RenderingUtils.kt b/core/compiler.common/src/org/jetbrains/kotlin/renderer/RenderingUtils.kt index 48027929da0..73aa3bdb16e 100644 --- a/core/compiler.common/src/org/jetbrains/kotlin/renderer/RenderingUtils.kt +++ b/core/compiler.common/src/org/jetbrains/kotlin/renderer/RenderingUtils.kt @@ -26,7 +26,10 @@ fun Name.render(): String { private fun Name.shouldBeEscaped(): Boolean { val string = asString() - return string in KeywordStringsGenerated.KEYWORDS || string.any { !Character.isLetterOrDigit(it) && it != '_' } + return string in KeywordStringsGenerated.KEYWORDS || + string.any { !Character.isLetterOrDigit(it) && it != '_' } || + string.isEmpty() || + !Character.isJavaIdentifierStart(string.codePointAt(0)) } fun FqNameUnsafe.render(): String {