다음과 같은 중첩 된 메서드 호출의 유형을 어떻게 추론 할 수 있습니까?
JavaSourceFile javaSourceFile = new JavaSourceFile();
javaSourceFile.getClasses().size()
다음과 같은 일반적인 메서드 호출에 대해 작동합니다.
javaSourceFile.getClasses()
하지만 getClasses ()의 반환 유형을 얻고 싶습니다. 이것이 제가하는 것입니다. 에
ASTVisitor.visit(MethodInvocation invocation)
size () 호출 유형을 얻고 싶습니다. 나는 사용한다
Expression expression = invocation.getExpression();
if (expression != null) {
ITypeBinding typeBinding = expression.resolveTypeBinding();
if (typeBinding != null) {
Call call = new Call(invocation.getName().getFullyQualifiedName(), typeBinding.getName());
this.activeMethod.getCalls().add(call);
}
}
메서드 호출의 유형을 가져옵니다. 그러나 처음에 설명한 것처럼 메서드 호출이 있으면 null이됩니다. 나는 또한 사용
invocation.resolveMethodBinding();
나중에 표현식을 사용하여 바인딩을 확인할 수없는 경우.
이 예에서는 두 가지 메서드 호출이 있습니다. 그래서 당신이 돌아 오지 않는 한 당신의 방문자는 2 번 호출 될 것 false
입니다.
이 식으로 처음 방문하고 javaSourceFile.getClasses().size()
호출 resolveTypeBinding()
하면 size()
먼저 발생하기 때문에 실제로 메서드 유형을 얻습니다 .
그러나 방문자가 호출 된 경우 주어진 코드에서 메서드 를 사용했기 때문에 javaSourceFile.getClasses().size()
실제로 유형을 확인합니다 . (참고 : 방문 방법이 반환되지 않으면 (메소드 호출이기 때문에) 다시 방문 하고 변수 유형을 얻습니다 )javaSourceFile.getClasses()
getExpression()
false
javaSourceFile.getClasses()
javaSourceFile
또한 null
모든 것이 올바르게 설정되면 발생해서는 안된다고 생각하는 결과를 얻었다 고 말했습니다 (예 : 일부 클래스의 클래스 경로 / 소스 경로를 지정하지 않았을 수 있습니다). 전체 코드가 필요하기 때문에 왜 그런지 알 수 없습니다.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다