package arrow.meta.plugins.proofs val `_`: Nothing = TODO("Compiler replaces this for ::identity in each position") // Don't care object case { infix operator fun invoke(a: A): A = `_` infix operator fun invoke(pair: Pair): Pair = `_` infix operator fun invoke(triple: Triple): Triple = `_` } infix fun A.where(f: A.() -> Boolean): A = `_` data class Person(val id: Long, val name: String) @Suppress("UNRESOLVED_REFERENCE", "UNDERSCORE_USAGE_WITHOUT_BACKTICKS") //allows y and gets you until analysis: //Couldn't find descriptor for 'y' fun main() { val subject = Person(0, "Jane") val result = when (subject) { case(Person(_, y)) where { y == "Jane" } -> true else -> false } println(result) // should print true } /** e: org.jetbrains.kotlin.codegen.CompilationException: Back-end (JVM) Internal error: Failed to generate expression: KtNameReferenceExpression File being compiled at position: (21,24) in /Users/raulraja/workspace/arrow/arrow-meta/compiler-plugin/src/main/kotlin/arrow/meta/plugins/proofs/test.kt The root cause java.lang.AssertionError was thrown at: org.jetbrains.kotlin.codegen.ExpressionCodegen.visitSimpleNameExpression(ExpressionCodegen.java:1767) at org.jetbrains.kotlin.codegen.ExpressionCodegen.genQualified(ExpressionCodegen.java:324) at org.jetbrains.kotlin.codegen.ExpressionCodegen.genQualified(ExpressionCodegen.java:284) at org.jetbrains.kotlin.codegen.ExpressionCodegen.gen(ExpressionCodegen.java:356) at org.jetbrains.kotlin.codegen.CallGenerator$DefaultCallGenerator.genValueAndPut(CallGenerator.kt:70) at org.jetbrains.kotlin.codegen.CallBasedArgumentGenerator.generateExpression(CallBasedArgumentGenerator.kt:42) at org.jetbrains.kotlin.codegen.ArgumentGenerator.generate(ArgumentGenerator.kt:68) at org.jetbrains.kotlin.codegen.ExpressionCodegen.invokeMethodWithArguments(ExpressionCodegen.java:2504) at org.jetbrains.kotlin.codegen.ExpressionCodegen.invokeMethodWithArguments(ExpressionCodegen.java:2476) at org.jetbrains.kotlin.codegen.ExpressionCodegen.lambda$generateConstructorCall$28(ExpressionCodegen.java:4546) at org.jetbrains.kotlin.codegen.OperationStackValue.putSelector(StackValue.kt:79) at org.jetbrains.kotlin.codegen.StackValue.put(StackValue.java:122) at org.jetbrains.kotlin.codegen.StackValue.put(StackValue.java:115) at org.jetbrains.kotlin.codegen.CallGenerator$DefaultCallGenerator.genValueAndPut(CallGenerator.kt:71) at org.jetbrains.kotlin.codegen.CallBasedArgumentGenerator.generateExpression(CallBasedArgumentGenerator.kt:42) at org.jetbrains.kotlin.codegen.ArgumentGenerator.generate(ArgumentGenerator.kt:68) at org.jetbrains.kotlin.codegen.ExpressionCodegen.invokeMethodWithArguments(ExpressionCodegen.java:2504) at org.jetbrains.kotlin.codegen.ExpressionCodegen.invokeMethodWithArguments(ExpressionCodegen.java:2476) at org.jetbrains.kotlin.codegen.Callable$invokeMethodWithArguments$1.invoke(Callable.kt:41) at org.jetbrains.kotlin.codegen.Callable$invokeMethodWithArguments$1.invoke(Callable.kt:13) at org.jetbrains.kotlin.codegen.OperationStackValue.putSelector(StackValue.kt:79) at org.jetbrains.kotlin.codegen.StackValue.put(StackValue.java:122) at org.jetbrains.kotlin.codegen.StackValue.put(StackValue.java:115) at org.jetbrains.kotlin.codegen.StackValue.moveToTopOfStack(StackValue.java:103) at org.jetbrains.kotlin.codegen.CallReceiver.putSelector(CallReceiver.java:171) at org.jetbrains.kotlin.codegen.StackValue.put(StackValue.java:122) at org.jetbrains.kotlin.codegen.StackValue.put(StackValue.java:115) at org.jetbrains.kotlin.codegen.ExpressionCodegen.putReceiverAndInlineMarkerIfNeeded(ExpressionCodegen.java:2565) at org.jetbrains.kotlin.codegen.ExpressionCodegen.invokeMethodWithArguments(ExpressionCodegen.java:2495) at org.jetbrains.kotlin.codegen.ExpressionCodegen.invokeMethodWithArguments(ExpressionCodegen.java:2476) at org.jetbrains.kotlin.codegen.Callable$invokeMethodWithArguments$1.invoke(Callable.kt:41) at org.jetbrains.kotlin.codegen.Callable$invokeMethodWithArguments$1.invoke(Callable.kt:13) at org.jetbrains.kotlin.codegen.OperationStackValue.putSelector(StackValue.kt:79) at org.jetbrains.kotlin.codegen.CoercionValue.putSelector(StackValue.kt:31) at org.jetbrains.kotlin.codegen.StackValue.put(StackValue.java:122) at org.jetbrains.kotlin.codegen.StackValue.put(StackValue.java:115) at org.jetbrains.kotlin.codegen.AsmUtil.lambda$genEqualsForExpressionsOnStack$3(AsmUtil.java:859) at org.jetbrains.kotlin.codegen.OperationStackValue.putSelector(StackValue.kt:79) at org.jetbrains.kotlin.codegen.StackValue.put(StackValue.java:122) at org.jetbrains.kotlin.codegen.StackValue.put(StackValue.java:111) at org.jetbrains.kotlin.codegen.BranchedValue.condJump(BranchedValue.kt:38) at org.jetbrains.kotlin.codegen.CondJump.condJump(BranchedValue.kt:180) at org.jetbrains.kotlin.codegen.BranchedValue$Companion.condJump(BranchedValue.kt:118) at org.jetbrains.kotlin.codegen.ExpressionCodegen.lambda$generateWhenExpression$36(ExpressionCodegen.java:5018) at org.jetbrains.kotlin.codegen.OperationStackValue.putSelector(StackValue.kt:79) at org.jetbrains.kotlin.codegen.StackValue.put(StackValue.java:122) at org.jetbrains.kotlin.codegen.StackValue.put(StackValue.java:115) at org.jetbrains.kotlin.codegen.ExpressionCodegen.initializeLocalVariable(ExpressionCodegen.java:4354) at org.jetbrains.kotlin.codegen.ExpressionCodegen.visitProperty(ExpressionCodegen.java:4221) at org.jetbrains.kotlin.codegen.ExpressionCodegen.visitProperty(ExpressionCodegen.java:112) at org.jetbrains.kotlin.psi.KtProperty.accept(KtProperty.java:58) at org.jetbrains.kotlin.codegen.CodegenStatementVisitor.visitKtElement(CodegenStatementVisitor.java:31) at org.jetbrains.kotlin.codegen.CodegenStatementVisitor.visitKtElement(CodegenStatementVisitor.java:22) at org.jetbrains.kotlin.psi.KtVisitor.visitExpression(KtVisitor.java:182) at org.jetbrains.kotlin.psi.KtVisitor.visitDeclaration(KtVisitor.java:29) at org.jetbrains.kotlin.psi.KtVisitor.visitNamedDeclaration(KtVisitor.java:398) at org.jetbrains.kotlin.psi.KtVisitor.visitProperty(KtVisitor.java:57) at org.jetbrains.kotlin.psi.KtProperty.accept(KtProperty.java:58) at org.jetbrains.kotlin.codegen.ExpressionCodegen.genQualified(ExpressionCodegen.java:302) at org.jetbrains.kotlin.codegen.ExpressionCodegen.genStatement(ExpressionCodegen.java:407) at org.jetbrains.kotlin.codegen.ExpressionCodegen.generateBlock(ExpressionCodegen.java:1269) at org.jetbrains.kotlin.codegen.ExpressionCodegen.generateBlock(ExpressionCodegen.java:1214) at org.jetbrains.kotlin.codegen.CodegenStatementVisitor.visitBlockExpression(CodegenStatementVisitor.java:56) at org.jetbrains.kotlin.codegen.CodegenStatementVisitor.visitBlockExpression(CodegenStatementVisitor.java:22) at org.jetbrains.kotlin.psi.KtBlockExpression.accept(KtBlockExpression.java:78) at org.jetbrains.kotlin.codegen.ExpressionCodegen.genQualified(ExpressionCodegen.java:302) at org.jetbrains.kotlin.codegen.ExpressionCodegen.genStatement(ExpressionCodegen.java:407) at org.jetbrains.kotlin.codegen.ExpressionCodegen.gen(ExpressionCodegen.java:364) at org.jetbrains.kotlin.codegen.ExpressionCodegen.returnExpression(ExpressionCodegen.java:1701) at org.jetbrains.kotlin.codegen.FunctionGenerationStrategy$FunctionDefault.doGenerateBody(FunctionGenerationStrategy.java:64) at org.jetbrains.kotlin.codegen.FunctionGenerationStrategy$CodegenBased.generateBody(FunctionGenerationStrategy.java:84) at org.jetbrains.kotlin.codegen.FunctionCodegen.generateMethodBody(FunctionCodegen.java:666) at org.jetbrains.kotlin.codegen.FunctionCodegen.generateMethodBody(FunctionCodegen.java:473) at org.jetbrains.kotlin.codegen.FunctionCodegen.generateMethod(FunctionCodegen.java:260) at org.jetbrains.kotlin.codegen.FunctionCodegen.generateMethod(FunctionCodegen.java:176) at org.jetbrains.kotlin.codegen.FunctionCodegen.gen(FunctionCodegen.java:147) at org.jetbrains.kotlin.codegen.MemberCodegen.genSimpleMember(MemberCodegen.java:197) at org.jetbrains.kotlin.codegen.PackagePartCodegen.generateBody(PackagePartCodegen.java:95) at org.jetbrains.kotlin.codegen.MemberCodegen.generate(MemberCodegen.java:129) at org.jetbrains.kotlin.codegen.PackageCodegenImpl.generateFile(PackageCodegenImpl.java:148) at org.jetbrains.kotlin.codegen.PackageCodegenImpl.generate(PackageCodegenImpl.java:68) at org.jetbrains.kotlin.codegen.DefaultCodegenFactory.generatePackage(CodegenFactory.kt:96) at org.jetbrains.kotlin.codegen.DefaultCodegenFactory.generateModule(CodegenFactory.kt:67) at org.jetbrains.kotlin.codegen.KotlinCodegenFacade.doGenerateFiles(KotlinCodegenFacade.java:47) at org.jetbrains.kotlin.codegen.KotlinCodegenFacade.compileCorrectFiles(KotlinCodegenFacade.java:39) at org.jetbrains.kotlin.cli.jvm.compiler.KotlinToJVMBytecodeCompiler.generate(KotlinToJVMBytecodeCompiler.kt:637) at org.jetbrains.kotlin.cli.jvm.compiler.KotlinToJVMBytecodeCompiler.compileModules$cli(KotlinToJVMBytecodeCompiler.kt:195) at org.jetbrains.kotlin.cli.jvm.K2JVMCompiler.doExecute(K2JVMCompiler.kt:165) at org.jetbrains.kotlin.cli.jvm.K2JVMCompiler.doExecute(K2JVMCompiler.kt:55) at org.jetbrains.kotlin.cli.common.CLICompiler.execImpl(CLICompiler.kt:84) at org.jetbrains.kotlin.cli.common.CLICompiler.execImpl(CLICompiler.kt:42) at org.jetbrains.kotlin.cli.common.CLITool.exec(CLITool.kt:104) at org.jetbrains.kotlin.incremental.IncrementalJvmCompilerRunner.runCompiler(IncrementalJvmCompilerRunner.kt:349) at org.jetbrains.kotlin.incremental.IncrementalJvmCompilerRunner.runCompiler(IncrementalJvmCompilerRunner.kt:105) at org.jetbrains.kotlin.incremental.IncrementalCompilerRunner.compileIncrementally(IncrementalCompilerRunner.kt:237) at org.jetbrains.kotlin.incremental.IncrementalCompilerRunner.compile(IncrementalCompilerRunner.kt:88) at org.jetbrains.kotlin.daemon.CompileServiceImplBase.execIncrementalCompiler(CompileServiceImpl.kt:606) at org.jetbrains.kotlin.daemon.CompileServiceImplBase.access$execIncrementalCompiler(CompileServiceImpl.kt:99) at org.jetbrains.kotlin.daemon.CompileServiceImpl.compile(CompileServiceImpl.kt:1645) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498) at sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:357) at sun.rmi.transport.Transport$1.run(Transport.java:200) at sun.rmi.transport.Transport$1.run(Transport.java:197) at java.security.AccessController.doPrivileged(Native Method) at sun.rmi.transport.Transport.serviceCall(Transport.java:196) at sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:573) at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run0(TCPTransport.java:834) at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.lambda$run$0(TCPTransport.java:688) at java.security.AccessController.doPrivileged(Native Method) at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:687) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) at java.lang.Thread.run(Thread.java:748) Caused by: java.lang.AssertionError: Couldn't find descriptor for 'y' at org.jetbrains.kotlin.codegen.ExpressionCodegen.visitSimpleNameExpression(ExpressionCodegen.java:1767) at org.jetbrains.kotlin.codegen.ExpressionCodegen.visitSimpleNameExpression(ExpressionCodegen.java:112) at org.jetbrains.kotlin.psi.KtNameReferenceExpression.accept(KtNameReferenceExpression.kt:59) at org.jetbrains.kotlin.codegen.ExpressionCodegen.genQualified(ExpressionCodegen.java:302) ... 114 more */