package jetbrains.mps.baseLanguage.unitTest.execution.settings; /*Generated by MPS */ import com.intellij.openapi.ui.TextFieldWithBrowseButton; import jetbrains.mps.project.Project; import jetbrains.mps.util.Reference; import org.jetbrains.mps.openapi.module.SModuleReference; import org.jetbrains.annotations.NotNull; import java.awt.event.ActionListener; import java.awt.event.ActionEvent; import jetbrains.mps.ide.ui.dialogs.properties.choosers.CommonChoosers; import java.util.List; import java.util.Collection; import java.util.LinkedHashSet; import org.jetbrains.mps.openapi.language.SAbstractConcept; import jetbrains.mps.smodel.adapter.structure.MetaAdapterFactory; import java.util.Set; import org.jetbrains.mps.openapi.model.SNode; import org.jetbrains.mps.openapi.module.FindUsagesFacade; import jetbrains.mps.project.GlobalScope; import java.util.Collections; import jetbrains.mps.progress.EmptyProgressMonitor; import jetbrains.mps.lang.smodel.generator.smodelAdapter.SNodeOperations; import java.util.ArrayList; import org.jetbrains.mps.openapi.module.SModule; import jetbrains.mps.smodel.ModuleRepositoryFacade; public final class ModuleChooser extends TextFieldWithBrowseButton.NoPathCompletion { private final Project myMpsProject; private final Reference<SModuleReference> myModuleRef = new Reference<SModuleReference>(); public ModuleChooser(@NotNull final Project mpsProject) { myMpsProject = mpsProject; addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent p0) { SModuleReference ref = CommonChoosers.showModuleChooser(mpsProject, "Choose Module To Run Tests", ModuleChooser.this.collectModules()); if (ref != null) { myModuleRef.set(ref); ModuleChooser.this.setText(ref.getModuleName()); } } }); } private List<SModuleReference> collectModules() { final Collection<SModuleReference> moduleRefs = new LinkedHashSet<SModuleReference>(); myMpsProject.getModelAccess().runReadAction(new Runnable() { public void run() { SAbstractConcept concept = MetaAdapterFactory.getInterfaceConcept(0xf61473f9130f42f6L, 0xb98d6c438812c2f6L, 0x11b2709bd56L, "jetbrains.mps.baseLanguage.unitTest.structure.ITestCase"); Set<SNode> usages = FindUsagesFacade.getInstance().findInstances(GlobalScope.getInstance(), Collections.singleton(concept), false, new EmptyProgressMonitor()); for (SNode node : usages) { SModuleReference module = SNodeOperations.getModel(node).getModule().getModuleReference(); moduleRefs.add(module); } } }); return Collections.unmodifiableList(new ArrayList<SModuleReference>(moduleRefs)); } public void setModule(@NotNull final String moduleName) { myMpsProject.getModelAccess().runReadAction(new Runnable() { public void run() { SModule module = new ModuleRepositoryFacade(myMpsProject.getRepository()).getModuleByName(moduleName); myModuleRef.set(module.getModuleReference()); } }); setText(moduleName); } public SModuleReference getReference() { return myModuleRef.get(); } }