001package com.streamconverter.pmd;
002
003import java.io.Serial;
004import java.io.Serializable;
005
006/**
007 * PMD 違反情報。
008 *
009 * <p>パイプライン内コマンド間の中間データとして {@link java.io.ObjectOutputStream} / {@link java.io.ObjectInputStream}
010 * で受け渡しされる。
011 *
012 * @param file ファイルパス(プロジェクトルートからの相対パス)
013 * @param line 違反行番号
014 * @param rule ルール名
015 * @param ruleset ルールセット名
016 * @param priority 優先度(0=未定義、1=高〜5=低)
017 * @param description 違反の説明
018 * @param className クラス名
019 * @param method メソッド名
020 * @param variable 変数名
021 */
022public record PmdViolation(
023    String file,
024    int line,
025    String rule,
026    String ruleset,
027    int priority,
028    String description,
029    String className,
030    String method,
031    String variable)
032    implements Serializable {
033  @Serial private static final long serialVersionUID = 1L;
034
035  public PmdViolation {
036    if (line < 0) {
037      throw new IllegalArgumentException("line must be >= 0, got: " + line);
038    }
039    if (priority < 0 || priority > 5) {
040      throw new IllegalArgumentException("priority must be 0-5, got: " + priority);
041    }
042  }
043}