2727import org .msgpack .util .android .DalvikVmChecker ;
2828
2929public 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" ;
3034
3135 private static boolean enableDynamicCodeGeneration () {
3236 return !DalvikVmChecker .isDalvikVm ();
3337 }
34-
35- private static final Constructor <?> javassistTemplateBuilderConstructor ;
36- static {
37- Constructor <?> constructor = null ;
38- try {
39- if (!DalvikVmChecker .isDalvikVm ()) {
40- Class <?> clazz = Class .forName ("org.msgpack.template.builder.JavassistTemplateBuilder" );
41- constructor = clazz .getConstructor (TemplateRegistry .class , ClassLoader .class );
42- }
43- } catch (ClassNotFoundException e ) {
44- // DalvikVM
45- } catch (NoSuchMethodException e ) {
46- // TODO: should output any message ?
47- }
48- finally {
49- javassistTemplateBuilderConstructor = constructor ;
50- }
51- }
5238
5339 protected List <TemplateBuilder > templateBuilders ;
5440
@@ -71,40 +57,45 @@ protected void reset(final TemplateRegistry registry, final ClassLoader cl) {
7157 // FIXME
7258 // Javassist{,Beans}TemplateBuilder should be created with reflection for android.
7359
74- TemplateBuilder javassistTemplateBuilder = null ;
75- if (javassistTemplateBuilderConstructor != null ) {
76- try {
77- javassistTemplateBuilder = (TemplateBuilder ) javassistTemplateBuilderConstructor .newInstance (registry , cl );
78- } catch (InstantiationException e ) {
79- new IllegalStateException (e );
80- } catch (IllegalAccessException e ) {
81- new IllegalStateException (e );
82- } catch (InvocationTargetException e ) {
83- new IllegalStateException (e );
84- }
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 ;
8565 }
8666
87- // builder
88- TemplateBuilder builder ;
67+ // create builder chain
68+ forceBuilder = createForceTemplateBuilder (forceBuilderClassName , registry , cl );
69+ TemplateBuilder builder = forceBuilder ;
8970 templateBuilders .add (new ArrayTemplateBuilder (registry ));
9071 templateBuilders .add (new OrdinalEnumTemplateBuilder (registry ));
91- if (enableDynamicCodeGeneration () && javassistTemplateBuilder != null ) { // use dynamic code generation
92- // forceBuilder
93- forceBuilder = javassistTemplateBuilder ;
94-
95- builder = forceBuilder ;
96- templateBuilders .add (builder );
97- // FIXME #MN next version
98- // templateBuilders.add(new
99- // JavassistBeansTemplateBuilder(registry));
100- templateBuilders .add (new ReflectionBeansTemplateBuilder (registry ));
101- } else { // use reflection
102- // forceBuilder
103- forceBuilder = new ReflectionTemplateBuilder (registry );
104- builder = forceBuilder ;
105- templateBuilders .add (builder );
106- templateBuilders .add (new ReflectionBeansTemplateBuilder (registry ));
107- }
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 null ; // TODO
10899 }
109100
110101 public TemplateBuilder getForceBuilder () {
0 commit comments