/*
- * 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{
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;
*/
public void setBasicHandler(PmdBasicHandler handler){
if(handler == null){
- this.basicHandler = NullHandler.HANDLER;
+ this.basicHandler = PmdUnifiedHandler.EMPTY;
}else{
this.basicHandler = handler;
}
*/
public void setShapeHandler(PmdShapeHandler handler){
if(handler == null){
- this.shapeHandler = NullHandler.HANDLER;
+ this.shapeHandler = PmdUnifiedHandler.EMPTY;
}else{
this.shapeHandler = handler;
}
*/
public void setMaterialHandler(PmdMaterialHandler handler){
if(handler == null){
- this.materialHandler = NullHandler.HANDLER;
+ this.materialHandler = PmdUnifiedHandler.EMPTY;
}else{
this.materialHandler = handler;
}
*/
public void setBoneHandler(PmdBoneHandler handler){
if(handler == null){
- this.boneHandler = NullHandler.HANDLER;
+ this.boneHandler = PmdUnifiedHandler.EMPTY;
}else{
this.boneHandler = handler;
}
*/
public void setMorphHandler(PmdMorphHandler handler){
if(handler == null){
- this.morphHandler = NullHandler.HANDLER;
+ this.morphHandler = PmdUnifiedHandler.EMPTY;
}else{
this.morphHandler = handler;
}
*/
public class PmdParserExt1 extends PmdParserBase {
- private PmdEngHandler engHandler = NullHandler.HANDLER;
+ private PmdEngHandler engHandler = PmdUnifiedHandler.EMPTY;
private boolean hasEnglishInfo = true;
/**
*/
public void setEngHandler(PmdEngHandler handler){
if(handler == null){
- this.engHandler = NullHandler.HANDLER;
+ this.engHandler = PmdUnifiedHandler.EMPTY;
}else{
this.engHandler = handler;
}
*/
public class PmdParserExt2 extends PmdParserExt1 {
- private PmdToonHandler toonHandler = NullHandler.HANDLER;
+ private PmdToonHandler toonHandler = PmdUnifiedHandler.EMPTY;
/**
* コンストラクタ。
*/
public void setToonHandler(PmdToonHandler handler){
if(handler == null){
- this.toonHandler = NullHandler.HANDLER;
+ this.toonHandler = PmdUnifiedHandler.EMPTY;
}else{
this.toonHandler = handler;
}
*/
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;
/**
* コンストラクタ。
*/
public void setRigidHandler(PmdRigidHandler handler){
if(handler == null){
- this.rigidHandler = NullHandler.HANDLER;
+ this.rigidHandler = PmdUnifiedHandler.EMPTY;
}else{
this.rigidHandler = handler;
}
*/
public void setJointHandler(PmdJointHandler handler){
if(handler == null){
- this.jointHandler = NullHandler.HANDLER;
+ this.jointHandler = PmdUnifiedHandler.EMPTY;
}else{
this.jointHandler = handler;
}
package jp.sfjp.mikutoga.pmd.parser;
+import jp.sfjp.mikutoga.corelib.EmptyProxyFactory;
+
/**
* PMDパーサ用の統合ハンドラ。
*/
PmdToonHandler,
PmdRigidHandler,
PmdJointHandler {
+
+ /** 何もしない統合ハンドラ。 */
+ PmdUnifiedHandler EMPTY =
+ (PmdUnifiedHandler)
+ ( EmptyProxyFactory.buildEmptyProxy(PmdUnifiedHandler.class) );
+
}
--- /dev/null
+/*
+ * 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) );
+
+}