2014-01-15 3 views
1

내 IntelliJ Idea Plugin에서 Message를받은 후 WebSocketListener를 구현하는 EchoSocketclass에서 PSI에 액세스 할 수 없습니다.IntelliJ IDEA의 PSI에 어떻게 액세스합니까?

나는 항상이 오류를 얻을 :

읽기 권한 만 ... 이 버튼을 눌러, 내가 아무 문제없이 액세스 할 수있는 내부 읽기 동작 이벤트 디스패치 스레드에서 허용되거나됩니다.

답변

1

ApplicationManager.getApplication(). runReadAction (...)에 액세스를 래핑하십시오.

모든 읽기 작업이 지연되고 읽기 작업이 실행되는 동안 편집기에 입력 할 수 없으므로이 읽기 작업에서 오랫동안 작업하지 마십시오.

+0

네 번째 답. 그것은 작동하지만, 이제는 모든 단일 액세스를 ApplicationManager.getApplication(). runReadAction (...)으로 랩해야하는 문제가 있습니다. 예를 들어 메시지를받은 후 편집기에서 psiElement를 강조 표시하고 싶습니다. 귀하의 솔루션으로 나는 거의 모든 것을 그것으로 포장해야합니다. 때로는 (예를 들어 내가 선택한 편집기에 액세스하고 싶을 때) 오류를 표시하고 다른 시간에 다시 랩핑해야합니다 (랩으로 랩핑해야합니다)) ... 대안이 있습니까? – user2988098

+0

너무 길지 않으면 일련의 액세스를 하나의 읽기 작업으로 래핑 할 수 있습니다. Swing 스레드에서 편집기 작업 (예 : 강조 표시 추가)을 더 잘 수행하면 Application.invokeLater를 사용할 수 있습니다. 일반적으로 편집기 강조 표시는 강조 표시에서 수행됩니다 (예 : Annotator 또는 검사에서. http://confluence.jetbrains.com/display/IDEADEV/PluginDevelopment에서 플러그인 개발 가이드 라인을 읽는 것이 좋습니다. –