The rule "Methods should not have too many parameters" (squid:S00107) complains if the number of arguments to methods and/or constructors is too large.
However, for Java, private constructors are typically used with the Builder pattern, and in this case this rule is not applicable. This is for example used to build up major data objects that are later serialised to xml or json.
I suggest that private constructors are removed from the analysis for this rule. If someone points me in the right direction (where rules are specified) and you also think that this rule is invalid for private constructors, I an happy to do a pull request.
Example:
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
import com.fasterxml.jackson.databind.annotation.JsonPOJOBuilder;
@JsonDeserialize(builder = Oauth3rdActivateRequestVO.Builder.class)
public class Oauth3rdActivateRequestVO {
private String uniqueId;
private String redirectUri;
private String state;
private String code;
private String channelId;
private String userId;
private String portalId;
private String applicationId;
private String loginUser;
private String loginPassword;
private String referenceId;
private String transactionId;
private String tag;
@SuppressWarnings("squid:S00107") // Too many parameters. Should be OK for private constructors
private Oauth3rdActivateRequestVO(String uniqueId, String redirectUri, String state, String code, String channelId, String userId, String portalId, String applicationId, String loginUser, String loginPassword, String referenceId, String transactionId, String tag) {
this.uniqueId = uniqueId;
this.redirectUri = redirectUri;
this.state = state;
this.code = code;
this.channelId = channelId;
this.userId = userId;
this.portalId = portalId;
this.applicationId = applicationId;
this.loginUser = loginUser;
this.loginPassword = loginPassword;
this.referenceId = referenceId;
this.transactionId = transactionId;
this.tag = tag;
}
public String getUniqueId() {
return uniqueId;
}
public String getRedirectUri() {
return redirectUri;
}
public String getState() {
return state;
}
public String getCode() {
return code;
}
public String getChannelId() {
return channelId;
}
public String getUserId() {
return userId;
}
public String getPortalId() {
return portalId;
}
public String getApplicationId() {
return applicationId;
}
public String getLoginUser() {
return loginUser;
}
public String getLoginPassword() {
return loginPassword;
}
public String getReferenceId() {
return referenceId;
}
public String getTransactionId() {
return transactionId;
}
public String getTag() {
return tag;
}
@JsonPOJOBuilder(withPrefix = "")
@JsonIgnoreProperties(ignoreUnknown = true)
public static class Builder {
private String uniqueId;
private String redirectUri;
private String state;
private String code;
private String channelId;
private String userId;
private String portalId;
private String applicationId;
private String loginUser;
private String loginPassword;
private String referenceId;
private String transactionId;
private String tag;
public Builder uniqueId(String uniqueId) {
this.uniqueId = uniqueId;
return this;
}
public Builder redirectUri(String redirectUri) {
this.redirectUri = redirectUri;
return this;
}
public Builder state(String state) {
this.state = state;
return this;
}
public Builder code(String code) {
this.code = code;
return this;
}
public Builder channelId(String channelId) {
this.channelId = channelId;
return this;
}
public Builder userId(String userId) {
this.userId = userId;
return this;
}
public Builder portalId(String portalId) {
this.portalId = portalId;
return this;
}
public Builder applicationId(String applicationId) {
this.applicationId = applicationId;
return this;
}
public Builder loginUser(String loginUser) {
this.loginUser = loginUser;
return this;
}
public Builder loginPassword(String loginPassword) {
this.loginPassword = loginPassword;
return this;
}
public Builder referenceId(String referenceId) {
this.referenceId = referenceId;
return this;
}
public Builder transactionId(String transactionId) {
this.transactionId = transactionId;
return this;
}
public Builder tag(String tag) {
this.tag = tag;
return this;
}
public Oauth3rdActivateRequestVO build() {
return new Oauth3rdActivateRequestVO(uniqueId, redirectUri, state, code, channelId, userId, portalId, applicationId, loginUser, loginPassword, referenceId, transactionId, tag);
}
}
}