2013-06-10 3 views
3

xtext에서 작동하는 문법이 있으며 코드의 유효성 검사가 시작됩니다.AbstractDeclarativeValidator.warning 및 error에 사용되는 매개 변수는 무엇입니까?

이를 위해 작성된 유효성 검사기 xtext에 메소드를 추가했습니다.

물론 표현식이 유효하지 않으면 주어진 AST 노드에 경고를 줄 수 있기를 원합니다. Expression_Number가 EObject를 확장하지만, EStructuralFeature 아니므로, 성공하지

@Check 
public void testCheck(Expression_Multiplication m){ 
    if(!(m.getLeft() instanceof Expression_Number)){ 
     warning("Multiplication should be on numbers.",m.getLeft()); 
    } 
    if(!(m.getRight() instanceof Expression_Number)){ 
     warning("Multiplication should be on numbers.",m.getRight()); 
    } 
} 

:

나는 명백한을 시도했다.

warning(String message, EStructuralFeature feature) 

warning에 대한 다른 많은 프로토 타입이 있지만, 단지 StringEobject 소요 없음. null을 사용하거나 eContainingFeature에서 다양한 값을 추출하면 오류가 기록되며 때로 올바른 위치에 경고가 표시됩니다. 예제를 검색해 보면 값이 종종 Literals 또는 ***Package이라는 클래스의 통계 필드에서 나온 것으로 나타났습니다. 프로젝트에 생성 된 값은 EStructuralFeature입니다. 그러나 어느 것을 사용해야하는지, 또는 내가 필요한 이유를 모릅니다. 이 중 하나.

그래서 질문은 :

어떻게 주어진 AST 요소에 경고를 배치 할 수 있습니다 ?

답변

1

: 나는 당신의 경우에 추측

는 뭔가처럼 올바른 방법 일 수는 있지만 여러 가지 경우에 효과가있는 것 같았습니다. 사용하는 데 필요한 최소한의 상태가 필요합니다.

3

EStructuralFeature는 AST의 속성입니다. 생성 된 EPackage 클래스에는 상수가 들어 있습니다. 나는이이 예정되어 있는지 여부에 대해 아무 생각이

private void warning(String text, EObject badAstNode){ 
    // The -1 seems to come from a static member somewhere. Probably cleaner to 
    // name it, but I couldn't find it again. 
    warning(text,badAstNode,null,-1); 
} 

를 사용하여 종료

MyDslPackage.Literals.EXPRESSION_MULTIPLICATION__LEFT 

MyDslPackage.Literals.EXPRESSION_MULTIPLICATION__RIGHT 
+0

많은 솔루션을 사용하지 못했지만 많은 상태를 유지할 준비가되면 작동합니다. –