कोटलिन उच्चतर कार्य (कॉल करने योग्य संदर्भ) संकलक दुर्घटना

तो मैं कुछ एंड्रॉइड विकास के लिए कोटलिन के साथ गड़बड़ कर रहा हूं और एक कंपाइलर बग में भाग गया ... अगर किसी के पास कुछ इनपुट था तो बहुत अच्छा होगा।

कॉल करने योग्य संदर्भों के लिए कोटलिन उदाहरण (इस मामले में तर्कों के माध्यम से गुजरने वाले कार्यों) मेरे पर्यावरण को दुर्घटनाग्रस्त कर रहा है। मेरे लिए यह पूरी तरह से भाषा की एक महत्वपूर्ण विशेषता है, और यह काम नहीं कर रहा है मुझे ...

मेरा पर्यावरण है:
एंड्रॉइड स्टूडियो 0.3.6
कोटलिन प्लगइन 0.6.602

किसी भी जानकारी के लिए बहुत सराहना की जाएगी

fun isOdd(x: Int) = x % 2 != 0

val numbers = listOf(1, 2, 3)
println(numbers.filter(::isOdd))

और संकलक त्रुटि है:

:1:org.jetbrains.jet.codegen.CompilationException: Back-end (JVM) Internal error: Cannot resolve: callableReferenceFakeCall
File being compiled and position: (1,9) in dummy.kt
PsiElement: callableReferenceFakeCall(p0)

    at org.jetbrains.jet.codegen.ExpressionCodegen.visitCallExpression(ExpressionCodegen.java:1893)
    at org.jetbrains.jet.codegen.ExpressionCodegen.visitCallExpression(ExpressionCodegen.java:80)
    at org.jetbrains.jet.lang.psi.JetCallExpression.accept(JetCallExpression.java:42)
    at org.jetbrains.jet.codegen.ExpressionCodegen.genQualified(ExpressionCodegen.java:257)
    at org.jetbrains.jet.codegen.ExpressionCodegen.genQualified(ExpressionCodegen.java:234)
    at org.jetbrains.jet.codegen.ExpressionCodegen.gen(ExpressionCodegen.java:273)
    at org.jetbrains.jet.codegen.ExpressionCodegen.gen(ExpressionCodegen.java:277)
    at org.jetbrains.jet.codegen.ExpressionCodegen.invokeMethodWithArguments(ExpressionCodegen.java:2122)
    at org.jetbrains.jet.codegen.ExpressionCodegen.invokeFunction(ExpressionCodegen.java:2014)
    at org.jetbrains.jet.codegen.ExpressionCodegen$4.doGenerateBody(ExpressionCodegen.java:2531)
    at org.jetbrains.jet.codegen.FunctionGenerationStrategy$CodegenBased.generateBody(FunctionGenerationStrategy.java:106)
    at org.jetbrains.jet.codegen.FunctionCodegen.generateMethodBody(FunctionCodegen.java:290)
    at org.jetbrains.jet.codegen.FunctionCodegen.generateMethod(FunctionCodegen.java:143)
    at org.jetbrains.jet.codegen.FunctionCodegen.generateMethod(FunctionCodegen.java:94)
    at org.jetbrains.jet.codegen.ClosureCodegen.gen(ClosureCodegen.java:122)
    at org.jetbrains.jet.codegen.ExpressionCodegen.visitCallableReferenceExpression(ExpressionCodegen.java:2597)
    at org.jetbrains.jet.codegen.ExpressionCodegen.visitCallableReferenceExpression(ExpressionCodegen.java:80)
    at org.jetbrains.jet.lang.psi.JetCallableReferenceExpression.accept(JetCallableReferenceExpression.java:57)
    at org.jetbrains.jet.codegen.ExpressionCodegen.genQualified(ExpressionCodegen.java:257)
    at org.jetbrains.jet.codegen.ExpressionCodegen.genQualified(ExpressionCodegen.java:234)
    at org.jetbrains.jet.codegen.ExpressionCodegen.gen(ExpressionCodegen.java:273)
    at org.jetbrains.jet.codegen.ExpressionCodegen.gen(ExpressionCodegen.java:277)
    at org.jetbrains.jet.codegen.ExpressionCodegen.pushMethodArguments(ExpressionCodegen.java:2336)
    at org.jetbrains.jet.codegen.ExpressionCodegen.pushArgumentsAndInvoke(ExpressionCodegen.java:2138)
    at org.jetbrains.jet.codegen.ExpressionCodegen.invokeMethodWithArguments(ExpressionCodegen.java:2134)
    at org.jetbrains.jet.codegen.ExpressionCodegen.invokeFunction(ExpressionCodegen.java:2014)
    at org.jetbrains.jet.codegen.ExpressionCodegen.visitCallExpression(ExpressionCodegen.java:1922)
    at org.jetbrains.jet.codegen.ExpressionCodegen.visitCallExpression(ExpressionCodegen.java:80)
    at org.jetbrains.jet.lang.psi.JetCallExpression.accept(JetCallExpression.java:42)
    at org.jetbrains.jet.codegen.ExpressionCodegen.genQualified(ExpressionCodegen.java:257)
    at org.jetbrains.jet.codegen.ExpressionCodegen.genQualified(ExpressionCodegen.java:234)
    at org.jetbrains.jet.codegen.ExpressionCodegen.visitDotQualifiedExpression(ExpressionCodegen.java:2605)
    at org.jetbrains.jet.codegen.ExpressionCodegen.visitDotQualifiedExpression(ExpressionCodegen.java:80)
    at org.jetbrains.jet.lang.psi.JetDotQualifiedExpression.accept(JetDotQualifiedExpression.java:34)
    at org.jetbrains.jet.codegen.ExpressionCodegen.genQualified(ExpressionCodegen.java:257)
    at org.jetbrains.jet.codegen.ExpressionCodegen.genQualified(ExpressionCodegen.java:234)
    at org.jetbrains.jet.codegen.ExpressionCodegen.gen(ExpressionCodegen.java:273)
    at org.jetbrains.jet.codegen.ExpressionCodegen.gen(ExpressionCodegen.java:277)
    at org.jetbrains.jet.codegen.ExpressionCodegen.pushMethodArguments(ExpressionCodegen.java:2336)
    at org.jetbrains.jet.codegen.ExpressionCodegen.pushArgumentsAndInvoke(ExpressionCodegen.java:2138)
    at org.jetbrains.jet.codegen.ExpressionCodegen.invokeMethodWithArguments(ExpressionCodegen.java:2134)
    at org.jetbrains.jet.codegen.ExpressionCodegen.invokeFunction(ExpressionCodegen.java:2014)
    at org.jetbrains.jet.codegen.ExpressionCodegen.visitCallExpression(ExpressionCodegen.java:1922)
    at org.jetbrains.jet.codegen.ExpressionCodegen.visitCallExpression(ExpressionCodegen.java:80)
    at org.jetbrains.jet.lang.psi.JetCallExpression.accept(JetCallExpression.java:42)
    at org.jetbrains.jet.codegen.CodegenStatementVisitor.visitJetElement(CodegenStatementVisitor.java:31)
    at org.jetbrains.jet.codegen.CodegenStatementVisitor.visitJetElement(CodegenStatementVisitor.java:22)
    at org.jetbrains.jet.lang.psi.JetVisitor.visitExpression(JetVisitor.java:154)
    at org.jetbrains.jet.lang.psi.JetVisitor.visitCallExpression(JetVisitor.java:246)
    at org.jetbrains.jet.lang.psi.JetCallExpression.accept(JetCallExpression.java:42)
    at org.jetbrains.jet.codegen.ExpressionCodegen.genQualified(ExpressionCodegen.java:257)
    at org.jetbrains.jet.codegen.ExpressionCodegen.genStatement(ExpressionCodegen.java:286)
    at org.jetbrains.jet.codegen.ExpressionCodegen.generateBlock(ExpressionCodegen.java:1429)
    at org.jetbrains.jet.codegen.ExpressionCodegen.visitBlockExpression(ExpressionCodegen.java:1288)
    at org.jetbrains.jet.codegen.ExpressionCodegen.visitBlockExpression(ExpressionCodegen.java:80)
    at org.jetbrains.jet.lang.psi.JetBlockExpression.accept(JetBlockExpression.java:47)
    at org.jetbrains.jet.codegen.ExpressionCodegen.genQualified(ExpressionCodegen.java:257)
    at org.jetbrains.jet.codegen.ExpressionCodegen.genQualified(ExpressionCodegen.java:234)
    at org.jetbrains.jet.codegen.ExpressionCodegen.gen(ExpressionCodegen.java:273)
    at org.jetbrains.jet.codegen.ExpressionCodegen.returnExpression(ExpressionCodegen.java:1590)
    at org.jetbrains.jet.codegen.FunctionGenerationStrategy$FunctionDefault.doGenerateBody(FunctionGenerationStrategy.java:83)
    at org.jetbrains.jet.codegen.FunctionGenerationStrategy$CodegenBased.generateBody(FunctionGenerationStrategy.java:106)
    at org.jetbrains.jet.codegen.FunctionCodegen.generateMethodBody(FunctionCodegen.java:290)
    at org.jetbrains.jet.codegen.FunctionCodegen.generateMethod(FunctionCodegen.java:143)
    at org.jetbrains.jet.codegen.FunctionCodegen.generateMethod(FunctionCodegen.java:94)
    at org.jetbrains.jet.codegen.FunctionCodegen.gen(FunctionCodegen.java:80)
    at org.jetbrains.jet.codegen.MemberCodegen.genFunctionOrProperty(MemberCodegen.java:47)
    at org.jetbrains.jet.codegen.ClassBodyCodegen.generateDeclaration(ClassBodyCodegen.java:116)
    at org.jetbrains.jet.codegen.ImplementationBodyCodegen.generateDeclaration(ImplementationBodyCodegen.java:1594)
    at org.jetbrains.jet.codegen.ClassBodyCodegen.generateClassBody(ClassBodyCodegen.java:102)
    at org.jetbrains.jet.codegen.ClassBodyCodegen.generate(ClassBodyCodegen.java:69)
    at org.jetbrains.jet.codegen.MemberCodegen.genClassOrObject(MemberCodegen.java:91)
    at org.jetbrains.jet.codegen.NamespaceCodegen.generateClassOrObject(NamespaceCodegen.java:206)
    at org.jetbrains.jet.codegen.NamespaceCodegen.generate(NamespaceCodegen.java:178)
    at org.jetbrains.jet.codegen.NamespaceCodegen.generate(NamespaceCodegen.java:113)
    at org.jetbrains.jet.codegen.KotlinCodegenFacade.generateNamespace(KotlinCodegenFacade.java:71)
    at org.jetbrains.jet.codegen.KotlinCodegenFacade.compileCorrectFiles(KotlinCodegenFacade.java:60)
    at org.jetbrains.jet.cli.jvm.compiler.KotlinToJVMBytecodeCompiler.generate(KotlinToJVMBytecodeCompiler.java:298)
    at org.jetbrains.jet.cli.jvm.compiler.KotlinToJVMBytecodeCompiler.analyzeAndGenerate(KotlinToJVMBytecodeCompiler.java:260)
    at org.jetbrains.jet.cli.jvm.compiler.KotlinToJVMBytecodeCompiler.compileBunchOfSources(KotlinToJVMBytecodeCompiler.java:187)
    at org.jetbrains.jet.cli.jvm.K2JVMCompiler.doExecute(K2JVMCompiler.java:142)
    at org.jetbrains.jet.cli.jvm.K2JVMCompiler.doExecute(K2JVMCompiler.java:48)
    at org.jetbrains.jet.cli.common.CLICompiler.exec(CLICompiler.java:147)
    at org.jetbrains.kotlin.gradle.tasks.KotlinCompile.compile(Tasks.kt:116)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:606)
    at org.gradle.util.JavaMethod.invoke(JavaMethod.java:62)
    at org.gradle.api.internal.project.taskfactory.AnnotationProcessingTaskFactory$StandardTaskAction.doExecute(AnnotationProcessingTaskFactory.java:219)
    at org.gradle.api.internal.project.taskfactory.AnnotationProcessingTaskFactory$StandardTaskAction.execute(AnnotationProcessingTaskFactory.java:212)
    at org.gradle.api.internal.project.taskfactory.AnnotationProcessingTaskFactory$StandardTaskAction.execute(AnnotationProcessingTaskFactory.java:201)
    at org.gradle.api.internal.AbstractTask$TaskActionWrapper.execute(AbstractTask.java:527)
    at org.gradle.api.internal.AbstractTask$TaskActionWrapper.execute(AbstractTask.java:510)
    at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeAction(ExecuteActionsTaskExecuter.java:80)
    at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeActions(ExecuteActionsTaskExecuter.java:61)
    at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.execute(ExecuteActionsTaskExecuter.java:46)
    at org.gradle.api.internal.tasks.execution.PostExecutionAnalysisTaskExecuter.execute(PostExecutionAnalysisTaskExecuter.java:35)
    at org.gradle.api.internal.tasks.execution.SkipUpToDateTaskExecuter.execute(SkipUpToDateTaskExecuter.java:64)
    at org.gradle.api.internal.tasks.execution.ValidatingTaskExecuter.execute(ValidatingTaskExecuter.java:58)
    at org.gradle.api.internal.tasks.execution.SkipEmptySourceFilesTaskExecuter.execute(SkipEmptySourceFilesTaskExecuter.java:42)
    at org.gradle.api.internal.tasks.execution.SkipTaskWithNoActionsExecuter.execute(SkipTaskWithNoActionsExecuter.java:52)
    at org.gradle.api.internal.tasks.execution.SkipOnlyIfTaskExecuter.execute(SkipOnlyIfTaskExecuter.java:53)
    at org.gradle.api.internal.tasks.execution.ExecuteAtMostOnceTaskExecuter.execute(ExecuteAtMostOnceTaskExecuter.java:43)
    at org.gradle.api.internal.AbstractTask.executeWithoutThrowingTaskFailure(AbstractTask.java:283)
    at org.gradle.execution.taskgraph.AbstractTaskPlanExecutor$TaskExecutorWorker.executeTask(AbstractTaskPlanExecutor.java:79)
    at org.gradle.execution.taskgraph.AbstractTaskPlanExecutor$TaskExecutorWorker.processTask(AbstractTaskPlanExecutor.java:63)
    at org.gradle.execution.taskgraph.AbstractTaskPlanExecutor$TaskExecutorWorker.run(AbstractTaskPlanExecutor.java:51)
    at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor$1.run(DefaultTaskPlanExecutor.java:33)
    at org.gradle.internal.Factories$1.create(Factories.java:22)
    at org.gradle.cache.internal.DefaultCacheAccess.longRunningOperation(DefaultCacheAccess.java:214)
    at org.gradle.cache.internal.DefaultCacheAccess.longRunningOperation
