Rewriteアクションによるアノテーションへのパラメータ追加

2020年10月26日発行
アラン・リチャードソン著
ケーススタディ

Rewriteアクションによるアノテーションへのパラメータ追加

2020年10月26日発行
アラン・リチャードソン著
リソースを見る
リソースを見る

このブログ記事では、私たちは

  • アノテーションの検索と照合のデモンストレーション
  • ヒゲのテンプレートを使ったアノテーション

Sensei は、問題のあるコードパターンを照合して、合意した実装に修正する機能を提供します。この例では、@Disabled without a parameterを問題のあるコードパターンとして使用しています。

無効化テストのアノテーション

特定の理由なしにテストを無効にすると、無効にした理由を忘れてしまうため、長期的には問題となります。


@Disabled
   void thisTestMethodHasNoDisabledReason(){
    Assertions.fail("This test is disabled and should not run");
    }

リスクとしては、時間の経過とともにコードベースが移動し、無効化されたテストがコードの目的に合わせて更新されず、最終的には冗長で無意味なものとなり、再び有効化されない可能性があることです。

コードレビューでは、アノテーションパラメータとして説明文を追加すると良いと指摘されることがあります。


@Disabled ("Disabled to demonstrate adding a reason")
    void thisTestMethodHasDisabledReason(){
   Assertions.fail("This test is disabled and should not run");
   }

Sensei レシピ

説明なしに@Disabledが追加されたことを検知するレシピと、なぜ無効にしたのかを説明する実際の理由を追加するように思い出させるQuick Fixを書くことができます。

自分が何をしようかと考えたときに

  • パラメータなしでDisabledアノテーションにマッチ
  • TODO: add a description here "というマーカーテキストのパラメータを持つようにDisabledアノテーションを変更しました。

ワーニングレシピの作成

私はAlt+Enterで新しいレシピを作成しています。

新しいレシピの作成機能

そして、一般情報の中に基本的な説明文を追加します。

一般設定

ルールを警告にすることで、一致するコードはハイライトされますが、明らかなエラーとしては表示されません。

ルールを警告にする

アノテーションの検索

レシピエディターでは、「検索」をアノテーションに合わせて変更します。

これにより、プレビューに表示されているすべての注釈がハイライトされます。

レシピ編集部

そうすると、今度はアノテーションの種類でフィルタリングしたくなります。

Disabled を使うこともできますが、クラスをパッケージで完全に修飾することで、JUnit 5 のアノテーションにのみ合致するようにしています。プレビューではソースコードが表示されているので、実際のコードから簡単にコピー&ペーストして、タイプミスを防ぐことができます。

そして、Parametersのないアノテーションだけをマッチさせたいのですが、これはGUIでできます。

レシピの設定

i.e.検索

search:
  annotation:
    type: "org.junit.jupiter.api.Disabled"
    without:
       parameters:
          - {}

リライトクイックフィックスアクションの作成

今回のQuickFixでは、リライトアクションを使用します。

変数の表示機能を使って、Mustacheの変数を表示し、内容をプレビューしています。

QuickFixの設定

そして、プレースマーカーのコメントを作成するために必要な追加のコードを追加します。

追加コードでプレースマーカーコメントを作成する

i.e. QuickFix。

availableFixes:
 - name: "Add a todo comment parameter"
   actions:
   - rewrite:
      to: "{{{ . }}}(\"TODO: add a description here\")"
      target: "self"

Sensei 活動中

レシピ作成の様子を短い動画でご紹介します。

概要

書き換えクイックフィックスを構築する際には、書き換えたいコード要素を検索できれば、それが行動できる自己の実体となるため、より簡単になります。

この例では、リライトアクションを使ってアノテーションを修正しました。Rewriteは、どんなコード要素にも適用できる汎用的なアクションであり、デフォルトで使用するのに適しています。

リソースを見る
リソースを見る

著者

アラン・リチャードソン

もっと知りたい?

セキュアコーディングに関する最新の知見をブログでご紹介しています。

当社の豊富なリソースライブラリは、安全なコーディングアップスキルに対する人間的なアプローチを強化することを目的としています。

ブログを見る
もっと知りたい?

開発者主導のセキュリティに関する最新の研究成果を入手する

