I'm seeing a compiler error `Class has no primary ...
# javascript
r
I'm seeing a compiler error
Class has no primary constructor: kotlin.Char
when running production build (with
jsBrowserProductionWebpack
task) in my project. More in thread.
Full stacktrace:
Copy code
e: java.lang.IllegalStateException: Class has no primary constructor: kotlin.Char
        at org.jetbrains.kotlin.backend.common.InlineClassesUtils.getInlineClassUnderlyingType(CommonBackendContext.kt:110)
        at org.jetbrains.kotlin.ir.backend.js.utils.JsInlineClassesUtils.getInlinedClass(JsInlineClassesUtils.kt:27)
        at org.jetbrains.kotlin.ir.backend.js.JsCommonInlineClassesUtils.isTypeInlined(JsCommonBackendContext.kt:138)
        at org.jetbrains.kotlin.ir.backend.js.utils.NameTablesKt.calculateJsFunctionSignature(NameTables.kt:153)
        at org.jetbrains.kotlin.ir.backend.js.utils.NameTablesKt.jsFunctionSignature(NameTables.kt:179)
        at org.jetbrains.kotlin.ir.backend.js.transformers.irToJs.JsNameLinkingNamer.fieldData(JsNameLinkingNamer.kt:207)
        at org.jetbrains.kotlin.ir.backend.js.transformers.irToJs.JsNameLinkingNamer.getNameForMemberFunction(JsNameLinkingNamer.kt:63)
        at org.jetbrains.kotlin.ir.backend.js.utils.JsStaticContext.getNameForMemberFunction(JsStaticContext.kt)
        at org.jetbrains.kotlin.ir.backend.js.utils.JsGenerationContext.getNameForMemberFunction(JsGenerationContext.kt)
        at org.jetbrains.kotlin.ir.backend.js.transformers.irToJs.JsAstUtilsKt.translateCall(jsAstUtils.kt:225)
        at org.jetbrains.kotlin.ir.backend.js.transformers.irToJs.IrElementToJsStatementTransformer.visitCall(IrElementToJsStatementTransformer.kt:200)
        at org.jetbrains.kotlin.ir.backend.js.transformers.irToJs.IrElementToJsStatementTransformer.visitCall(IrElementToJsStatementTransformer.kt:32)
        at org.jetbrains.kotlin.ir.expressions.IrCall.accept(IrCall.kt:26)
        at org.jetbrains.kotlin.ir.backend.js.transformers.irToJs.IrElementToJsStatementTransformer.visitBlockBody(IrElementToJsStatementTransformer.kt:40)
        at org.jetbrains.kotlin.ir.backend.js.transformers.irToJs.IrElementToJsStatementTransformer.visitBlockBody(IrElementToJsStatementTransformer.kt:32)
        at org.jetbrains.kotlin.ir.expressions.IrBlockBody.accept(IrBlockBody.kt:25)
        at org.jetbrains.kotlin.ir.backend.js.transformers.irToJs.JsAstUtilsKt.translateFunction(jsAstUtils.kt:118)
        at org.jetbrains.kotlin.ir.backend.js.transformers.irToJs.IrFunctionToJsTransformer.visitConstructor(IrFunctionToJsTransformer.kt:36)
        at org.jetbrains.kotlin.ir.backend.js.transformers.irToJs.IrFunctionToJsTransformer.visitConstructor(IrFunctionToJsTransformer.kt:16)
        at org.jetbrains.kotlin.ir.declarations.IrConstructor.accept(IrConstructor.kt:30)
        at org.jetbrains.kotlin.ir.backend.js.transformers.irToJs.JsClassGenerator.generateClassBlock(JsClassGenerator.kt:113)
        at org.jetbrains.kotlin.ir.backend.js.transformers.irToJs.JsClassGenerator.generate(JsClassGenerator.kt:64)
        at org.jetbrains.kotlin.ir.backend.js.transformers.irToJs.IrDeclarationToJsTransformer.visitClass(IrDeclarationToJsTransformer.kt:30)
        at org.jetbrains.kotlin.ir.backend.js.transformers.irToJs.IrDeclarationToJsTransformer.visitClass(IrDeclarationToJsTransformer.kt:13)
        at org.jetbrains.kotlin.ir.declarations.IrClass.accept(IrClass.kt:73)
        at org.jetbrains.kotlin.ir.backend.js.transformers.irToJs.IrFileToJsTransformer.visitFile(IrFileToJsTransformer.kt:25)
        at org.jetbrains.kotlin.ir.backend.js.transformers.irToJs.IrFileToJsTransformer.visitFile(IrFileToJsTransformer.kt:14)
        at org.jetbrains.kotlin.ir.declarations.IrFile.accept(IrFile.kt:31)
        at org.jetbrains.kotlin.ir.backend.js.transformers.irToJs.IrModuleToJsTransformer.generateProgramFragment(IrModuleToJsTransformer.kt:355)
        at org.jetbrains.kotlin.ir.backend.js.transformers.irToJs.IrModuleToJsTransformer.generateJsIrProgramPerModule(IrModuleToJsTransformer.kt:259)
        at org.jetbrains.kotlin.ir.backend.js.transformers.irToJs.IrModuleToJsTransformer.makeJsCodeGeneratorFromIr(IrModuleToJsTransformer.kt:244)
        at org.jetbrains.kotlin.ir.backend.js.transformers.irToJs.IrModuleToJsTransformer.makeJsCodeGenerator(IrModuleToJsTransformer.kt:204)
        at org.jetbrains.kotlin.cli.js.K2JsIrCompiler$Ir2JsTransformer.makeJsCodeGenerator(K2JsIrCompiler.kt:129)
        at org.jetbrains.kotlin.cli.js.K2JsIrCompiler$Ir2JsTransformer.compileAndTransformIrNew(K2JsIrCompiler.kt:133)
        at org.jetbrains.kotlin.cli.js.K2JsIrCompiler.doExecute(K2JsIrCompiler.kt:391)
        at org.jetbrains.kotlin.cli.js.K2JSCompiler.doExecute(K2JSCompiler.java:181)
        at org.jetbrains.kotlin.cli.js.K2JSCompiler.doExecute(K2JSCompiler.java:72)
        at org.jetbrains.kotlin.cli.common.CLICompiler.execImpl(CLICompiler.kt:104)
        at org.jetbrains.kotlin.cli.common.CLICompiler.execImpl(CLICompiler.kt:48)
        at org.jetbrains.kotlin.cli.common.CLITool.exec(CLITool.kt:101)
        at org.jetbrains.kotlin.daemon.CompileServiceImpl.compile(CompileServiceImpl.kt:1523)
        at jdk.internal.reflect.GeneratedMethodAccessor42.invoke(Unknown Source)
        at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.base/java.lang.reflect.Method.invoke(Method.java:568)
        at java.rmi/sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:360)
        at java.rmi/sun.rmi.transport.Transport$1.run(Transport.java:200)
        at java.rmi/sun.rmi.transport.Transport$1.run(Transport.java:197)
        at java.base/java.security.AccessController.doPrivileged(AccessController.java:712)
        at java.rmi/sun.rmi.transport.Transport.serviceCall(Transport.java:196)
        at java.rmi/sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:587)
        at java.rmi/sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run0(TCPTransport.java:828)
        at java.rmi/sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.lambda$run$0(TCPTransport.java:705)
        at java.base/java.security.AccessController.doPrivileged(AccessController.java:399)
        at java.rmi/sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:704)
        at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136)
        at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635)
        at java.base/java.lang.Thread.run(Thread.java:840)
The problem doesn't occur with development build.
I'm on Kotlin 1.9.22.
Is it a know issue?
It's hard for me to pinpoint the exact code which triggers the error.
And that's because the error can be fixed by adding some code and not by removing it (!!)
t
Char
usage in exported method/property?
r
no, I'm not using any exports
That's really weird. When my application code is empty like this:
Copy code
class App : Application() {
    override fun start() {
        root("root") {
        }
    }
}
I see the above compiler error.
When I add a single line:
Copy code
class App : Application() {
    override fun start() {

        root("root") {
            DefaultLocale()
        }
    }
}
it works.
It's definitely something about the
DefaultLocale
class, because it uses
Char
class, but how it's possible that adding some code fixes a compiler error?