EMMA Coverage Report (generated Mon Mar 20 21:34:30 PST 2006)
[all classes][com.moesol.bindings.platform_sdk.component_services]

COVERAGE SUMMARY FOR SOURCE FILE [InterfaceBuilder.java]

nameclass, %method, %block, %line, %
InterfaceBuilder.java100% (1/1)92%  (11/12)84%  (77/92)81%  (21/26)

COVERAGE BREAKDOWN BY CLASS AND METHOD

nameclass, %method, %block, %line, %
     
class InterfaceBuilder100% (1/1)92%  (11/12)84%  (77/92)81%  (21/26)
getInterfaceClass (): Class 0%   (0/1)0%   (0/3)0%   (0/1)
getIIDField (Class): Field 100% (1/1)40%  (4/10)33%  (1/3)
getIID (Field): GUID 100% (1/1)45%  (5/11)33%  (1/3)
InterfaceBuilder (Class): void 100% (1/1)100% (18/18)100% (6/6)
InterfaceBuilder (Object []): void 100% (1/1)100% (5/5)100% (2/2)
createInterfaceFromClass (Class): IUnknown 100% (1/1)100% (3/3)100% (1/1)
getIID (): GUID 100% (1/1)100% (3/3)100% (1/1)
getIIDBytes (): byte [] 100% (1/1)100% (4/4)100% (1/1)
getIIDFromClass (Class): GUID 100% (1/1)100% (4/4)100% (1/1)
getInnerClassFromClass (Class): Class 100% (1/1)100% (24/24)100% (5/5)
getInterfaceClassFromArray (Object []): Class 100% (1/1)100% (4/4)100% (1/1)
getResult (): IUnknown 100% (1/1)100% (3/3)100% (1/1)

1/*
2 * $Id: InterfaceBuilder.java,v 1.6 2005/11/17 00:32:10 hastings Exp $
3 *
4 * (c) Copyright, Moebius Solutions, Inc., 2004
5 *
6 *                       All Rights Reserved
7 *
8 * This material may be reproduced by or for the U. S. Government
9 * pursuant to the copyright license under the clause at
10 * DFARS 252.227-7014 (OCT 2001).
11 */
12 
13package com.moesol.bindings.platform_sdk.component_services;
14 
15import java.lang.reflect.Field;
16 
17/**
18 * Build a null COM interface wrapper from java type information.
19 * @author robert
20 */
21public class InterfaceBuilder {
22        private Class m_iface_class;
23        private GUID m_iid;
24        private IUnknown m_result;
25        
26        public InterfaceBuilder(Object[] out_iface) {
27                this(getInterfaceClassFromArray(out_iface));
28        }
29        public InterfaceBuilder(Class iface_type) {
30                m_iface_class = iface_type;
31                m_iid = getIIDFromClass(iface_type);
32                Class clazz = getInnerClassFromClass(iface_type);
33                m_result = createInterfaceFromClass(clazz);
34        }
35        private Class getInnerClassFromClass(Class iface_type) {
36                Class [] classes = iface_type.getClasses();
37                for (int i=0; i<classes.length; i++) {
38                        if (classes[i].getName().endsWith("Jni")) {
39                                return classes[i];
40                        }
41                }
42                return iface_type;
43        }
44        
45        public Class getInterfaceClass() {
46                return m_iface_class;
47        }
48        public GUID getIID() {
49            return m_iid;
50    }
51        public byte[] getIIDBytes() {
52                return m_iid._getStructureBytes();
53        }
54        public IUnknown getResult() {
55                return m_result;
56        }
57        
58        private static GUID getIIDFromClass(Class iface_type) {
59                return getIID(getIIDField(iface_type));
60        }
61        private static IUnknown createInterfaceFromClass(Class iface_type) {
62                return jni_createInterfaceFromClass(iface_type);
63        }
64        
65        private static native IUnknown jni_createInterfaceFromClass(Class iface_type);
66        
67        private static Class getInterfaceClassFromArray(Object [] out_iface) {
68                return out_iface.getClass().getComponentType();
69        }
70        private static Field getIIDField(Class iface_type) {
71                try {
72                        return iface_type.getField("IID");
73                } catch (Exception e) {
74                        throw new RuntimeException(e);
75                }
76        }
77        private static GUID getIID(Field iid_field) {
78                try {
79                        return (GUID) iid_field.get(null);
80                } catch (Exception e) {
81                        throw new RuntimeException(e);
82                }
83        }
84}

[all classes][com.moesol.bindings.platform_sdk.component_services]
EMMA 2.0.5312 (C) Vladimir Roubtsov