package jetbrains.mps.execution.lib.ui;
/*Generated by MPS */
import org.jetbrains.annotations.NotNull;
import org.jetbrains.mps.openapi.language.SAbstractConcept;
import org.jetbrains.annotations.Nullable;
import jetbrains.mps.baseLanguage.closures.runtime._FunctionTypes;
import org.jetbrains.mps.openapi.model.SNode;
import org.jetbrains.mps.openapi.module.SearchScope;
import jetbrains.mps.smodel.adapter.structure.MetaAdapterFactory;
import jetbrains.mps.project.GlobalScope;
import java.util.List;
import org.jetbrains.mps.openapi.module.FindUsagesFacade;
import org.jetbrains.mps.openapi.util.ProgressMonitor;
import java.util.Set;
import java.util.Collections;
import jetbrains.mps.internal.collections.runtime.ListSequence;
import java.util.ArrayList;
import jetbrains.mps.internal.collections.runtime.IWhereFilter;
public class NodeByConceptChooser extends NodeChooser {
@NotNull
private SAbstractConcept myTargetConcept;
@Nullable
private _FunctionTypes._return_P1_E0<? extends Boolean, ? super SNode> myAcceptor;
private final SearchScope myScope;
public NodeByConceptChooser() {
this(MetaAdapterFactory.getConcept(0xceab519525ea4f22L, 0x9b92103b95ca8c0cL, 0x10802efe25aL, "jetbrains.mps.lang.core.structure.BaseConcept"), null);
}
public NodeByConceptChooser(SAbstractConcept conceptFqName, @Nullable _FunctionTypes._return_P1_E0<? extends Boolean, ? super SNode> acceptor) {
super();
myTargetConcept = conceptFqName;
myAcceptor = acceptor;
myScope = GlobalScope.getInstance();
}
public SAbstractConcept getTargetConcept() {
return myTargetConcept;
}
public void setTargetConcept(SAbstractConcept targetConcept) {
myTargetConcept = targetConcept;
}
public _FunctionTypes._return_P1_E0<? extends Boolean, ? super SNode> getAcceptor() {
return myAcceptor;
}
public void setAcceptor(_FunctionTypes._return_P1_E0<? extends Boolean, ? super SNode> acceptor) {
myAcceptor = acceptor;
}
@Override
protected List<SNode> findToChooseFromOnInit(FindUsagesFacade manager, ProgressMonitor monitor) {
Set<SNode> instances = manager.findInstances(myScope, Collections.singleton(myTargetConcept), false, monitor);
if (this.myAcceptor == null) {
return ListSequence.fromListWithValues(new ArrayList<SNode>(), instances);
} else {
return ListSequence.fromList(ListSequence.fromListWithValues(new ArrayList<SNode>(), instances)).where(new IWhereFilter<SNode>() {
public boolean accept(SNode it) {
return NodeByConceptChooser.this.myAcceptor.invoke(it);
}
}).toListSequence();
}
}
}