회사에서 4일 동안 소나큐브 이슈를 해결했다.
그 동안 소나큐브 이슈 해결이 이뤄지지 않았던 프로젝트라서, major issue가 많았다.
111개 major issue가 있었다.
다음과 같은 이슈들을 해결했다.
java:S2440: Casses with only "static" methods should not be instantiated
class가 static 메서드만 있으면, new로 생성되지 못하게끔 강제해야 한다.
@UtilityClass 롬복 annotation을 사용하여, new로 생성되지 못하게끔 강제했다.
java:S1481: Unused local variable
현재 코드에는 사용하지 않는 local 변수가 있다.
사용하지 않는 local 변수는 삭제했다.
java:S1700: A field should not duplicate the name of its containing class
필드와 클래스는 이름이 같으면 안 된다. 헷갈리기 때문이다.
필드, 클래스 둘 중 하나의 이름은 변경했다.
ex)
public class Orders {
private List<Order> orders;
...
}
-> Orders class 이름을 OrderContainer로 변경
public class OrderContainer {
private List<Order> orders;
...
}
java:S1068: Unused Private Field
사용하지 않는 private 필드가 있다. 삭제한다.
java:S1144: Unused private method
사용하지 않는 메서드가 있다. 삭제한다.
java:S112: Avoid Throwing Raw Exception Types
Exception class를 던지는 일은 되도록이면 하지 않는다.
Exception으로는 시스템 에러인지, 애플리케이션 에러인지 판단하기가 어렵다.
구체적인 어플리케이션 Exception을 던지도록 코드를 바꾼다.
java:S2166: Classes named like "Exception" should extend "Exception" or a subclass
Exception이라고 이름이 붙여진 Exception은, 실제로 Exception을 상속해야 한다.
실제 코드에서는 Throwable을 상속해서, 위 이슈가 나타났다.
Throwable을 상속하지 않고, RuntimeException을 상속하도록 코드를 바꾼다.
어떤 이슈는 해결하지 않았다.
java:S107: Constructor has 8 parameters, which is greater than 7 authorized.
parameter의 개수가 많다고 한다.
코드 변화가 너무 클 것 같아서 수정하지 않았다.
Source files should not have any duplicated blocks
코드 중복이 있다.
모듈간의 코드 중복이 많이 있는데, common module을 만들면 중복을 제거할 수 있다.
common module을 만드는 일은 뒤로 미루고, 이슈를 해결하지 않았다.