diff --git a/compiler/frontend.java/src/org/jetbrains/kotlin/resolve/jvm/checkers/JvmSimpleNameBacktickChecker.kt b/compiler/frontend.java/src/org/jetbrains/kotlin/resolve/jvm/checkers/JvmSimpleNameBacktickChecker.kt index e1c26e0d41d..e8c5969f883 100644 --- a/compiler/frontend.java/src/org/jetbrains/kotlin/resolve/jvm/checkers/JvmSimpleNameBacktickChecker.kt +++ b/compiler/frontend.java/src/org/jetbrains/kotlin/resolve/jvm/checkers/JvmSimpleNameBacktickChecker.kt @@ -24,7 +24,7 @@ import org.jetbrains.kotlin.resolve.IdentifierChecker object JvmSimpleNameBacktickChecker : IdentifierChecker { // See The Java Virtual Machine Specification, section 4.7.9.1 https://docs.oracle.com/javase/specs/jvms/se8/html/jvms-4.html#jvms-4.7.9.1 - private val CHARS = setOf('.', ';', '[', ']', '/', '<', '>', ':', '\\') + val INVALID_CHARS = setOf('.', ';', '[', ']', '/', '<', '>', ':', '\\') override fun checkIdentifier(simpleNameExpression: KtSimpleNameExpression, diagnosticHolder: DiagnosticSink) { reportIfNeeded(simpleNameExpression.getReferencedName(), { simpleNameExpression.getIdentifier() }, diagnosticHolder) @@ -55,16 +55,13 @@ object JvmSimpleNameBacktickChecker : IdentifierChecker { val text = KtPsiUtil.unquoteIdentifier(name) if (text.isEmpty()) { diagnosticHolder.report(Errors.INVALID_CHARACTERS.on(reportOn() ?: return, "should not be empty")) - } else if (text.any { it in CHARS }) { + } else if (text.any { it in INVALID_CHARS }) { diagnosticHolder.report( Errors.INVALID_CHARACTERS.on( reportOn() ?: return, - "contains illegal characters: ${CHARS.intersect(text.toSet()).joinToString( - "" - )}" + "contains illegal characters: ${INVALID_CHARS.intersect(text.toSet()).joinToString("")}" ) ) } } } - diff --git a/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/codegen/ClassCodegen.kt b/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/codegen/ClassCodegen.kt index c4d8e6dade6..21d264875fb 100644 --- a/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/codegen/ClassCodegen.kt +++ b/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/codegen/ClassCodegen.kt @@ -39,6 +39,7 @@ import org.jetbrains.kotlin.resolve.jvm.AsmTypes import org.jetbrains.kotlin.resolve.jvm.annotations.JVM_SYNTHETIC_ANNOTATION_FQ_NAME import org.jetbrains.kotlin.resolve.jvm.annotations.TRANSIENT_ANNOTATION_FQ_NAME import org.jetbrains.kotlin.resolve.jvm.annotations.VOLATILE_ANNOTATION_FQ_NAME +import org.jetbrains.kotlin.resolve.jvm.checkers.JvmSimpleNameBacktickChecker import org.jetbrains.kotlin.resolve.jvm.diagnostics.JvmDeclarationOrigin import org.jetbrains.kotlin.resolve.jvm.diagnostics.OtherOrigin import org.jetbrains.kotlin.resolve.jvm.jvmSignature.JvmClassSignature @@ -111,8 +112,6 @@ open class ClassCodegen protected constructor( val signature = getSignature(irClass, type, superClassInfo, typeMapper) // Ensure that the backend only produces class names that would be valid in the frontend for JVM. - // hasInvalidName() uses a set copied from JvmSimpleNameBacktickChecker, which in turn references JVMS 4.7.9.1: - // https://docs.oracle.com/javase/specs/jvms/se8/html/jvms-4.html#jvms-4.7.9.1. if (context.state.classBuilderMode.generateBodies && signature.hasInvalidName()) { throw IllegalStateException("Generating class with invalid name '${type.className}': ${irClass.dump()}") } @@ -291,11 +290,8 @@ open class ClassCodegen protected constructor( ClassCodegen(irClass, context).generate() } - // Note: This is copied from JvmSimpleNameBacktickChecker. - private val INVALID_CHARS = setOf('.', ';', '[', ']', '/', '<', '>', ':', '\\') - private fun JvmClassSignature.hasInvalidName() = - name.splitToSequence('/').any { identifier -> identifier.any { it in INVALID_CHARS } } + name.splitToSequence('/').any { identifier -> identifier.any { it in JvmSimpleNameBacktickChecker.INVALID_CHARS } } } private fun generateDeclaration(declaration: IrDeclaration) {