public boolean loadModule(String name, String version,
ArtifactResult artifact, ClassLoader classLoader) {
RuntimeModelLoader modelLoader = getModelLoader();
synchronized(modelLoader.getLock()){
Module module = getOrCreateModule(splitModuleName(name), version);
// The default module is created as available, so we use a different test for it, because we are the only
// ones setting the module's Unit
if(module.isDefault()
? module.getUnit() != null
: module.isAvailable())
return false;
modelLoader.addModuleToClassPath(module, artifact);
modelLoader.addModuleClassLoader(module, classLoader);
module.setAvailable(true);
Unit u = new Unit();
u.setFilename(artifact.name());
if(artifact.artifact() != null) {
u.setFullPath(artifact.artifact().getAbsolutePath());
}
module.setUnit(u);
if(!module.isDefault()){
// FIXME: dependencies of Ceylon modules?
if(!modelLoader.loadCompiledModule(module)){
// we didn't find module.class so it must be a java module if it's not the default module
((LazyModule)module).setJava(true);
// Java modules must have their dependencies set by the artifact result, as there is no module info in the jar
for (ArtifactResult dep : artifact.dependencies()) {
Module dependency =
getOrCreateModule(splitModuleName(dep.name()),
dep.version());
ModuleImport depImport =
findImport(module, dependency);