package jetbrains.mps.lang.editor.multiple.testLanguage.structure;

/*Generated by MPS */

import jetbrains.mps.smodel.runtime.BaseStructureAspectDescriptor;
import jetbrains.mps.smodel.runtime.ConceptDescriptor;
import jetbrains.mps.smodel.runtime.EnumerationDescriptor;
import java.util.Collection;
import java.util.Arrays;
import org.jetbrains.annotations.Nullable;
import jetbrains.mps.smodel.adapter.ids.SConceptId;
import jetbrains.mps.smodel.runtime.DataTypeDescriptor;
import org.jetbrains.mps.openapi.language.SAbstractConcept;
import jetbrains.mps.smodel.runtime.impl.ConceptDescriptorBuilder2;
import jetbrains.mps.smodel.adapter.ids.PrimitiveTypeId;
import jetbrains.mps.smodel.adapter.ids.MetaIdFactory;

public class StructureAspectDescriptor extends BaseStructureAspectDescriptor {
  /*package*/ final ConceptDescriptor myConceptMultipleEditorsTestChild = createDescriptorForMultipleEditorsTestChild();
  /*package*/ final ConceptDescriptor myConceptMultipleEditorsTestEditorComponentChild = createDescriptorForMultipleEditorsTestEditorComponentChild();
  /*package*/ final ConceptDescriptor myConceptMultipleEditorsTestEditorComponentChildSubconcept = createDescriptorForMultipleEditorsTestEditorComponentChildSubconcept();
  /*package*/ final ConceptDescriptor myConceptMultipleEditorsTestEditorComponentRoot = createDescriptorForMultipleEditorsTestEditorComponentRoot();
  /*package*/ final ConceptDescriptor myConceptMultipleEditorsTestMostSpecificChild = createDescriptorForMultipleEditorsTestMostSpecificChild();
  /*package*/ final ConceptDescriptor myConceptMultipleEditorsTestMostSpecificRoot = createDescriptorForMultipleEditorsTestMostSpecificRoot();
  /*package*/ final ConceptDescriptor myConceptMultipleEditorsTestRefNodeListRoot = createDescriptorForMultipleEditorsTestRefNodeListRoot();
  /*package*/ final ConceptDescriptor myConceptMultipleEditorsTestRefNodeRoot = createDescriptorForMultipleEditorsTestRefNodeRoot();
  /*package*/ final ConceptDescriptor myConceptMultipleEditorsTestRoot = createDescriptorForMultipleEditorsTestRoot();
  /*package*/ final EnumerationDescriptor myEnumerationProjectionType = new EnumerationDescriptor_ProjectionType();
  private final LanguageConceptSwitch myIndexSwitch;

  public StructureAspectDescriptor() {
    myIndexSwitch = new LanguageConceptSwitch();
  }


  @Override
  public void reportDependencies(jetbrains.mps.smodel.runtime.StructureAspectDescriptor.Dependencies deps) {
    deps.extendedLanguage(0xceab519525ea4f22L, 0x9b92103b95ca8c0cL, "jetbrains.mps.lang.core");
  }

  @Override
  public Collection<ConceptDescriptor> getDescriptors() {
    return Arrays.asList(myConceptMultipleEditorsTestChild, myConceptMultipleEditorsTestEditorComponentChild, myConceptMultipleEditorsTestEditorComponentChildSubconcept, myConceptMultipleEditorsTestEditorComponentRoot, myConceptMultipleEditorsTestMostSpecificChild, myConceptMultipleEditorsTestMostSpecificRoot, myConceptMultipleEditorsTestRefNodeListRoot, myConceptMultipleEditorsTestRefNodeRoot, myConceptMultipleEditorsTestRoot);
  }

