4 * License : The MIT License
5 * Copyright(c) 2010 MikuToga Partners
8 package jp.sourceforge.mikutoga.corelib;
10 import java.lang.reflect.Constructor;
11 import java.lang.reflect.InvocationTargetException;
12 import java.util.List;
13 import jp.sourceforge.mikutoga.pmd.model.SerialNumbered;
18 public final class ListUtil {
25 throw new AssertionError();
29 * リストの出現順にシリアルナンバーを割り振る。
33 public static void assignIndexedSerial(
34 List<? extends SerialNumbered> list){
36 for(SerialNumbered numbered : list){
37 numbered.setSerialNumber(serial);
46 * 追加された要素にはnullが収められる。
47 * リストがすでに指定サイズ以上の要素数を持つ場合、何もしない。
52 public static <E> void extendList(List<E> list, int newSize){
53 int remain = newSize - list.size();
54 if(remain <= 0) return;
56 for(int ct = 1; ct <= remain; ct++){
60 assert list.size() == newSize;
66 * リストのnull要素をデフォルトコンストラクタによるインスタンスで埋める。
73 public static <E> int fillDefCons(List<E> list,
74 Constructor<? extends E> cons){
77 int size = list.size();
78 for(int pt = 0; pt < size; pt++){
79 E elem = list.get(pt);
80 if(elem != null) continue;
83 elem = cons.newInstance();
84 }catch(InstantiationException e){
86 throw new AssertionError(e);
87 }catch(IllegalAccessException e){
89 throw new AssertionError(e);
90 }catch(InvocationTargetException e){
91 Throwable cause = e.getTargetException();
92 if(cause instanceof RuntimeException){
93 throw (RuntimeException) cause;
95 if(cause instanceof Error){
99 throw new AssertionError(e);
110 * リストのnull要素をデフォルトコンストラクタによるインスタンスで埋める。
113 * @param klass デフォルトコンストラクタの属するクラス
116 public static <E> int fillDefCons(List<E> list, Class<? extends E> klass){
117 Constructor<? extends E> cons;
119 cons = klass.getConstructor();
120 }catch(NoSuchMethodException e){
122 throw new AssertionError(e);
125 return fillDefCons(list, cons);
129 * リスト要素数の拡張とデフォルトコンストラクタによる要素埋めを行う。
130 * 追加された要素および既存のnull要素には
131 * デフォルトコンストラクタによるインスタンスが収められる。
134 * @param klass デフォルトコンストラクタの属するクラス
135 * @param newSize 新サイズ
138 public static <E> int prepareDefConsList(List<E> list,
139 Class<? extends E> klass,
141 extendList(list, newSize);
142 int result = fillDefCons(list, klass);