package jetbrains.mps.baseLanguage.editor;

/*Generated by MPS */

import jetbrains.mps.nodeEditor.menus.substitute.SubstituteMenuBase;
import jetbrains.mps.lang.editor.menus.EditorMenuDescriptorBase;
import jetbrains.mps.smodel.SNodePointer;
import org.jetbrains.annotations.NotNull;
import java.util.List;
import jetbrains.mps.lang.editor.menus.MenuPart;
import jetbrains.mps.openapi.editor.menus.substitute.SubstituteMenuItem;
import jetbrains.mps.openapi.editor.menus.substitute.SubstituteMenuContext;
import java.util.ArrayList;
import jetbrains.mps.lang.editor.menus.substitute.ConstraintsFilteringSubstituteMenuPartDecorator;
import jetbrains.mps.lang.editor.menus.ParameterizedMenuPart;
import org.jetbrains.mps.openapi.model.SNode;
import org.jetbrains.annotations.Nullable;
import jetbrains.mps.lang.smodel.generator.smodelAdapter.SNodeOperations;
import jetbrains.mps.typechecking.TypecheckingFacade;
import jetbrains.mps.lang.smodel.generator.smodelAdapter.SLinkOperations;
import jetbrains.mps.baseLanguage.scopes.ClassifierScopeUtils;
import jetbrains.mps.scope.Scope;
import jetbrains.mps.baseLanguage.scopes.ClassifierScopes;
import jetbrains.mps.internal.collections.runtime.Sequence;
import jetbrains.mps.lang.smodel.generator.smodelAdapter.SPropertyOperations;
import jetbrains.mps.lang.editor.menus.substitute.SingleItemSubstituteMenuPart;
import jetbrains.mps.lang.editor.menus.substitute.DefaultSubstituteMenuItem;
import jetbrains.mps.smodel.action.SNodeFactoryOperations;
import jetbrains.mps.baseLanguage.behavior.IMemberContainer__BehaviorDescriptor;
import jetbrains.mps.internal.collections.runtime.ListSequence;
import jetbrains.mps.lang.smodel.generator.smodelAdapter.SConceptOperations;
import jetbrains.mps.smodel.adapter.structure.MetaAdapterFactory;
import jetbrains.mps.baseLanguage.actions.ExpectedType_FactoryUtil;
import org.jetbrains.mps.openapi.language.SAbstractConcept;
import java.util.Objects;
import jetbrains.mps.editor.runtime.completion.CompletionItemInformation;
import jetbrains.mps.smodel.runtime.IconResource;
import jetbrains.mps.baseLanguage.behavior.Classifier__BehaviorDescriptor;
import org.jetbrains.mps.openapi.language.SConcept;
import jetbrains.mps.baseLanguage.behavior.Type__BehaviorDescriptor;
import jetbrains.mps.lang.core.behavior.BaseConcept__BehaviorDescriptor;
import jetbrains.mps.lang.editor.menus.ConceptMenusPart;
import java.util.Collection;
import jetbrains.mps.lang.editor.menus.substitute.DefaultSubstituteMenuLookup;
import jetbrains.mps.smodel.language.LanguageRegistry;
import org.jetbrains.mps.openapi.persistence.PersistenceFacade;
import jetbrains.mps.smodel.builder.SNodeBuilder;
import org.jetbrains.mps.openapi.language.SContainmentLink;
import org.jetbrains.mps.openapi.language.SReferenceLink;
import org.jetbrains.mps.openapi.language.SProperty;

