Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Java code scanning while opening project throws NPE #8388

Open
homberghp opened this issue Apr 2, 2025 · 2 comments · May be fixed by #8389
Open

Java code scanning while opening project throws NPE #8388

homberghp opened this issue Apr 2, 2025 · 2 comments · May be fixed by #8389
Labels
Java [ci] enable extra Java tests (java.completion, java.source.base, java.hints, refactoring.java, form) kind:bug Bug report or fix profiler

Comments

@homberghp
Copy link
Contributor

Apache NetBeans version

Apache NetBeans latest daily build

What happened

While opening a NetBeans project (netbeans/java/refactoring.java) netbeans shows an error in in the bottom status line.

This happens only after a fresh netbeans installation is used on a first project scan.

Image

The stacktrace shows

java.lang.NullPointerException: Cannot invoke "javax.lang.model.element.Element.getKind()" because "e" is null
	at org.netbeans.modules.profiler.nbimpl.providers.JavaProfilerSourceImpl$10$1.visitMethod(JavaProfilerSourceImpl.java:639)
	at org.netbeans.modules.profiler.nbimpl.providers.JavaProfilerSourceImpl$10$1.visitMethod(JavaProfilerSourceImpl.java:635)
	at com.sun.tools.javac.tree.JCTree$JCMethodDecl.accept(JCTree.java:993)

The resolution in this case is simple, check the Element e for nulity before dereferencing.

The relevant code is:

          if (e.getKind() == ElementKind.METHOD) {
              ExecutableElement ee = (ExecutableElement)e;
              if (ee.getSimpleName().contentEquals("suite") && // NOI18N
                  (ee.getReturnType().toString().equals(JUNIT_TEST) ||
                   ee.getReturnType().toString().equals(JUNIT_SUITE))) {
                  rslt[0] |= true;
              }
          }

