문제

Java 클래스의 RFC는 클래스 객체에 대한 메시지에 대한 응답으로 또는 클래스의 일부 메서드에 의해 호출될 수 있는 모든 메서드의 집합입니다.rfc = m + r 여기서 m = 클래스의 메소드 수.R = M에서 직접 호출된 다른 메서드의 총 개수입니다.

C는 .class이고 J는 RFC를 계산하는 데 필요한 .java 파일이라고 생각하세요.

class J{

 a(){}
 b(){}
 c(){
   e1.e();
   e1.f();
   e1.g();
 }
 h(){
   i.k();
   i.j();
  }
  m(){}
  n(){
   i.o();
   i.p();
   i.p();
   i.p();
  }
}

여기에서 m = 6 및 r = 9 (루프 내부의 호출에 대해 걱정하지 마십시오.단일 통화로 간주됩니다.)

M을 계산하는 것은 쉽습니다.클래스로더를 사용하여 C를 로드하고 리플렉션을 사용하여 메서드 수를 가져옵니다.

R을 계산하는 것은 직접적이지 않습니다.클래스의 메서드 호출 횟수를 계산해야 합니다.첫 번째 레벨에만 해당됩니다.

R을 계산하려면 정규 표현식을 사용해야 합니다.일반적으로 형식은 (을 사용하지 않고 호출하는 것입니다.계산되지 않습니다)

[variable_name].[method_name]([zero or more parameters]);

또는

[variable_name].[method_name]([zero or more parameters])

호출 반환 시 세미콜론 없이 바로 다른 메소드의 매개변수가 됩니다.또는

[variable_name].[method_name]([zero or more parameters]).method2();

이것은 두 개의 메소드 호출이 됩니다

메소드 호출의 다른 패턴은 무엇입니까?R을 계산하는 데 사용할 수 있는 RegEx를 사용하는 것 외에 다른 방법이 있습니까?


업데이트:
@맥도웰BCEL을 사용하면 전체 프로세스를 단순화할 수 있는 것 같습니다.한번 시도해 보겠습니다.

도움이 되었습니까?

해결책

당신은 바이트 코드 엔지니어링 라이브러리 바이너리로.당신은 사용할 수 있습니다 내림차순 방문자 학급의 구성원과 참고 자료를 방문합니다.나는 그것을 사용했다 클래스 종속성 찾기.

또는 소스 파일의 일부 모델을 재사용할 수 있습니다.나는 Java 편집기가 이클립스 JDT 어떤 형태의 모델에 의해 뒷받침됩니다.

다른 팁

당신은 당신의 대답을 찾을 수 있어야합니다 자바 언어 사양.

정적 메소드 호출, 매개변수 내의 메소드 호출을 잊어버렸습니다...

리플렉션을 사용하여 메서드 호출(메서드 이름은 문자열에 있음)

M에는 자체 메서드에 대한 호출이 포함되어 있나요?아니면 내부 클래스를 호출하나요?예를 들어:

class J {
  a() { }
  b() { this.a(); }
  c() { jj.aa(); }
  d() { i.k(); }
  e() { this.f().a(); }
  f() { return this; }
  g() { i.m().n(); }

  class JJ {
    aa() { a(); }
  }
}

이것의 M 값은 무엇입니까?이 클래스에 정의되지 않은 메서드에 대한 함수 호출은 세 개뿐입니다(d() 및 g() 함수의 호출).내부 클래스에 대한 호출을 포함하시겠습니까, 아니면 내부 클래스에서 수행된 기본 클래스에 대한 호출을 포함하시겠습니까?동일한 클래스의 다른 메소드에 대한 호출을 포함하시겠습니까?

소스에 관계없이 메서드 호출을 보고 있다면 정규식은 작동할 수 있지만 제대로 작동하기는 까다로울 수 있습니다. 정규식은 내용과 같은 메서드 호출이 포함된 문자열을 제대로 무시합니까?생성자 호출을 제대로 처리합니까?)메소드 호출의 소스에 관심이 있다면 정규 표현식은 아마도 원하는 것을 얻지 못할 것입니다.리플렉션을 사용해야 합니다(불행히도 저는 리플렉션에 대해 도움이 될 만큼 충분하지 않습니다).

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top