You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@netbeans.apache.org by "Dirk Steinmetz (JIRA)" <ji...@apache.org> on 2019/04/11 03:10:00 UTC

[jira] [Created] (NETBEANS-2391) NPE when opening Android projects

Dirk Steinmetz created NETBEANS-2391:
----------------------------------------

             Summary: NPE when opening Android projects
                 Key: NETBEANS-2391
                 URL: https://issues.apache.org/jira/browse/NETBEANS-2391
             Project: NetBeans
          Issue Type: Bug
          Components: projects - Gradle
    Affects Versions: 11.0
         Environment: Gradle 5.3.1
Netbeans 11.0
com.android.tools.build:gradle:3.2.1
            Reporter: Dirk Steinmetz


Opening Android projects causes a NPE (as do some other operations on that project later on).

*STR:*
 0. Download and install Android Studio, create any default project.
 1. Open that project in netbeans 11.0 (make sure to open the 'real' project, usually called 'app')

*Expected:*
 The project opens (albeit maybe some or all Android-specific features are unavailable).

*Actual:*
{noformat}
java.lang.NullPointerException    at java.util.AbstractCollection.addAll(AbstractCollection.java:343)    at org.netbeans.modules.gradle.api.GradleBaseProjectBuilder.processDependencies(GradleBaseProjectBuilder.java:128)    at org.netbeans.modules.gradle.api.GradleBaseProjectBuilder.build(GradleBaseProjectBuilder.java:75)    at org.netbeans.modules.gradle.api.GradleBaseProjectBuilder$Extractor.extract(GradleBaseProjectBuilder.java:288)    at org.netbeans.modules.gradle.GradleProjectCache.createGradleProject(GradleProjectCache.java:432)    at org.netbeans.modules.gradle.GradleProjectCache.loadGradleProject(GradleProjectCache.java:257)    at org.netbeans.modules.gradle.GradleProjectCache.access$100(GradleProjectCache.java:85)[catch] at org.netbeans.modules.gradle.GradleProjectCache$ProjectLoaderTask.call(GradleProjectCache.java:348)    at org.netbeans.modules.gradle.GradleProjectCache$ProjectLoaderTask.call(GradleProjectCache.java:326)    at java.util.concurrent.FutureTask.run(FutureTask.java:266)    at org.openide.util.RequestProcessor$Task.run(RequestProcessor.java:1418)    at org.netbeans.modules.openide.util.GlobalLookup.execute(GlobalLookup.java:45)    at org.openide.util.lookup.Lookups.executeWith(Lookups.java:278)    at org.openide.util.RequestProcessor$Processor.run(RequestProcessor.java:2033){noformat}
*Reason / Potential partial fix:*
 [GradleBaseProjectBuilder.java:127f|https://github.com/apache/incubator-netbeans/blob/master/groovy/gradle/src/org/netbeans/modules/gradle/api/GradleBaseProjectBuilder.java#L127]:
{code:java}
Set<File> dirs = (Set<File>) info.get("sourceset_" + name + "_output_classes");
sourceSetOutputs.addAll(dirs);
{code}
expects a non-null "_output_classes" set for a source set, while
 [NbProjectInfoBuilder.groovy|https://github.com/apache/incubator-netbeans/blob/master/groovy/gradle/netbeans-gradle-tooling/src/main/groovy/org/netbeans/modules/gradle/tooling/NbProjectInfoBuilder.groovy#L242] has a separate path for Android projects that does not (always?) populate that field.

In my tests just adding a null check works, although generated code and android sources are still unavailable while editing. There is an exception down the road when opening the "Sources" category in the project categories, though:
{noformat}
java.lang.NullPointerException    at org.netbeans.modules.gradle.java.customizer.SourceSetPanel.<init>(SourceSetPanel.java:63)    at org.netbeans.modules.gradle.java.customizer.SourcesPanel.<init>(SourcesPanel.java:55)    at org.netbeans.modules.gradle.java.customizer.SourcesPanel$1.createComponent(SourcesPanel.java:74)    at org.netbeans.modules.gradle.spi.customizer.support.FilterPanelProvider.createComponent(FilterPanelProvider.java:58)    at org.netbeans.spi.project.ui.support.ProjectCustomizer$DelegateCategoryProvider.create(ProjectCustomizer.java:604)    at org.netbeans.modules.project.uiapi.CustomizerPane.setCategory(CustomizerPane.java:234)    at org.netbeans.modules.project.uiapi.CustomizerPane.access$200(CustomizerPane.java:47)    at org.netbeans.modules.project.uiapi.CustomizerPane$CategoryChangeListener.propertyChange(CustomizerPane.java:320)    at java.beans.PropertyChangeSupport.fire(PropertyChangeSupport.java:335)    at java.beans.PropertyChangeSupport.firePropertyChange(PropertyChangeSupport.java:327)    at java.beans.PropertyChangeSupport.firePropertyChange(PropertyChangeSupport.java:263)    at org.netbeans.modules.project.uiapi.CategoryModel.firePropertyChange(CategoryModel.java:93)    at org.netbeans.modules.project.uiapi.CategoryModel.setCurrentCategory(CategoryModel.java:67)    at org.netbeans.modules.project.uiapi.CategoryView.propertyChange(CategoryView.java:158)    at java.beans.PropertyChangeSupport.fire(PropertyChangeSupport.java:335)    at java.beans.PropertyChangeSupport.firePropertyChange(PropertyChangeSupport.java:327)    at java.beans.PropertyChangeSupport.firePropertyChange(PropertyChangeSupport.java:263)    at org.openide.explorer.ExplorerManager$2.run(ExplorerManager.java:866)    at org.netbeans.modules.openide.util.NbMutexEventProvider$Event.doEvent(NbMutexEventProvider.java:95)    at org.netbeans.modules.openide.util.NbMutexEventProvider$Event.readAccess(NbMutexEventProvider.java:70)    at org.netbeans.modules.openide.util.LazyMutexImplementation.readAccess(LazyMutexImplementation.java:66)    at org.openide.util.Mutex.readAccess(Mutex.java:235)    at org.openide.explorer.ExplorerManager.fireInAWT(ExplorerManager.java:863)    at org.openide.explorer.ExplorerManager$1AtomicSetSelectedNodes.fire(ExplorerManager.java:269)    at org.openide.explorer.ExplorerManager.setSelectedNodes(ExplorerManager.java:280)    at org.openide.explorer.ExplorerManager$1SetExploredContextAndSelection.run(ExplorerManager.java:368)    at org.netbeans.modules.openide.util.DefaultMutexImplementation.readAccess(DefaultMutexImplementation.java:172)    at org.netbeans.modules.openide.util.DefaultMutexImplementation$1R.run(DefaultMutexImplementation.java:1016)    at org.netbeans.modules.openide.util.DefaultMutexImplementation.doWrapperAccess(DefaultMutexImplementation.java:1033)    at org.netbeans.modules.openide.util.DefaultMutexImplementation.readAccess(DefaultMutexImplementation.java:162)    at org.openide.util.Mutex.readAccess(Mutex.java:235)    at org.openide.explorer.ExplorerManager.setExploredContextAndSelection(ExplorerManager.java:395)    at org.openide.explorer.view.BeanTreeView.selectionChanged(BeanTreeView.java:124)    at org.openide.explorer.view.TreeView.callSelectionChanged(TreeView.java:808)    at org.openide.explorer.view.TreeView$TreePropertyListener.run(TreeView.java:1450)    at org.netbeans.modules.openide.util.DefaultMutexImplementation$1Exec.run(DefaultMutexImplementation.java:952)    at org.openide.nodes.Children$ProjectManagerDeadlockDetector.execute(Children.java:1913)    at org.netbeans.modules.openide.util.DefaultMutexImplementation.postRequest(DefaultMutexImplementation.java:958)    at org.netbeans.modules.openide.util.DefaultMutexImplementation.postRequest(DefaultMutexImplementation.java:921)    at org.netbeans.modules.openide.util.DefaultMutexImplementation.postReadRequest(DefaultMutexImplementation.java:287)    at org.openide.util.Mutex.postReadRequest(Mutex.java:346)    at org.openide.explorer.view.TreeView$TreePropertyListener.valueChanged(TreeView.java:1419)    at javax.swing.tree.DefaultTreeSelectionModel.fireValueChanged(DefaultTreeSelectionModel.java:635)    at javax.swing.tree.DefaultTreeSelectionModel.notifyPathChange(DefaultTreeSelectionModel.java:1093)    at javax.swing.tree.DefaultTreeSelectionModel.setSelectionPaths(DefaultTreeSelectionModel.java:294)    at javax.swing.tree.DefaultTreeSelectionModel.setSelectionPath(DefaultTreeSelectionModel.java:188)    at javax.swing.JTree.setSelectionPath(JTree.java:1641)    at javax.swing.plaf.basic.BasicTreeUI.selectPathForEvent(BasicTreeUI.java:2392)    at javax.swing.plaf.basic.BasicTreeUI$Handler.handleSelection(BasicTreeUI.java:3608)    at javax.swing.plaf.basic.BasicTreeUI$Handler.mousePressedDND(BasicTreeUI.java:3585)    at javax.swing.plaf.basic.BasicTreeUI$Handler.mousePressed(BasicTreeUI.java:3544)    at java.awt.AWTEventMulticaster.mousePressed(AWTEventMulticaster.java:280)    at java.awt.Component.processMouseEvent(Component.java:6536)    at javax.swing.JComponent.processMouseEvent(JComponent.java:3315)    at java.awt.Component.processEvent(Component.java:6304)    at java.awt.Container.processEvent(Container.java:2239)    at java.awt.Component.dispatchEventImpl(Component.java:4889)    at java.awt.Container.dispatchEventImpl(Container.java:2297)    at java.awt.Component.dispatchEvent(Component.java:4711)    at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4904)    at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4532)    at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4476)    at java.awt.Container.dispatchEventImpl(Container.java:2283)    at java.awt.Window.dispatchEventImpl(Window.java:2746)    at java.awt.Component.dispatchEvent(Component.java:4711)    at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:760)    at java.awt.EventQueue.access$500(EventQueue.java:97)    at java.awt.EventQueue$3.run(EventQueue.java:709)    at java.awt.EventQueue$3.run(EventQueue.java:703)    at java.security.AccessController.doPrivileged(Native Method)    at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:74)    at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:84)    at java.awt.EventQueue$4.run(EventQueue.java:733)    at java.awt.EventQueue$4.run(EventQueue.java:731)    at java.security.AccessController.doPrivileged(Native Method)    at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:74)    at java.awt.EventQueue.dispatchEvent(EventQueue.java:730)    at org.netbeans.core.TimableEventQueue.dispatchEvent(TimableEventQueue.java:136)[catch] at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:205)    at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116)    at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:109)    at java.awt.WaitDispatchSupport$2.run(WaitDispatchSupport.java:190)    at java.awt.WaitDispatchSupport$4.run(WaitDispatchSupport.java:235)    at java.awt.WaitDispatchSupport$4.run(WaitDispatchSupport.java:233)    at java.security.AccessController.doPrivileged(Native Method)    at java.awt.WaitDispatchSupport.enter(WaitDispatchSupport.java:233)    at java.awt.Dialog.show(Dialog.java:1084)    at org.netbeans.core.windows.services.NbPresenter.superShow(NbPresenter.java:1060)    at org.netbeans.core.windows.services.NbPresenter.doShow(NbPresenter.java:1110)    at org.netbeans.core.windows.services.NbPresenter.run(NbPresenter.java:1082)    at org.netbeans.core.windows.services.NbPresenter.run(NbPresenter.java:105)    at org.netbeans.modules.openide.util.NbMutexEventProvider$Event.doEventAccess(NbMutexEventProvider.java:115)    at org.netbeans.modules.openide.util.NbMutexEventProvider$Event.readAccess(NbMutexEventProvider.java:75)    at org.netbeans.modules.openide.util.LazyMutexImplementation.readAccess(LazyMutexImplementation.java:71)    at org.openide.util.Mutex.readAccess(Mutex.java:193)    at org.netbeans.core.windows.services.NbPresenter.show(NbPresenter.java:1067)    at java.awt.Component.show(Component.java:1671)    at java.awt.Component.setVisible(Component.java:1623)    at java.awt.Window.setVisible(Window.java:1014)    at java.awt.Dialog.setVisible(Dialog.java:1005)    at org.netbeans.modules.gradle.customizer.GradleCustomizerProvider$1.run(GradleCustomizerProvider.java:95)    at org.netbeans.modules.openide.util.NbMutexEventProvider$Event.doEvent(NbMutexEventProvider.java:95)    at org.netbeans.modules.openide.util.NbMutexEventProvider$Event.readAccess(NbMutexEventProvider.java:70)    at org.netbeans.modules.openide.util.LazyMutexImplementation.readAccess(LazyMutexImplementation.java:66)    at org.openide.util.Mutex.readAccess(Mutex.java:235)    at org.netbeans.modules.gradle.customizer.GradleCustomizerProvider.showCustomizer(GradleCustomizerProvider.java:78)    at org.netbeans.modules.gradle.customizer.GradleCustomizerProvider.showCustomizer(GradleCustomizerProvider.java:105)    at org.netbeans.modules.project.ui.actions.CustomizeProject$1$1.run(CustomizeProject.java:135)    at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:311)    at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:758)    at java.awt.EventQueue.access$500(EventQueue.java:97)    at java.awt.EventQueue$3.run(EventQueue.java:709)    at java.awt.EventQueue$3.run(EventQueue.java:703)    at java.security.AccessController.doPrivileged(Native Method)    at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:74)    at java.awt.EventQueue.dispatchEvent(EventQueue.java:728)    at org.netbeans.core.TimableEventQueue.dispatchEvent(TimableEventQueue.java:136)    at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:205)    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)
{noformat}
If you need a pull request for the one line null check, I can provide that (but it is probably faster if you just do it yourself). It seems to me as if that is sufficient to resolve the major issues for people wanting to build a cross-platform project without switching the IDE.

I tried to fix the android path using other means to stop netbeans from detecting 'missing' android packages, but I did not find an obvious way to get output folders for individual source sets. Maybe somebody with more experience in gradle, groovy and/or the internals of the Android gradle plugin can help here. It is also possible that the source panel issue is unrelated.



--
This message was sent by Atlassian JIRA
(v7.6.3#76005)

---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@netbeans.apache.org
For additional commands, e-mail: commits-help@netbeans.apache.org

For further information about the NetBeans mailing lists, visit:
https://cwiki.apache.org/confluence/display/NETBEANS/Mailing+lists