1717//
1818package org .msgpack .template .builder ;
1919
20+ import java .lang .reflect .Constructor ;
21+ import java .lang .reflect .InvocationTargetException ;
2022import java .lang .reflect .Type ;
2123import java .util .ArrayList ;
2224import java .util .List ;
2527import org .msgpack .util .android .DalvikVmChecker ;
2628
2729public class TemplateBuilderChain {
30+ private static final String JAVASSIST_TEMPLATE_BUILDER_CLASS_NAME =
31+ "org.msgpack.template.builder.JavassistTemplateBuilder" ;
32+ private static final String REFLECTION_TEMPLATE_BUILDER_CLASS_NAME =
33+ "org.msgpack.template.builder.ReflectionTemplateBuilder" ;
2834
2935 private static boolean enableDynamicCodeGeneration () {
3036 return !DalvikVmChecker .isDalvikVm ();
@@ -51,25 +57,45 @@ protected void reset(final TemplateRegistry registry, final ClassLoader cl) {
5157 // FIXME
5258 // Javassist{,Beans}TemplateBuilder should be created with reflection for android.
5359
54- // forceBuilder
55- forceBuilder = new JavassistTemplateBuilder (registry , cl );
60+ String forceBuilderClassName = null ;
61+ if (enableDynamicCodeGeneration ()) { // use dynamic code generation
62+ forceBuilderClassName = JAVASSIST_TEMPLATE_BUILDER_CLASS_NAME ;
63+ } else {
64+ forceBuilderClassName = REFLECTION_TEMPLATE_BUILDER_CLASS_NAME ;
65+ }
5666
57- // builder
58- TemplateBuilder builder ;
67+ // create builder chain
68+ forceBuilder = createForceTemplateBuilder (forceBuilderClassName , registry , cl );
69+ TemplateBuilder builder = forceBuilder ;
5970 templateBuilders .add (new ArrayTemplateBuilder (registry ));
6071 templateBuilders .add (new OrdinalEnumTemplateBuilder (registry ));
61- if (enableDynamicCodeGeneration ()) { // use dynamic code generation
62- builder = forceBuilder ;
63- templateBuilders .add (builder );
64- // FIXME #MN next version
65- // templateBuilders.add(new
66- // JavassistBeansTemplateBuilder(registry));
67- templateBuilders .add (new ReflectionBeansTemplateBuilder (registry ));
68- } else { // use reflection
69- builder = new ReflectionTemplateBuilder (registry );
70- templateBuilders .add (builder );
71- templateBuilders .add (new ReflectionBeansTemplateBuilder (registry ));
72- }
72+ templateBuilders .add (builder );
73+ templateBuilders .add (new ReflectionBeansTemplateBuilder (registry ));
74+ }
75+
76+ private static TemplateBuilder createForceTemplateBuilder (String className ,
77+ TemplateRegistry registry , ClassLoader cl ) {
78+ try {
79+ Class <?> c = (Class <?>) Class .forName (className ); // TODO
80+ Constructor <?> cons = c .getConstructor (TemplateRegistry .class ,
81+ ClassLoader .class );
82+ return (TemplateBuilder ) cons .newInstance (registry , cl );
83+ } catch (ClassNotFoundException e ) {
84+ e .printStackTrace (); // TODO
85+ } catch (SecurityException e ) {
86+ e .printStackTrace (); // TODO
87+ } catch (NoSuchMethodException e ) {
88+ e .printStackTrace (); // TODO
89+ } catch (IllegalArgumentException e ) {
90+ e .printStackTrace (); // TODO
91+ } catch (InstantiationException e ) {
92+ e .printStackTrace (); // TODO
93+ } catch (IllegalAccessException e ) {
94+ e .printStackTrace (); // TODO
95+ } catch (InvocationTargetException e ) {
96+ e .printStackTrace (); // TODO
97+ }
98+ return new ReflectionTemplateBuilder (registry , cl );
7399 }
74100
75101 public TemplateBuilder getForceBuilder () {
0 commit comments