001package com.streamconverter.sloc; 002 003import java.io.Serial; 004import java.io.Serializable; 005 006/** 007 * モジュールごとの SLOC(実行可能行数)情報。 008 * 009 * <p>パイプライン内コマンド間の中間データとして {@link java.io.ObjectOutputStream} / {@link java.io.ObjectInputStream} 010 * で受け渡しされる。 011 * 012 * @param name モジュール名 013 * @param lines 総行数(missed + covered) 014 * @param covered カバー済み行数 015 * @param missed 未カバー行数 016 */ 017public record ModuleSloc(String name, int lines, int covered, int missed) implements Serializable { 018 @Serial private static final long serialVersionUID = 1L; 019 020 /** 合計行を表す {@link #name()} の標準値。 */ 021 public static final String TOTAL_NAME = "Total"; 022 023 public ModuleSloc { 024 if (name == null || name.isBlank()) { 025 throw new IllegalArgumentException("name must not be null or blank"); 026 } 027 if (covered < 0) { 028 throw new IllegalArgumentException("covered must be >= 0, got: " + covered); 029 } 030 if (missed < 0) { 031 throw new IllegalArgumentException("missed must be >= 0, got: " + missed); 032 } 033 if (lines != missed + covered) { 034 throw new IllegalArgumentException( 035 "lines must equal missed + covered (" 036 + missed 037 + " + " 038 + covered 039 + " = " 040 + (missed + covered) 041 + "), got: " 042 + lines); 043 } 044 } 045}