Как написать pointcut с настроенной аннотацией для печати значения глобальной переменной, используемой в функции? - PullRequest
0 голосов
/ 14 апреля 2019

Я пытаюсь записать все переменные, которые метод использовал для вычисления чего-либо, но я не знаю, как мне получить доступ к определенным глобальным переменным, которые использовал метод:

  @BuAnnotation(funcName = "foo", category = BuAnnotation.Category.BU)
  @Scores(scoreName = "globalScoreVariableValue", category = Scores.Category.SC)
  def Boolean foo = {
    val globalScoreVariableValue = b.globalScoreVariable.value
    val checkValue = globalScoreVariableValue > 2
    if (checkValue)
    {
      false
    }
    checkValue
  }

Но я не уверен, как обращаться с pointcut, так как я пробовал много способов написать извлечение, а код не дошел до него ...

в любом случае, чтобы это произошло?

Большое спасибо

1 Ответ

0 голосов
/ 06 мая 2019

После некоторых исследований я понял, что, к сожалению, локальные переменные не отображаются через точки соединения.Это означает, что мы не можем написать pointcut, чтобы соответствовать им.Однако я попробовал несколько способов .. Так что мы не можем сделать это напрямую.Но самый простой способ - это рефакторинг нашего кода (не сигнатуры метода). Я просто создаю функцию, которая получает переменную и возвращает ее как есть, поэтому я аннотировала функцию и просто вызываю ее там, где я использую эти переменные.Концептуально этот вид рефакторинга может быть лучше для нашего кода.

    @BuAnnotation(funcName = "foo", category = BuAnnotation.Category.BU)
      def Boolean foo = {
        val globalScoreVariableValue = b.globalScoreVariable.value
        Logging.log(globalScoreVariableValue)

        val checkValue = globalScoreVariableValue > 2
        if (checkValue)
        {
          false
        }
        checkValue
    }

@CustomizedAnn
def log(v: Any): Any = v
...