-
Notifications
You must be signed in to change notification settings - Fork 629
Closed
Description
Using latest SpotBugs build from master 4.9.1.202501291911-e8021d1
on Eclipse SDK code I've found yet another regression in 4.9.0.
The error is reported while analyzing https://github.com/eclipse-jdt/eclipse.jdt.ui/blob/28604fa1b4e9060c7b55c03e3ce18fc109b73b4a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/FilteredPreferenceTree.java#L79
eclipse.buildId=4.35.0.I20250129-1800
java.version=21.0.2-13
java.vendor=N/A
BootLoader constants: OS=linux, ARCH=x86_64, WS=gtk, NL=en_US
Command-line arguments: -os linux -ws gtk -arch x86_64 -data /data/4x_platform_workspace
com.github.spotbugs.plugin.eclipse
Error
Thu Jan 30 08:09:16 CET 2025
Exception analyzing org.eclipse.jdt.internal.ui.preferences.FilteredPreferenceTree$PreferenceTreeNode using detector edu.umd.cs.findbugs.detect.FindReturnRef
java.lang.NullPointerException: Cannot invoke "edu.umd.cs.findbugs.ba.XField.getName()" because "field" is null
at edu.umd.cs.findbugs.detect.FindReturnRef.isNestedField(FindReturnRef.java:318)
at edu.umd.cs.findbugs.detect.FindReturnRef.sawOpcode(FindReturnRef.java:204)
at edu.umd.cs.findbugs.visitclass.DismantleBytecode.visit(DismantleBytecode.java:884)
at edu.umd.cs.findbugs.visitclass.BetterVisitor.visitCode(BetterVisitor.java:218)
at edu.umd.cs.findbugs.visitclass.PreorderVisitor.visitCode(PreorderVisitor.java:251)
at edu.umd.cs.findbugs.bcel.OpcodeStackDetector.visitCode(OpcodeStackDetector.java:65)
at org.apache.bcel.classfile.Code.accept(Code.java:145)
at edu.umd.cs.findbugs.visitclass.PreorderVisitor.doVisitMethod(PreorderVisitor.java:323)
at edu.umd.cs.findbugs.visitclass.PreorderVisitor.visitJavaClass(PreorderVisitor.java:405)
at org.apache.bcel.classfile.JavaClass.accept(JavaClass.java:249)
at edu.umd.cs.findbugs.BytecodeScanningDetector.visitClassContext(BytecodeScanningDetector.java:38)
at edu.umd.cs.findbugs.DetectorToDetector2Adapter.visitClass(DetectorToDetector2Adapter.java:76)
at edu.umd.cs.findbugs.FindBugs2.lambda$analyzeApplication$1(FindBugs2.java:1100)
at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:317)
at edu.umd.cs.findbugs.CurrentThreadExecutorService.execute(CurrentThreadExecutorService.java:86)
at java.base/java.util.concurrent.AbstractExecutorService.invokeAll(AbstractExecutorService.java:247)
at edu.umd.cs.findbugs.FindBugs2.analyzeApplication(FindBugs2.java:1110)
at edu.umd.cs.findbugs.FindBugs2.execute(FindBugs2.java:309)
at de.tobject.findbugs.builder.FindBugsWorker.runFindBugs(FindBugsWorker.java:314)
at de.tobject.findbugs.builder.FindBugsWorker.work(FindBugsWorker.java:220)
at de.tobject.findbugs.actions.FindBugsAction$StartedFromViewJob.runWithProgress(FindBugsAction.java:274)
at de.tobject.findbugs.FindBugsJob.run(FindBugsJob.java:141)
at org.eclipse.core.internal.jobs.Worker.run(Worker.java:63)
The line with NPE was changed in d37c057 / #3174.
The fix would be trivial:
diff --git a/spotbugs/src/main/java/edu/umd/cs/findbugs/detect/FindReturnRef.java b/spotbugs/src/main/java/edu/umd/cs/findbugs/detect/FindReturnRef.java
index 4960bd2..ef3a023 100644
--- a/spotbugs/src/main/java/edu/umd/cs/findbugs/detect/FindReturnRef.java
+++ b/spotbugs/src/main/java/edu/umd/cs/findbugs/detect/FindReturnRef.java
@@ -317,3 +317,3 @@
private boolean isNestedField(XField field) {
- if (getThisClass().isNested() && field.getName().startsWith("this$")) {
+ if (field != null && getThisClass().isNested() && field.getName().startsWith("this$")) {
try {
I see this stack state while debugging the NPE:
The method we analyze is public void addChild(org.eclipse.jdt.internal.ui.preferences.FilteredPreferenceTree$PreferenceTreeNode node) [Signature: (Lorg/eclipse/jdt/internal/ui/preferences/FilteredPreferenceTree$PreferenceTreeNode<*>;)V]
Code: