2010-05-11 2 views
2

findbugs에서 전용 필터를 추가 : 내 findbugs 다음과 같은 오류가 표시되지보고한다 원하는

DM_NUMBER_CTOR : 방법은 비효율적 번호 생성자를 호출; static valueOf를 대신 사용하십시오

문제는 Groovy에서 생성 된 코드 파일에서 발생하므로 소스 코드를 제어 할 수 없다는 것입니다. 이것이이를 제외하고 내 제외 필터에 추가하려는 이유입니다.

클래스를 명시 적으로 추가하고 싶지 않습니다. (많은 도구에서 사용할 API를 만들었으므로 필자의 필터가 일반화되기를 바랍니다.) 유형별 보고서에서이 버그를 완전히 제거하고 싶지는 않지만 "정적 초기화 도구"메소드에서이 버그가 나타나면이 버그가 나타나지 않도록 제외하고 싶습니다. 어떤 생각? 나는 아래의 필터를 시험해 보았으나 운이 없었다. 아마도 누군가는 더 좋은 생각을 가지고 있을까?

net.milanaleksic.cuc.tools.sound.SoundPlayerTool 클래스의 메소드 net.milanaleksic.cuc.tools.sound 물 :

<Match> 
    <Method name="~.*static initializer.*" /> 
    <Bug pattern="DM_NUMBER_CTOR" /> 
</Match> 

여기있는 경우 FindBugs의 "스택 트레이스"이다. SoundPlayerTool.() 호출 방법 새 이 SoundPlayerTool.groovy

+0

이 왜 그루비 코드에이 '멋', 않습니다 FindBugs 작업 태그가 ... 나는 확실하지 않다 그러나 나는 버그가 실제로 일어나는 경우에 같은 방법 이름 (<clinit>)이 언급 한 생각 그루비 클래스에 있지만, 실제로 유용한 결과입니까? –

+0

그것은 여전히 너무 일찍,하지만 나는 그것에 담겨있는 시간이되면 좋은 일을 할 수 있다고 생각 findbugs. 컴파일 된 Java 및 Groovy 파일 (Groovy 작업 사용)을 사용하여 폴더를 대상으로하므로 기본적으로 Java 및 Groovy에서 생성 된 바이트 코드의 findbug 처리를 수행합니다. 다음 페이지에서 AspectJ 컴파일 바이트 코드를 비슷한 경우로 필터링하는 예제를 볼 수 있습니다. http://findbugs.sourceforge.net/manual/filter.html#d0e2050 –

답변

4

에서 대신 을 Long.valueOf (긴)를 호출해야 (긴) 긴 내가 추측 것입니다 static initializer 코드는 <clinit>이라는 메서드에서 발생하는 것으로보고됩니다. <Method name='&lt;clinit&gt;'/> 필터를 설정해 볼 수 있습니까? (어느 정도는 <clinit>이지만 XML은 이스케이프 처리 됨). 완전히 테스트되지 않은, 그냥 임의의 생각.

내 단서는 HTTP의이 부분이었다 : // findbugs \ .googlecode \ .COM & 사 = N & CD = 2 & CT = RC & 리터 = 125 "> 일부 FindBugs 내부 테스트 :

String methodName = m.getMethodName(); 
... 
if (... methodName.equals("<clinit>"))) ... 

난 당신이 아마 실행할 수 있습니다 알아?

+1

감사! 나는 필터를 수행하면 정말 내가 원하는 것을하지 있는지 확인하십시오 : <방법 이름 = "<clinit>을"/> <버그 패턴 = "DM_NUMBER_CTOR을"/> 내가 FindBugs 버그 추적기에 문제 보고서를 제출 한

+0

: HTTP : //sourceforge.net/tracker/? func = detail & aid = 3000303 & group_id = 96405 & atid = 614693이 숨겨진 기능을 문서에서 설명하기를 바랍니다. –

+1

은 정적 블록의 내부 클래스 파일 형식 이름입니다. 은 생성자의 내부 이름입니다. – MeBigFatGuy