EMF는 "invocation delegate"를 사용하여 EOperation
및 derived EAttribute
의 전용 구현을 처리하는 방법을 제공합니다. 이 기능을 사용하면 문자열 형식으로 ecore
메타 모델에 직접 구현을 구현할 수 있습니다 (EMF에서 사용 언어를 "처리"할 수있게되면 즉, 호출 대리자가 있음).
지금까지 내가 아는 한, OCL은 잘 지원됩니다 https://wiki.eclipse.org/OCL/OCLinEcore#Invocation_Delegate
호출 위임의 등록 (독립형 사용을 위해) 등록 플러그인이나 손으로 하나 수행하고, 메커니즘은 EMF 반사 층으로 작동 (동적 EMF) : https://wiki.eclipse.org/EMF/New_and_Noteworthy/Helios#Registering_an_Invocation_Delegate
(.. 나는 그것이 존재 알고 난이 메커니즘을 경험 한 적이 있습니다,하지만 난 그것으로 해본 적이하시기 바랍니다)
EDIT>
질문은 파생 된 속성에 대한 동적 코드 실행과 관련이없는 것 같지만 코드 삽입 (나는 "문자열을 가져 와서이 문자열을 계산에 대한 구현으로 지정하는 방법이 있습니까? 파생 된 기능? ").
EMF는 ecore
메타 모델에 삽입 된 코드를 생성 된 코드에 직접 삽입하는 방법을 제공합니다.
EAttribute
과 derived
속성은 다음과 같습니다. EAttribute
의 속성은 true
: {derived volatile}
이어야합니다 (transient
도 추가 할 수 있음). EAttribute
에 getter 및 setter 만 필요한 경우 changeable
을 false
으로 설정할 수도 있습니다.
번 EAttribute
아니라, 당신이 http://www.eclipse.org/emf/2002/GenModel
로 설정 소스로 새로운 EAnnotation
및 get
에 key
설정된 항목 (아래 이미지 참조) 주입 될 코드에 value
세트를 추가해야 "구성"입니다 .
그리고 함으로써 해결할 수은, 당신의 코드는 게터에 주입 된 value
값으로 생성됩니다.
EOperation
에 대해 get
대신 body
을 사용하여 동일한 프로세스를 추가 할 수 있습니다.
이것은 생성 된 출력으로 문자열을 가져 오는 인상적인 방법입니다. 그러나 나는 반사 액세스를 허용하는 것이 필요하다고 생각합니다. 이것은 코드가 직접 추가 된 파생 속성이 동적 EMF에서 작동하지 않는다는 것을 의미합니까? –
내가 제공 한 솔루션은 생성 된 코드에 코드를 삽입하지 않지만 속성에 액세스 할 때 "구현을 나타내는 문자열"을 해석합니다. 이 방법은 동적 인 EMF (ecore 구현을 생성하지 않고) 만 사용하는 경우에도 작동합니다. 'ecore'에 주석이없고 생성 된 코드에서 "손으로 구현"하면 EMF는 생성 된 모델 플러그인이 잘로드되고 등록되어있는 한 코드에 추가 한 구현을 사용합니다. 생성 된 코드로 메타 모델에서 코드를 삽입하는 과정은 다르다. (편집 된 게시물보기) –
이렇게 이해했는지 여부를 명확히하기 위해 : 당신의 솔루션은 기술적으로 내가 요청한 것을 (생성 된 코드 변경)하지는 않지만, 런타임 동작을 동일한 효과에 적용합니다. 나는 어쨌든 정말로 필요한 모든 것입니다. 그리고 공정하기를, 제 질문은 명시 적으로 생성 된 출력 코드를 조작하고 싶다고 말하지 않았습니다. –