Strange problem with our customer property completion contributor

We have written our own customer completion for properties files to lookup options for Apache Camel end points, and between IDEA upgrades it has stopped working. We are not sure when because our test cases did not catch it.

We found out the contributor was never invoked because the JavaClassReferenceCompletionContributor is invoked before, and for some reason it detect the property has a JavaClassReference, but with no extend class names. This result in “result.stopHere()” is called and our completion contributor is never called.

I solved it by changing the order="before javaClassReference" on the “completion.contributor” element, but I’m not sure if this is a work around or the correct way to solve it?

 

IntelliJ IDEA 2018.1.5 (Community Edition)

Build #IC-181.5281.24, built on June 12, 2018

JRE: 1.8.0_171-b11 x86_64

JVM: Java HotSpot(TM) 64-Bit Server VM by Oracle Corporation

macOS 10.13.5

 

Thanks

/Flemming

0
7 comments
Official comment

It's definitely fine as a workaround, and OK as a fix, if JavaClassReference is justified there. Was it absent in previous releases of IDEA? Could you please put a breakpoint in JavaClassReference constructor and post here the stack trace of its creation during completion?

Avatar
Permanently deleted user

I'm sure if it was and when this starts to be a problem. We have test cases testing the completion put they are all green, although we have setup a test case with both property files and java files.

"ApplicationImpl pooled thread 1@2891" prio=4 tid=0x16 nid=NA runnable
java.lang.Thread.State: RUNNABLE
at com.intellij.codeInsight.completion.JavaClassReferenceCompletionContributor.<init>(JavaClassReferenceCompletionContributor.java:33)
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(NativeConstructorAccessorImpl.java:-1)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
at org.picocontainer.defaults.InstantiatingComponentAdapter.newInstance(InstantiatingComponentAdapter.java:193)
at com.intellij.util.pico.CachingConstructorInjectionComponentAdapter.doGetComponentInstance(CachingConstructorInjectionComponentAdapter.java:103)
at com.intellij.util.pico.CachingConstructorInjectionComponentAdapter.instantiateGuarded(CachingConstructorInjectionComponentAdapter.java:80)
at com.intellij.util.pico.CachingConstructorInjectionComponentAdapter.getComponentInstance(CachingConstructorInjectionComponentAdapter.java:63)
at com.intellij.openapi.extensions.AbstractExtensionPointBean.instantiate(AbstractExtensionPointBean.java:75)
at com.intellij.openapi.extensions.CustomLoadingExtensionPointBean.instantiateExtension(CustomLoadingExtensionPointBean.java:47)
at com.intellij.lang.LanguageExtensionPoint.access$000(LanguageExtensionPoint.java:28)
at com.intellij.lang.LanguageExtensionPoint$1.compute(LanguageExtensionPoint.java:42)
at com.intellij.openapi.util.NotNullLazyValue.getValue(NotNullLazyValue.java:39)
at com.intellij.lang.LanguageExtensionPoint.getInstance(LanguageExtensionPoint.java:53)
at com.intellij.codeInsight.completion.CompletionPreloader.preload(CompletionPreloader.java:32)
at com.intellij.openapi.application.Preloader.lambda$null$0(Preloader.java:74)
at com.intellij.openapi.application.Preloader$$Lambda$166.1682482979.run(Unknown Source:-1)
at com.intellij.openapi.progress.impl.CoreProgressManager.lambda$runProcess$1(CoreProgressManager.java:157)
at com.intellij.openapi.progress.impl.CoreProgressManager$$Lambda$130.1227763405.run(Unknown Source:-1)
at com.intellij.openapi.progress.impl.CoreProgressManager.registerIndicatorAndRun(CoreProgressManager.java:580)
at com.intellij.openapi.progress.impl.CoreProgressManager.executeProcessUnderProgress(CoreProgressManager.java:525)
at com.intellij.openapi.progress.impl.ProgressManagerImpl.executeProcessUnderProgress(ProgressManagerImpl.java:85)
at com.intellij.openapi.progress.impl.CoreProgressManager.runProcess(CoreProgressManager.java:144)
at com.intellij.openapi.application.Preloader.lambda$initComponent$1(Preloader.java:72)
at com.intellij.openapi.application.Preloader$$Lambda$165.1147198552.run(Unknown Source:-1)
at com.intellij.util.concurrency.BoundedTaskExecutor$2.run(BoundedTaskExecutor.java:212)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at java.lang.Thread.run(Thread.java:748)
0

