package jetbrains.mps.build.mps.util;
/*Generated by MPS */
import org.jetbrains.mps.openapi.model.SNode;
import jetbrains.mps.generator.template.TemplateQueryContext;
import jetbrains.mps.build.behavior.BuildSourcePath__BehaviorDescriptor;
import jetbrains.mps.lang.smodel.generator.smodelAdapter.SLinkOperations;
import jetbrains.mps.smodel.adapter.structure.MetaAdapterFactory;
import jetbrains.mps.build.util.Context;
import jetbrains.mps.lang.smodel.generator.smodelAdapter.SPropertyOperations;
import java.io.File;
import java.io.IOException;
import jetbrains.mps.vfs.IFile;
import jetbrains.mps.vfs.FileSystem;
import jetbrains.mps.project.structure.modules.ModuleDescriptor;
public class ModuleLoader {
public static ModuleChecker createModuleChecker(SNode module, VisibleModules visible, PathConverter pathConverter, TemplateQueryContext genContext, ModuleChecker.Reporter reporter) {
String moduleFilePath = BuildSourcePath__BehaviorDescriptor.getLocalPath_id4Kip2_918Y$.invoke(SLinkOperations.getTarget(module, MetaAdapterFactory.getContainmentLink(0xcf935df46994e9cL, 0xa132fa109541cba3L, 0x4780308f5d333ebL, 0x4780308f5d47f25L, "path")), (genContext != null ? Context.defaultContext(genContext) : Context.defaultContext()));
if (moduleFilePath == null) {
reporter.report("cannot import module file for " + SPropertyOperations.getString(module, MetaAdapterFactory.getProperty(0xceab519525ea4f22L, 0x9b92103b95ca8c0cL, 0x110396eaaa4L, 0x110396ec041L, "name")) + ": file doesn't exist (" + BuildSourcePath__BehaviorDescriptor.getAntPath_id7ro1ZztyOh5.invoke(SLinkOperations.getTarget(module, MetaAdapterFactory.getContainmentLink(0xcf935df46994e9cL, 0xa132fa109541cba3L, 0x4780308f5d333ebL, 0x4780308f5d47f25L, "path")), (genContext != null ? Context.defaultContext(genContext) : Context.defaultContext())) + ")", null, null);
return new ModuleChecker(module, visible, pathConverter, null, null, reporter);
}
try {
moduleFilePath = new File(moduleFilePath).getCanonicalPath();
} catch (IOException ex) {
// ignore
}
IFile file = FileSystem.getInstance().getFileByPath(moduleFilePath);
if (!(file.exists())) {
reporter.report("cannot import module file for " + SPropertyOperations.getString(module, MetaAdapterFactory.getProperty(0xceab519525ea4f22L, 0x9b92103b95ca8c0cL, 0x110396eaaa4L, 0x110396ec041L, "name")) + ": file doesn't exist (" + moduleFilePath + ")", null, null);
return new ModuleChecker(module, visible, pathConverter, null, null, reporter);
}
if (file.isDirectory()) {
reporter.report("cannot import module file for " + SPropertyOperations.getString(module, MetaAdapterFactory.getProperty(0xceab519525ea4f22L, 0x9b92103b95ca8c0cL, 0x110396eaaa4L, 0x110396ec041L, "name")) + ": file is a directory (" + moduleFilePath + ")", null, null);
return new ModuleChecker(module, visible, pathConverter, null, null, reporter);
}
ModuleDescriptor md = null;
try {
md = ModuleLoaderUtils.loadModuleDescriptor(file, genContext, module, reporter);
if (md.getLoadException() != null) {
reporter.report("cannot import module file for " + SPropertyOperations.getString(module, MetaAdapterFactory.getProperty(0xceab519525ea4f22L, 0x9b92103b95ca8c0cL, 0x110396eaaa4L, 0x110396ec041L, "name")) + ": exception: " + md.getLoadException().getMessage(), null, null);
}
} catch (Exception ex) {
reporter.report("cannot import module file for " + SPropertyOperations.getString(module, MetaAdapterFactory.getProperty(0xceab519525ea4f22L, 0x9b92103b95ca8c0cL, 0x110396eaaa4L, 0x110396ec041L, "name")) + ": exception: " + ex.getMessage(), null, ex);
ex.printStackTrace(System.err);
}
return new ModuleChecker(module, visible, pathConverter, file, md, reporter);
}
public static ModuleChecker createModuleChecker(SNode module, VisibleModules visible, PathConverter pathConverter, TemplateQueryContext genContext) {
SNode originalModule = ModuleLoaderUtils.getOriginalModule(module, genContext);
return createModuleChecker(module, visible, pathConverter, genContext, new ModuleChecker.Reporter(genContext, originalModule));
}
public static ModuleChecker createModuleChecker(SNode module, VisibleModules visible, PathConverter pathConverter) {
return createModuleChecker(module, visible, pathConverter, null, new ModuleChecker.Reporter(null, module));
}
}