Beispiel #1
0
  public static List<SDependency> calculateLibraryDependencies(
      OrderEnumerator orderEnumerator, final Project project, final boolean includeStubs) {
    final Map<SModule, Boolean> modules = new HashMap<SModule, Boolean>();
    orderEnumerator.forEach(
        new Processor<OrderEntry>() {
          public boolean process(OrderEntry oe) {
            if (!(oe instanceof LibraryOrderEntry)) {
              return true;
            }
            LibraryOrderEntry loe = (LibraryOrderEntry) oe;
            Library library = loe.getLibrary();
            if (loe.isModuleLevel() || library == null) {
              return true;
            }

            if (ModuleLibraryType.isModuleLibrary(library)) {
              Set<SModuleReference> moduleReferences = ModuleLibrariesUtil.getModules(library);
              for (SModuleReference moduleReference : moduleReferences) {
                SModule m =
                    moduleReference.resolve(MPSModuleRepository.getInstance()); // FIXME module repo
                if (m == null) {
                  continue;
                }
                if (modules.containsKey(moduleReference)) {
                  if (loe.isExported()) {
                    modules.put(m, true);
                  }
                } else {
                  modules.put(m, loe.isExported());
                }
              }
            } else if (includeStubs) {
              // try to find stub solution
              SModule s =
                  MPSModuleRepository.getInstance().getModule(ModuleId.foreign(library.getName()));
              if (s != null) {
                modules.put(s, loe.isExported());
              }
            }
            return true;
          }
        });
    List<SDependency> result = new ArrayList<SDependency>();
    for (Entry<SModule, Boolean> entry : modules.entrySet()) {
      result.add(new SDependencyImpl(entry.getKey(), SDependencyScope.DEFAULT, entry.getValue()));
    }
    return result;
  }