package jetbrains.mps.lang.core.intentions; /*Generated by MPS */ import org.jetbrains.mps.openapi.model.SNode; import org.jetbrains.mps.openapi.module.SRepository; import jetbrains.mps.openapi.editor.EditorContext; import java.awt.Component; import jetbrains.mps.project.ModelImporter; import jetbrains.mps.lang.smodel.generator.smodelAdapter.SNodeOperations; import org.jetbrains.mps.openapi.model.SModelReference; import java.util.List; import java.util.ArrayList; import org.jetbrains.mps.openapi.model.SReference; import org.jetbrains.mps.openapi.model.SModel; import jetbrains.mps.smodel.constraints.ModelConstraints; /*package*/ class DependencyHelper { private final SNode myNode; private final SRepository myRepository; public DependencyHelper(SNode node, EditorContext context) { myNode = node; myRepository = context.getRepository(); } public boolean isApplicable() { return !(findMissingModelImports().isEmpty()); } public void execute(Component parentComponent) { ModelImporter mi = new ModelImporter(SNodeOperations.getModel(myNode)); for (SModelReference mr : findMissingModelImports()) { mi.prepare(mr); } boolean confirmed = true; if (mi.affectsModuleDependencies()) { confirmed = mi.confirmModuleChanges(parentComponent); } if (confirmed) { mi.execute(); } } private List<SModelReference> findMissingModelImports() { ArrayList<SModelReference> rv = new ArrayList<SModelReference>(); for (SReference ref : myNode.getReferences()) { SModelReference targetModelRef = ref.getTargetSModelReference(); SModel modelToImport = (targetModelRef == null ? null : targetModelRef.resolve(myRepository)); if (modelToImport == null) { continue; } if (!(ModelConstraints.getScope(ref).contains(ref.getTargetNode()))) { rv.add(targetModelRef); } } return rv; } }