That's the stack trace of creating JavaClassReferenceCompletionContributor, while I asked for the one of JavaClassReference.

0
Avatar
Permanently deleted user

Sorry my bad

"JobScheduler FJ pool 4/7@17431" daemon prio=4 tid=0x3d nid=NA runnable
java.lang.Thread.State: RUNNABLE
at com.intellij.psi.impl.source.resolve.reference.impl.providers.JavaClassReference.<init>(JavaClassReference.java:80)
at com.intellij.psi.impl.source.resolve.reference.impl.providers.JavaClassReferenceSet.createReference(JavaClassReferenceSet.java:211)
at com.intellij.psi.impl.source.resolve.reference.impl.providers.JavaClassReferenceSet.reparse(JavaClassReferenceSet.java:183)
at com.intellij.psi.impl.source.resolve.reference.impl.providers.JavaClassReferenceSet.<init>(JavaClassReferenceSet.java:61)
at com.intellij.psi.impl.source.resolve.reference.impl.providers.JavaClassReferenceSet.<init>(JavaClassReferenceSet.java:54)
at com.intellij.psi.impl.source.resolve.reference.impl.providers.JavaClassReferenceProvider.getReferencesByString(JavaClassReferenceProvider.java:134)
at com.intellij.lang.properties.PropertiesReferenceContributor$3.getReferencesByElement(PropertiesReferenceContributor.java:104)
at com.intellij.psi.impl.source.resolve.reference.ReferenceProvidersRegistryImpl.getReferences(ReferenceProvidersRegistryImpl.java:135)
at com.intellij.psi.impl.source.resolve.reference.ReferenceProvidersRegistryImpl.mapNotEmptyReferencesFromProviders(ReferenceProvidersRegistryImpl.java:123)
at com.intellij.psi.impl.source.resolve.reference.ReferenceProvidersRegistryImpl.doGetReferencesFromProviders(ReferenceProvidersRegistryImpl.java:102)
at com.intellij.psi.impl.source.resolve.reference.ReferenceProvidersRegistry.getReferencesFromProviders(ReferenceProvidersRegistry.java:59)
at com.intellij.psi.impl.source.resolve.reference.ReferenceProvidersRegistry.getReferencesFromProviders(ReferenceProvidersRegistry.java:53)
at com.intellij.lang.properties.psi.impl.PropertyValueImpl.getReferences(PropertyValueImpl.java:36)
at org.intellij.plugins.intelliLang.references.InjectedReferencesContributor.getInjectedReferences(InjectedReferencesContributor.java:55)
at org.intellij.plugins.intelliLang.references.InjectedReferencesInspection$1.visitElement(InjectedReferencesInspection.java:39)
at com.intellij.psi.impl.source.tree.LeafPsiElement.accept(LeafPsiElement.java:215)
at com.intellij.codeInspection.InspectionEngine.acceptElements(InspectionEngine.java:75)
at com.intellij.codeInspection.InspectionEngine.createVisitorAndAcceptElements(InspectionEngine.java:63)
at com.intellij.codeInsight.daemon.impl.LocalInspectionsPass.runToolOnElements(LocalInspectionsPass.java:278)
at com.intellij.codeInsight.daemon.impl.LocalInspectionsPass.lambda$visitPriorityElementsAndInit$3(LocalInspectionsPass.java:246)
at com.intellij.codeInsight.daemon.impl.LocalInspectionsPass$$Lambda$1763.1929902050.process(Unknown Source:-1)
at com.intellij.concurrency.ApplierCompleter.execAndForkSubTasks(ApplierCompleter.java:133)
at com.intellij.concurrency.ApplierCompleter$$Lambda$1553.716387974.run(Unknown Source:-1)
at com.intellij.openapi.application.impl.ApplicationImpl.tryRunReadAction(ApplicationImpl.java:1129)
at com.intellij.concurrency.ApplierCompleter.lambda$wrapInReadActionAndIndicator$1(ApplierCompleter.java:105)
at com.intellij.concurrency.ApplierCompleter$$Lambda$1554.1276131563.run(Unknown Source:-1)
at com.intellij.openapi.progress.impl.CoreProgressManager.registerIndicatorAndRun(CoreProgressManager.java:580)
at com.intellij.openapi.progress.impl.CoreProgressManager.executeProcessUnderProgress(CoreProgressManager.java:525)
at com.intellij.openapi.progress.impl.ProgressManagerImpl.executeProcessUnderProgress(ProgressManagerImpl.java:85)
at com.intellij.concurrency.ApplierCompleter.wrapInReadActionAndIndicator(ApplierCompleter.java:116)
at com.intellij.concurrency.ApplierCompleter.lambda$compute$0(ApplierCompleter.java:96)
at com.intellij.concurrency.ApplierCompleter$$Lambda$1552.447064384.run(Unknown Source:-1)
at com.intellij.openapi.application.impl.ReadMostlyRWLock.executeByImpatientReader(ReadMostlyRWLock.java:143)
at com.intellij.openapi.application.impl.ApplicationImpl.executeByImpatientReader(ApplicationImpl.java:218)
at com.intellij.concurrency.ApplierCompleter.compute(ApplierCompleter.java:96)
at java.util.concurrent.CountedCompleter.exec(CountedCompleter.java:731)
at java.util.concurrent.ForkJoinTask.doExec(ForkJoinTask.java:289)
at java.util.concurrent.ForkJoinPool$WorkQueue.pollAndExecCC(ForkJoinPool.java:1190)
at java.util.concurrent.ForkJoinPool.helpComplete(ForkJoinPool.java:1879)
at java.util.concurrent.ForkJoinPool.awaitJoin(ForkJoinPool.java:2045)
at java.util.concurrent.ForkJoinTask.doJoin(ForkJoinTask.java:390)
at java.util.concurrent.ForkJoinTask.join(ForkJoinTask.java:719)
at java.util.concurrent.ForkJoinPool.invoke(ForkJoinPool.java:2616)
at com.intellij.concurrency.JobLauncherImpl.invokeConcurrentlyUnderProgress(JobLauncherImpl.java:65)
at com.intellij.concurrency.JobLauncher.invokeConcurrentlyUnderProgress(JobLauncher.java:57)
at com.intellij.codeInsight.daemon.impl.LocalInspectionsPass.visitPriorityElementsAndInit(LocalInspectionsPass.java:249)
at com.intellij.codeInsight.daemon.impl.LocalInspectionsPass.inspect(LocalInspectionsPass.java:220)
at com.intellij.codeInsight.daemon.impl.LocalInspectionsPass.collectInformationWithProgress(LocalInspectionsPass.java:121)
at com.intellij.codeInsight.daemon.impl.ProgressableTextEditorHighlightingPass.doCollectInformation(ProgressableTextEditorHighlightingPass.java:83)
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.codeInsight.daemon.impl.PassExecutorService$ScheduledPass$$Lambda$1470.1471233030.run(Unknown Source:-1)
at com.intellij.openapi.application.impl.ApplicationImpl.tryRunReadAction(ApplicationImpl.java:1134)
at com.intellij.codeInsight.daemon.impl.PassExecutorService$ScheduledPass.lambda$doRun$2(PassExecutorService.java:430)
at com.intellij.codeInsight.daemon.impl.PassExecutorService$ScheduledPass$$Lambda$1466.378287677.run(Unknown Source:-1)
at com.intellij.openapi.progress.impl.CoreProgressManager.registerIndicatorAndRun(CoreProgressManager.java:580)
at com.intellij.openapi.progress.impl.CoreProgressManager.executeProcessUnderProgress(CoreProgressManager.java:525)
at com.intellij.openapi.progress.impl.ProgressManagerImpl.executeProcessUnderProgress(ProgressManagerImpl.java:85)
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.codeInsight.daemon.impl.PassExecutorService$ScheduledPass$$Lambda$1462.874549804.run(Unknown Source:-1)
at com.intellij.openapi.application.impl.ReadMostlyRWLock.executeByImpatientReader(ReadMostlyRWLock.java:143)
at com.intellij.openapi.application.impl.ApplicationImpl.executeByImpatientReader(ApplicationImpl.java:218)
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)
0

Thanks. This code hasn't change for many years, so I'm not sure why everything has changed for you. I can only suggest to debug against old and new IDE versions and see if JavaClassReference is cretaed in both of them, and if completion contributor is called, and so on.

0
Avatar
Permanently deleted user

Just as a debugging suggestion: Check for new/updated plugins in your IDEA installation, and view your run-time logs.  All of the completion contributors (for all registered/running plugins) are called in a chain and earlier ones can cancel the completion before later ones get called.  (Or they can call the later ones themselves and filter the results.)  If they throw exceptions (such as NPE, or ProcessCanceledException), that can disrupt the chain as well, and your plugin may never get called.

0
Avatar
Permanently deleted user

Thanks I will try out the suggestions, and in the meantime "order="before javaClassReference" solve the issue for me.

0

Please sign in to leave a comment.