When launching an Elixir project in the latest 2017.3 EAP (173.3188.16), a message stating "an IDE error occurred" is shown, with the details below, and none of the dynamic highlighting functionality works (e.g. macros and function names are not highlighted).
Method org/elixir_lang/beam/psi/BeamFileImpl.getStubbedSpine()Lcom/intellij/psi/impl/source/StubbedSpine; is abstract
java.lang.AbstractMethodError: Method org/elixir_lang/beam/psi/BeamFileImpl.getStubbedSpine()Lcom/intellij/psi/impl/source/StubbedSpine; is abstract
at org.elixir_lang.beam.psi.BeamFileImpl.getStubbedSpine(BeamFileImpl.java)
at com.intellij.psi.stubs.StubProcessingHelperBase.a(StubProcessingHelperBase.java:68)
at com.intellij.psi.stubs.StubProcessingHelperBase.processStubsInFile(StubProcessingHelperBase.java:51)
at com.intellij.psi.stubs.StubIndexImpl$2.process(StubIndexImpl.java:331)
at com.intellij.psi.stubs.StubIndexImpl$StubIdListContainerAction.perform(StubIndexImpl.java:619)
at com.intellij.psi.stubs.StubIndexImpl$StubIdListContainerAction.perform(StubIndexImpl.java:607)
at com.intellij.util.indexing.ValueContainer.forEach(ValueContainer.java:62)
at com.intellij.psi.stubs.StubIndexImpl.a(StubIndexImpl.java:360)
at com.intellij.psi.stubs.StubIndexImpl.processElements(StubIndexImpl.java:323)
at com.intellij.psi.stubs.StubIndex.getElements(StubIndex.java:145)
at com.intellij.psi.stubs.StubIndex.getElements(StubIndex.java:134)
at org.elixir_lang.Reference.namedElementCollection(Reference.java:81)
at org.elixir_lang.Reference.namedElementCollection(Reference.java:70)
at org.elixir_lang.Reference.forEachNavigationElement(Reference.java:39)
at org.elixir_lang.reference.resolver.Module.multiResolveProject(Module.java:24)
at org.elixir_lang.reference.resolver.Module.resolve(Module.java:48)
at org.elixir_lang.reference.resolver.Module.resolve(Module.java:17)
at com.intellij.psi.impl.source.resolve.ResolveCache.resolve(ResolveCache.java:145)
at com.intellij.psi.impl.source.resolve.ResolveCache.resolveWithCaching(ResolveCache.java:175)
at com.intellij.psi.impl.source.resolve.ResolveCache.resolveWithCaching(ResolveCache.java:167)
at org.elixir_lang.reference.Module.multiResolve(Module.java:49)
at org.elixir_lang.reference.Module.resolve(Module.java:60)
at com.intellij.codeInsight.TargetElementUtil.b(TargetElementUtil.java:389)
at com.intellij.codeInsight.TargetElementUtil.a(TargetElementUtil.java:366)
at com.intellij.codeInsight.TargetElementUtil.a(TargetElementUtil.java:236)
at com.intellij.codeInsight.TargetElementUtil.findTargetElement(TargetElementUtil.java:208)
at com.intellij.codeInsight.daemon.impl.IdentifierHighlighterPass.doCollectInformation(IdentifierHighlighterPass.java:92)
at com.intellij.codeHighlighting.TextEditorHighlightingPass.collectInformation(TextEditorHighlightingPass.java:70)
at com.intellij.codeInsight.daemon.impl.PassExecutorService$ScheduledPass.b(PassExecutorService.java:437)
at com.intellij.openapi.application.impl.ApplicationImpl.tryRunReadAction(ApplicationImpl.java:1132)
at com.intellij.codeInsight.daemon.impl.PassExecutorService$ScheduledPass.d(PassExecutorService.java:430)
at com.intellij.openapi.progress.impl.CoreProgressManager.a(CoreProgressManager.java:534)
at com.intellij.openapi.progress.impl.CoreProgressManager.executeProcessUnderProgress(CoreProgressManager.java:479)
at com.intellij.openapi.progress.impl.ProgressManagerImpl.executeProcessUnderProgress(ProgressManagerImpl.java:94)
at com.intellij.codeInsight.daemon.impl.PassExecutorService$ScheduledPass.c(PassExecutorService.java:429)
at com.intellij.codeInsight.daemon.impl.PassExecutorService$ScheduledPass.a(PassExecutorService.java:405)
at com.intellij.openapi.application.impl.ReadMostlyRWLock.executeByImpatientReader(ReadMostlyRWLock.java:143)
at com.intellij.openapi.application.impl.ApplicationImpl.executeByImpatientReader(ApplicationImpl.java:234)
at com.intellij.codeInsight.daemon.impl.PassExecutorService$ScheduledPass.run(PassExecutorService.java:403)
at com.intellij.concurrency.JobLauncherImpl$VoidForkJoinTask$1.exec(JobLauncherImpl.java:170)
at java.util.concurrent.ForkJoinTask.doExec(ForkJoinTask.java:289)
at java.util.concurrent.ForkJoinPool$WorkQueue.runTask(ForkJoinPool.java:1056)
at java.util.concurrent.ForkJoinPool.runWorker(ForkJoinPool.java:1692)
at java.util.concurrent.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:157)
It looks like getStubbedSpine is a new required method in 2017.3 EAP since I don't see it in the earlier versions. I'll have to setup a build for it to confirm. Thanks for reporting this issues early, so I can be ready when it exits EAP to GA.
Hello, @KronicDeth .
Seems that the same issue
Method org/elixir_lang/beam/psi/BeamFileImpl.getStubbedSpine()Lcom/intellij/psi/impl/source/StubbedSpine; is abstract
java.lang.AbstractMethodError: Method org/elixir_lang/beam/psi/BeamFileImpl.getStubbedSpine()Lcom/intellij/psi/impl/source/StubbedSpine; is abstract
at org.elixir_lang.beam.psi.BeamFileImpl.getStubbedSpine(BeamFileImpl.java)
at com.intellij.psi.stubs.StubProcessingHelperBase.getAllSpines(StubProcessingHelperBase.java:68)
at com.intellij.psi.stubs.StubProcessingHelperBase.processStubsInFile(StubProcessingHelperBase.java:51)
at com.intellij.psi.stubs.StubIndexImpl$2.process(StubIndexImpl.java:331)
at com.intellij.psi.stubs.StubIndexImpl$StubIdListContainerAction.perform(StubIndexImpl.java:619)
at com.intellij.psi.stubs.StubIndexImpl$StubIdListContainerAction.perform(StubIndexImpl.java:607)
at com.intellij.util.indexing.ValueContainer.forEach(ValueContainer.java:62)
at com.intellij.psi.stubs.StubIndexImpl.doProcessStubs(StubIndexImpl.java:360)
at com.intellij.psi.stubs.StubIndexImpl.processElements(StubIndexImpl.java:323)
at com.intellij.psi.stubs.StubIndex.getElements(StubIndex.java:145)
at com.intellij.psi.stubs.StubIndex.getElements(StubIndex.java:134)
at org.elixir_lang.Reference.namedElementCollection(Reference.java:81)
at org.elixir_lang.Reference.namedElementCollection(Reference.java:70)
at org.elixir_lang.Reference.forEachNavigationElement(Reference.java:39)
at org.elixir_lang.psi.scope.CallDefinitionClause.implicitImports(CallDefinitionClause.java:132)
at org.elixir_lang.psi.scope.CallDefinitionClause.execute(CallDefinitionClause.java:122)
at org.elixir_lang.psi.scope.CallDefinitionClause.execute(CallDefinitionClause.java:44)
at org.elixir_lang.psi.impl.ElixirPsiImplUtil.processDeclarations(ElixirPsiImplUtil.java:1708)
at org.elixir_lang.psi.impl.ElixirUnmatchedUnqualifiedNoParenthesesCallImpl.processDeclarations(ElixirUnmatchedUnqualifiedNoParenthesesCallImpl.java:147)
at com.intellij.psi.util.PsiTreeUtil.treeWalkUp(PsiTreeUtil.java:1097)
at org.elixir_lang.psi.scope.call_definition_clause.MultiResolve.resolveResultList(MultiResolve.java:42)
at org.elixir_lang.psi.scope.call_definition_clause.MultiResolve.resolveResultList(MultiResolve.java:32)
at org.elixir_lang.reference.resolver.Callable.resolve(Callable.java:70)
at org.elixir_lang.reference.resolver.Callable.resolve(Callable.java:17)
at com.intellij.psi.impl.source.resolve.ResolveCache.resolve(ResolveCache.java:145)
at com.intellij.psi.impl.source.resolve.ResolveCache.resolveWithCaching(ResolveCache.java:175)
at com.intellij.psi.impl.source.resolve.ResolveCache.resolveWithCaching(ResolveCache.java:167)
at org.elixir_lang.reference.Callable.multiResolve(Callable.java:666)
at org.elixir_lang.reference.Callable.resolve(Callable.java:677)
at com.intellij.codeInsight.intention.AddAnnotationPsiFix.getContainer(AddAnnotationPsiFix.java:76)
at com.intellij.codeInsight.intention.impl.AddAnnotationIntention.isAvailable(AddAnnotationIntention.java:46)
at com.intellij.codeInsight.intention.impl.ShowIntentionActionsHandler.availableFor(ShowIntentionActionsHandler.java:143)
at com.intellij.codeInsight.daemon.impl.ShowIntentionsPass.lambda$getActionsToShow$2(ShowIntentionsPass.java:336)
at com.intellij.codeInsight.intention.impl.ShowIntentionActionsHandler.chooseBetweenHostAndInjected(ShowIntentionActionsHandler.java:168)
at com.intellij.codeInsight.daemon.impl.ShowIntentionsPass.getActionsToShow(ShowIntentionsPass.java:335)
at com.intellij.codeInsight.daemon.impl.ShowIntentionsPass.getIntentionActionsToShow(ShowIntentionsPass.java:268)
at com.intellij.codeInsight.daemon.impl.ShowIntentionsPass.doCollectInformation(ShowIntentionsPass.java:244)
at com.intellij.codeHighlighting.TextEditorHighlightingPass.collectInformation(TextEditorHighlightingPass.java:70)
at com.intellij.codeInsight.daemon.impl.PassExecutorService$ScheduledPass.lambda$null$1(PassExecutorService.java:437)
at com.intellij.openapi.application.impl.ApplicationImpl.tryRunReadAction(ApplicationImpl.java:1132)
at com.intellij.codeInsight.daemon.impl.PassExecutorService$ScheduledPass.lambda$doRun$2(PassExecutorService.java:430)
at com.intellij.openapi.progress.impl.CoreProgressManager.registerIndicatorAndRun(CoreProgressManager.java:534)
at com.intellij.openapi.progress.impl.CoreProgressManager.executeProcessUnderProgress(CoreProgressManager.java:479)
at com.intellij.openapi.progress.impl.ProgressManagerImpl.executeProcessUnderProgress(ProgressManagerImpl.java:94)
at com.intellij.codeInsight.daemon.impl.PassExecutorService$ScheduledPass.doRun(PassExecutorService.java:429)
at com.intellij.codeInsight.daemon.impl.PassExecutorService$ScheduledPass.lambda$run$0(PassExecutorService.java:405)
at com.intellij.openapi.application.impl.ReadMostlyRWLock.executeByImpatientReader(ReadMostlyRWLock.java:143)
at com.intellij.openapi.application.impl.ApplicationImpl.executeByImpatientReader(ApplicationImpl.java:234)
at com.intellij.codeInsight.daemon.impl.PassExecutorService$ScheduledPass.run(PassExecutorService.java:403)
at com.intellij.concurrency.JobLauncherImpl$VoidForkJoinTask$1.exec(JobLauncherImpl.java:170)
at java.util.concurrent.ForkJoinTask.doExec(ForkJoinTask.java:289)
at java.util.concurrent.ForkJoinPool$WorkQueue.runTask(ForkJoinPool.java:1056)
at java.util.concurrent.ForkJoinPool.runWorker(ForkJoinPool.java:1692)
at java.util.concurrent.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:157)
The implementation can probably be copied from ClsFileImpl. Sorry for inconvenience.
@donnerpeter making getStubbedSpine a requirement seems to make it impossible to support < 2017.3 because I don't have access to the return type StubbedSpine in earlier version. StubTree also doesn't support getStubbedSpine. Maybe, I can get around this with some reflection.
Actually I just wanted to post that getStubbedSpine is now a default method, so unless you want your plugin to work with already released EAPs and public preview, your plugin should be fine. Sorry again for inconvenience.
@mjadczak, @RamanBut-Husaim closing since @donnerpeter says it will be fixed in official 2017.3 release and I can confirmed I can see it in https://github.com/JetBrains/intellij-community/commit/260d1c08bf3cce0a86c33ce6bcd7049d41d9d044 and on current master.
Most helpful comment
It looks like
getStubbedSpineis a new required method in 2017.3 EAP since I don't see it in the earlier versions. I'll have to setup a build for it to confirm. Thanks for reporting this issues early, so I can be ready when it exits EAP to GA.