getMethods()
메서드를 사용하여 IType
의 모든 메소드에 액세스 할 수 있습니다. 그러한 IMethod
이 접근 자 또는 변형 자 (getter/setter)인지 확인하는 효율적인 방법이 있습니까?IType의 모든 IM 메소드의 접근 자와 변경자 (getter/setters) 식별
IMethod
의 이름이 날 뻔한 사람을 감지 도움이 될 prefix ∈ {"get", "set", "is"}
로 계획 prefix + NameOfAttribute
일치하지만, 접근 또는 뮤 테이터 (게터/세터가) 그런 식으로 이름이되어 있지 않은 경우, 그것은 작동하지 않을 경우 확인.
더 좋은 방법이 있습니까?
EDIT : 나는 IType
의 속성을 직접 가져 오거나 설정하는 getter/setter 메서드 만 식별하고 다른 작업은 수행하지 않습니다.
EDIT2 : 사용 된 기술 용어 : 접근 & 뮤 테이터
EDIT3 : 여기에 모든 해답을 읽은 후 내 솔루션됩니다 :
private boolean isAccessor(IMethod method) throws JavaModelException {
if (isAccessMethod("get", method) || isAccessMethod("is", method)) { // if name fits
return method.getNumberOfParameters() == 0 && !Signature.SIG_VOID.equals(method.getReturnType());
}
return false;
}
private boolean isMutator(IMethod method) throws JavaModelException {
if (isAccessMethod("set", method)) { // if name fits
return method.getNumberOfParameters() == 1 && Signature.SIG_VOID.equals(method.getReturnType());
}
return false;
}
private boolean isAccessMethod(String prefix, IMethod method) throws JavaModelException {
IType type = method.getDeclaringType();
for (IField field : type.getFields()) { // for ever field of IType:
if (method.getElementName().equalsIgnoreCase(prefix + field.getElementName())) {
return true; // is access method if name scheme fits for one field
}
}
return false; // is not an access method if no field fits
}
중요 :이 솔루션은 내 요구 사항에 맞는 중요한 일부 사례는 무시합니다 (accepted answer 참조). 여전히 메소드의 기능을 점검하지는 않지만 꽤 잘 작동합니다. 제안 된 체계의 메소드 이름을 확인합니다. 그러나 매개 변수 개수와 반환 유형이 void
인지 여부도 확인합니다. 누군가가 이것을 향상시키고 싶다면 getter의 리턴/매개 변수 유형이 메소드 이름과 일치 된 필드 유형과 일치하는지 여부를 점검 할 수 있습니다.
접두사에 대한 힌트를 주셔서 감사합니다. 잊어 버렸을 것입니다! 또한 매개 변수 개수가 좋습니다. – ConveniencePatterns
내 게시물에 대한 내 제안을 토대로 내 솔루션을 추가했습니다. – ConveniencePatterns
@ConveniencePatterns 그냥 내 대답을 업데이트했습니다 –