BlockBuilder<?> blockBuilder =
classStructureBuilder.publicMethod(BootstrapperInjectionContext.class, "bootstrapContainer")
.methodComment("The main IOC bootstrap method.");
SourceWriter sourceWriter = new StringSourceWriter();
procContext = new IOCProcessingContext(logger, context, sourceWriter, buildContext, bootStrapClass, blockBuilder);
injectionContext = new InjectionContext(procContext);
procFactory = new IOCProcessorFactory(injectionContext);
MetaDataScanner scanner = ScannerSingleton.getOrCreateInstance();
Properties props = scanner.getProperties("ErraiApp.properties");
if (props != null) {
logger.log(TreeLogger.Type.INFO, "Checking ErraiApp.properties for configured types ...");
for (Object o : props.keySet()) {
String key = (String) o;
if (key.equals(QUALIFYING_METADATA_FACTORY_PROPERTY)) {
String fqcnQualifyingMetadataFactory = String.valueOf(props.get(key));
try {
QualifyingMetadataFactory factory = (QualifyingMetadataFactory)
Class.forName
(fqcnQualifyingMetadataFactory).newInstance();
procContext.setQualifyingMetadataFactory(factory);
}
catch (ClassNotFoundException e) {
e.printStackTrace();
}
catch (InstantiationException e) {
e.printStackTrace();
}
catch (IllegalAccessException e) {
e.printStackTrace();
}
}
else if (key.equals(ENABLED_ALTERNATIVES_PROPERTY)) {
String[] alternatives = String.valueOf(props.get(ENABLED_ALTERNATIVES_PROPERTY)).split("\\s");
for (String alternative : alternatives) {
injectionContext.addEnabledAlternative(alternative.trim());
}
}
}
}
procContext.setPackages(packages);
defaultConfigureProcessor();
// generator constructor source code
initializeProviders();
generateExtensions(sourceWriter, classStructureBuilder, blockBuilder);
// close generated class
return sourceWriter.toString();
}