이것은 Groovy의 '속성'스타일 액세스와 일치하는 방식으로 수행되는 것보다는 주어진 클래스의 필드에 대한 모든 액세스를 가로 채기위한 제 질문과 관련이 있습니다. 여기에서 볼 수 있습니다 : intercepting LOCAL property access in groovy.Groovy에서 AST 트리를 철저히 다루기
한 가지 방법은 확실하게 내 문제를 해결할 것입니다. 컴파일 타임에 AST를 사용하여 속성 액세스가있는 모든 비 속성 액세스를 다시 작성해야합니다. 예를 들어,이 클래스는 다음과 같습니다 경우 :
class Foo {
def x = 1
def getter() {
x
}
def getProperty(String name) {
this."$name" ++
}
}
foo = new Foo()
assert foo.getter() == 1
assert foo.x == 2
이러한 getter 메소드 액세스가 직접 X 및 foo.x가 getProperty에 통해 반환하기 전에 X를 증가 ("X")를 진행하기 때문에 문 밖으로 작동합니다 주장한다.
일부 시행 착오 끝에 AST 변환을 사용하여 'getter'메서드의 'x'표현식이 로컬 필드가 아닌 속성으로 실제로 액세스되도록 코드의 동작을 변경할 수 있습니다. 여태까지는 그런대로 잘됐다!
이제 특정 클래스의 로컬 필드에 대한 모든 액세스 권한을 얻으려면 어떻게해야합니까? 나는 어떤 종류의 대서양 표준시 트리 워커 도우미를 찾고있는 인터넷을 빗어 봤지만 하나도 찾지 못했습니다. 여기에 표현식 워커를 구현해야합니까? http://groovy.codehaus.org/api/org/codehaus/groovy/ast/expr/package-summary.html과 18 개의 모든 명령문 유형은 여기 http://groovy.codehaus.org/api/org/codehaus/groovy/ast/stmt/package-summary.html입니까? 누군가가 이미 작성 했어야 만하는 것처럼 보입니다. (처음부터 AST 트리를 만드는 것이 필수적이기 때문에) 그러나 나는 그것을 찾을 수없는 것 같습니다.