[ 
https://issues.apache.org/jira/browse/NETBEANS-2391?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16815736#comment-16815736
 ] 

Martin Weißhaupt commented on NETBEANS-2391:
--------------------------------------------

This bug should be fixed but FYI this won't be enough to make NetBeans viable 
for Android development. There is a 
[project|https://github.com/NBANDROIDTEAM/NBANDROID-V2] that adds the missing 
bits but NetBeans 10 and NetBeans 11 support is currently in development.

> 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
>            Priority: Major
>
> 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-unsubscr...@netbeans.apache.org
For additional commands, e-mail: commits-h...@netbeans.apache.org

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

Reply via email to