ホワイトペーパーからウェビナーまで、開発者主導のセキュアコーディングを始めるために役立つリソースが満載のリソースライブラリです。今すぐご覧ください。

リソース・ハブ

Rewriteアクションによるアノテーションへのパラメータ追加

2020年10月26日発行
アラン・リチャードソン著

このブログ記事では、私たちは

  • アノテーションの検索と照合のデモンストレーション
  • ヒゲのテンプレートを使ったアノテーション

Sensei は、問題のあるコードパターンを照合して、合意した実装に修正する機能を提供します。この例では、@Disabled without a parameterを問題のあるコードパターンとして使用しています。

無効化テストのアノテーション

特定の理由なしにテストを無効にすると、無効にした理由を忘れてしまうため、長期的には問題となります。


@Disabled
   void thisTestMethodHasNoDisabledReason(){
    Assertions.fail("This test is disabled and should not run");
    }

リスクとしては、時間の経過とともにコードベースが移動し、無効化されたテストがコードの目的に合わせて更新されず、最終的には冗長で無意味なものとなり、再び有効化されない可能性があることです。

コードレビューでは、アノテーションパラメータとして説明文を追加すると良いと指摘されることがあります。


@Disabled ("Disabled to demonstrate adding a reason")
    void thisTestMethodHasDisabledReason(){
   Assertions.fail("This test is disabled and should not run");
   }

Sensei レシピ

説明なしに@Disabledが追加されたことを検知するレシピと、なぜ無効にしたのかを説明する実際の理由を追加するように思い出させるQuick Fixを書くことができます。

自分が何をしようかと考えたときに

  • パラメータなしでDisabledアノテーションにマッチ
  • TODO: add a description here "というマーカーテキストのパラメータを持つようにDisabledアノテーションを変更しました。

ワーニングレシピの作成

私はAlt+Enterで新しいレシピを作成しています。

新しいレシピの作成機能

そして、一般情報の中に基本的な説明文を追加します。

一般設定

ルールを警告にすることで、一致するコードはハイライトされますが、明らかなエラーとしては表示されません。

ルールを警告にする

アノテーションの検索

レシピエディターでは、「検索」をアノテーションに合わせて変更します。

これにより、プレビューに表示されているすべての注釈がハイライトされます。

レシピ編集部

そうすると、今度はアノテーションの種類でフィルタリングしたくなります。

Disabled を使うこともできますが、クラスをパッケージで完全に修飾することで、JUnit 5 のアノテーションにのみ合致するようにしています。プレビューではソースコードが表示されているので、実際のコードから簡単にコピー&ペーストして、タイプミスを防ぐことができます。

そして、Parametersのないアノテーションだけをマッチさせたいのですが、これはGUIでできます。

レシピの設定

i.e.検索

search:
  annotation:
    type: "org.junit.jupiter.api.Disabled"
    without:
       parameters:
          - {}

リライトクイックフィックスアクションの作成

今回のQuickFixでは、リライトアクションを使用します。

変数の表示機能を使って、Mustacheの変数を表示し、内容をプレビューしています。

QuickFixの設定

そして、プレースマーカーのコメントを作成するために必要な追加のコードを追加します。

追加コードでプレースマーカーコメントを作成する

i.e. QuickFix。

availableFixes:
 - name: "Add a todo comment parameter"
   actions:
   - rewrite:
      to: "{{{ . }}}(\"TODO: add a description here\")"
      target: "self"

Sensei 活動中

レシピ作成の様子を短い動画でご紹介します。

概要

書き換えクイックフィックスを構築する際には、書き換えたいコード要素を検索できれば、それが行動できる自己の実体となるため、より簡単になります。

この例では、リライトアクションを使ってアノテーションを修正しました。Rewriteは、どんなコード要素にも適用できる汎用的なアクションであり、デフォルトで使用するのに適しています。

弊社製品や関連するセキュアコーディングのトピックに関する情報をお送りする許可をお願いします。当社は、お客様の個人情報を細心の注意を払って取り扱い、マーケティング目的で他社に販売することは決してありません。

送信
フォームを送信するには、「Analytics」のCookieを有効にしてください。完了したら、再度無効にしてください。