package ru.yandex.qatools.allure.aspects; import org.aspectj.lang.JoinPoint; import org.aspectj.lang.annotation.After; import org.aspectj.lang.annotation.Aspect; import org.aspectj.lang.annotation.Pointcut; import org.aspectj.lang.reflect.FieldSignature; import ru.yandex.qatools.allure.Allure; import ru.yandex.qatools.allure.annotations.Parameter; import ru.yandex.qatools.allure.events.AddParameterEvent; /** * @author Dmitry Baev charlie@yandex-team.ru * Date: 19.06.14 */ @Aspect public class AllureParametersAspects { @Pointcut("@annotation(ru.yandex.qatools.allure.annotations.Parameter)") public void withParameterAnnotation() { //pointcut body, should be empty } @Pointcut("set(* *)") public void setValueToAnyField() { //pointcut body, should be empty } @After("setValueToAnyField() && withParameterAnnotation()") public void parameterValueChanged(JoinPoint joinPoint) { try { FieldSignature fieldSignature = (FieldSignature) joinPoint.getSignature(); Parameter parameter = fieldSignature.getField().getAnnotation(Parameter.class); String name = parameter.value().isEmpty() ? fieldSignature.getName() : parameter.value(); Allure.LIFECYCLE.fire(new AddParameterEvent(name, joinPoint.getArgs()[0].toString())); } catch (Exception ignored) { } } }