OSDN Git Service

ステージ名の自動命名
[mikutoga/TogaGem.git] / src / main / java / jp / sourceforge / mikutoga / parser / ParseStage.java
index ea04c7d..3814cba 100644 (file)
@@ -1,47 +1,63 @@
-/*\r
- * parse-processing stage\r
- *\r
- * License : The MIT License\r
- * Copyright(c) 2010 MikuToga Partners\r
- */\r
-\r
-package jp.sourceforge.mikutoga.parser;\r
-\r
-/**\r
- * パース処理の進行ステージ種別を表す。\r
- * ループ構造の識別に用いられる。\r
- */\r
-public class ParseStage {\r
-\r
-    private final String name;\r
-\r
-    /**\r
-     * コンストラクタ。\r
-     * 進行ステージ名は空文字列が指定される。\r
-     */\r
-    public ParseStage(){\r
-        this("");\r
-        return;\r
-    }\r
-\r
-    /**\r
-     * コンストラクタ。\r
-     * @param name 進行ステージ名\r
-     */\r
-    public ParseStage(String name){\r
-        super();\r
-        this.name = name;\r
-        return;\r
-    }\r
-\r
-    /**\r
-     * {@inheritDoc}\r
-     * 進行ステージ名を返す。\r
-     * @return {@inheritDoc} 進行ステージ名\r
-     */\r
-    @Override\r
-    public String toString(){\r
-        return this.name;\r
-    }\r
-\r
-}\r
+/*
+ * parse-processing stage
+ *
+ * License : The MIT License
+ * Copyright(c) 2010 MikuToga Partners
+ */
+
+package jp.sourceforge.mikutoga.parser;
+
+/**
+ * パース処理の進行ステージ種別を表す。
+ * ループ構造の識別に用いられる。
+ */
+public abstract class ParseStage {
+
+    private final String name;
+
+    /**
+     * コンストラクタ。
+     * 進行ステージ名は実行時クラス名(パッケージ名抜き)が指定される。
+     */
+    protected ParseStage(){
+        super();
+
+        Class<?> klass = getClass();
+        String fullName = klass.getName();
+        int idx = fullName.lastIndexOf('.');
+
+        String stripName;
+        if(idx >= 0){
+            stripName = fullName.substring(idx + 1);
+        }else{
+            stripName = fullName;
+        }
+
+        this.name = stripName;
+
+        return;
+    }
+
+    /**
+     * コンストラクタ。
+     * @param name 進行ステージ名
+     * @throws NullPointerException 引数がnull
+     */
+    protected ParseStage(String name) throws NullPointerException{
+        super();
+        if(name == null) throw new NullPointerException();
+        this.name = name;
+        return;
+    }
+
+    /**
+     * {@inheritDoc}
+     * 進行ステージ名を返す。
+     * @return {@inheritDoc} 進行ステージ名
+     */
+    @Override
+    public String toString(){
+        return this.name;
+    }
+
+}