  @Override
  @Nullable
  public ConceptDescriptor getDescriptor(SConceptId id) {
    switch (myIndexSwitch.index(id)) {
      case LanguageConceptSwitch.MultipleEditorsTestChild:
        return myConceptMultipleEditorsTestChild;
      case LanguageConceptSwitch.MultipleEditorsTestEditorComponentChild:
        return myConceptMultipleEditorsTestEditorComponentChild;
      case LanguageConceptSwitch.MultipleEditorsTestEditorComponentChildSubconcept:
        return myConceptMultipleEditorsTestEditorComponentChildSubconcept;
      case LanguageConceptSwitch.MultipleEditorsTestEditorComponentRoot:
        return myConceptMultipleEditorsTestEditorComponentRoot;
      case LanguageConceptSwitch.MultipleEditorsTestMostSpecificChild:
        return myConceptMultipleEditorsTestMostSpecificChild;
      case LanguageConceptSwitch.MultipleEditorsTestMostSpecificRoot:
        return myConceptMultipleEditorsTestMostSpecificRoot;
      case LanguageConceptSwitch.MultipleEditorsTestRefNodeListRoot:
        return myConceptMultipleEditorsTestRefNodeListRoot;
      case LanguageConceptSwitch.MultipleEditorsTestRefNodeRoot:
        return myConceptMultipleEditorsTestRefNodeRoot;
      case LanguageConceptSwitch.MultipleEditorsTestRoot:
        return myConceptMultipleEditorsTestRoot;
      default:
        return null;
    }
  }

  @Override
  public Collection<DataTypeDescriptor> getDataTypeDescriptors() {
    return Arrays.asList(myEnumerationProjectionType);
  }

  /*package*/ int internalIndex(SAbstractConcept c) {
    return myIndexSwitch.index(c);
  }

