주어진 메서드가 null을 반환하거나 반환하지 않을 수있는 경우 프로그래밍 방식으로 검색해야합니다.null을 리턴하는 메소드를 검출하는 정적 바이트 코드 분석 도구?
checker framework은 주석 처리 된 소스 코드에서만 가능할 것으로 보입니다. 바이트 코드가 필요합니다. 특히, 다음과 같은 요청을 확인해야합니다.
Method x.y.Z#foo() cannot return null.
여기에는 x.y.Z 클래스의 바이트 코드 만 있습니다.
지원할 수있는 도구가 있습니까?
일반적인 경우에도 가능합니까? 지금까지 볼 수있는 한, 프로그램을 통해 정확한 경로를 파악할 필요가 없기 때문에 중지 문제와 동일하지 않습니다.
Foo bar() {
if (cond) { return null; } else { return new Foo(); }
}
예를 들어 분석 도구에 대한 cond
신경 필요가 없다, 모든 가능한 경로 중 적어도 하나에, null
가 반환됩니다 충분하다, 그래서 막대가 null을 반환 할 수 없다는 주장은 거부 될 수 있습니다.
참고 : 나는 예를 들어, cond
그냥 false
을 할 수 있고 분석 도구는 여전히 막대() 우리는 cond
을하는 일반적인 경우에 proove 수 없다는 것과 같습니다 널 (null)을 (반환 할 수를 주장 할 수, 오탐 (false positive)을 받아 들일 것 사실이어야합니다).
실행하지 않고있는 경우 * 모든 * 방법 * 힘 *는 null을 결정하는 것은 불가능 할 것 모든 가능한 코드 경로를 통해. –
일반적으로 이는 중지 문제와 동일합니다. 한 가지는 'null'을 반환 할 수 있는지 여부를 알기 전에 반환할지 여부를 알아야합니다. – SLaks
@SLaks 나는 그렇게 생각하지 않는다. 나는 적어도 하나의 경로가'return null'으로 연결된다는 것을 입증 할 필요가 있습니다. 'if (false) return null;과 같은 오탐 (false positive)을 갖는 것이 좋습니다.이 질문을 명확하게 편집 할 것입니다. – Ingo