Reports missing or redundant hints in UastHintedVisitorAdapter creation.

UastHintedVisitorAdapter receives hints that allow to optimize UAST visitor execution by visiting only elements, which classes are specified in the hint list.

If the visitor implements, e.g., visitCallExpression method, but does not include UCallExpression in hints, then the method will not be executed.

If the visitor does not implement, e.g., visitCallExpression method, but does include UCallExpression in hints, then the inherited method will be unnecessarily executed.

Examples


return UastHintedVisitorAdapter.create(
  language,
  object : AbstractUastNonRecursiveVisitor() {
    override fun visitForExpression(node: UForExpression): Boolean {
      inspectLoopExpression()
      return true
    }

    override fun visitDoWhileExpression(node: UDoWhileExpression): Boolean { // unused at runtime
      inspectLoopExpression()
      return true
    }
    //...
  },
  arrayOf(UForExpression::class.java) // Bad: missing UDoWhileExpression::class.java
)

UastHintedVisitorAdapter.create(
  language,
  object : AbstractUastNonRecursiveVisitor() {
    override fun visitForExpression(node: UForExpression): Boolean {
      inspectLoopExpression()
      return true
    }
    //...
  },
  arrayOf(
    UForExpression::class.java,
    UDoWhileExpression::class.java // Bad: visiting UDoWhileExpression is not implemented
  )
)

2024.2 最新变化