Comments (4)
Surely FindBugs does not track whether method is pure (does not depend on external state and does not change it) or not. How we can know where two subsequent calls to getFileName()
always return the same thing? Note that Path
is actually an interface, so it can be implemented in various ways including the possible way when the results are always different. This is quite sofisticated analysis. We could implement it for simple getters, but it's complex and still would be fragile. Even JDK implementation of Path.getFileName()
is not a simple getter: every time you call it it extracts the part of internally stored path to the newly-created String (using lastIndexOf
, substring
, etc.), then creates a new Path
object, so if (p.getFileName() == null)
actually creates at least 3 intermediate useless objects. The proper way to make this check is to use the local variable:
Path fileName = p.getFileName();
if(fileName == null) return;
String s = fileName.toString().
On the other hand probably we should not complain about getFileName()
at all. It was added by @iloveeclipse in this commit. The method indeed may return null
, but in many cases the programmer can be sure than null cannot be returned. It's somewhat similar to Map.get
: while it may return null in many cases it's known in advance that the returned value cannot be null. Andrey, what do you think? Should we warn about unchecked use of Path.getFileName()
? Do you have any positive experience with this bug report?
from findbugs.
Tagir, if you think it is more abusing, we should remove this method. Since this is a new API, I guess this is not used often yet. This was a personal hate to the File API in Java which is often inconsistent.
from findbugs.
Oh, I see. I simplified my original encounter down to the simple null check, but my original case was more like:
if (path.getFileCount() > 0) {
String fn = path.getFileName();
}
which satisfies the conditions in the javadoc of Path::getFileName
. I'm not sure it's reasonable to expect findbugs to know that skipping the null check of file name is okay when the file count is greater than 0.
from findbugs.
This project continues development in a new home: https://github.com/spotbugs/spotbugs/
Please do not open new issues here anymore!
from findbugs.
Related Issues (20)
- ExcludeFilter configuration failed.: Content is not allowed in prolog. HOT 1
- FP: TQ_MAYBE_SOURCE_VALUE_REACHES_ALWAYS_SINK: LazySequence HOT 1
- FP: NP_METHOD_PARAMETER_TIGHTENS_ANNOTATION on constructors HOT 1
- FP: NP_METHOD_PARAMETER_TIGHTENS_ANNOTATION on generic methods HOT 1
- Handling of assert HOT 1
- false-positive: useless object (List) with lambda-based forEach processing HOT 1
- [3.0.1] findbugs is very slowly HOT 1
- Push previews to Maven Central HOT 1
- Intellij signals error while browsing analysis results HOT 1
- IOException while scanning codebases HOT 1
- IOException while scanning codebases HOT 1
- findbugs fails while parsing Java 10 version string HOT 2
- "Could not parse Java version string" when jdk-11 is used
- IOException while scanning codebases HOT 1
- Errors under Java 11 HOT 1
- IncludeFilter configuration failed.: The markup in the document following the root element must be well-formed. HOT 1
- IncludeFilter configuration failed.: The markup in the document following the root element must be well-formed.
- ExcludeBaseLineBug files configuration failed.: Failing reading D:\IdeaProject\console-navigator\findbugs-exclude.xml Nested exception: Sax error while parsing D:\IdeaProject\console-navigator\findbugs-exclude.xml Nested exception: Invalid top-level element (expected BugCollection, saw FindBugsFilter) HOT 1
- Detect the object memory bloat issue HOT 1
- This use of Logger.debug(...) might be used to include CRLF characters into log messages. HOT 1
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from findbugs.