EMMA Coverage Report (generated Thu Jan 20 11:39:44 EST 2011)
[all classes][com.hammurapi.convert]

COVERAGE SUMMARY FOR SOURCE FILE [AbstractReflectiveAtomicConvertersBundle.java]

nameclass, %method, %block, %line, %
AbstractReflectiveAtomicConvertersBundle.java100% (2/2)100% (4/4)92%  (136/148)85%  (22/26)

COVERAGE BREAKDOWN BY CLASS AND METHOD

nameclass, %method, %block, %line, %
     
class AbstractReflectiveAtomicConvertersBundle$1100% (1/1)100% (2/2)83%  (54/65)77%  (10/13)
convert (Object, Converter, Context, ClassLoader): Object 100% (1/1)80%  (43/54)73%  (8/11)
AbstractReflectiveAtomicConvertersBundle$1 (AbstractReflectiveAtomicConverter... 100% (1/1)100% (11/11)100% (2/2)
     
class AbstractReflectiveAtomicConvertersBundle100% (1/1)100% (2/2)99%  (82/83)93%  (13/14)
getConverters (): Collection 100% (1/1)99%  (79/80)92%  (12/13)
AbstractReflectiveAtomicConvertersBundle (): void 100% (1/1)100% (3/3)100% (1/1)

1/*
2@license.text@
3 */
4package com.hammurapi.convert;
5 
6import java.lang.reflect.Method;
7import java.util.ArrayList;
8import java.util.Collection;
9 
10import com.hammurapi.common.Context;
11 
12 
13 
14/**
15 * @author Pavel Vlasov
16 */
17public abstract class AbstractReflectiveAtomicConvertersBundle implements AtomicConvertersBundle {
18 
19        @SuppressWarnings("unchecked")
20        @Override
21        public Collection<AtomicConverter<? extends Object, ? extends Object>> getConverters() {
22                Collection<AtomicConverter<? extends Object, ? extends Object>> ret = new ArrayList<AtomicConverter<? extends Object,? extends Object>>();
23                Z: for (Method m: this.getClass().getMethods()) {                                                
24                        Class<?>[] pta = m.getParameterTypes();
25                        Class<Object> targetType = (Class<Object>) m.getReturnType();
26                        if (m.getAnnotation(ConverterMethod.class)!=null && !void.class.equals(targetType) && pta.length>0) {
27                                for (int i=1; i<pta.length; ++i) {
28                                        if (!(Context.class.equals(pta[i]) || Converter.class.equals(pta[i]))) {
29                                                continue Z;
30                                        }
31                                }
32                                final Method converterMethod = m;
33                                Class<Object> sourceType = (Class<Object>) pta[0];
34                                AtomicConverterBase<Object, Object> converter = new AtomicConverterBase<Object, Object>(sourceType, targetType) {
35 
36                                        @Override
37                                        public Object convert(Object source, Converter master, Context context, ClassLoader classLoader) {
38                                                try {
39                                                        Class<?>[] pt = converterMethod.getParameterTypes();
40                                                        Object[] args = new Object[pt.length];
41                                                        args[0] = source;
42                                                        for (int i=1; i<pt.length; ++i) {
43                                                                if (Context.class.equals(pt[i])) {
44                                                                        args[i] = context;
45                                                                } else if (Converter.class.equals(pt[i])) {
46                                                                        args[i] = master;
47                                                                }                                                                                        
48                                                        }
49                                                        return converterMethod.invoke(AbstractReflectiveAtomicConvertersBundle.this, args);
50                                                } catch (Exception e) {
51                                                        throw new ConversionException(e);
52                                                }
53                                        }
54                                };
55                                ret.add(converter);
56                        }
57                }
58                return ret;
59        }
60 
61                
62}

[all classes][com.hammurapi.convert]
EMMA 2.0.5312 EclEmma Fix 2 (C) Vladimir Roubtsov