List<ConnectorBundle> bundles = new ArrayList<ConnectorBundle>();
Collection<TypeVisitor> visitors = getVisitors(typeOracle);
ConnectorBundle eagerBundle = new ConnectorBundle(
ConnectorBundleLoader.EAGER_BUNDLE_NAME, visitors, typeOracle);
TreeLogger eagerLogger = logger.branch(Type.TRACE,
"Populating eager bundle");
// Eager connectors and all RPC interfaces are loaded by default
eagerBundle.processTypes(eagerLogger,
connectorsByLoadStyle.get(LoadStyle.EAGER));
eagerBundle.processType(eagerLogger, typeOracle
.findType(UnknownComponentConnector.class.getCanonicalName()));
eagerBundle.processSubTypes(eagerLogger,
typeOracle.getType(ClientRpc.class.getName()));
eagerBundle.processSubTypes(eagerLogger,
typeOracle.getType(ServerRpc.class.getName()));
bundles.add(eagerBundle);
ConnectorBundle deferredBundle = new ConnectorBundle(
ConnectorBundleLoader.DEFERRED_BUNDLE_NAME, eagerBundle);
TreeLogger deferredLogger = logger.branch(Type.TRACE,
"Populating deferred bundle");
deferredBundle.processTypes(deferredLogger,
connectorsByLoadStyle.get(LoadStyle.DEFERRED));
bundles.add(deferredBundle);
Collection<JClassType> lazy = connectorsByLoadStyle.get(LoadStyle.LAZY);
for (JClassType type : lazy) {
ConnectorBundle bundle = new ConnectorBundle(type.getName(),
eagerBundle);
TreeLogger subLogger = logger.branch(Type.TRACE, "Populating "
+ type.getName() + " bundle");
bundle.processType(subLogger, type);
bundles.add(bundle);
}
return bundles;