flutter / flutter-intellij

Flutter Plugin for IntelliJ
https://flutter.dev/using-ide
BSD 3-Clause "New" or "Revised" License
1.98k stars 318 forks source link

NPE in FlutterIconProvider.getIcon #1513

Closed bwilkerson closed 6 years ago

bwilkerson commented 6 years ago

What happened

I brought IntelliJ to the front after deleting several directories from disk. I don't think that any of the deleted files/directories were open in IntelliJ, but it's possible I'm wrong.

Version information

IntelliJ IDEA 2017.2.6 • Flutter plugin io.flutter 19.1 • Dart plugin 172.4343.25

Flutter • channel master • https://github.com/flutter/flutter.git Framework • revision d5d2cdfeef (13 hours ago) • 2017-11-16 22:53:22 -0800 Engine • revision 25912b8482 Tools • Dart 1.25.0-dev.11.0

Exception

null

java.lang.NullPointerException
    at io.flutter.project.FlutterIconProvider.getIcon(FlutterIconProvider.java:44)
    at com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode.setupIcon(PsiDirectoryNode.java:171)
    at com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode.updateImpl(PsiDirectoryNode.java:119)
    at com.intellij.ide.projectView.impl.nodes.AbstractPsiBasedNode.lambda$update$0(AbstractPsiBasedNode.java:164)
    at com.intellij.openapi.application.impl.ApplicationImpl.runReadAction(ApplicationImpl.java:921)
    at com.intellij.ide.projectView.impl.nodes.AbstractPsiBasedNode.update(AbstractPsiBasedNode.java:139)
    at com.intellij.ide.util.treeView.PresentableNodeDescriptor.getUpdatedPresentation(PresentableNodeDescriptor.java:88)
    at com.intellij.ide.util.treeView.PresentableNodeDescriptor.update(PresentableNodeDescriptor.java:41)
    at com.intellij.ide.util.treeView.AbstractTreeBuilder.updateNodeDescriptor(AbstractTreeBuilder.java:577)
    at com.intellij.ide.util.treeView.AbstractTreeUi$22.perform(AbstractTreeUi.java:935)
    at com.intellij.ide.util.treeView.TreeRunnable.run(TreeRunnable.java:36)
    at com.intellij.ide.util.treeView.AbstractTreeUi.execute(AbstractTreeUi.java:1856)
    at com.intellij.ide.util.treeView.AbstractTreeUi.update(AbstractTreeUi.java:931)
    at com.intellij.ide.util.treeView.AbstractTreeUi.update(AbstractTreeUi.java:883)
    at com.intellij.ide.util.treeView.AbstractTreeUi.processExistingNode(AbstractTreeUi.java:3004)
    at com.intellij.ide.util.treeView.AbstractTreeUi.access$4900(AbstractTreeUi.java:64)
    at com.intellij.ide.util.treeView.AbstractTreeUi$32$1.run(AbstractTreeUi.java:1718)
    at com.intellij.ide.util.treeView.AbstractTreeUi.execute(AbstractTreeUi.java:1835)
    at com.intellij.ide.util.treeView.AbstractTreeUi.access$5200(AbstractTreeUi.java:64)
    at com.intellij.ide.util.treeView.AbstractTreeUi$33.perform(AbstractTreeUi.java:1801)
    at com.intellij.ide.util.treeView.TreeRunnable.run(TreeRunnable.java:36)
    at com.intellij.ide.util.treeView.AbstractTreeUi.executeYieldingRequest(AbstractTreeUi.java:2090)
    at com.intellij.ide.util.treeView.AbstractTreeUi.access$5800(AbstractTreeUi.java:64)
    at com.intellij.ide.util.treeView.AbstractTreeUi$36$1.perform(AbstractTreeUi.java:2002)
    at com.intellij.ide.util.treeView.TreeRunnable.run(TreeRunnable.java:36)
    at com.intellij.ide.util.treeView.AbstractTreeBuilder.runOnYeildingDone(AbstractTreeBuilder.java:433)
    at com.intellij.ide.util.treeView.AbstractTreeUi.runOnYieldingDone(AbstractTreeUi.java:2185)
    at com.intellij.ide.util.treeView.AbstractTreeUi$36.perform(AbstractTreeUi.java:1997)
    at com.intellij.ide.util.treeView.TreeRunnable.run(TreeRunnable.java:36)
    at com.intellij.ide.util.treeView.AbstractTreeBuilder.lambda$new$0(AbstractTreeBuilder.java:51)
    at com.intellij.util.containers.TransferToEDTQueue.processNext(TransferToEDTQueue.java:102)
    at com.intellij.util.containers.TransferToEDTQueue.access$300(TransferToEDTQueue.java:37)
    at com.intellij.util.containers.TransferToEDTQueue$1.run(TransferToEDTQueue.java:57)
    at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:311)
    at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:762)
    at java.awt.EventQueue.access$500(EventQueue.java:98)
    at java.awt.EventQueue$3.run(EventQueue.java:715)
    at java.awt.EventQueue$3.run(EventQueue.java:709)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:80)
    at java.awt.EventQueue.dispatchEvent(EventQueue.java:732)
    at com.intellij.ide.IdeEventQueue.defaultDispatchEvent(IdeEventQueue.java:821)
    at com.intellij.ide.IdeEventQueue._dispatchEvent(IdeEventQueue.java:649)
    at com.intellij.ide.IdeEventQueue.dispatchEvent(IdeEventQueue.java:365)
    at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:201)
    at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116)
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93)
    at java.awt.EventDispatchThread.run(EventDispatchThread.java:82)
devoncarew commented 6 years ago

The line is:

      if (Objects.equals(file.getPath(), project.getBaseDir().getPath())) {

We likely need to guard against null here; it looks like getBaseDir() could return null?