package jetbrains.mps.baseLanguage.unitTest.execution.settings;
/*Generated by MPS */
import jetbrains.mps.execution.lib.ui.ListPanel;
import jetbrains.mps.baseLanguage.unitTest.execution.client.ITestNodeWrapper;
import org.jetbrains.annotations.Nullable;
import org.jetbrains.mps.openapi.model.SNode;
import jetbrains.mps.baseLanguage.unitTest.execution.client.TestNodeWrapperFactory;
import org.jetbrains.mps.openapi.model.SNodeReference;
import java.util.List;
import org.jetbrains.mps.openapi.util.ProgressMonitor;
import org.jetbrains.mps.openapi.module.SRepository;
import jetbrains.mps.ide.project.ProjectHelper;
import jetbrains.mps.smodel.ModelAccessHelper;
import jetbrains.mps.util.Computable;
import java.util.ArrayList;
import org.jetbrains.mps.openapi.language.SAbstractConcept;
import jetbrains.mps.internal.collections.runtime.Sequence;
import java.util.Set;
import org.jetbrains.mps.openapi.module.FindUsagesFacade;
import jetbrains.mps.project.GlobalScope;
import java.util.Collections;
import org.jetbrains.mps.openapi.util.SubProgressKind;
import jetbrains.mps.internal.collections.runtime.ListSequence;
import jetbrains.mps.internal.collections.runtime.SetSequence;
import jetbrains.mps.internal.collections.runtime.ISelector;
import jetbrains.mps.internal.collections.runtime.IWhereFilter;
import com.intellij.openapi.project.Project;
public class TestListPanel extends ListPanel<ITestNodeWrapper> {
private boolean myIsTestMethods;
@Nullable
@Override
protected ITestNodeWrapper wrap(SNode node) {
return TestNodeWrapperFactory.tryToWrap(node);
}
@Override
protected SNodeReference unwrap(ITestNodeWrapper element) {
return element.getNodePointer();
}
@Override
protected String getFqName(ITestNodeWrapper element) {
return element.getCachedFqName();
}
@Override
protected List<ITestNodeWrapper> collectCandidates(final ProgressMonitor progress) {
final SRepository repo = ProjectHelper.fromIdeaProject(myProject).getRepository();
return new ModelAccessHelper(repo).runReadAction(new Computable<List<ITestNodeWrapper>>() {
public List<ITestNodeWrapper> compute() {
List<SNode> nodesList = new ArrayList<SNode>();
Iterable<SAbstractConcept> wrappedRootConcepts = TestNodeWrapperFactory.getWrappedRootConcepts();
progress.start("Looking up...", Sequence.fromIterable(wrappedRootConcepts).count());
for (SAbstractConcept c : Sequence.fromIterable(wrappedRootConcepts)) {
Set<SNode> usages = FindUsagesFacade.getInstance().findInstances(GlobalScope.getInstance(), Collections.singleton(c), false, progress.subTask(1, SubProgressKind.REPLACING));
ListSequence.fromList(nodesList).addSequence(SetSequence.fromSet(usages));
}
progress.done();
if (myIsTestMethods) {
List<ITestNodeWrapper> methodsList = ListSequence.fromList(new ArrayList<ITestNodeWrapper>());
for (SNode testCase : nodesList) {
ITestNodeWrapper wrapper = TestNodeWrapperFactory.tryToWrap(testCase);
if (wrapper == null) {
continue;
}
ListSequence.fromList(methodsList).addSequence(Sequence.fromIterable(wrapper.getTestMethods()));
}
return methodsList;
} else {
return ListSequence.fromList(nodesList).select(new ISelector<SNode, ITestNodeWrapper>() {
public ITestNodeWrapper select(SNode it) {
return wrap(it);
}
}).where(new IWhereFilter<ITestNodeWrapper>() {
public boolean accept(ITestNodeWrapper it) {
return it != null;
}
}).toListSequence();
}
}
});
}
public TestListPanel(Project project, boolean isTestMethods) {
super(project, "Tests");
myIsTestMethods = isTestMethods;
super.setData(ListSequence.fromList(new ArrayList<ITestNodeWrapper>()));
}
}