public class AbstractCreator_SubstituteMenu extends SubstituteMenuBase {
  public AbstractCreator_SubstituteMenu() {
    super(false, new EditorMenuDescriptorBase("default substitute menu for " + "AbstractCreator", new SNodePointer("r:00000000-0000-4000-0000-011c895902c3(jetbrains.mps.baseLanguage.editor)", "1741258697586963814")));
  }
  @NotNull
  @Override
  protected List<MenuPart<SubstituteMenuItem, SubstituteMenuContext>> getParts(final SubstituteMenuContext _context) {
    List<MenuPart<SubstituteMenuItem, SubstituteMenuContext>> result = new ArrayList<MenuPart<SubstituteMenuItem, SubstituteMenuContext>>();
    result.add(new ConstraintsFilteringSubstituteMenuPartDecorator(new SMP_Param_p790zr_a(), CONCEPTS.AnonymousClassCreator$fS));
    result.add(new ConstraintsFilteringSubstituteMenuPartDecorator(new SMP_Param_p790zr_b(), CONCEPTS.ArrayCreator$bz));
    result.add(new SMP_Subconcepts_p790zr_c());
    return result;
  }

  private class SMP_Param_p790zr_a extends ParameterizedMenuPart<SNode, SubstituteMenuItem, SubstituteMenuContext> {
    /*package*/ SMP_Param_p790zr_a() {
      super(new EditorMenuDescriptorBase("parameterized substitute menu part", new SNodePointer("r:00000000-0000-4000-0000-011c895902c3(jetbrains.mps.baseLanguage.editor)", "1741258697586963816")));
    }
    @NotNull
    @Override
    protected List<SubstituteMenuItem> createItems(SNode parameter, SubstituteMenuContext context) {
      return new SMP_Action_p790zr_a0(parameter).createItems(context);
    }
    @Nullable
    @Override
    protected Iterable<? extends SNode> getParameters(SubstituteMenuContext _context) {
      Iterable<SNode> availableElements;
      if (SNodeOperations.isInstanceOf(SNodeOperations.getParent(_context.getCurrentTargetNode()), CONCEPTS.NestedNewExpression$zV)) {
        SNode type = TypecheckingFacade.getFromContext().getTypeOf(SLinkOperations.getTarget(SNodeOperations.getNodeAncestor(SNodeOperations.getParent(_context.getCurrentTargetNode()), CONCEPTS.DotExpression$yW, false, false), LINKS.operand$w6IR));
        if (!(SNodeOperations.isInstanceOf(type, CONCEPTS.ClassifierType$bL))) {
          return null;
        }
        Iterable<SNode> visibleNestedClassConceptsIncludingInherited = ClassifierScopeUtils.getVisibleNestedClassConceptsIncludingInherited(SNodeOperations.cast(type, CONCEPTS.ClassifierType$bL), _context.getCurrentTargetNode());
        availableElements = visibleNestedClassConceptsIncludingInherited;
      } else {
        Scope scope = ClassifierScopes.getVisibleClassifiersScope(_context.getParentNode(), false);
        availableElements = SNodeOperations.ofConcept(scope.getAvailableElements(null), CONCEPTS.Classifier$Ix);
      }
      return Sequence.fromIterable(availableElements).where((it) -> SNodeOperations.isInstanceOf(it, CONCEPTS.Interface$db) || (SNodeOperations.isInstanceOf(it, CONCEPTS.ClassConcept$bK) && SPropertyOperations.getBoolean(SNodeOperations.cast(it, CONCEPTS.ClassConcept$bK), PROPS.abstractClass$Ta1X))).toList();
    }
    private class SMP_Action_p790zr_a0 extends SingleItemSubstituteMenuPart {
      private final SNode myParameterObject;
      public SMP_Action_p790zr_a0(SNode parameterObject) {
        myParameterObject = parameterObject;
      }

      @Nullable
      @Override
      protected SubstituteMenuItem createItem(SubstituteMenuContext _context) {
        Item item = new Item(_context);
        item.resetTraceInfo();
        return item;
      }
      private class Item extends DefaultSubstituteMenuItem {
        private final SubstituteMenuContext _context;
        public Item(SubstituteMenuContext context) {
          super(CONCEPTS.AnonymousClassCreator$fS, context);
          _context = context;
        }

        /*package*/ void resetTraceInfo() {
          String description = "Substitute item: " + getMatchingText("");
          description += ". Parameter object: " + myParameterObject;
          updateTraceInfo(description, new SNodePointer("r:00000000-0000-4000-0000-011c895902c3(jetbrains.mps.baseLanguage.editor)", "1741258697586963941"));
        }

