package jetbrains.mps.baseLanguage.scopes;
/*Generated by MPS */
import jetbrains.mps.util.annotation.ToRemove;
import jetbrains.mps.scope.Scope;
import org.jetbrains.mps.openapi.model.SNode;
import org.jetbrains.annotations.Nullable;
import jetbrains.mps.internal.collections.runtime.ListSequence;
import java.util.ArrayList;
import org.jetbrains.annotations.NotNull;
import java.util.StringTokenizer;
import jetbrains.mps.lang.smodel.generator.smodelAdapter.SNodeOperations;
import jetbrains.mps.smodel.adapter.structure.MetaAdapterFactory;
import jetbrains.mps.lang.smodel.generator.smodelAdapter.SPropertyOperations;
import jetbrains.mps.internal.collections.runtime.Sequence;
@Deprecated
@ToRemove(version = 2017.1)
public class SimpleClassifiersScope extends Scope {
private SNode myClassifier;
private boolean myGoUpHieracrhy;
@Deprecated
public SimpleClassifiersScope(SNode classifier, boolean goUpInHierarchy) {
myClassifier = classifier;
myGoUpHieracrhy = goUpInHierarchy;
}
public Iterable<SNode> getAvailableElements(@Nullable String prefix) {
// FIXME
return ListSequence.fromList(new ArrayList<SNode>());
}
@Nullable
public String getReferenceText(SNode contextNode, @NotNull SNode node) {
// FIXME
return "";
}
@Nullable
public SNode resolve(SNode contextNode, @NotNull String refText) {
StringTokenizer tokenizer = new StringTokenizer(refText, ".");
if (!(tokenizer.hasMoreTokens())) {
return null;
}
String firstComponent = tokenizer.nextToken();
// this exact class which provides the scope
if (!(SNodeOperations.isInstanceOf(myClassifier, MetaAdapterFactory.getConcept(0xf3061a5392264cc5L, 0xa443f952ceaf5816L, 0x1107e0cb103L, "jetbrains.mps.baseLanguage.structure.AnonymousClass")))) {
if (firstComponent.equals(SPropertyOperations.getString(myClassifier, MetaAdapterFactory.getProperty(0xceab519525ea4f22L, 0x9b92103b95ca8c0cL, 0x110396eaaa4L, 0x110396ec041L, "name")))) {
return ClassifierResolveUtils.construct(myClassifier, tokenizer);
}
}
// scope provider's nested classes
for (SNode nestedClas : Sequence.fromIterable(ClassifierResolveUtils.getImmediateNestedClassifiers(myClassifier))) {
ClassifierResolveUtils.getImmediateNestedClassifiers(myClassifier);
if (firstComponent.equals(SPropertyOperations.getString(nestedClas, MetaAdapterFactory.getProperty(0xceab519525ea4f22L, 0x9b92103b95ca8c0cL, 0x110396eaaa4L, 0x110396ec041L, "name")))) {
return ClassifierResolveUtils.construct(myClassifier, tokenizer);
}
}
// nested classes of base classes of our scope provider
// (not base classes themselves, but only their immediate nested classes)
if (myGoUpHieracrhy) {
for (SNode ancestor : Sequence.fromIterable(ClassifierResolveUtils.getAncestors(myClassifier))) {
for (SNode nested : Sequence.fromIterable(ClassifierResolveUtils.getImmediateNestedClassifiers(ancestor))) {
if (firstComponent.equals(SPropertyOperations.getString(nested, MetaAdapterFactory.getProperty(0xceab519525ea4f22L, 0x9b92103b95ca8c0cL, 0x110396eaaa4L, 0x110396ec041L, "name")))) {
return ClassifierResolveUtils.construct(nested, tokenizer);
}
}
}
}
return null;
}
}