2015-02-04 2 views
3

이상한 문제가있어서 두 귀 사이의 문제인지 checkstyle 문제인지 확실하지 않습니다. checkstyle 6.2을 실행 우리는 젠킨스에, 모두 받고이 오류 일식됩니다Checkstyle보고 catch- 예외 매개 변수의 LocalFinalVariableNameCheck 오류

LocalFinalVariableNameCheck, Priority: Normal 

Name 'pEx' must match pattern '^l[A-Z][a-zA-Z0-9]*$'. 

을이 로컬 VAR 아닌 PARAM로 catch 블록을 정의 checkstyle 왜 코드

... 
} catch (final XPathExpressionException pEx) { 
    throw new ConfigurationException(pEx); 
} 

입니다 ?

답변

2

Boris의 도움으로 해결책을 찾았습니다. 보기와 같이 checkstyle 5.7에 통합 된 변경입니다.

<module name="LocalFinalVariableName"> 
     <!-- checkstyle changed to pass exception checks to local vars?!? in version 5.7 --> 
     <!-- catch blocks have params => use a different local var --> 
     <property name="format" value="^p[a-zA-Z0-9]*$" /> 
     <property name="tokens" value="PARAMETER_DEF" /> 
    </module> 
    <module name="LocalFinalVariableName"> 
     <property name="format" value="^l[A-Z][a-zA-Z0-9]*$" /> 
     <property name="tokens" value="VARIABLE_DEF" /> 
    </module> 
    <module name="LocalVariableName"> 
     <!-- checkstyle changed to pass exception checks to local vars?!? in version 5.7 --> 
     <!-- catch blocks have params => use a different local var --> 
     <property name="format" value="^p[a-zA-Z0-9]*$" /> 
     <property name="tokens" value="PARAMETER_DEF" /> 
    </module> 
    <module name="LocalVariableName"> 
     <property name="format" value="^l[A-Z][a-zA-Z0-9]*$" /> 
     <property name="tokens" value="VARIABLE_DEF" /> 
    </module> 
2

try {} catch() {}는 메서드 호출이 아닌 문입니다. 따라서 pEx는 매개 변수가 아닌 로컬 변수입니다.

+0

좋은 점 thx. checkstyle 규칙을 예외에서 제거하는 방법에 대해 알고 있습니까? – cilap

3

@Dongqing에 의해 지적 되었 듯이 pEx는 실제로 지역 변수이므로 여기에서 확인하십시오.

하나의 참고 사항 :이 규칙의 기본값은 (도구의 마지막 버전)에 지정된대로 ^[a-z][a-zA-Z0-9]*$입니다. 로컬 표준 인 ^l[A-Z][a-zA-Z0-9]*$에 맞게 사용자 정의한 패턴입니다. 따라서 위반을 제거하기 전에 이름 지정 패턴이 정말 괜찮은지 확인해야합니다 (맞지 않는 경우 사용자 정의 규칙을 정의하는 이유는 무엇입니까?).

이 위반을 정말로 제거하고 싶다면, Checkstyle은 경고를 억제하는 다양한 방법을 제공합니다. 당신은 할 수 있습니다

  • 라인 (또는 열 심지어 범위)의 주어진 범위, 특정 파일에 특정 규칙을 억제 할 수 있다는 점하는 suppression XML file 사용합니다. 그렇게하면 코드를 수정할 필요가 없지만 모든 억압으로 구분 된 파일을 유지해야합니다.
  • 댓글이나 주석을 사용하여 코드에 바로 주석이나 주석 (예 : @SuppressWarnings)을 추가하여 경고를 비활성화하십시오. 이 또한 구성해야합니다. 자세한 내용 및 예는 위의 링크를 참조하십시오.

편집 :이 Checkstyle 규칙도 조정 변수 선언 또는 캐치 조항에 대한 패턴을 수행 할 수 있습니다. 다음 구성은 당신을 위해 작동합니다 :

<module name="LocalVariableName"> 
    <property name="format" value="^[a-zA-Z0-9]*$"/> 
    <property name="tokens" value="PARAMETER_DEF"/> 
</module> 

은 여기 캐치 절에서만 위반에 대한 매우 관대 한 패턴을 지정합니다. 변수 선언은 영향을받지 않아야하며 원래 패턴을 계속 확인해야합니다.

+0

보리스, 대답은 thx입니다. 규칙의 사용에 관해서. 우리는 로컬 바 (local vars)에 대한 규칙을 사용하기를 원합니다. 그러나 catch 블록의 경우에는 적합하지 않습니다. 그래서 우리는 억압 파일에 의해 일반적인 방법으로 예외에 대한 localVar와 localFinalVar 체크를 비활성화하는 옵션을 찾거나 catch 블록을 건너 뛰도록 규칙을 적절하게 구성함으로써 검색합니다. 우리는 아무도 대답을 찾을 수 없습니다 – cilap

+2

@cilap 내 편집을 참조하십시오. 주어진 패턴에 대한 catch 블록과 만 일치하도록 규칙을 조정할 수 있습니다. –

+1

안녕하세요, Boris, 전 답변을 게시했습니다. 그리고 당신의 힌트가 그것을 찾는 것을 도왔습니다. 고마워 – cilap