        @Nullable
        @Override
        public SNode createNode(@NotNull String pattern) {
          final SNode creator = SNodeFactoryOperations.createNewNode(CONCEPTS.AnonymousClassCreator$fS, null);
          SLinkOperations.setTarget(creator, LINKS.cls$Saf6, SNodeFactoryOperations.createNewNode(CONCEPTS.AnonymousClass$Bt, null));
          SLinkOperations.setTarget(SLinkOperations.getTarget(creator, LINKS.cls$Saf6), LINKS.classifier$q_Y$, myParameterObject);
          SLinkOperations.setPointer(SLinkOperations.getTarget(creator, LINKS.cls$Saf6), LINKS.baseMethodDeclaration$pyYw, new SNodePointer("6354ebe7-c22a-4a0f-ac54-50b52ab9b065/java:java.lang(JDK/)", "~Object.<init>()"));
          Iterable<SNode> methodsToImplement = SNodeOperations.ofConcept(IMemberContainer__BehaviorDescriptor.getMethodsToImplement_id4GM03FJm5q2.invoke(SLinkOperations.getTarget(creator, LINKS.cls$Saf6)), CONCEPTS.InstanceMethodDeclaration$39);
          for (SNode method : Sequence.fromIterable(methodsToImplement)) {
            if (ListSequence.fromList(SLinkOperations.getChildren(SLinkOperations.getTarget(creator, LINKS.cls$Saf6), LINKS.member$L_2d)).isNotEmpty()) {
              ListSequence.fromList(SLinkOperations.getChildren(SLinkOperations.getTarget(creator, LINKS.cls$Saf6), LINKS.member$L_2d)).addElement(SConceptOperations.createNewNode(MetaAdapterFactory.getConcept(0xf3061a5392264cc5L, 0xa443f952ceaf5816L, 0x1458378889e6d166L, "jetbrains.mps.baseLanguage.structure.PlaceholderMember")));
            }
            SNode methodCopy = SNodeOperations.copyNode(method);
            SPropertyOperations.assign(methodCopy, PROPS.isAbstract$VtH_, false);
            SNodeFactoryOperations.setNewChild(methodCopy, LINKS.body$5xQk, CONCEPTS.StatementList$m_);
            ListSequence.fromList(SLinkOperations.getChildren(methodCopy, LINKS.annotation$K49I)).addElement(createAnnotationInstance_p790zr_a0a4a5a0a0());
            ListSequence.fromList(SLinkOperations.getChildren(SLinkOperations.getTarget(creator, LINKS.cls$Saf6), LINKS.member$L_2d)).addElement(methodCopy);
          }
          SNode expectedType = ExpectedType_FactoryUtil.createExpectedType(SNodeOperations.getNodeAncestor(_context.getCurrentTargetNode(), CONCEPTS.Expression$mB, false, false));
          final List<SNode> expectedTypeParams = ListSequence.fromList(new ArrayList<SNode>());
          if ((expectedType != null) && SNodeOperations.isInstanceOf(expectedType, CONCEPTS.ClassifierType$bL) && ListSequence.fromList(SLinkOperations.getChildren(SNodeOperations.cast(expectedType, CONCEPTS.ClassifierType$bL), LINKS.parameter$oqG$)).isNotEmpty()) {
            ListSequence.fromList(expectedTypeParams).addSequence(ListSequence.fromList(SLinkOperations.getChildren(SNodeOperations.cast(expectedType, CONCEPTS.ClassifierType$bL), LINKS.parameter$oqG$)));
          }

          ListSequence.fromList(SLinkOperations.getChildren(myParameterObject, LINKS.typeVariableDeclaration$Lipp)).visitAll((final SNode originalVar) -> {
            SNode newTypeParam = null;
            if (ListSequence.fromList(expectedTypeParams).isNotEmpty()) {
              newTypeParam = SNodeOperations.copyNode(ListSequence.fromList(expectedTypeParams).removeElementAt(0));
              if (SNodeOperations.isInstanceOf(newTypeParam, CONCEPTS.WildCardType$uV)) {
                newTypeParam = null;
              } else if (SNodeOperations.isInstanceOf(newTypeParam, CONCEPTS.LowerBoundType$nl)) {
                newTypeParam = SLinkOperations.getTarget(SNodeOperations.cast(newTypeParam, CONCEPTS.LowerBoundType$nl), LINKS.bound$$a6H);
              } else if (SNodeOperations.isInstanceOf(newTypeParam, CONCEPTS.UpperBoundType$RS)) {
                newTypeParam = SLinkOperations.getTarget(SNodeOperations.cast(newTypeParam, CONCEPTS.UpperBoundType$RS), LINKS.bound$ciZM);
              }
            }
            if ((newTypeParam != null)) {
              ListSequence.fromList(SLinkOperations.getChildren(SLinkOperations.getTarget(creator, LINKS.cls$Saf6), LINKS.typeParameter$F9H8)).addElement(newTypeParam);
            } else {
              newTypeParam = SNodeFactoryOperations.addNewChild(SLinkOperations.getTarget(creator, LINKS.cls$Saf6), LINKS.typeParameter$F9H8, CONCEPTS.ClassifierType$bL);
              SLinkOperations.setPointer(SNodeOperations.cast(newTypeParam, CONCEPTS.ClassifierType$bL), LINKS.classifier$cxMr, new SNodePointer("6354ebe7-c22a-4a0f-ac54-50b52ab9b065/java:java.lang(JDK/)", "~Object"));
            }
            // replace all type vars with new ones
            Iterable<SNode> typeVarRefs = ListSequence.fromList(SNodeOperations.getNodeDescendants(SLinkOperations.getTarget(creator, LINKS.cls$Saf6), CONCEPTS.TypeVariableReference$WL, false, new SAbstractConcept[]{})).where((it) -> Objects.equals(SLinkOperations.getTarget(it, LINKS.typeVariableDeclaration$Lz1I), originalVar));
            for (SNode typeVar : Sequence.fromIterable(typeVarRefs)) {
              SNodeOperations.replaceWithAnother(typeVar, SNodeOperations.copyNode(newTypeParam));
              SLinkOperations.setTarget(typeVar, LINKS.typeVariableDeclaration$Lz1I, newTypeParam);
            }
          });
          return creator;
        }