  private static ConceptDescriptor createDescriptorForMultipleEditorsTestChild() {
    ConceptDescriptorBuilder2 b = new ConceptDescriptorBuilder2("jetbrains.mps.lang.editor.multiple.testLanguage", "MultipleEditorsTestChild", 0x7a80051c66e94bfcL, 0x9698b12adfed3d9fL, 0x5c5c8f07ee27f5c1L);
    b.class_(false, false, false);
    b.parent(0xceab519525ea4f22L, 0x9b92103b95ca8c0cL, 0x110396eaaa4L);
    b.origin("r:eb859fb0-1cb5-4829-a090-c7f47391d585(jetbrains.mps.lang.editor.multiple.testLanguage.structure)/6655351613569889729");
    b.version(3);
    b.property("defaultProperty", 0x5c5c8f07ee282fa5L).type(PrimitiveTypeId.STRING).origin("6655351613569904549").done();
    b.property("richProperty", 0x5c5c8f07ee282fa7L).type(PrimitiveTypeId.STRING).origin("6655351613569904551").done();
    b.property("compactProperty", 0x5293debe4ce168efL).type(PrimitiveTypeId.STRING).origin("5950344441601550575").done();
    return b.create();
  }
  private static ConceptDescriptor createDescriptorForMultipleEditorsTestEditorComponentChild() {
    ConceptDescriptorBuilder2 b = new ConceptDescriptorBuilder2("jetbrains.mps.lang.editor.multiple.testLanguage", "MultipleEditorsTestEditorComponentChild", 0x7a80051c66e94bfcL, 0x9698b12adfed3d9fL, 0x10e3b2b96584da79L);
    b.class_(false, false, false);
    b.parent(0xceab519525ea4f22L, 0x9b92103b95ca8c0cL, 0x110396eaaa4L);
    b.origin("r:eb859fb0-1cb5-4829-a090-c7f47391d585(jetbrains.mps.lang.editor.multiple.testLanguage.structure)/1217012833662065273");
    b.version(3);
    b.property("defaultProperty", 0x10e3b2b9658523d3L).type(PrimitiveTypeId.STRING).origin("1217012833662084051").done();
    b.property("compactProperty", 0x10e3b2b9658523d4L).type(PrimitiveTypeId.STRING).origin("1217012833662084052").done();
    b.property("richProperty", 0x10e3b2b9658523d5L).type(PrimitiveTypeId.STRING).origin("1217012833662084053").done();
    b.property("richCompactProperty", 0x10e3b2b9658523d6L).type(PrimitiveTypeId.STRING).origin("1217012833662084054").done();
    return b.create();
  }
  private static ConceptDescriptor createDescriptorForMultipleEditorsTestEditorComponentChildSubconcept() {
    ConceptDescriptorBuilder2 b = new ConceptDescriptorBuilder2("jetbrains.mps.lang.editor.multiple.testLanguage", "MultipleEditorsTestEditorComponentChildSubconcept", 0x7a80051c66e94bfcL, 0x9698b12adfed3d9fL, 0x591b11eaedfa2868L);
    b.class_(false, false, false);
    // extends: jetbrains.mps.lang.editor.multiple.testLanguage.structure.MultipleEditorsTestEditorComponentChild
    b.super_(0x7a80051c66e94bfcL, 0x9698b12adfed3d9fL, 0x10e3b2b96584da79L);
    b.origin("r:eb859fb0-1cb5-4829-a090-c7f47391d585(jetbrains.mps.lang.editor.multiple.testLanguage.structure)/6420745394459388008");
    b.version(3);
    b.property("subconceptProperty", 0x591b11eaedfe237eL).type(PrimitiveTypeId.STRING).origin("6420745394459648894").done();
    return b.create();
  }
  private static ConceptDescriptor createDescriptorForMultipleEditorsTestEditorComponentRoot() {
    ConceptDescriptorBuilder2 b = new ConceptDescriptorBuilder2("jetbrains.mps.lang.editor.multiple.testLanguage", "MultipleEditorsTestEditorComponentRoot", 0x7a80051c66e94bfcL, 0x9698b12adfed3d9fL, 0x10e3b2b965847f13L);
    b.class_(false, false, true);
    b.origin("r:eb859fb0-1cb5-4829-a090-c7f47391d585(jetbrains.mps.lang.editor.multiple.testLanguage.structure)/1217012833662041875");
    b.version(3);
    b.aggregate("defaultChildren", 0x10e3b2b96584e0beL).target(0x7a80051c66e94bfcL, 0x9698b12adfed3d9fL, 0x10e3b2b96584da79L).optional(true).ordered(true).multiple(true).origin("1217012833662066878").done();
    b.aggregate("richChildren", 0x10e3b2b965850dc6L).target(0x7a80051c66e94bfcL, 0x9698b12adfed3d9fL, 0x10e3b2b96584da79L).optional(true).ordered(true).multiple(true).origin("1217012833662078406").done();
    b.aggregate("richCompactChildren", 0x10e3b2b965850dccL).target(0x7a80051c66e94bfcL, 0x9698b12adfed3d9fL, 0x10e3b2b96584da79L).optional(true).ordered(true).multiple(true).origin("1217012833662078412").done();
    b.aggregate("childSubconcepts", 0x591b11eaedfa2504L).target(0x7a80051c66e94bfcL, 0x9698b12adfed3d9fL, 0x591b11eaedfa2868L).optional(true).ordered(true).multiple(true).origin("6420745394459387140").done();
    return b.create();
  }
  private static ConceptDescriptor createDescriptorForMultipleEditorsTestMostSpecificChild() {
    ConceptDescriptorBuilder2 b = new ConceptDescriptorBuilder2("jetbrains.mps.lang.editor.multiple.testLanguage", "MultipleEditorsTestMostSpecificChild", 0x7a80051c66e94bfcL, 0x9698b12adfed3d9fL, 0x76f70aa86b49610dL);
    b.class_(false, false, false);
    b.parent(0xceab519525ea4f22L, 0x9b92103b95ca8c0cL, 0x110396eaaa4L);
    b.origin("r:eb859fb0-1cb5-4829-a090-c7f47391d585(jetbrains.mps.lang.editor.multiple.testLanguage.structure)/8572332134193783053");
    b.version(3);
    b.property("defaultProperty", 0x76f70aa86b49694bL).type(PrimitiveTypeId.STRING).origin("8572332134193785163").done();
    b.property("compactProperty", 0x76f70aa86b496951L).type(PrimitiveTypeId.STRING).origin("8572332134193785169").done();
    b.property("richProperty", 0x76f70aa86b496957L).type(PrimitiveTypeId.STRING).origin("8572332134193785175").done();
    b.property("richCompactProperty", 0x76f70aa86b49695eL).type(PrimitiveTypeId.STRING).origin("8572332134193785182").done();
    return b.create();
  }
  private static ConceptDescriptor createDescriptorForMultipleEditorsTestMostSpecificRoot() {
    ConceptDescriptorBuilder2 b = new ConceptDescriptorBuilder2("jetbrains.mps.lang.editor.multiple.testLanguage", "MultipleEditorsTestMostSpecificRoot", 0x7a80051c66e94bfcL, 0x9698b12adfed3d9fL, 0x76f70aa86b495d20L);
    b.class_(false, false, true);
    b.origin("r:eb859fb0-1cb5-4829-a090-c7f47391d585(jetbrains.mps.lang.editor.multiple.testLanguage.structure)/8572332134193782048");
    b.version(3);
    b.aggregate("mostSpecificChildren", 0x76f70aa86b496199L).target(0x7a80051c66e94bfcL, 0x9698b12adfed3d9fL, 0x76f70aa86b49610dL).optional(true).ordered(true).multiple(true).origin("8572332134193783193").done();
    return b.create();
  }
  private static ConceptDescriptor createDescriptorForMultipleEditorsTestRefNodeListRoot() {
    ConceptDescriptorBuilder2 b = new ConceptDescriptorBuilder2("jetbrains.mps.lang.editor.multiple.testLanguage", "MultipleEditorsTestRefNodeListRoot", 0x7a80051c66e94bfcL, 0x9698b12adfed3d9fL, 0x650641cc62465f6cL);
    b.class_(false, false, true);
    b.origin("r:eb859fb0-1cb5-4829-a090-c7f47391d585(jetbrains.mps.lang.editor.multiple.testLanguage.structure)/7279578193768898412");
    b.version(3);
    b.property("projectionType", 0x4de57101fd1b39a6L).type(MetaIdFactory.dataTypeId(0x7a80051c66e94bfcL, 0x9698b12adfed3d9fL, 0x6aae07ffdad120c4L)).origin("4241665505353454455").done();
    b.property("projectAsCompact", 0x7b24bcecbf6315eL).type(PrimitiveTypeId.BOOLEAN).origin("554589055677247838").done();
    b.aggregate("richChildren", 0x650641cc6246fa1aL).target(0x7a80051c66e94bfcL, 0x9698b12adfed3d9fL, 0x5c5c8f07ee27f5c1L).optional(true).ordered(true).multiple(true).origin("7279578193768938010").done();
    b.aggregate("compactChildren", 0x650641cc6246fa1bL).target(0x7a80051c66e94bfcL, 0x9698b12adfed3d9fL, 0x5c5c8f07ee27f5c1L).optional(true).ordered(true).multiple(true).origin("7279578193768938011").done();
    b.aggregate("conditionallyProjectedChildren", 0x4de57101fd1b7a08L).target(0x7a80051c66e94bfcL, 0x9698b12adfed3d9fL, 0x5c5c8f07ee27f5c1L).optional(true).ordered(true).multiple(true).origin("5613016763942533640").done();
    b.aggregate("conditionallyRichOrCompactChildren", 0x7b24bcecbf5b228L).target(0x7a80051c66e94bfcL, 0x9698b12adfed3d9fL, 0x5c5c8f07ee27f5c1L).optional(true).ordered(true).multiple(true).origin("554589055677215272").done();
    return b.create();
  }
  private static ConceptDescriptor createDescriptorForMultipleEditorsTestRefNodeRoot() {
    ConceptDescriptorBuilder2 b = new ConceptDescriptorBuilder2("jetbrains.mps.lang.editor.multiple.testLanguage", "MultipleEditorsTestRefNodeRoot", 0x7a80051c66e94bfcL, 0x9698b12adfed3d9fL, 0x51568a5db0cc3a79L);
    b.class_(false, false, true);
    b.origin("r:eb859fb0-1cb5-4829-a090-c7f47391d585(jetbrains.mps.lang.editor.multiple.testLanguage.structure)/5861024100072045177");
    b.version(3);
    b.property("projectionType", 0x1b06bb955221551cL).type(MetaIdFactory.dataTypeId(0x7a80051c66e94bfcL, 0x9698b12adfed3d9fL, 0x6aae07ffdad120c4L)).origin("4241665505353454457").done();
    b.property("projectAsCompact", 0x1b06bb955221551dL).type(PrimitiveTypeId.BOOLEAN).origin("1947450138886755613").done();
    b.aggregate("richChild", 0x51568a5db0cc69beL).target(0x7a80051c66e94bfcL, 0x9698b12adfed3d9fL, 0x5c5c8f07ee27f5c1L).optional(true).ordered(true).multiple(false).origin("5861024100072057278").done();
    b.aggregate("compactChild", 0x51568a5db0ccd482L).target(0x7a80051c66e94bfcL, 0x9698b12adfed3d9fL, 0x5c5c8f07ee27f5c1L).optional(true).ordered(true).multiple(false).origin("5861024100072084610").done();
    b.aggregate("conditionallyProjectedChild", 0x1b06bb95522154c8L).target(0x7a80051c66e94bfcL, 0x9698b12adfed3d9fL, 0x5c5c8f07ee27f5c1L).optional(true).ordered(true).multiple(false).origin("1947450138886755528").done();
    b.aggregate("conditionallyRichOrCompactChild", 0x1b06bb95522154c9L).target(0x7a80051c66e94bfcL, 0x9698b12adfed3d9fL, 0x5c5c8f07ee27f5c1L).optional(true).ordered(true).multiple(false).origin("1947450138886755529").done();
    return b.create();
  }
  private static ConceptDescriptor createDescriptorForMultipleEditorsTestRoot() {
    ConceptDescriptorBuilder2 b = new ConceptDescriptorBuilder2("jetbrains.mps.lang.editor.multiple.testLanguage", "MultipleEditorsTestRoot", 0x7a80051c66e94bfcL, 0x9698b12adfed3d9fL, 0x5c5c8f07ee27ef15L);
    b.class_(false, false, true);
    b.origin("r:eb859fb0-1cb5-4829-a090-c7f47391d585(jetbrains.mps.lang.editor.multiple.testLanguage.structure)/6655351613569888021");
    b.version(3);
    b.property("projectionType", 0x6aae07ffdad12101L).type(MetaIdFactory.dataTypeId(0x7a80051c66e94bfcL, 0x9698b12adfed3d9fL, 0x6aae07ffdad120c4L)).origin("4241665505353454453").done();
    b.property("projectAsCompact", 0x69f8aea9c55aac7aL).type(PrimitiveTypeId.BOOLEAN).origin("7636045212390435962").done();
    b.aggregate("richChild", 0x5c5c8f07ee28802cL).target(0x7a80051c66e94bfcL, 0x9698b12adfed3d9fL, 0x5c5c8f07ee27f5c1L).optional(true).ordered(true).multiple(true).origin("6655351613569925164").done();
    b.aggregate("compactChild", 0x5eadaecad3ebbb92L).target(0x7a80051c66e94bfcL, 0x9698b12adfed3d9fL, 0x5c5c8f07ee27f5c1L).optional(true).ordered(true).multiple(true).origin("6822301196698237842").done();
    b.aggregate("defaultChild", 0x5293debe4ce081eeL).target(0x7a80051c66e94bfcL, 0x9698b12adfed3d9fL, 0x5c5c8f07ee27f5c1L).optional(true).ordered(true).multiple(true).origin("5950344441601491438").done();
    b.aggregate("conditionallyProjectedChild", 0x6aae07ffdad1208fL).target(0x7a80051c66e94bfcL, 0x9698b12adfed3d9fL, 0x5c5c8f07ee27f5c1L).optional(true).ordered(true).multiple(true).origin("7687090409437208719").done();
    b.aggregate("conditionallyRichOrCompactChild", 0x69f8aea9c55aac7dL).target(0x7a80051c66e94bfcL, 0x9698b12adfed3d9fL, 0x5c5c8f07ee27f5c1L).optional(true).ordered(true).multiple(true).origin("7636045212390435965").done();
    b.aggregate("notSupportedPresentation", 0x241930fe874ab96aL).target(0x7a80051c66e94bfcL, 0x9698b12adfed3d9fL, 0x5c5c8f07ee27f5c1L).optional(true).ordered(true).multiple(true).origin("2601164129532819818").done();
    return b.create();
  }
}
