1 | /* |
2 | * $Id: ComReflectInterfaceMap.java,v 1.2 2005/11/30 17:44:29 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 | package com.moesol.bindings.platform_sdk.component_services; |
13 | |
14 | import java.util.ArrayList; |
15 | import java.util.HashSet; |
16 | import java.util.Set; |
17 | |
18 | public class ComReflectInterfaceMap { |
19 | |
20 | public static ComInterfaceEntry[] reflectComMap(IUnknown java_sink) { |
21 | Class c = java_sink.getClass(); |
22 | Set seen = new HashSet(); |
23 | ArrayList al = new ArrayList(); |
24 | Class ifaces[] = c.getInterfaces(); |
25 | for (int i = 0; i < ifaces.length; i++) { |
26 | addInterfaceAndBases(java_sink, seen, al, ifaces[i]); |
27 | } |
28 | return (ComInterfaceEntry[])al.toArray(new ComInterfaceEntry[al.size()]); |
29 | } |
30 | |
31 | /** |
32 | * @param seen |
33 | * @param list |
34 | * @param iface |
35 | */ |
36 | private static void addInterfaceAndBases(IUnknown java_sink, Set seen, ArrayList list, Class iface) { |
37 | InterfaceBuilder ib = new InterfaceBuilder(iface); |
38 | if (seen.contains(ib.getIID())) { |
39 | return; |
40 | } |
41 | |
42 | Class[] super_ifaces = iface.getInterfaces(); |
43 | for (int i = 0; i < super_ifaces.length; i++) { |
44 | addInterfaceAndBases(java_sink, seen, list, super_ifaces[i]); // Should make IUnknown first. |
45 | } |
46 | |
47 | seen.add(ib.getIID()); |
48 | ComInterfaceEntry e = new ComInterfaceEntry(ib.getIID(), iface, java_sink); |
49 | list.add(e); |
50 | } |
51 | } |