        @NotNull
        protected CompletionItemInformation createInformation(String pattern) {
          return new CompletionItemInformation(myParameterObject, CONCEPTS.AnonymousClassCreator$fS, getMatchingText(pattern), getDescriptionText(pattern));
        }
        @Nullable
        @Override
        public String getDescriptionText(@NotNull String pattern) {
          return defaultDescriptionTextForParameter(myParameterObject, pattern);
        }
        @Nullable
        @Override
        public IconResource getIcon(@NotNull String pattern) {
          return defaultIconForParameter(myParameterObject, pattern);
        }
        @Nullable
        @Override
        public String getMatchingText(@NotNull String pattern) {
          return Classifier__BehaviorDescriptor.getNestedNameInContext_id7q4lzBFjvF8.invoke(myParameterObject, _context.getParentNode()) + " {..}";
        }
      }
    }

  }
  private class SMP_Param_p790zr_b extends ParameterizedMenuPart<SNode, SubstituteMenuItem, SubstituteMenuContext> {
    /*package*/ SMP_Param_p790zr_b() {
      super(new EditorMenuDescriptorBase("parameterized substitute menu part", new SNodePointer("r:00000000-0000-4000-0000-011c895902c3(jetbrains.mps.baseLanguage.editor)", "1741258697586964309")));
    }
    @NotNull
    @Override
    protected List<SubstituteMenuItem> createItems(SNode parameter, SubstituteMenuContext context) {
      return new SMP_Action_p790zr_a1(parameter).createItems(context);
    }
    @Nullable
    @Override
    protected Iterable<? extends SNode> getParameters(SubstituteMenuContext _context) {
      Scope scope = ClassifierScopes.getVisibleClassifiersScope(_context.getParentNode(), false);
      Iterable<SNode> list = SNodeOperations.ofConcept(scope.getAvailableElements(null), CONCEPTS.Classifier$Ix);
      List<SNode> types = new ArrayList<SNode>();
      for (SNode classifier : Sequence.fromIterable(list)) {
        SNode type = SNodeFactoryOperations.createNewNode(CONCEPTS.ClassifierType$bL, null);
        SLinkOperations.setTarget(type, LINKS.classifier$cxMr, classifier);
        ListSequence.fromList(types).addElement(type);
      }
      for (SConcept typeConcept : ListSequence.fromList(SConceptOperations.getAllSubConcepts2(CONCEPTS.Type$bu, _context.getModel()))) {
        if (!(typeConcept.isAbstract()) && (boolean) Type__BehaviorDescriptor.isValueType_id4bFkYVCcmm2.invoke(SNodeOperations.asSConcept(typeConcept)) && !(SConceptOperations.isSubConceptOf(SNodeOperations.asSConcept(typeConcept), CONCEPTS.UndefinedType$uv))) {
          ListSequence.fromList(types).addElement(SNodeFactoryOperations.createNewNode(typeConcept, null));
        }
      }
      return types;
    }
    private class SMP_Action_p790zr_a1 extends SingleItemSubstituteMenuPart {
      private final SNode myParameterObject;
      public SMP_Action_p790zr_a1(SNode parameterObject) {
        myParameterObject = parameterObject;
      }

