Intellij-elixir: Type.createDefaultErlangSdk violates write-access rules when run in credo External Annotator (sometimes)

Created on 22 Oct 2017  路  2Comments  路  Source: KronicDeth/intellij-elixir

Version

6.3.0

Exception

Message

Write access is allowed from event dispatch thread only

Stacktrace

 EventQueue.isDispatchThread()=false isDispatchThread()=false Toolkit.getEventQueue()=com.intellij.ide.IdeEventQueue@29c8b824 Current thread: Thread[ApplicationImpl pooled thread 63,4,Idea Thread Group] 332722661 SystemEventQueueThread: Thread[AWT-EventQueue-0 2017.2.5#IU-172.4343.14 IDEA, eap:false, os:Mac OS X 10.13, java-version:JetBrains s.r.o 1.8.0_152-release-915-b12,6,main] 129012044

java.lang.Throwable
    at com.intellij.util.ExceptionUtil.currentStackTrace(ExceptionUtil.java:65)
    at com.intellij.psi.impl.DebugUtil.currentStackTrace(DebugUtil.java:520)
    at com.intellij.diagnostic.LogEventException.<init>(LogEventException.java:32)
    at com.intellij.openapi.application.impl.ApplicationImpl.a(ApplicationImpl.java:1104)
    at com.intellij.openapi.application.impl.ApplicationImpl.e(ApplicationImpl.java:1192)
    at com.intellij.openapi.application.impl.ApplicationImpl.runWriteAction(ApplicationImpl.java:1016)
    at org.elixir_lang.sdk.elixir.Type.createDefaultErlangSdk(Type.java:287)
    at org.elixir_lang.sdk.elixir.Type.createDefaultErlangSdk(Type.java:304)
    at org.elixir_lang.sdk.elixir.Type.defaultErlangSdk(Type.java:325)
    at org.elixir_lang.sdk.elixir.Type.configureInternalErlangSdk(Type.java:156)
    at org.elixir_lang.sdk.elixir.Type.putDefaultErlangSdk(Type.java:338)
    at org.elixir_lang.mix.runner.MixRunningStateUtil.setElixir(MixRunningStateUtil.java:276)
    at org.elixir_lang.mix.runner.MixRunningStateUtil.commandLine(MixRunningStateUtil.java:174)
    at org.elixir_lang.annotator.Credo.generalCommandLine(Credo.java:100)
    at org.elixir_lang.annotator.Credo.generalCommandLine(Credo.java:142)
    at org.elixir_lang.annotator.Credo.generalCommandLine(Credo.java:244)
    at org.elixir_lang.annotator.Credo.doAnnotate(Credo.java:222)
    at org.elixir_lang.annotator.Credo.doAnnotate(Credo.java:38)
    at com.intellij.codeInsight.daemon.impl.ExternalToolPass.a(ExternalToolPass.java:211)
    at com.intellij.codeInsight.daemon.impl.ExternalToolPass.access$500(ExternalToolPass.java:47)
    at com.intellij.codeInsight.daemon.impl.ExternalToolPass$1.run(ExternalToolPass.java:158)
    at com.intellij.util.ui.update.MergingUpdateQueue.execute(MergingUpdateQueue.java:337)
    at com.intellij.util.ui.update.MergingUpdateQueue.execute(MergingUpdateQueue.java:327)
    at com.intellij.util.ui.update.MergingUpdateQueue.lambda$flush$1(MergingUpdateQueue.java:277)
    at com.intellij.util.ui.update.MergingUpdateQueue.flush(MergingUpdateQueue.java:291)
    at com.intellij.util.ui.update.MergingUpdateQueue.run(MergingUpdateQueue.java:246)
    at com.intellij.util.concurrency.QueueProcessor.runSafely(QueueProcessor.java:246)
    at com.intellij.util.Alarm$Request.runSafely(Alarm.java:417)
    at com.intellij.util.Alarm$Request.access$700(Alarm.java:344)
    at com.intellij.util.Alarm$Request$1.run(Alarm.java:384)
    at com.intellij.util.Alarm$Request.run(Alarm.java:395)
    at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
    at java.util.concurrent.FutureTask.run(FutureTask.java:266)
    at com.intellij.util.concurrency.SchedulingWrapper$MyScheduledFutureTask.run(SchedulingWrapper.java:237)
    at com.intellij.util.concurrency.BoundedTaskExecutor$2.run(BoundedTaskExecutor.java:212)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    at java.lang.Thread.run(Thread.java:745)

Bug

Most helpful comment

@ShaneSegal as a work-around, do one of the following

  • Manually set the Internal Erlang SDK:

    1. File > Project Structure
    2. Click SDK
    3. Click +
    4. Select either "Erlang SDK" (if you have intellij-erlang plugin installed) or "Erlang for Elixir SDK" (if you only have IntelliJ Elixir plugin installed)
    5. Pick the SDK directory Erlang. It is /usr/local/Cellar/erlang/VERSION/lib/erlang
    6. Click OK

    Now use that Erlang SDK in the Elixir SDK.

    1. File > Project Structure
    2. Click SDK
    3. Select your Elixir SDK
    4. Ensure the Internal Erlang SDK dropdown has your Erlang SDK selected. If it worked correctly Class Paths tab will list ebin directories for both Elixir and Erlang like in the pictures in the SDK section of the README.
  • Run mix test Run Configuration and it will migrate your Elixir SDK and fill in the Internal Erlang SDK.

All 2 comments

@ShaneSegal as a work-around, do one of the following

  • Manually set the Internal Erlang SDK:

    1. File > Project Structure
    2. Click SDK
    3. Click +
    4. Select either "Erlang SDK" (if you have intellij-erlang plugin installed) or "Erlang for Elixir SDK" (if you only have IntelliJ Elixir plugin installed)
    5. Pick the SDK directory Erlang. It is /usr/local/Cellar/erlang/VERSION/lib/erlang
    6. Click OK

    Now use that Erlang SDK in the Elixir SDK.

    1. File > Project Structure
    2. Click SDK
    3. Select your Elixir SDK
    4. Ensure the Internal Erlang SDK dropdown has your Erlang SDK selected. If it worked correctly Class Paths tab will list ebin directories for both Elixir and Erlang like in the pictures in the SDK section of the README.
  • Run mix test Run Configuration and it will migrate your Elixir SDK and fill in the Internal Erlang SDK.

That looks to have worked, thanks!

Was this page helpful?
0 / 5 - 0 ratings