2010-06-24 5 views
7

메소드 호출에 대한 부작용 정보가 필요한 Java 프로그램에 대한 분석을하고 있습니다. 표준 라이브러리 클래스의 경우 읽기 전용 매개 변수가있는 메서드 목록을 컴파일하고 싶습니다. 즉, 인수를 수정하지 않는 메소드 또는 인수에서 도달 할 수있는 모든 메소드입니다. 나는 javadocs에서 많은 것을 추론 할 수 있지만 시간이 걸릴 것이다.Java 표준 라이브러리의 부작용없는 메소드

표준 메서드 호출이 해당 인수를 수정하는지 여부를 결정하는 더 쉬운 참조 또는 방법을 제안 할 사람이 있습니까? 실제로 각 javadoc 항목을 통해 읽는 것이 가장 좋은 방법입니까?

감사합니다.

편집 : 보너스는 개체에 부작용이없는 메서드를 식별하는 것입니다. 예를 들어 stack.pop()은 stack.size()가 그렇지 않은 반면에.

+1

귀하의 솔루션을 보는 데 관심이 있습니다. 변경할 수없는 유형을 사용하는 모든 메소드가 부작용이 없다고 가정 할 수 있습니다. Javadoc과 코드 이외에 어떤 것을 할 수 있는지 잘 모르겠습니다. –

+0

@SB :'String'은 불변이지만,'CharSequence'를 구현하는 클래스는 그렇지 않을 수도 있다는 것을 명심하십시오. – Powerlord

답변

1

글쎄, 기본 유형/문자열/객체/제네릭 유형 만 매개 변수로 사용하는 모든 메소드는 더 이상의 고려없이 당신을 만족시켜야합니다. 그리고 java.lang과 java.util의 경우 이것은 대부분의 메소드를 다루어야한다.

표준 jdk는 모든 작업과 목적을위한 거대한 클래스 라이브러리를 제공하기 때문에 처리하려는 패키지를 제한하는 것이 좋습니다.

편집
그것은 E extends ModifiableObject로 선언 일반적인 유형의 다소 모호, 그래서 자신을 참조하십시오.

+0

시작 지점으로 좋은 제안입니다. 감사합니다. – Owen

1

JDK의 소스 코드에 대해 유형 유추 엔진을 실행 해 볼 수 있습니다.

아마 Type qualifier inference for Java 용지를 사용할 수 있습니다. (전체 텍스트가 온라인 상태 인 것은 아닙니다.)

1

DMS Software Reengineering Toolkit은 범용 맞춤형 프로그램 분석 및 변환 도구입니다. Java를 파싱하고 심볼 테이블, 클래스 상속 관계, 제어 및 데이터 흐름 정보를 생성하는 Java Front End이 있습니다.

이 정보에서 메소드 M이 인수 또는 인수에서 도달 할 수있는 모든 것을 직접 수정하는지에 대한 로컬 정보를 계산할 수 있습니다. 콜 그래프가 생성 될 수 있으며, 메소드 X로 수정 된 모든 것은 M에 의해 직접 또는 간접적으로 호출됩니다. 이는 실제로 당신의 답입니다. Java 표준 라이브러리 인 관심있는 코드 소스에이 내용을 적용해야합니다.

이렇게하기 위해 DMS를 구성하는 것은 제공된 모든 정보가 있더라도 사소하지는 않습니다. OTOH,이 대답은 꽤 정확합니다 (modulo conservative assumptions and reflection). 반복적이고, 당신이 선택한 방법에 적용하기 쉽습니다. Javadocs를 통해이 작업을 직접 수행하는 것은 시간이 많이 걸리고 오류가 발생하기 쉽습니다.

관련 문제