      @Nullable
      @Override
      protected SubstituteMenuItem createItem(SubstituteMenuContext _context) {
        Item item = new Item(_context);
        item.resetTraceInfo();
        return item;
      }
      private class Item extends DefaultSubstituteMenuItem {
        private final SubstituteMenuContext _context;
        public Item(SubstituteMenuContext context) {
          super(CONCEPTS.ArrayCreator$bz, context);
          _context = context;
        }

        /*package*/ void resetTraceInfo() {
          String description = "Substitute item: " + getMatchingText("");
          description += ". Parameter object: " + myParameterObject;
          updateTraceInfo(description, new SNodePointer("r:00000000-0000-4000-0000-011c895902c3(jetbrains.mps.baseLanguage.editor)", "1741258697586964407"));
        }

        @Nullable
        @Override
        public SNode createNode(@NotNull String pattern) {
          SNode creator = SNodeFactoryOperations.createNewNode(CONCEPTS.ArrayCreator$bz, null);
          SLinkOperations.setTarget(creator, LINKS.componentType$SJjq, myParameterObject);
          return creator;
        }

        @NotNull
        protected CompletionItemInformation createInformation(String pattern) {
          return new CompletionItemInformation(myParameterObject, CONCEPTS.ArrayCreator$bz, getMatchingText(pattern), getDescriptionText(pattern));
        }
        @Nullable
        @Override
        public IconResource getIcon(@NotNull String pattern) {
          return defaultIconForParameter(myParameterObject, pattern);
        }
        @Nullable
        @Override
        public String getMatchingText(@NotNull String pattern) {
          if (SNodeOperations.isInstanceOf(myParameterObject, CONCEPTS.ClassifierType$bL)) {
            return Classifier__BehaviorDescriptor.getNestedNameInContext_id7q4lzBFjvF8.invoke(SLinkOperations.getTarget(SNodeOperations.cast(myParameterObject, CONCEPTS.ClassifierType$bL), LINKS.classifier$cxMr), _context.getParentNode()) + "[]";
          } else {
            return BaseConcept__BehaviorDescriptor.getPresentation_idhEwIMiw.invoke(myParameterObject) + "[]";
          }
        }
        @Nullable
        @Override
        public String getDescriptionText(@NotNull String pattern) {
          return "array of " + BaseConcept__BehaviorDescriptor.getPresentation_idhEwIMiw.invoke(myParameterObject);
        }
      }
    }

  }
  public class SMP_Subconcepts_p790zr_c extends ConceptMenusPart<SubstituteMenuItem, SubstituteMenuContext> {
    public SMP_Subconcepts_p790zr_c() {
      super(new EditorMenuDescriptorBase("include menus for all the direct subconcepts of " + "AbstractCreator", new SNodePointer("r:00000000-0000-4000-0000-011c895902c3(jetbrains.mps.baseLanguage.editor)", "1741258697586964711")));
    }

