UastHintedVisitorAdapter の作成で、ヒントがないか重複していることを報告します。

UastHintedVisitorAdapter は、クラスがヒントリストで指定されている要素のみにアクセスすることで、UAST ビジターの実行を最適化可能にするヒントを受け取ります。

たとえば、ビジターが visitCallExpression メソッドを実装しているにもかかわらず、ヒントに UCallExpression が含まれていない場合、メソッドは実行されません。

たとえば、ビジターが visitCallExpression メソッドを実装していないにもかかわらず、ヒントに UCallExpression が含まれている場合、継承されたメソッドは不必要に実行されます。


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

    override fun visitDoWhileExpression(node: UDoWhileExpression): Boolean { // 実行時に使用されません
      inspectLoopExpression()
      return true
    }
    //...
  },
  arrayOf(UForExpression::class.java) // 悪い例: UDoWhileExpression::class.java がない

UastHintedVisitorAdapter.create(
  language,
  object : AbstractUastNonRecursiveVisitor() {
    override fun visitForExpression(node: UForExpression): Boolean {
      inspectLoopExpression()
      return true
    }
    //...
  },
  arrayOf(
    UForExpression::class.java,
    UDoWhileExpression::class.java // 悪い例: UDoWhileExpression へのアクセスが実装されていない
  )
)

2024.2 の新機能です