I get various stack traces from NPEs due to passing a null classname into the above method. Here's an example:
java.lang.IllegalArgumentException: Argument 0 for @NotNull parameter of net/jay/plugins/php/cache/DeclarationsIndex.getClassesByName must not be null
at net.jay.plugins.php.cache.DeclarationsIndex.getClassesByName(DeclarationsIndex.java)
at net.jay.plugins.php.lang.psi.elements.impl.ConstantReferenceImpl.getVariants(ConstantReferenceImpl.java:78)
at com.intellij.codeInsight.completion.CompletionData.completeReference(CompletionData.java:16)
at com.intellij.codeInsight.completion.CompletionVariant.addReferenceCompletions(CompletionVariant.java:2)
at com.intellij.codeInsight.completion.CompletionData$1.run(CompletionData.java:7)
at com.intellij.openapi.application.impl.ApplicationImpl.runReadAction(ApplicationImpl.java:314)
at com.intellij.codeInsight.completion.CompletionData.completeReference(CompletionData.java:9)
at com.intellij.codeInsight.completion.LegacyCompletionContributor$2.consume(LegacyCompletionContributor.java:5)
at com.intellij.codeInsight.completion.LegacyCompletionContributor$2.consume(LegacyCompletionContributor.java:4)
at com.intellij.codeInsight.completion.LegacyCompletionContributor.a(LegacyCompletionContributor.java:6)
at com.intellij.codeInsight.completion.LegacyCompletionContributor.processReferences(LegacyCompletionContributor.java:4)
at com.intellij.codeInsight.completion.LegacyCompletionContributor.completeReference(LegacyCompletionContributor.java:5)
at com.intellij.codeInsight.completion.LegacyCompletionContributor$1.addCompletions(LegacyCompletionContributor.java:5)
at com.intellij.codeInsight.completion.CompletionProvider$1.run(CompletionProvider.java:33)
at com.intellij.openapi.application.impl.ApplicationImpl.runReadAction(ApplicationImpl.java:314)
at com.intellij.codeInsight.completion.CompletionProvider.addCompletionVariants(CompletionProvider.java:31)
at com.intellij.codeInsight.completion.CompletionContributor.fillCompletionVariants(CompletionContributor.java:142)
at com.intellij.codeInsight.completion.CompletionService.getVariantsFromContributors(CompletionService.java:80)
at com.intellij.codeInsight.completion.CompletionService.getVariantsFromContributors(CompletionService.java:71)
at com.intellij.codeInsight.completion.CompletionService.performCompletion(CompletionService.java:133)
at com.intellij.codeInsight.completion.CodeCompletionHandlerBase$3$1.run(CodeCompletionHandlerBase.java)
at com.intellij.openapi.progress.impl.ProgressManagerImpl$2.run(ProgressManagerImpl.java:5)
at com.intellij.openapi.progress.impl.ProgressManagerImpl.executeProcessUnderProgress(ProgressManagerImpl.java:13)
at com.intellij.openapi.progress.impl.ProgressManagerImpl.runProcess(ProgressManagerImpl.java:101)
at com.intellij.codeInsight.completion.CodeCompletionHandlerBase$3.run(CodeCompletionHandlerBase.java:1)
at com.intellij.openapi.application.impl.ApplicationImpl$5.run(ApplicationImpl.java:8)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:441)
and another:
java.lang.IllegalArgumentException: Argument 0 for @NotNull parameter of net/jay/plugins/php/cache/DeclarationsIndex.getClassesByName must not be null
at net.jay.plugins.php.cache.DeclarationsIndex.getClassesByName(DeclarationsIndex.java)
at net.jay.plugins.php.cache.DeclarationsIndex.getSubclasses(DeclarationsIndex.java:284)
at net.jay.plugins.php.lang.highlighter.hierarchy.PhpHierarchyHighlightingPass.addOverridenGutterIfNeeded(PhpHierarchyHighlightingPass.java:59)
at net.jay.plugins.php.lang.highlighter.hierarchy.PhpHierarchyHighlightingPass.doCollectInformation(PhpHierarchyHighlightingPass.java:50)
at com.intellij.codeHighlighting.TextEditorHighlightingPass.collectInformation(TextEditorHighlightingPass.java:13)
at com.intellij.codeInsight.daemon.impl.PassExecutorService$ScheduledPass$1$1.run(PassExecutorService.java:2)
at com.intellij.openapi.application.impl.ApplicationImpl.runReadAction(ApplicationImpl.java:314)
at com.intellij.codeInsight.daemon.impl.PassExecutorService$ScheduledPass$1.run(PassExecutorService.java:2)
at com.intellij.openapi.progress.impl.ProgressManagerImpl.executeProcessUnderProgress(ProgressManagerImpl.java:13)
at com.intellij.codeInsight.daemon.impl.PassExecutorService$ScheduledPass.run(PassExecutorService.java:21)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:441)
at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
at java.util.concurrent.FutureTask.run(FutureTask.java:138)
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
at java.lang.Thread.run(Thread.java:619)
Here's a proposed patch:
Here's a proposed patch:
--- src/net/jay/plugins/php/cache/DeclarationsIndex.java (revision 221)
+++ src/net/jay/plugins/php/cache/DeclarationsIndex.java (working copy)
@@ -214,10 +214,12 @@
}
@NotNull
- public List<LightPhpClass> getClassesByName(@NotNull final String name) {
- final IndexEntry entry = classIndex.get(name);
- if (entry != null) {
- return entry.getClasses();
+ public List<LightPhpClass> getClassesByName(final String name) {
+ if (name != null) {
+ final IndexEntry entry = classIndex.get(name);
+ if (entry != null) {
+ return entry.getClasses();
+ }
}
return Collections.emptyList();
}