    @Override
    protected Collection<SAbstractConcept> getConcepts(final SubstituteMenuContext _context) {
      return getDirectDescendants(_context, CONCEPTS.AbstractCreator$5K);
    }

    @Override
    protected Collection<SubstituteMenuItem> createItemsForConcept(SubstituteMenuContext context, SAbstractConcept concept) {
      return context.createItems(new DefaultSubstituteMenuLookup(LanguageRegistry.getInstance(context.getEditorContext().getRepository()), concept));
    }
  }
  private static SNode createAnnotationInstance_p790zr_a0a4a5a0a0() {
    PersistenceFacade facade = PersistenceFacade.getInstance();
    SNodeBuilder n0 = new SNodeBuilder().init(CONCEPTS.AnnotationInstance$yl);
    n0.setReference(LINKS.annotation$12Ek, new SNodePointer(facade.createModelReference("6354ebe7-c22a-4a0f-ac54-50b52ab9b065/java:java.lang(JDK/)"), facade.createNodeId("~Override")));
    return n0.getResult();
  }

  private static final class CONCEPTS {
    /*package*/ static final SConcept AnonymousClassCreator$fS = MetaAdapterFactory.getConcept(0xf3061a5392264cc5L, 0xa443f952ceaf5816L, 0x1133e3b449aL, "jetbrains.mps.baseLanguage.structure.AnonymousClassCreator");
    /*package*/ static final SConcept ArrayCreator$bz = MetaAdapterFactory.getConcept(0xf3061a5392264cc5L, 0xa443f952ceaf5816L, 0x113e4952f12L, "jetbrains.mps.baseLanguage.structure.ArrayCreator");
    /*package*/ static final SConcept DotExpression$yW = MetaAdapterFactory.getConcept(0xf3061a5392264cc5L, 0xa443f952ceaf5816L, 0x116b46a08c4L, "jetbrains.mps.baseLanguage.structure.DotExpression");
    /*package*/ static final SConcept ClassifierType$bL = MetaAdapterFactory.getConcept(0xf3061a5392264cc5L, 0xa443f952ceaf5816L, 0x101de48bf9eL, "jetbrains.mps.baseLanguage.structure.ClassifierType");
    /*package*/ static final SConcept NestedNewExpression$zV = MetaAdapterFactory.getConcept(0xf3061a5392264cc5L, 0xa443f952ceaf5816L, 0x650f9fedfcb5b664L, "jetbrains.mps.baseLanguage.structure.NestedNewExpression");
    /*package*/ static final SConcept Classifier$Ix = MetaAdapterFactory.getConcept(0xf3061a5392264cc5L, 0xa443f952ceaf5816L, 0x101d9d3ca30L, "jetbrains.mps.baseLanguage.structure.Classifier");
    /*package*/ static final SConcept ClassConcept$bK = MetaAdapterFactory.getConcept(0xf3061a5392264cc5L, 0xa443f952ceaf5816L, 0xf8c108ca66L, "jetbrains.mps.baseLanguage.structure.ClassConcept");
    /*package*/ static final SConcept Interface$db = MetaAdapterFactory.getConcept(0xf3061a5392264cc5L, 0xa443f952ceaf5816L, 0x101edd46144L, "jetbrains.mps.baseLanguage.structure.Interface");
    /*package*/ static final SConcept AnonymousClass$Bt = MetaAdapterFactory.getConcept(0xf3061a5392264cc5L, 0xa443f952ceaf5816L, 0x1107e0cb103L, "jetbrains.mps.baseLanguage.structure.AnonymousClass");
    /*package*/ static final SConcept InstanceMethodDeclaration$39 = MetaAdapterFactory.getConcept(0xf3061a5392264cc5L, 0xa443f952ceaf5816L, 0xf8cc56b21dL, "jetbrains.mps.baseLanguage.structure.InstanceMethodDeclaration");
    /*package*/ static final SConcept StatementList$m_ = MetaAdapterFactory.getConcept(0xf3061a5392264cc5L, 0xa443f952ceaf5816L, 0xf8cc56b200L, "jetbrains.mps.baseLanguage.structure.StatementList");
    /*package*/ static final SConcept Expression$mB = MetaAdapterFactory.getConcept(0xf3061a5392264cc5L, 0xa443f952ceaf5816L, 0xf8c37f506fL, "jetbrains.mps.baseLanguage.structure.Expression");
    /*package*/ static final SConcept WildCardType$uV = MetaAdapterFactory.getConcept(0xf3061a5392264cc5L, 0xa443f952ceaf5816L, 0x110dae5f4a3L, "jetbrains.mps.baseLanguage.structure.WildCardType");
    /*package*/ static final SConcept LowerBoundType$nl = MetaAdapterFactory.getConcept(0xf3061a5392264cc5L, 0xa443f952ceaf5816L, 0x110dae9d53dL, "jetbrains.mps.baseLanguage.structure.LowerBoundType");
    /*package*/ static final SConcept UpperBoundType$RS = MetaAdapterFactory.getConcept(0xf3061a5392264cc5L, 0xa443f952ceaf5816L, 0x110daeaa84aL, "jetbrains.mps.baseLanguage.structure.UpperBoundType");
    /*package*/ static final SConcept TypeVariableReference$WL = MetaAdapterFactory.getConcept(0xf3061a5392264cc5L, 0xa443f952ceaf5816L, 0x102467229d8L, "jetbrains.mps.baseLanguage.structure.TypeVariableReference");
    /*package*/ static final SConcept UndefinedType$uv = MetaAdapterFactory.getConcept(0xf3061a5392264cc5L, 0xa443f952ceaf5816L, 0x431d52a5d09a4ea9L, "jetbrains.mps.baseLanguage.structure.UndefinedType");
    /*package*/ static final SConcept Type$bu = MetaAdapterFactory.getConcept(0xf3061a5392264cc5L, 0xa443f952ceaf5816L, 0xf8c37f506dL, "jetbrains.mps.baseLanguage.structure.Type");
    /*package*/ static final SConcept AbstractCreator$5K = MetaAdapterFactory.getConcept(0xf3061a5392264cc5L, 0xa443f952ceaf5816L, 0x10ab844af9bL, "jetbrains.mps.baseLanguage.structure.AbstractCreator");
    /*package*/ static final SConcept AnnotationInstance$yl = MetaAdapterFactory.getConcept(0xf3061a5392264cc5L, 0xa443f952ceaf5816L, 0x114a6b4ccabL, "jetbrains.mps.baseLanguage.structure.AnnotationInstance");
  }

