2013-05-30 2 views
1

Xtext에 fallowing DSL이 있습니다. ObjectB에 Element가있는 경우, 포함하는 오브젝트 (ObjectA)에 Element가 없음을 유효성 검증하려고합니다. 나는 ObjectB에 경고를하지만 ObjectA에서 또한 fallowing 같은 경고를하고 싶은서브 오브젝트의 xtext 유효성 확인

Domainmodel: 
    ObjectA | ObjectB 
    ; 

ObjectB: 
    'ObjectB' 
    '{' 
    (element = Element)? 
    (objects += ObjectA)* 
    '}' 
; 

ObjectA: 
'ObjectA' 
    '{' 
    (element = Element)? 
    '}' 

; 

Element: 
    'Element' name=ID 
; 

A. Object로하지 :

warning, errorinfo에 대한 몇 가지 "그룹"이 있습니다
@check 
def ObjectinObject(ObjectB object) 
{ 
    if(object.element != null) 
    { 
    for (ObjectA e : object.objects) 
    { 
     if(e.element != null) 
       {//The fallowing Code will make Warning at the element and the subelement 
       warning('warning', DomainmodelPackage$Literals::DOMAINMODEL__ELEMENT) 
       warning('warning2',e.element ,DomainmodelPackage$Literals::ELEMENT__NAME) 
       } 
    } 
    } 
} 

답변

3

. 한 그룹에는 매개 변수 목록에 EObject이 있고 다른 그룹에는 없습니다.

이 아닌을 이미 사용하고 있습니다. 이 경우 메시지는 check 메소드의 매개 변수 인 EObject에 첨부됩니다.

에 메시지를 첨부하려면 임의 번호 EObject을 사용하려면 EObject 매개 변수가있는 메소드를 사용해야합니다.

protected void warning(String message, EObject source, EStructuralFeature feature); 

과 행동 : 귀하의 경우에는 메시지 방법의

warning('warning', e, DomainmodelPackage$Literals::OBJECT_A__OBJECTS) 

이 두 번째 그룹은 Xtext 2.4 이후에서만 사용할 수 있습니다. 이전 버전을 사용하면이 스탠자를 사용할 수 있습니다 (자바에서는 직접 Xtend 구문을 사용하십시오).

getMessageAcceptor().acceptWarning('warning', e, 
    DomainmodelPackage$Literals::OBJECT_A__OBJECTS, -1, 
    null); 
+0

덕분에 많은 도움이되었습니다. 나는 조금 노력하고 그것이 작동하도록했습니다. 내가 OBJECT_A__OBJECTS 리터럴, 그냥 Object_B__OBJECTS,하지만 그 중 하나를 작동하지 않았다. 그것은 실제로 : 경고 ('warning2', e.element, DomainmodelPackage $ Literals :: ELEMENT__NAME) – Iron