- muga_nishizawa
- 3053
- 0
- 1
- 0
immutableだとコレありかな: static private TemplateRegistry rootRegistry = new TemplateRegistry(); private TemplateRegistry parent = rootRegistry;
2011-08-20 12:36:33デフォルトでregisterされているクラスが、java.* なパッケージのクラス=必ずbootstrap class loaderからロードされるクラスだけである前提。
2011-08-20 12:37:35parent.lookup ではなく parent.cache.get なので、parentが1階層しか巡られない。これは…なんでだろう。見つからなかったときにthrowされてcatchするのが遅いのはあって…
2011-08-20 12:48:29instanceof ParameterizedType と MessagePackable.class.isAssignableFrom のチェックが終わったら、lookupRecursiveを呼ぶのが良いのかな。
2011-08-20 12:50:28lookupRecursiveは、見つからなかったときにbuildも例外も投げないで、return nullするような。
2011-08-20 12:51:57それで parent.cache.get を parent.lookupRecursive に。そうすると superclass/interface lookup のキャッシュもparentに作成されるようになるかな。
2011-08-20 12:53:47細かいけども、parent.lookupRecurisveしてTemplateが見つかったときに、そのキャッシュをthis.cacheにも入れるかどうかは微妙なところ。入れても良い気がするけど、入れなくても良い気もする…。
2011-08-20 12:54:48そして BootstrapTemplateRegistry extends TemplateRegistry を作るのは案。デフォルトで有効なTemplateの内で、java.* なクラスのTemplateだけが登録されているもの。ヤバイ匂いもする…
2011-08-20 12:57:05lookup: ParameterizedTypeチェック→MessagePackable.class.isAssignableFromチェック→lookupRecursive; lookupRecursive: cache.get→parent.lookupRecursive
2011-08-20 13:00:38そういえば MessagePackable.class.isAssignableFromって、MessagePackable.classが登録されていれば、interface lookup でヒットするような。
2011-08-20 13:01:26lookup: ParameterizedTypeチェック→lookupRecursive; lookupRecursive: cache.get→parent.lookupRecursive→interface lookup→superclass lookup→build か。
2011-08-20 13:03:39lookup: ParameterizedTypeチェック→lookupRecursive; lookupRecursive: cache.get→parent.lookupRecursive→chain.select→interface→superclass→例外 でどうでしょ
2011-08-20 13:05:34@muga_nishizawa 例外の前ですね! forceAndRegister→return buildAndRegister
2011-08-20 13:09:24現在、superclass -> exception の間ですが、chain の中を想定してますか?
2011-08-20 13:09:26ParameterizedTypeチェック→lookupRecursive; lookupRecursive: cache.get→parent.lookupRecursive→chain.select→interface→superclass→forceBuild→例外
2011-08-20 13:09:56@frsyuki ん? parent.lookupRecursive call がそこということは、chain.select よりも parent.chain.select が先にされると思います。それは問題ない?
2011-08-20 13:12:06@muga_nishizawa 「例外の中ですね!forceAndRegister→return build…」これ気にしないでください>< 書きたかったのは:if(forceBuild)の中、buildAndRegister→return buildAndRegisterでは?
2011-08-20 13:12:41parent.lookupRecursiveを先にすると、要するにはrootのchain.selectが実行されることに。ポイントは、キャッシュをどこに入れるかと、build中にlookupもするという点か…
2011-08-20 13:17:25