реализация метода xtend с аннотациями для параметра

Как я могу реализовать этот метод с помощью Xtend?

private void myListenerMethod(@Observes(notifyObserver=IF_EXISTS) @MyAnnotation Boolean value) 
{
    ... Do somehting ...
}

У меня есть пример реализации обычного метода:

    var method_myListenerMethod = toMethod("myListenerMethod", newTypeRef(void), [
    '''
        ... Do something ...
    '''
    ])
    method_myListenerMethod.parameters += toParameter("value",newTypeRef('''javax.enterprise.event.Observes'''))
    members += method_doSaveOperation

person nik the lion    schedule 22.07.2014    source источник


Ответы (1)


Я не уверен, что означают ваши методы toMethod и toParameter, но я бы сделал генерацию объявления вашего метода следующим образом:

private def addMethod(MutableFieldDeclaration field, extension TransformationContext context) {
    field.declaringType.addMethod("myListenerMethod") [ methodDecl |
        methodDecl.returnType = newTypeReference(typeof(void))
        val param = methodDecl.addParameter("value", newTypeReference(typeof(Boolean)))
        val observes = param.addAnnotation(context.findTypeGlobally("javax.enterprise.event.Observes"))
        val reception = context.findTypeGlobally("javax.enterprise.event.Reception") as EnumerationTypeDeclaration
        observes.setEnumValue("notifyObserver", reception.findDeclaredValue("IF_EXISTS"))
        param.addAnnotation(context.findTypeGlobally("MyAnnotation"))
    ]
}

Для этого требуется как минимум Xtend 2.5.0 (см. ошибку #403789)

person ZhekaKozlov    schedule 29.07.2014