package jetbrains.mps.lang.structure.editor;
/*Generated by MPS */
import org.jetbrains.mps.openapi.model.SNode;
import java.util.List;
import jetbrains.mps.internal.collections.runtime.ListSequence;
import java.util.ArrayList;
import java.util.Queue;
import jetbrains.mps.internal.collections.runtime.QueueSequence;
import java.util.LinkedList;
import jetbrains.mps.lang.smodel.generator.smodelAdapter.SNodeOperations;
import jetbrains.mps.lang.structure.behavior.AbstractConceptDeclaration__BehaviorDescriptor;
public class ConceptDeclarationAssistantUtil {
private SNode myCocnept;
public ConceptDeclarationAssistantUtil(SNode concept) {
myCocnept = concept;
}
public List<SNode> getStructurallyEqualSuperConcepts() {
List<SNode> result = ListSequence.fromList(new ArrayList<SNode>());
Queue<SNode> toCheck = QueueSequence.fromQueueAndArray(new LinkedList<SNode>(), myCocnept);
SNode bestCandidate = null;
while (QueueSequence.fromQueue(toCheck).isNotEmpty()) {
SNode acd = QueueSequence.fromQueue(toCheck).removeFirstElement();
if (acd == SNodeOperations.getNode("r:00000000-0000-4000-0000-011c89590288(jetbrains.mps.lang.core.structure)", "1133920641626") || acd == SNodeOperations.getNode("r:00000000-0000-4000-0000-011c89590288(jetbrains.mps.lang.core.structure)", "1169194658468")) {
continue;
}
if (!(ListSequence.fromList(AbstractConceptDeclaration__BehaviorDescriptor.getLinkDeclarations_idhEwILKK.invoke(acd)).containsSequence(ListSequence.fromList(AbstractConceptDeclaration__BehaviorDescriptor.getLinkDeclarations_idhEwILKK.invoke(myCocnept)))) || !(ListSequence.fromList(AbstractConceptDeclaration__BehaviorDescriptor.getPropertyDeclarations_idhEwILLM.invoke(acd)).containsSequence(ListSequence.fromList(AbstractConceptDeclaration__BehaviorDescriptor.getPropertyDeclarations_idhEwILLM.invoke(myCocnept))))) {
continue;
}
if (myCocnept != acd) {
ListSequence.fromList(result).addElement(acd);
}
// continue concept hierarchy traversal only if acd contains all properties/link of the current concept
QueueSequence.fromQueue(toCheck).addSequence(ListSequence.fromList(AbstractConceptDeclaration__BehaviorDescriptor.getImmediateSuperconcepts_idhMuxyK2.invoke(acd)));
}
return result;
}
}