OSDN Git Service

インタフェース空実装対応
authorOlyutorskii <olyutorskii@users.osdn.me>
Thu, 25 Apr 2013 13:38:52 +0000 (22:38 +0900)
committerOlyutorskii <olyutorskii@users.osdn.me>
Thu, 25 Apr 2013 13:38:52 +0000 (22:38 +0900)
src/main/java/jp/sfjp/mikutoga/corelib/EmptyProxyFactory.java [moved from src/main/java/jp/sfjp/mikutoga/pmd/parser/NullHandler.java with 54% similarity]
src/main/java/jp/sfjp/mikutoga/pmd/parser/PmdParserBase.java
src/main/java/jp/sfjp/mikutoga/pmd/parser/PmdParserExt1.java
src/main/java/jp/sfjp/mikutoga/pmd/parser/PmdParserExt2.java
src/main/java/jp/sfjp/mikutoga/pmd/parser/PmdParserExt3.java
src/main/java/jp/sfjp/mikutoga/pmd/parser/PmdUnifiedHandler.java
src/main/java/jp/sourceforge/mikutoga/vmd/parser/VmdUnifiedHandler.java [new file with mode: 0644]

@@ -1,46 +1,51 @@
 /*
- * PMD nothing handler
+ * nothing proxy factory
  *
  * License : The MIT License
  * Copyright(c) 2013 MikuToga Partners
  */
 
-package jp.sfjp.mikutoga.pmd.parser;
+package jp.sfjp.mikutoga.corelib;
 
 import java.lang.reflect.InvocationHandler;
 import java.lang.reflect.Method;
 import java.lang.reflect.Proxy;
 
 /**
- * 何もしない統合ハンドラを提供する。
+ * 何もしないインタフェース実装を生成する。
  */
