Can I attach a Reference Provider through LivePlugin?
UnbridledGames opened this issue · 2 comments
I am trying to extend my previous plugin (auto-completing certain text inside Yaml string values) and make it so that those are ctrl-clickable so that I can navigate to the matching yaml key value in whatever file they exist in.
Following some other examples I have written the code that SEEMS like it should work... however... every time I try to actually register the ReferenceContributor, I get this IDE error:
java.lang.Throwable: Reference provider registration is only allowed from PsiReferenceContributor
I have tried to do it a hundred ways, and always get this error. So it seems I'm not doing it correctly. And I AM running registrar.regidterReferenceProvider from inside a PsiReferenceContributor instance. So maybe it can only be registered internally upon plugin startup, defined in the gradle config?
Does LivePlugin have any functionality to attach/register a ReferenceContributor in the proper way? I'm at a loss, and spent the last 48 hours tearing my hair out trying to get an actual plugin to even remotely work.
Sorry for the slow reply. I don't really know the answer and was trying to focus on a conference talk 🙈
Searching IJ code for "Reference provider registration is only allowed from PsiReferenceContributor" there is only one usage of it in com.intellij.psi.impl.source.resolve.reference.PsiReferenceRegistrarImpl#registerReferenceProvider()
and it has this condition myInitialized && !ApplicationManager.getApplication().isUnitTestMode() && parentDisposable == null
. It also looks like this is just logging the error but runs the code anyway.
There might be a good reasons it logs an error, so why not try using PsiReferenceContributor
and register it via extension point com.intellij.psi.PsiReferenceContributor#EP_NAME
? It's not guaranteed that it will work though because some IJ APIs are not designed to be very reloadable.
Here is a working example https://gist.github.com/dkandalov/49f17eb3f6a2e87fdb1f2dc3d1eba609