Пример #1
0
  @Override
  public SModule resolve(SModuleReference reference) {
    if (reference == null) {
      return null;
    }

    SModule module;
    if (reference.getModuleId() != null) {
      module = MPSModuleRepository.getInstance().getModule(reference.getModuleId());
    } else {
      module = MPSModuleRepository.getInstance().getModuleByFqName(reference.getModuleName());
    }

    if (module == null) {
      return null;
    }

    synchronized (LOCK) {
      initialize();
      if (myVisibleModules.contains(module)
          || myUsedLanguages.contains(module)
          || myUsedDevkits.contains(module)) {
        return module;
      } else {
        return null;
      }
    }
  }
 protected void removeSolution(String name) {
   ModuleReference ref = new ModuleReference(null, ModuleId.foreign(name));
   MPSModuleRepository repository = MPSModuleRepository.getInstance();
   IModule m = ModuleRepositoryFacade.getInstance().getModule(ref);
   if (m == null) {
     return;
   }
   repository.unregisterModule(m, this);
 }
Пример #3
0
 public void unregisterModules(MPSModuleOwner owner, Condition<SModule> condition) {
   Collection<SModule> modulesToRemove = new ArrayList<SModule>();
   for (SModule module : REPO.getModules(owner)) {
     if (condition.met(module)) {
       modulesToRemove.add(module);
     }
   }
   REPO.unregisterModules(modulesToRemove, owner);
 }
Пример #4
0
 public <T extends SModule> Collection<T> getAllModules(Class<T> cls) {
   List<T> result = new ArrayList<T>();
   for (SModule module : REPO.getAllModules()) {
     if (cls.isInstance(module)) result.add((T) module);
   }
   return result;
 }
 protected boolean checkLibraryName(String libraryName) {
   if (MPSModuleRepository.getInstance().getModuleByUID(libraryName) != null) {
     myThis.getDialog().setErrorText("Duplicate library name: " + libraryName);
     return false;
   }
   return true;
 }
Пример #6
0
 private static <T extends AbstractModule> T registerModule(T module, MPSModuleOwner moduleOwner) {
   T registered = MPSModuleRepository.getInstance().registerModule(module, moduleOwner);
   if (registered == module) {
     // we can't do it in AbstractModule#attach because we need module without models in
     // SRepositoryListener#moduleAdded event
     registered.reloadAfterDescriptorChange();
   }
   return registered;
 }
  public void createModule(final SModule module) {
    if (myModuleMap.containsKey(module)) {
      return;
    }

    final TransientModelsModule transientModelsModule =
        new TransientModelsModule(module, TransientModelsProvider.this);
    MPSModuleRepository.getInstance().registerModule(transientModelsModule, myOwner);
    myModuleMap.put(module, transientModelsModule);
  }
Пример #8
0
 protected void removeListeners() {
   ClassLoaderManager.getInstance().removeReloadHandler(myReloadListener);
   SModelRepository.getInstance().removeModelRepositoryListener(mySModelRepositoryListener);
   ModelAccess.instance().removeCommandListener(myModelAccessListener);
   MPSModuleRepository.getInstance().removeModuleRepositoryListener(myRepositoryListener);
   if (IMakeService.INSTANCE.hasMakeService()) {
     IMakeService.INSTANCE.get().removeListener(myMakeNotificationListener);
   }
   VirtualFileManager.getInstance().removeVirtualFileManagerListener(myRefreshListener);
 }
Пример #9
0
 protected void addListeners() {
   VirtualFileManager.getInstance().addVirtualFileManagerListener(myRefreshListener);
   SModelRepository.getInstance().addModelRepositoryListener(mySModelRepositoryListener);
   ModelAccess.instance().addCommandListener(myModelAccessListener);
   MPSModuleRepository.getInstance().addModuleRepositoryListener(myRepositoryListener);
   if (IMakeService.INSTANCE.isSessionActive()) {
     IMakeService.INSTANCE.get().addListener(myMakeNotificationListener);
   }
   ClassLoaderManager.getInstance().addReloadHandler(myReloadListener);
 }
