Comments (10)
That's not how the Builder pattern is supposed to work. User isn't supposed to know about Builder. User should have a constructor that accepts the individual parameters (userId, firstName, lastName), instead of accepting a Builder. (The parameter validation should happen inside User, too.)
The way you have things set up, it's impossible to construct a User directly; you have to create a Builder first. That shouldn't be the case; Builder should just be a convenient shortcut.
So the bug detector is correct.
from fb-contrib.
Or builder should have a build () method that constructs a user and sets fields on it
from fb-contrib.
Actually, that implementation is perfect. Read Effective Java, 2nd edition, item 2
from fb-contrib.
Probably, the best would be to ignore CD when it concerns inner classes (either static or not). After all, being an inner class, they are already tightly coupled and the CD report adds little value.
from fb-contrib.
I agree with Jsotuyod that this check should not apply to inner classes. I am sure there are other cases other than the builder pattern that this check falsely reports.
As far as the other comments about the builder pattern, the whole point of the pattern is to ensure that you always have a fully populated object. It is used a lot when creating immutable objects like this one rather than requiring large number of constructor arguments which is bad practice in both Clean Code and Effective Java.
from fb-contrib.
anon classes are already not reported. I will extend to all inner classes - that's fine.
Point of note tho, imo, User shouldn't know about the builder class.
public User build() {
if (userId == null) {
userId = UUID.randomUUID();
}
if (StringUtils.isEmpty(firstName)) {
throw new IllegalStateException("First name is not set");
}
User u new User();
u.userId = userId;
u.firstName = firstName;
u.lastName = lastName;
return u;
}
from fb-contrib.
Well, it's correct that the Builder pattern as implemented matches Effective Java. That's not the same thing as being "perfect". I would still put it to you that it would be better for the constructor to accept individual arguments, and have the Builder provide them all, so that the builder remains an optional part of the process.
But I also agree that it makes sense to drop the CD check for all inner classes.
from fb-contrib.
What is the status of this? Need any help?
from fb-contrib.
sorry, kind of forgot about this. I thought i had fixed this, and running this class, seems like it is not reported now, so... still broken for you?
from fb-contrib.
Truth be told, I haven't checked. I'm preparing for next week's "week of linting" at the office, trying to come up with a nice colection of things to do on tools such as FindBugs, fb-contrib, PMD, Checkstyle, and our findbugs-plugin and came accross this issue still being open and thought it might be a good fit.
I just checked it and it seems to be gone, so this one could be closed.
If you have anything you think may be interesting for us to help you on, feel free to contact me directly. Thanks!
from fb-contrib.
Related Issues (20)
- false-positive in EXS_EXCEPTION_SOFTENING_NO_CONSTRAINTS when rethrowing exception HOT 2
- 7.6.0.sb is missing from maven central HOT 2
- NullPointerException HOT 1
- Regressoin of BAS_BLOATED_ASSIGNMENT_SCOPE after update from 7.6.0 to 7.6.1 HOT 1
- WOC_WRITE_ONLY_COLLECTION_LOCAL false positive if collection is read in lambda HOT 1
- Why not just rename repo to 'sb-contrib' and stop deploying 'fb-contrib' HOT 5
- WOC_WRITE_ONLY_COLLECTION_FIELD for constant collections HOT 1
- Couldn't find "findbugs.xml" in plugin PluginLoader
- Show the GitHub repository clearly on the official website, so that more people can learn about fb.
- `IncorrectInternalClassUse` throws a `ClassFormatException` after upgrading to Spotbugs 6.0.3 HOT 5
- Thoughts on donating this project to spotbugs as its so frequently used with spotbugs HOT 4
- False positives due to ignoring field accesses from inner classes
- False positive FCBL_FIELD_COULD_BE_LOCAL for private field of nested class
- False-positive MC_OVERRIDABLE_METHOD_CALL_IN_CONSTRUCTOR for method reference HOT 2
- False positives for try-with-resources (NP_LOAD_OF_KNOWN_NULL_VALUE, RCN_REDUNDANT_NULLCHECK_OF_NULL_VALUE) HOT 2
- Code compiled with target 11 (and not 1.8) does not find all bug warnings
- False-positive in OPM_OVERLY_PERMISSIVE_METHOD for equals HOT 1
- `FII_USE_FUNCTION_IDENTITY` false-positive
- BCEL errors with fb-contrib 7.6.4 HOT 1
- FII_USE_FUNCTION_IDENTITY false positive HOT 2
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 fb-contrib.