-public final class NullHandler{
+public final class EmptyProxyFactory {
 
-    /** 何もしない統合ハンドラ。 */
-    public static final PmdUnifiedHandler HANDLER;
-
-    static{
-        Class types[] = { PmdUnifiedHandler.class };
-        ClassLoader loader = types[0].getClassLoader();
-        InvocationHandler nothing = new Nothing();
-
-        Object proxy = Proxy.newProxyInstance(loader, types, nothing);
-        assert proxy instanceof PmdUnifiedHandler;
-
-        HANDLER = (PmdUnifiedHandler) proxy;
-    }
+    /** 何もせず何も返さないInvoker。 */
+    public static InvocationHandler NOTHING_INVOKER = new Nothing();
 
 
     /**
      * ダミーコンストラクタ。
      */
-    private NullHandler(){
+    private EmptyProxyFactory(){
         assert false;
         throw new AssertionError();
     }
 
 
     /**
+     * 何もしないインタフェース実装のインスタンスを生成する。
+     * <p>インタフェースの各メソッド戻り値はvoidでなければならない。
+     * @param types インタフェース群
+     * @return インタフェースを実装したインスタンス。
+     */
+    public static Object buildEmptyProxy(Class<?>... types){
+        ClassLoader loader = types[0].getClassLoader();
+
+        Object proxy =
+                Proxy.newProxyInstance(loader, types, NOTHING_INVOKER);
+
+        return proxy;
+    }
+
+
+    /**
      * 何もしないInvoker実装。
      */
     private static class Nothing implements InvocationHandler{
index 659c82c..e991ad0 100644 (file)
@@ -54,11 +54,11 @@ public class PmdParserBase extends CommonParser {
 
     private final TextDecoder decoderWin31j  = new TextDecoder(CS_WIN31J);
 
-    private PmdBasicHandler basicHandler =       NullHandler.HANDLER;
-    private PmdShapeHandler shapeHandler =       NullHandler.HANDLER;
-    private PmdMaterialHandler materialHandler = NullHandler.HANDLER;
-    private PmdBoneHandler boneHandler =         NullHandler.HANDLER;
-    private PmdMorphHandler morphHandler =       NullHandler.HANDLER;
+    private PmdBasicHandler basicHandler =       PmdUnifiedHandler.EMPTY;
+    private PmdShapeHandler shapeHandler =       PmdUnifiedHandler.EMPTY;
+    private PmdMaterialHandler materialHandler = PmdUnifiedHandler.EMPTY;
+    private PmdBoneHandler boneHandler =         PmdUnifiedHandler.EMPTY;
+    private PmdMorphHandler morphHandler =       PmdUnifiedHandler.EMPTY;
 
     private int boneCount      = -1;
     private int morphCount     = -1;
@@ -100,7 +100,7 @@ public class PmdParserBase extends CommonParser {
      */
     public void setBasicHandler(PmdBasicHandler handler){
         if(handler == null){
-            this.basicHandler = NullHandler.HANDLER;
+            this.basicHandler = PmdUnifiedHandler.EMPTY;
         }else{
             this.basicHandler = handler;
         }
@@ -113,7 +113,7 @@ public class PmdParserBase extends CommonParser {
      */
     public void setShapeHandler(PmdShapeHandler handler){
         if(handler == null){
-            this.shapeHandler = NullHandler.HANDLER;
+            this.shapeHandler = PmdUnifiedHandler.EMPTY;
         }else{
             this.shapeHandler = handler;
         }
@@ -126,7 +126,7 @@ public class PmdParserBase extends CommonParser {
      */
     public void setMaterialHandler(PmdMaterialHandler handler){
         if(handler == null){
-            this.materialHandler = NullHandler.HANDLER;
+            this.materialHandler = PmdUnifiedHandler.EMPTY;
         }else{
             this.materialHandler = handler;
         }
@@ -139,7 +139,7 @@ public class PmdParserBase extends CommonParser {
      */
     public void setBoneHandler(PmdBoneHandler handler){
         if(handler == null){
-            this.boneHandler = NullHandler.HANDLER;
+            this.boneHandler = PmdUnifiedHandler.EMPTY;
         }else{
             this.boneHandler = handler;
         }
@@ -152,7 +152,7 @@ public class PmdParserBase extends CommonParser {
      */
     public void setMorphHandler(PmdMorphHandler handler){
         if(handler == null){
-            this.morphHandler = NullHandler.HANDLER;
+            this.morphHandler = PmdUnifiedHandler.EMPTY;
         }else{
             this.morphHandler = handler;
         }
index 643b3c2..fbab5a8 100644 (file)
@@ -18,7 +18,7 @@ import jp.sfjp.mikutoga.pmd.PmdLimits;
  */
 public class PmdParserExt1 extends PmdParserBase {
 
-    private PmdEngHandler engHandler = NullHandler.HANDLER;
+    private PmdEngHandler engHandler = PmdUnifiedHandler.EMPTY;
     private boolean hasEnglishInfo = true;
 
     /**
@@ -36,7 +36,7 @@ public class PmdParserExt1 extends PmdParserBase {
      */
     public void setEngHandler(PmdEngHandler handler){
         if(handler == null){
-            this.engHandler = NullHandler.HANDLER;
+            this.engHandler = PmdUnifiedHandler.EMPTY;
         }else{
             this.engHandler = handler;
         }
index ff5433a..3e6ce5c 100644 (file)
@@ -18,7 +18,7 @@ import jp.sfjp.mikutoga.pmd.PmdLimits;
  */
 public class PmdParserExt2 extends PmdParserExt1 {
 
-    private PmdToonHandler toonHandler = NullHandler.HANDLER;
+    private PmdToonHandler toonHandler = PmdUnifiedHandler.EMPTY;
 
     /**
      * コンストラクタ。
@@ -35,7 +35,7 @@ public class PmdParserExt2 extends PmdParserExt1 {
      */
     public void setToonHandler(PmdToonHandler handler){
         if(handler == null){
-            this.toonHandler = NullHandler.HANDLER;
+            this.toonHandler = PmdUnifiedHandler.EMPTY;
         }else{
             this.toonHandler = handler;
         }
index e3cf20c..555f185 100644 (file)
@@ -18,8 +18,8 @@ import jp.sfjp.mikutoga.pmd.PmdLimits;
  */
 public class PmdParserExt3 extends PmdParserExt2 {
 
-    private PmdRigidHandler rigidHandler = NullHandler.HANDLER;
-    private PmdJointHandler jointHandler = NullHandler.HANDLER;
+    private PmdRigidHandler rigidHandler = PmdUnifiedHandler.EMPTY;
+    private PmdJointHandler jointHandler = PmdUnifiedHandler.EMPTY;
 
     /**
      * コンストラクタ。
@@ -36,7 +36,7 @@ public class PmdParserExt3 extends PmdParserExt2 {
      */
     public void setRigidHandler(PmdRigidHandler handler){
         if(handler == null){
-            this.rigidHandler = NullHandler.HANDLER;
+            this.rigidHandler = PmdUnifiedHandler.EMPTY;
         }else{
             this.rigidHandler = handler;
         }
@@ -49,7 +49,7 @@ public class PmdParserExt3 extends PmdParserExt2 {
      */
     public void setJointHandler(PmdJointHandler handler){
         if(handler == null){
-            this.jointHandler = NullHandler.HANDLER;
+            this.jointHandler = PmdUnifiedHandler.EMPTY;
         }else{
             this.jointHandler = handler;
         }
index 2d06bb3..c849e89 100644 (file)
@@ -7,6 +7,8 @@
 
 package jp.sfjp.mikutoga.pmd.parser;
 
+import jp.sfjp.mikutoga.corelib.EmptyProxyFactory;
+
 /**
  * PMDパーサ用の統合ハンドラ。
  */
@@ -20,4 +22,10 @@ public interface PmdUnifiedHandler
             PmdToonHandler,
             PmdRigidHandler,
             PmdJointHandler {
+
+    /** 何もしない統合ハンドラ。 */
+    PmdUnifiedHandler EMPTY =
+            (PmdUnifiedHandler)
+            ( EmptyProxyFactory.buildEmptyProxy(PmdUnifiedHandler.class) );
+
 }
diff --git a/src/main/java/jp/sourceforge/mikutoga/vmd/parser/VmdUnifiedHandler.java b/src/main/java/jp/sourceforge/mikutoga/vmd/parser/VmdUnifiedHandler.java
new file mode 100644 (file)
index 0000000..ddc6197
--- /dev/null
@@ -0,0 +1,25 @@
+/*
+ * VMD unified handler
+ *
+ * License : The MIT License
+ * Copyright(c) 2013 MikuToga Partners
+ */
+
+package jp.sourceforge.mikutoga.vmd.parser;
+
+import jp.sfjp.mikutoga.corelib.EmptyProxyFactory;
+
+/**
+ * VMDパーサ用の統合ハンドラ。
+ */
+public interface VmdUnifiedHandler
+    extends VmdBasicHandler,
+            VmdCameraHandler,
+            VmdLightingHandler {
+
+    /** 何もしない統合ハンドラ。 */
+    VmdUnifiedHandler EMPTY =
+            (VmdUnifiedHandler)
+            ( EmptyProxyFactory.buildEmptyProxy(VmdUnifiedHandler.class) );
+
+}