  private static final class LINKS {
    /*package*/ static final SContainmentLink operand$w6IR = MetaAdapterFactory.getContainmentLink(0xf3061a5392264cc5L, 0xa443f952ceaf5816L, 0x116b46a08c4L, 0x116b46a4416L, "operand");
    /*package*/ static final SContainmentLink cls$Saf6 = MetaAdapterFactory.getContainmentLink(0xf3061a5392264cc5L, 0xa443f952ceaf5816L, 0x1133e3b449aL, 0x1133e3b8b49L, "cls");
    /*package*/ static final SReferenceLink classifier$q_Y$ = MetaAdapterFactory.getReferenceLink(0xf3061a5392264cc5L, 0xa443f952ceaf5816L, 0x1107e0cb103L, 0x1107e0fd2a0L, "classifier");
    /*package*/ static final SReferenceLink baseMethodDeclaration$pyYw = MetaAdapterFactory.getReferenceLink(0xf3061a5392264cc5L, 0xa443f952ceaf5816L, 0x11857355952L, 0xf8c78301adL, "baseMethodDeclaration");
    /*package*/ static final SContainmentLink member$L_2d = MetaAdapterFactory.getContainmentLink(0xf3061a5392264cc5L, 0xa443f952ceaf5816L, 0x101d9d3ca30L, 0x4a9a46de59132803L, "member");
    /*package*/ static final SContainmentLink body$5xQk = MetaAdapterFactory.getContainmentLink(0xf3061a5392264cc5L, 0xa443f952ceaf5816L, 0xf8cc56b1fcL, 0xf8cc56b1ffL, "body");
    /*package*/ static final SContainmentLink annotation$K49I = MetaAdapterFactory.getContainmentLink(0xf3061a5392264cc5L, 0xa443f952ceaf5816L, 0x114a6be947aL, 0x114a6beb0bdL, "annotation");
    /*package*/ static final SContainmentLink parameter$oqG$ = MetaAdapterFactory.getContainmentLink(0xf3061a5392264cc5L, 0xa443f952ceaf5816L, 0x101de48bf9eL, 0x102419671abL, "parameter");
    /*package*/ static final SContainmentLink typeVariableDeclaration$Lipp = MetaAdapterFactory.getContainmentLink(0xf3061a5392264cc5L, 0xa443f952ceaf5816L, 0x102463b447aL, 0x102463bb98eL, "typeVariableDeclaration");
    /*package*/ static final SContainmentLink bound$$a6H = MetaAdapterFactory.getContainmentLink(0xf3061a5392264cc5L, 0xa443f952ceaf5816L, 0x110dae9d53dL, 0x110dae9f25bL, "bound");
    /*package*/ static final SContainmentLink bound$ciZM = MetaAdapterFactory.getContainmentLink(0xf3061a5392264cc5L, 0xa443f952ceaf5816L, 0x110daeaa84aL, 0x110daeaa84bL, "bound");
    /*package*/ static final SContainmentLink typeParameter$F9H8 = MetaAdapterFactory.getContainmentLink(0xf3061a5392264cc5L, 0xa443f952ceaf5816L, 0x1107e0cb103L, 0x117ac45a693L, "typeParameter");
    /*package*/ static final SReferenceLink classifier$cxMr = MetaAdapterFactory.getReferenceLink(0xf3061a5392264cc5L, 0xa443f952ceaf5816L, 0x101de48bf9eL, 0x101de490babL, "classifier");
    /*package*/ static final SReferenceLink typeVariableDeclaration$Lz1I = MetaAdapterFactory.getReferenceLink(0xf3061a5392264cc5L, 0xa443f952ceaf5816L, 0x102467229d8L, 0x1024673a581L, "typeVariableDeclaration");
    /*package*/ static final SContainmentLink componentType$SJjq = MetaAdapterFactory.getContainmentLink(0xf3061a5392264cc5L, 0xa443f952ceaf5816L, 0x113e4952f12L, 0x113e49578edL, "componentType");
    /*package*/ static final SReferenceLink annotation$12Ek = MetaAdapterFactory.getReferenceLink(0xf3061a5392264cc5L, 0xa443f952ceaf5816L, 0x114a6b4ccabL, 0x114a6b85d40L, "annotation");
  }

  private static final class PROPS {
    /*package*/ static final SProperty abstractClass$Ta1X = MetaAdapterFactory.getProperty(0xf3061a5392264cc5L, 0xa443f952ceaf5816L, 0xf8c108ca66L, 0xfa5cee6dfaL, "abstractClass");
    /*package*/ static final SProperty isAbstract$VtH_ = MetaAdapterFactory.getProperty(0xf3061a5392264cc5L, 0xa443f952ceaf5816L, 0xf8cc56b21dL, 0x1126a8d157dL, "isAbstract");
  }
}
