[
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: [email protected]
For additional commands, e-mail: [email protected]
For further information about the NetBeans mailing lists, visit:
https://cwiki.apache.org/confluence/display/NETBEANS/Mailing+lists