The solution is simple modify first line to

    if (e !=null && e.getKind() == ElementKind.METHOD) {

which has no adverse effect on the logic.

Language / Project Type / NetBeans Component

java/ netbeans/ Java Profiler profiler(NetBeans Bindings)

How to reproduce

run ant tryme on a freshly built netbeans and open a netbeans module for instance java/refactoring.java.
If you ran tryme before, remove ~/.netbeans

Did this work correctly in an earlier version?

No / Don't know

Operating System

Ubunutu 24.04

JDK

17

Apache NetBeans packaging

Own source build

Anything else

You may have to clean caches from an earlier run.

Are you willing to submit a pull request?

Yes

@homberghp homberghp added kind:bug Bug report or fix needs:triage Requires attention from one of the committers labels Apr 2, 2025
@mbien mbien added Java [ci] enable extra Java tests (java.completion, java.source.base, java.hints, refactoring.java, form) profiler labels Apr 3, 2025
@mbien
Copy link
Member

mbien commented Apr 3, 2025

remove ~/.netbeans

ant tryme uses a folder inside the build folder as user dir and cache, should be in netbeans/nbbuild/testuserdir. Clearing ~/.netbeans wouldn't help there it would only clear all config folders of regular netbeans releases.

I tried to reproduce this with both the NB 25 release build and using tryme on master and didn't see an exception during scan.

We can still add the null check since it probably doesn't hurt.

@mbien
Copy link
Member

mbien commented Apr 3, 2025

i checked the logs of my work IDE and did see the exception too:

java.lang.NullPointerException: Cannot invoke "javax.lang.model.element.Element.getKind()" because "e" is null
	at org.netbeans.modules.profiler.nbimpl.providers.JavaProfilerSourceImpl$10$1.visitMethod(JavaProfilerSourceImpl.java:639)
	at org.netbeans.modules.profiler.nbimpl.providers.JavaProfilerSourceImpl$10$1.visitMethod(JavaProfilerSourceImpl.java:635)
	at com.sun.tools.javac.tree.JCTree$JCMethodDecl.accept(JCTree.java:993)
	at com.sun.source.util.TreePathScanner.scan(TreePathScanner.java:92)
	at com.sun.source.util.TreeScanner.scan(TreeScanner.java:110)
	at com.sun.source.util.TreeScanner.scanAndReduce(TreeScanner.java:118)
	at com.sun.source.util.TreeScanner.visitClass(TreeScanner.java:202)
	at com.sun.tools.javac.tree.JCTree$JCClassDecl.accept(JCTree.java:900)
	at com.sun.source.util.TreePathScanner.scan(TreePathScanner.java:92)
	at com.sun.source.util.TreeScanner.scanAndReduce(TreeScanner.java:95)
	at com.sun.source.util.TreeScanner.visitNewClass(TreeScanner.java:611)
	at com.sun.tools.javac.tree.JCTree$JCNewClass.accept(JCTree.java:1938)
	at com.sun.source.util.TreePathScanner.scan(TreePathScanner.java:92)
	at com.sun.source.util.TreeScanner.scan(TreeScanner.java:110)
	at com.sun.source.util.TreeScanner.scanAndReduce(TreeScanner.java:118)
	at com.sun.source.util.TreeScanner.visitMethodInvocation(TreeScanner.java:592)
	at com.sun.tools.javac.tree.JCTree$JCMethodInvocation.accept(JCTree.java:1877)
	at com.sun.source.util.TreePathScanner.scan(TreePathScanner.java:92)
	at com.sun.source.util.TreeScanner.visitExpressionStatement(TreeScanner.java:504)
	at com.sun.tools.javac.tree.JCTree$JCExpressionStatement.accept(JCTree.java:1656)
	at com.sun.source.util.TreePathScanner.scan(TreePathScanner.java:92)
	at com.sun.source.util.TreeScanner.scanAndReduce(TreeScanner.java:95)
	at com.sun.source.util.TreeScanner.scan(TreeScanner.java:110)
	at com.sun.source.util.TreeScanner.visitBlock(TreeScanner.java:271)
	at com.sun.tools.javac.tree.JCTree$JCBlock.accept(JCTree.java:1149)
	at com.sun.source.util.TreePathScanner.scan(TreePathScanner.java:92)
	at com.sun.source.util.TreeScanner.scanAndReduce(TreeScanner.java:95)
	at com.sun.source.util.TreeScanner.visitMethod(TreeScanner.java:223)
	at org.netbeans.modules.profiler.nbimpl.providers.JavaProfilerSourceImpl$10$1.visitMethod(JavaProfilerSourceImpl.java:647)
	at org.netbeans.modules.profiler.nbimpl.providers.JavaProfilerSourceImpl$10$1.visitMethod(JavaProfilerSourceImpl.java:635)
	at com.sun.tools.javac.tree.JCTree$JCMethodDecl.accept(JCTree.java:993)
	at com.sun.source.util.TreePathScanner.scan(TreePathScanner.java:92)
	at com.sun.source.util.TreeScanner.scanAndReduce(TreeScanner.java:95)
	at com.sun.source.util.TreeScanner.scan(TreeScanner.java:110)
	at com.sun.source.util.TreeScanner.scanAndReduce(TreeScanner.java:118)
	at com.sun.source.util.TreeScanner.visitClass(TreeScanner.java:202)
	at com.sun.tools.javac.tree.JCTree$JCClassDecl.accept(JCTree.java:900)
	at com.sun.source.util.TreePathScanner.scan(TreePathScanner.java:92)
	at com.sun.source.util.TreeScanner.scan(TreeScanner.java:110)
	at com.sun.source.util.TreeScanner.scanAndReduce(TreeScanner.java:118)
	at com.sun.source.util.TreeScanner.visitCompilationUnit(TreeScanner.java:151)
	at com.sun.tools.javac.tree.JCTree$JCCompilationUnit.accept(JCTree.java:627)
	at com.sun.source.util.TreePathScanner.scan(TreePathScanner.java:92)
	at org.netbeans.modules.profiler.nbimpl.providers.JavaProfilerSourceImpl$10.run(JavaProfilerSourceImpl.java:650)
	at org.netbeans.modules.profiler.nbimpl.providers.JavaProfilerSourceImpl$10.run(JavaProfilerSourceImpl.java:626)
	at org.netbeans.api.java.source.JavaSource$MultiTask.run(JavaSource.java:504)
	at org.netbeans.modules.parsing.impl.TaskProcessor.callUserTask(TaskProcessor.java:586)
	at org.netbeans.modules.parsing.api.ParserManager$UserTaskAction.run(ParserManager.java:197)
	at org.netbeans.modules.parsing.api.ParserManager$UserTaskAction.run(ParserManager.java:180)
	at org.netbeans.modules.parsing.impl.TaskProcessor$2.call(TaskProcessor.java:181)
	at org.netbeans.modules.parsing.impl.TaskProcessor$2.call(TaskProcessor.java:178)
	at org.netbeans.modules.masterfs.filebasedfs.utils.FileChangedManager.priorityIO(FileChangedManager.java:153)
	at org.netbeans.modules.masterfs.providers.ProvidedExtensions.priorityIO(ProvidedExtensions.java:335)
	at org.netbeans.modules.parsing.nb.DataObjectEnvFactory.runPriorityIO(DataObjectEnvFactory.java:118)
	at org.netbeans.modules.parsing.impl.Utilities.runPriorityIO(Utilities.java:67)
	at org.netbeans.modules.parsing.impl.TaskProcessor.runUserTask(TaskProcessor.java:178)
	at org.netbeans.modules.parsing.api.ParserManager.parse(ParserManager.java:83)
	at org.netbeans.api.java.source.JavaSource.runUserActionTaskImpl(JavaSource.java:454)
	at org.netbeans.api.java.source.JavaSource.runUserActionTask(JavaSource.java:425)
	at org.netbeans.modules.profiler.nbimpl.providers.JavaProfilerSourceImpl.isJunit3TestSuite(JavaProfilerSourceImpl.java:626)
	at org.netbeans.modules.profiler.nbimpl.providers.JavaProfilerSourceImpl.isTest(JavaProfilerSourceImpl.java:487)
	at org.netbeans.modules.profiler.api.java.JavaProfilerSource.isTest(JavaProfilerSource.java:63)
	at org.netbeans.modules.profiler.nbmodule.NbModuleProjectProfilingSupportProvider.isFileObjectSupported(NbModuleProjectProfilingSupportProvider.java:69)
	at org.netbeans.modules.profiler.api.project.ProjectProfilingSupport.isFileObjectSupported(ProjectProfilingSupport.java:64)
	at org.netbeans.modules.profiler.nbimpl.actions.FileSensitivePerformer.supportsProfileFile(FileSensitivePerformer.java:56)
	at org.netbeans.modules.profiler.nbimpl.actions.FileSensitivePerformer.enable(FileSensitivePerformer.java:67)
	at org.netbeans.modules.project.ui.actions.FileAction.refreshImpl(FileAction.java:146)
	at org.netbeans.modules.project.ui.actions.FileAction.refresh(FileAction.java:89)
	at org.netbeans.modules.project.ui.actions.LookupSensitiveAction.doRefresh(LookupSensitiveAction.java:172)
	at org.netbeans.modules.project.ui.actions.LookupSensitiveAction.isEnabled(LookupSensitiveAction.java:114)
	at org.netbeans.modules.project.ui.actions.FileAction.isEnabled(FileAction.java:42)
	at org.openide.awt.Actions$MenuBridge.updateState(Actions.java:1387)
	at org.openide.awt.Actions$Bridge.prepare(Actions.java:1029)
	at org.openide.awt.Actions$MenuBridge.prepare(Actions.java:1374)
	at org.openide.awt.Actions.connect(Actions.java:273)
	at org.netbeans.modules.project.ui.actions.LookupSensitiveAction$DynamicMenuItem.<init>(LookupSensitiveAction.java:230)
	at org.netbeans.modules.project.ui.actions.LookupSensitiveAction.getMenuPresenter(LookupSensitiveAction.java:214)
	at org.netbeans.modules.project.ui.actions.FileAction.getMenuPresenter(FileAction.java:42)
	at org.openide.awt.DynaMenuModel.loadSubmenu(DynaMenuModel.java:76)
	at org.openide.awt.MenuBar$LazyMenu$MenuFolder.createInstance(MenuBar.java:850)
	at org.openide.loaders.FolderInstance.defaultProcessObjectsFinal(FolderInstance.java:863)
	at org.openide.loaders.FolderInstance$1R.run(FolderInstance.java:705)
	at org.openide.util.Task.run(Task.java:233)
[catch] at org.netbeans.modules.openide.loaders.AWTTask.run(AWTTask.java:54)
	at org.netbeans.modules.openide.loaders.AWTTask$Processor.run(AWTTask.java:147)
	at org.netbeans.modules.openide.util.GlobalLookup.execute(GlobalLookup.java:45)
	at org.openide.util.lookup.Lookups.executeWith(Lookups.java:287)
	at org.netbeans.modules.openide.util.NbMutexEventProvider$Event.lambda$doEvent$0(NbMutexEventProvider.java:101)
	at java.desktop/java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:318)
	at java.desktop/java.awt.EventQueue.dispatchEventImpl(EventQueue.java:723)
	at java.desktop/java.awt.EventQueue.dispatchEvent(EventQueue.java:702)
	at org.netbeans.core.TimableEventQueue.dispatchEvent(TimableEventQueue.java:136)
	at java.desktop/java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:203)
	at java.desktop/java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:124)
	at java.desktop/java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:113)
	at java.desktop/java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:109)
	at java.desktop/java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
	at java.desktop/java.awt.EventDispatchThread.run(EventDispatchThread.java:90)

might be a race condition during startup and likely depends on what file and/or project is selected during scan.

@mbien mbien removed the needs:triage Requires attention from one of the committers label Apr 3, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Java [ci] enable extra Java tests (java.completion, java.source.base, java.hints, refactoring.java, form) kind:bug Bug report or fix profiler
Projects
None yet
2 participants