1 package com4j.tlbimp.driver; 2 3 import com4j.GUID; 4 import com4j.tlbimp.BindingException; 5 import com4j.tlbimp.CodeWriter; 6 import com4j.tlbimp.ErrorListener; 7 import com4j.tlbimp.Generator; 8 import com4j.tlbimp.ReferenceResolver; 9 import com4j.tlbimp.def.IWTypeLib; 10 11 import java.io.IOException ; 12 import java.util.HashMap ; 13 import java.util.HashSet ; 14 import java.util.Map ; 15 import java.util.Set ; 16 17 20 final class Driver { 21 22 private final Map <GUID,Ref> refs = new HashMap <GUID,Ref>(); 23 24 private String packageName=""; 25 26 public void addRef( Ref r ) { 27 refs.put(r.libid,r); 28 } 29 30 public void setPackageName(String packageName) { 31 this.packageName = packageName; 32 } 33 34 35 public void run( final IWTypeLib mainLib, CodeWriter cw, final ErrorListener el ) throws BindingException, IOException { 36 37 final Set <IWTypeLib> libsToGen = new HashSet <IWTypeLib>(); 38 39 ReferenceResolver resolver = new ReferenceResolver() { 40 public String resolve(IWTypeLib lib) { 41 if(lib.equals(mainLib)) 42 return packageName; 43 44 GUID libid = lib.getLibid(); 45 if( refs.containsKey(libid) ) 46 return refs.get(libid).packageName; 47 48 if( libid.equals(GUID_STDOLE)) 49 return ""; 51 if( libsToGen.add(lib) ) 52 el.warning(Messages.REFERENCED_TYPELIB_GENERATED.format(lib.getName(),packageName)); 53 54 return packageName; 55 } 56 }; 57 58 Generator generator = new Generator(cw,resolver,el); 59 60 generator.generate(mainLib); 61 62 Set <IWTypeLib> generatedLibs = new HashSet <IWTypeLib>(); 64 while(!generatedLibs.containsAll(libsToGen) ) { 65 Set <IWTypeLib> s = new HashSet <IWTypeLib>(libsToGen); 66 s.removeAll(generatedLibs); 67 for( IWTypeLib lib : s ) { 68 generator.generate(lib); 69 generatedLibs.add(lib); 70 } 71 } 72 73 generator.finish(); 75 } 76 77 private static final GUID GUID_STDOLE = new GUID("{00020430-0000-0000-C000-000000000046}"); 78 } 79 | Popular Tags |