0
नीचे मेरा जवाब देखें। ध्यान दें कि उपयोगकर्ताओं को समस्या ट्रैकर को कंपाइलर बग की रिपोर्ट करने के लिए अत्यधिक प्रोत्साहित किया जाता है: youtrack.jetbrains.net/issues/KT । यह विशेष समस्याएं पहले से ही रिपोर्ट की गई हैं: youtrack.jetbrains.com/issue/KT-3704
जोड़ा लेखक Andrey Breslav, स्रोत
मुद्दा केटी-3704 को हल किया गया है और अब कोई मुद्दा नहीं है।
जोड़ा लेखक Jayson Minard, स्रोत

1 उत्तर

यह वास्तव में स्थानीय कार्यों से संबंधित एक बग है (कार्यों के अंदर घोषित कार्यों)। कामकाज के रूप में, इस कोड का प्रयोग करें:

fun isOdd(x: Int) = x % 2 != 0

fun main(args: Array) {
    val numbers = listOf(1, 2, 3)
    println(numbers.filter(::isOdd))
}

महत्वपूर्ण हिस्सा यह है कि isOdd() किसी भी फ़ंक्शन के बाहर परिभाषित किया गया है।

0
जोड़ा
एंड्री धन्यवाद। यह आश्चर्यजनक होगा अगर यह जल्द ही तय हो गया, क्योंकि यह कोटलिन में कोडिंग की एक कार्यात्मक शैली को विस्तारित करने में सक्षम बनाता है। वैसे, भाषा पर बहुत अच्छा काम ... मैं वास्तव में अब जेवीएम कोडिंग का आनंद लेता हूं ... इसे जारी रखो :)
जोड़ा लेखक deepblue, स्रोत
@deepblue मुद्दा अब मौजूद नहीं है, एक पुरानी हल की गई बग है।
जोड़ा लेखक Jayson Minard, स्रोत