// Path: src/main/java/org/seasar/doma/extension/gen/GenNullPointerException.java
// public class GenNullPointerException extends GenException {
// 
//   private static final long serialVersionUID = 1L;
// 
//   /** {@code null} であるパラメータの名前 */
//   protected final String parameterName;
// 
//   /**
//    * インスタンスを構築します。
//    *
//    * @param parameterName {@code null} であるパラメータの名前
//    */
//   public GenNullPointerException(String parameterName) {
//     super(Message.DOMAGEN0001, parameterName);
//     this.parameterName = parameterName;
//   }
// 
//   /**
//    * {@code null} であるパラメータの名前を返します。
//    *
//    * @return {@code null} であるパラメータの名前
//    */
//   public String getParameterName() {
//     return parameterName;
//   }
// }
// 
// Path: src/main/java/org/seasar/doma/extension/gen/MessageResource.java
// public interface MessageResource {
// 
//   /**
//    * 一意のコードを返します。
//    *
//    * @return コード
//    */
//   String getCode();
// 
//   /**
//    * メッセージパターンの文字列を返します。
//    *
//    * <p>この文字列は{0}や{1}といった置換パラメータを含みます。
//    *
//    * @return メッセージパターンの文字列
//    */
//   String getMessagePattern();
// 
//   /**
//    * メッセージを返します。
//    *
//    * <p>メッセージパターンに含まれる置換パラメータは引数により解決されます。
//    *
//    * @param args 置換パラメータに対応する引数
//    * @return メッセージ
//    */
//   String getMessage(Object... args);
// }


import java.util.Collections;
import java.util.EnumSet;
import java.util.Enumeration;
import java.util.LinkedList;
import java.util.List;
import java.util.ResourceBundle;
import org.seasar.doma.extension.gen.GenNullPointerException;
import org.seasar.doma.extension.gen.MessageResource;
package org.seasar.doma.extension.gen.internal.message;


/**
 * {@link Enum} で表現されたメッセージコードを扱うリソースバンドルです。
 *
 * @author taedium
 */
public abstract class AbstractMessageResourceBundle<M extends Enum<M> & MessageResource>
    extends ResourceBundle {

  protected final Class<M> messageCodeClass;

// Path: src/main/java/org/seasar/doma/extension/gen/GenNullPointerException.java
// public class GenNullPointerException extends GenException {
// 
//   private static final long serialVersionUID = 1L;
// 
//   /** {@code null} であるパラメータの名前 */
//   protected final String parameterName;
// 
//   /**
//    * インスタンスを構築します。
//    *
//    * @param parameterName {@code null} であるパラメータの名前
//    */
//   public GenNullPointerException(String parameterName) {
//     super(Message.DOMAGEN0001, parameterName);
//     this.parameterName = parameterName;
//   }
// 
//   /**
//    * {@code null} であるパラメータの名前を返します。
//    *
//    * @return {@code null} であるパラメータの名前
//    */
//   public String getParameterName() {
//     return parameterName;
//   }
// }
// 
// Path: src/main/java/org/seasar/doma/extension/gen/MessageResource.java
// public interface MessageResource {
// 
//   /**
//    * 一意のコードを返します。
//    *
//    * @return コード
//    */
//   String getCode();
// 
//   /**
//    * メッセージパターンの文字列を返します。
//    *
//    * <p>この文字列は{0}や{1}といった置換パラメータを含みます。
//    *
//    * @return メッセージパターンの文字列
//    */
//   String getMessagePattern();
// 
//   /**
//    * メッセージを返します。
//    *
//    * <p>メッセージパターンに含まれる置換パラメータは引数により解決されます。
//    *
//    * @param args 置換パラメータに対応する引数
//    * @return メッセージ
//    */
//   String getMessage(Object... args);
// }


// Path: src/main/java/org/seasar/doma/extension/gen/internal/message/AbstractMessageResourceBundle.java
import java.util.Collections;
import java.util.EnumSet;
import java.util.Enumeration;
import java.util.LinkedList;
import java.util.List;
import java.util.ResourceBundle;
import org.seasar.doma.extension.gen.GenNullPointerException;
import org.seasar.doma.extension.gen.MessageResource;

package org.seasar.doma.extension.gen.internal.message;


/**
 * {@link Enum} で表現されたメッセージコードを扱うリソースバンドルです。
 *
 * @author taedium
 */
public abstract class AbstractMessageResourceBundle<M extends Enum<M> & MessageResource>
    extends ResourceBundle {

  protected final Class<M> messageCodeClass;

  public AbstractMessageResourceBundle(Class<M> messageCodeClass) {