Intellij-elixir: AbstractMethodError on Ultimate 2017.3 EAP

Created on 16 Oct 2017  路  6Comments  路  Source: KronicDeth/intellij-elixir

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)
Bug

Most helpful comment

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.

All 6 comments

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.

Was this page helpful?
0 / 5 - 0 ratings

Related issues

joshuataylor picture joshuataylor  路  3Comments

Nicholi picture Nicholi  路  6Comments

Istiakmorsalin picture Istiakmorsalin  路  4Comments

kandeshvari picture kandeshvari  路  5Comments

merqlove picture merqlove  路  4Comments