private static List<INodeSubstituteAction> createPrimaryChildSubstituteActions( SNode parentNode, SNode currentChild, SNode childConcept, IChildNodeSetter childSetter, IOperationContext context) { if (childConcept == null) { return Collections.emptyList(); } final IScope scope = context.getScope(); String childConceptFqName = NameUtil.nodeFQName(childConcept); Set<String> concepts = new HashSet<String>(); for (Language l : SModelOperations.getLanguages(parentNode.getModel(), scope)) { concepts.addAll( LanguageHierarchyCache.getInstance() .getDefaultSubstitutableDescendantsOf(childConceptFqName, l)); } List<INodeSubstituteAction> actions = new ArrayList<INodeSubstituteAction>(); for (String fqName : concepts) { SNode applicableConcept = SModelUtil.findConceptDeclaration(fqName, scope); assert applicableConcept != null : "No concept " + fqName; actions.addAll( createDefaultActions(applicableConcept, parentNode, currentChild, childSetter, context)); } return actions; }
public static Iterable sourceNodesQuery_1220369573364040170( final IOperationContext operationContext, final SourceSubstituteMacroNodesContext _context) { List<SNode> result = new ArrayList<SNode>(); List<Language> langs = SModelOperations.getLanguages( SNodeOperations.getModel(_context.getNode()), GlobalScope.getInstance()); for (Language lang : langs) { for (ModuleReference mr : lang.getRuntimeModulesReferences()) { for (SModelDescriptor smd : MPSModuleRepository.getInstance().getModule(mr).getOwnModelDescriptors()) { SModel rtModel = smd.getSModel(); for (SNode gwtmod : jetbrains.mps.lang.smodel.generator.smodelAdapter.SModelOperations.getRoots( rtModel, "jetbrains.mps.gwt.client.structure.GWTModule")) { ListSequence.fromList(result).addElement(gwtmod); } } } } return result; }
@Override public void doUpdate(AnActionEvent event) { removeAll(); SModel modelDescriptor = event.getData(MPSDataKeys.CONTEXT_MODEL); if (modelDescriptor == null) { setEnabledState(event.getPresentation(), false); return; } if (!(modelDescriptor instanceof EditableSModel) || (((EditableSModel) modelDescriptor).isReadOnly())) { event.getPresentation().setEnabled(false); event.getPresentation().setVisible(false); return; } IScope scope = event.getData(MPSDataKeys.SCOPE); IOperationContext context = event.getData(MPSDataKeys.OPERATION_CONTEXT); boolean isStubModel = SModelStereotype.isStubModelStereotype(SModelStereotype.getStereotype(modelDescriptor)); if (scope == null || context == null || isStubModel) { setEnabledState(event.getPresentation(), false); return; } boolean inEditor = event.getData(MPSDataKeys.LOGICAL_VIEW_SELECTION_SIZE) == null; if (!inEditor) { Integer selectedItemsCount = event.getData(MPSDataKeys.LOGICAL_VIEW_SELECTION_SIZE); boolean singleItemSelected = selectedItemsCount != null && selectedItemsCount == 1; if (!singleItemSelected) { setEnabledState(event.getPresentation(), false); return; } TreeNode treeNode = event.getData(MPSDataKeys.LOGICAL_VIEW_NODE); if (!(treeNode instanceof PackageNode)) { myPackage = null; } else { final PackageNode node = (PackageNode) treeNode; myPackage = node.getPackage(); } } else { SNode node = event.getData(MPSDataKeys.NODE); myPackage = null; if (node != null) { SNode root = node.getContainingRoot(); myPackage = SNodeAccessUtil.getProperty(root, SNodeUtil.property_BaseConcept_virtualPackage); } } setEnabledState(event.getPresentation(), true); List<Language> modelLanguages = SModelOperations.getLanguages(modelDescriptor, scope); LanguageAspect aspect = Language.getModelAspect(modelDescriptor); if (aspect != null) { SModuleReference ref = aspect.getMainLanguage(); Language lang = scope.getLanguage(ref); if (lang != null) { modelLanguages.remove(lang); for (SNode conceptDeclaration : lang.getConceptDeclarations()) { if (ModelConstraintsManager.canBeRoot( context, NameUtil.nodeFQName(conceptDeclaration), modelDescriptor)) { add( new NewRootNodeAction( new jetbrains.mps.smodel.SNodePointer(conceptDeclaration), modelDescriptor)); } } addSeparator(); } } Collections.sort(modelLanguages, new ToStringComparator()); List<Language> languagesWithRoots = new ArrayList<Language>(); for (final Language language : modelLanguages) { for (SNode conceptDeclaration : language.getConceptDeclarations()) { if (ModelConstraintsManager.canBeRoot( context, NameUtil.nodeFQName(conceptDeclaration), modelDescriptor)) { languagesWithRoots.add(language); break; } } } boolean plain = myPlain || (languagesWithRoots.size() == 1 && aspect == null); for (final Language language : languagesWithRoots) { String name = language.getModuleName(); Icon icon = IconManager.getIconForNamespace(language.getModuleName()); BaseGroup langRootsGroup; if (!plain) { langRootsGroup = new BaseGroup(NameUtil.compactNamespace(name), name, icon); langRootsGroup.setPopup(true); } else { langRootsGroup = this; } for (SNode conceptDeclaration : language.getConceptDeclarations()) { if (ModelConstraintsManager.getInstance() .canBeRoot(context, NameUtil.nodeFQName(conceptDeclaration), modelDescriptor)) { langRootsGroup.add( new NewRootNodeAction( new jetbrains.mps.smodel.SNodePointer(conceptDeclaration), modelDescriptor)); } } if (!plain) { this.add(langRootsGroup); } else { this.addSeparator(); } } if (getChildrenCount() == 0) { add( ActionManager.getInstance() .getAction( "jetbrains.mps.ide.editor.actions.AddLanguageImport_Action" /* FIXME AddLanguageImport_Action.class.getName()*/)); } }