<T> Iterable<? extends T> lookupProviderInstances1(
     Class<T> serviceType, ProviderFactory<T> factory) {
   System.err.println("totototo " + serviceType.getCanonicalName());
   if (factory == null) {
     factory = new DefaultFactory<T>();
   }
   List<T> providers = new ArrayList<T>();
   for (Class c : lookupProviderClasses1(serviceType)) {
     try {
       final T providerInstance = factory.make(c, serviceType);
       if (providerInstance != null) {
         providers.add(providerInstance);
       } else {
         System.err.println(factory + " returned null provider instance!!!");
       }
     } catch (Exception e) {
       e.printStackTrace();
     }
   }
   return providers;
 };
Exemplo n.º 2
0
  private <T> T getProvider(
      Collection<AbstractTreeNode> selected, ProviderFactory<T> createProvider) {
    if (selected.size() == 0) return null;

    List<SNodeReference> selectedNodePointers = new ArrayList<SNodeReference>();
    Project project = null;
    EditableSModel modelDescriptor = null;

    for (AbstractTreeNode treeNode : selected) {
      if (!(treeNode instanceof MPSPsiElementTreeNode)) return null; // only root nodes please

      MPSPsiRootNode mpsPsiNode = ((MPSPsiElementTreeNode) treeNode).getValue();
      if (!mpsPsiNode.isValid()) return null;

      selectedNodePointers.add(mpsPsiNode.getSNodeReference());

      if (project == null) {
        project = treeNode.getProject();
      } else if (project != treeNode.getProject()) {
        return null; // only same project
      }

      if (modelDescriptor == null) {
        modelDescriptor = getModel(mpsPsiNode);
      } else if (modelDescriptor != getModel(mpsPsiNode)) {
        return null; // only same model
      }
    }
    jetbrains.mps.project.Project mpsProject = ProjectHelper.toMPSProject(project);
    if (mpsProject == null || modelDescriptor == null) return null;

    SModel sModel = modelDescriptor;
    if (sModel == null) return null;

    return createProvider.create(selectedNodePointers, modelDescriptor, sModel, mpsProject);
  }