Пример #10
0
  public <T extends SModule> Collection<T> getModules(
      MPSModuleOwner moduleOwner, @Nullable Class<T> cls) {
    Set<SModule> modules = REPO.getModules(moduleOwner);
    if (modules == null) return Collections.emptyList();

    List<T> list = new LinkedList<T>();
    for (SModule m : modules) {
      if (cls == null || cls.isInstance(m)) {
        list.add((T) m);
      }
    }
    return list;
  }
Пример #11
0
  @Override
  public SModel resolve(SRepository repo) {
    if (myModuleReference != null) {
      final SRepository repository;
      if (repo == null) {
        // see StaticReference, which seems to be the only place we pass null as repository
        repository = MPSModuleRepository.getInstance();
      } else {
        repository = repo;
      }
      Computable<SModel> c =
          new Computable<SModel>() {
            @Override
            public SModel compute() {
              SModule module = repository.getModule(myModuleReference.getModuleId());
              if (module == null) {
                return null;
              }
              return module.getModel(myModelId);
            }
          };
      if (!repository.getModelAccess().canRead()) {
        LOG.warn(
            "Attempt to resolve a model not from read action. What are you going to do with return value? Hint: at least, read. Please ensure proper model access then.",
            new Throwable());
        return new ModelAccessHelper(repository).runReadAction(c);
      } else {
        return c.compute();
      }
    }

    // FIXME !!! use supplied SRepository, not global model repo !!!
    // If there's no module reference, and model id is global, it's supposed we shall get the model
    // from a global repository.
    // However, at the moment, there's no easy way to get model from SRepository (other than to
    // iterate over all modules and models,
    // which doesn't sound like a good approach). Either shall provide method to find model from
    // SRepository, or drop
    // 'globally unique' model id altogether. What's the benefit of them?

    // NOTE, shall tolerate null repo unless every single piece of code that expects StaticReference
    // of a newly created node
    // hanging in the air to resolve. @see StaticReference#getTargetSModel
    return SModelRepository.getInstance().getModelDescriptor(this);
  }
Пример #12
0
  @Override
  public void init() {
    if (INSTANCE != null) {
      throw new IllegalStateException("double initialization");
    }

    INSTANCE = this;
    myRepositoryListener.subscribeTo(MPSModuleRepository.getInstance());

    GlobalSModelEventsManager.getInstance()
        .addGlobalCommandListener(
            new SModelCommandListener() {
              @Override
              public void eventsHappenedInCommand(List<SModelEvent> events) {
                for (SModelEvent e : events) {
                  if (!LanguageAspect.STRUCTURE.is(e.getModelDescriptor())) continue;
                  invalidateCache();
                }
              }
            });
  }
Пример #13
0
 // intended to use only when module is removed physically
 public void removeModuleForced(SModule module) {
   Set<MPSModuleOwner> owners = new HashSet<MPSModuleOwner>(REPO.getOwners(module));
   for (MPSModuleOwner owner : owners) {
     REPO.unregisterModule(module, owner);
   }
 }
Пример #14
0
 @Override
 public void dispose() {
   // TODO unregister listeners?
   myRepositoryListener.unsubscribeFrom(MPSModuleRepository.getInstance());
   INSTANCE = null;
 }
Пример #15
0
 public <T extends SModule> T getModule(String fqName, Class<T> cls) {
   SModule m = REPO.getModuleByFqName(fqName);
   if (!cls.isInstance(m)) return null;
   return (T) m;
 }
Пример #16
0
 public SModule getModule(@NotNull SModuleReference ref) {
   return ref.getModuleId() != null
       ? REPO.getModuleById(ref.getModuleId())
       : REPO.getModuleByFqName(ref.getModuleName());
 }
Пример #17
0
 public Set<MPSModuleOwner> getModuleOwners(SModule module) {
   return new HashSet<MPSModuleOwner>(REPO.getOwners(module));
 }
Пример #18
0
 public void unregisterModules(MPSModuleOwner owner) {
   REPO.unregisterModules(new HashSet<SModule>(REPO.getModules(owner)), owner);
 }