<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; };
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); }