package jetbrains.mps.baseLanguage.classifiers.structure;

/*Generated by MPS */

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

public class StructureAspectDescriptor extends BaseStructureAspectDescriptor {
  /*package*/ final ConceptDescriptor myConceptBaseClassifierType = createDescriptorForBaseClassifierType();
  /*package*/ final ConceptDescriptor myConceptDefaultClassifier = createDescriptorForDefaultClassifier();
  /*package*/ final ConceptDescriptor myConceptDefaultClassifierFieldAccessOperation = createDescriptorForDefaultClassifierFieldAccessOperation();
  /*package*/ final ConceptDescriptor myConceptDefaultClassifierFieldDeclaration = createDescriptorForDefaultClassifierFieldDeclaration();
  /*package*/ final ConceptDescriptor myConceptDefaultClassifierMethodCallOperation = createDescriptorForDefaultClassifierMethodCallOperation();
  /*package*/ final ConceptDescriptor myConceptDefaultClassifierMethodDeclaration = createDescriptorForDefaultClassifierMethodDeclaration();
  /*package*/ final ConceptDescriptor myConceptDefaultClassifierType = createDescriptorForDefaultClassifierType();
  /*package*/ final ConceptDescriptor myConceptIClassifier = createDescriptorForIClassifier();
  /*package*/ final ConceptDescriptor myConceptIClassifierPart = createDescriptorForIClassifierPart();
  /*package*/ final ConceptDescriptor myConceptIMember = createDescriptorForIMember();
  /*package*/ final ConceptDescriptor myConceptIMemberOperation = createDescriptorForIMemberOperation();
  /*package*/ final ConceptDescriptor myConceptSuperClassifierExpresson = createDescriptorForSuperClassifierExpresson();
  /*package*/ final ConceptDescriptor myConceptThisClassifierExpression = createDescriptorForThisClassifierExpression();
  private final LanguageConceptSwitch myIndexSwitch;

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


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

  @Override
  public Collection<ConceptDescriptor> getDescriptors() {
    return Arrays.asList(myConceptBaseClassifierType, myConceptDefaultClassifier, myConceptDefaultClassifierFieldAccessOperation, myConceptDefaultClassifierFieldDeclaration, myConceptDefaultClassifierMethodCallOperation, myConceptDefaultClassifierMethodDeclaration, myConceptDefaultClassifierType, myConceptIClassifier, myConceptIClassifierPart, myConceptIMember, myConceptIMemberOperation, myConceptSuperClassifierExpresson, myConceptThisClassifierExpression);
  }

  @Override
  @Nullable
  public ConceptDescriptor getDescriptor(SConceptId id) {
    switch (myIndexSwitch.index(id)) {
      case LanguageConceptSwitch.BaseClassifierType:
        return myConceptBaseClassifierType;
      case LanguageConceptSwitch.DefaultClassifier:
        return myConceptDefaultClassifier;
      case LanguageConceptSwitch.DefaultClassifierFieldAccessOperation:
        return myConceptDefaultClassifierFieldAccessOperation;
      case LanguageConceptSwitch.DefaultClassifierFieldDeclaration:
        return myConceptDefaultClassifierFieldDeclaration;
      case LanguageConceptSwitch.DefaultClassifierMethodCallOperation:
        return myConceptDefaultClassifierMethodCallOperation;
      case LanguageConceptSwitch.DefaultClassifierMethodDeclaration:
        return myConceptDefaultClassifierMethodDeclaration;
      case LanguageConceptSwitch.DefaultClassifierType:
        return myConceptDefaultClassifierType;
      case LanguageConceptSwitch.IClassifier:
        return myConceptIClassifier;
      case LanguageConceptSwitch.IClassifierPart:
        return myConceptIClassifierPart;
      case LanguageConceptSwitch.IMember:
        return myConceptIMember;
      case LanguageConceptSwitch.IMemberOperation:
        return myConceptIMemberOperation;
      case LanguageConceptSwitch.SuperClassifierExpresson:
        return myConceptSuperClassifierExpresson;
      case LanguageConceptSwitch.ThisClassifierExpression:
        return myConceptThisClassifierExpression;
      default:
        return null;
    }
  }


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

  private static ConceptDescriptor createDescriptorForBaseClassifierType() {
    ConceptDescriptorBuilder2 b = new ConceptDescriptorBuilder2("jetbrains.mps.baseLanguage.classifiers", "BaseClassifierType", 0x443f4c36fcf54eb6L, 0x95008d06ed259e3eL, 0x118bc77d845L);
    b.class_(false, true, false);
    // extends: jetbrains.mps.baseLanguage.structure.Type
    b.super_(0xf3061a5392264cc5L, 0xa443f952ceaf5816L, 0xf8c37f506dL);
    b.origin("r:00000000-0000-4000-0000-011c89590373(jetbrains.mps.baseLanguage.classifiers.structure)/1205752813637");
    b.version(3);
    b.kind(ConceptKind.INTERFACE, StaticScope.NONE);
    return b.create();
  }
  private static ConceptDescriptor createDescriptorForDefaultClassifier() {
    ConceptDescriptorBuilder2 b = new ConceptDescriptorBuilder2("jetbrains.mps.baseLanguage.classifiers", "DefaultClassifier", 0x443f4c36fcf54eb6L, 0x95008d06ed259e3eL, 0xe48d14bf726e967L);
    b.class_(false, false, false);
    b.parent(0x443f4c36fcf54eb6L, 0x95008d06ed259e3eL, 0x118bc6b2af5L);
    b.origin("r:00000000-0000-4000-0000-011c89590373(jetbrains.mps.baseLanguage.classifiers.structure)/1029302639053433191");
    b.version(3);
    b.aggregate("field", 0xe48d14bf726f30cL).target(0x443f4c36fcf54eb6L, 0x95008d06ed259e3eL, 0x11aa7fc0293L).optional(true).ordered(true).multiple(true).origin("1029302639053435660").done();
    b.aggregate("method", 0xe48d14bf726f30dL).target(0x443f4c36fcf54eb6L, 0x95008d06ed259e3eL, 0x118bd6ee3c3L).optional(true).ordered(true).multiple(true).origin("1029302639053435661").done();
    return b.create();
  }
  private static ConceptDescriptor createDescriptorForDefaultClassifierFieldAccessOperation() {
    ConceptDescriptorBuilder2 b = new ConceptDescriptorBuilder2("jetbrains.mps.baseLanguage.classifiers", "DefaultClassifierFieldAccessOperation", 0x443f4c36fcf54eb6L, 0x95008d06ed259e3eL, 0x11aa7fc7570L);
    b.class_(false, false, false);
    b.parent(0x443f4c36fcf54eb6L, 0x95008d06ed259e3eL, 0x118bca97396L);
    b.origin("r:00000000-0000-4000-0000-011c89590373(jetbrains.mps.baseLanguage.classifiers.structure)/1213999117680");
    b.version(3);
    b.associate("field", 0x11aa7fc7573L).target(0x443f4c36fcf54eb6L, 0x95008d06ed259e3eL, 0x11aa7fc0293L).optional(false).origin("1213999117683").specialize(0x118bca97396L, 0x118bcb657ecL).done();
    b.kind(ConceptKind.NORMAL, StaticScope.NONE);
    return b.create();
  }
  private static ConceptDescriptor createDescriptorForDefaultClassifierFieldDeclaration() {
    ConceptDescriptorBuilder2 b = new ConceptDescriptorBuilder2("jetbrains.mps.baseLanguage.classifiers", "DefaultClassifierFieldDeclaration", 0x443f4c36fcf54eb6L, 0x95008d06ed259e3eL, 0x11aa7fc0293L);
    b.class_(false, false, false);
    // extends: jetbrains.mps.baseLanguage.structure.FieldDeclaration
    b.super_(0xf3061a5392264cc5L, 0xa443f952ceaf5816L, 0xf8c108ca68L);
    b.parent(0x443f4c36fcf54eb6L, 0x95008d06ed259e3eL, 0x118bc6becc0L);
    b.origin("r:00000000-0000-4000-0000-011c89590373(jetbrains.mps.baseLanguage.classifiers.structure)/1213999088275");
    b.version(3);
    b.kind(ConceptKind.INTERFACE, StaticScope.GLOBAL);
    return b.create();
  }
  private static ConceptDescriptor createDescriptorForDefaultClassifierMethodCallOperation() {
    ConceptDescriptorBuilder2 b = new ConceptDescriptorBuilder2("jetbrains.mps.baseLanguage.classifiers", "DefaultClassifierMethodCallOperation", 0x443f4c36fcf54eb6L, 0x95008d06ed259e3eL, 0x118bd711e29L);
    b.class_(false, false, false);
    b.parent(0x443f4c36fcf54eb6L, 0x95008d06ed259e3eL, 0x118bca97396L);
    b.origin("r:00000000-0000-4000-0000-011c89590373(jetbrains.mps.baseLanguage.classifiers.structure)/1205769149993");
    b.version(3);
    b.associate("method", 0x118bd74fd91L).target(0x443f4c36fcf54eb6L, 0x95008d06ed259e3eL, 0x118bd6ee3c3L).optional(false).origin("1205769403793").specialize(0x118bca97396L, 0x118bcb657ecL).done();
    b.aggregate("actualArgument", 0x118bd877799L).target(0xf3061a5392264cc5L, 0xa443f952ceaf5816L, 0xf8c37f506fL).optional(true).ordered(true).multiple(true).origin("1205770614681").done();
    b.kind(ConceptKind.NORMAL, StaticScope.NONE);
    return b.create();
  }
  private static ConceptDescriptor createDescriptorForDefaultClassifierMethodDeclaration() {
    ConceptDescriptorBuilder2 b = new ConceptDescriptorBuilder2("jetbrains.mps.baseLanguage.classifiers", "DefaultClassifierMethodDeclaration", 0x443f4c36fcf54eb6L, 0x95008d06ed259e3eL, 0x118bd6ee3c3L);
    b.class_(false, false, false);
    // extends: jetbrains.mps.baseLanguage.structure.BaseMethodDeclaration
    b.super_(0xf3061a5392264cc5L, 0xa443f952ceaf5816L, 0xf8cc56b1fcL);
    b.parent(0x443f4c36fcf54eb6L, 0x95008d06ed259e3eL, 0x118bc6becc0L);
    b.parent(0xf3061a5392264cc5L, 0xa443f952ceaf5816L, 0x112670d273fL);
    b.origin("r:00000000-0000-4000-0000-011c89590373(jetbrains.mps.baseLanguage.classifiers.structure)/1205769003971");
    b.version(3);
    return b.create();
  }
  private static ConceptDescriptor createDescriptorForDefaultClassifierType() {
    ConceptDescriptorBuilder2 b = new ConceptDescriptorBuilder2("jetbrains.mps.baseLanguage.classifiers", "DefaultClassifierType", 0x443f4c36fcf54eb6L, 0x95008d06ed259e3eL, 0x118bc7942feL);
    b.class_(false, false, false);
    // extends: jetbrains.mps.baseLanguage.classifiers.structure.BaseClassifierType
    b.super_(0x443f4c36fcf54eb6L, 0x95008d06ed259e3eL, 0x118bc77d845L);
    b.origin("r:00000000-0000-4000-0000-011c89590373(jetbrains.mps.baseLanguage.classifiers.structure)/1205752906494");
    b.version(3);
    b.associate("classifier", 0x118bc796c90L).target(0x443f4c36fcf54eb6L, 0x95008d06ed259e3eL, 0x118bc6b2af5L).optional(false).origin("1205752917136").done();
    b.kind(ConceptKind.INTERFACE, StaticScope.NONE);
    return b.create();
  }
  private static ConceptDescriptor createDescriptorForIClassifier() {
    ConceptDescriptorBuilder2 b = new ConceptDescriptorBuilder2("jetbrains.mps.baseLanguage.classifiers", "IClassifier", 0x443f4c36fcf54eb6L, 0x95008d06ed259e3eL, 0x118bc6b2af5L);
    b.interface_();
    b.parent(0xceab519525ea4f22L, 0x9b92103b95ca8c0cL, 0x110396eaaa4L);
    b.parent(0xf3061a5392264cc5L, 0xa443f952ceaf5816L, 0x11c60bb0a14L);
    b.origin("r:00000000-0000-4000-0000-011c89590373(jetbrains.mps.baseLanguage.classifiers.structure)/1205751982837");
    b.version(3);
    return b.create();
  }
  private static ConceptDescriptor createDescriptorForIClassifierPart() {
    ConceptDescriptorBuilder2 b = new ConceptDescriptorBuilder2("jetbrains.mps.baseLanguage.classifiers", "IClassifierPart", 0x443f4c36fcf54eb6L, 0x95008d06ed259e3eL, 0x118bc6e188eL);
    b.interface_();
    b.origin("r:00000000-0000-4000-0000-011c89590373(jetbrains.mps.baseLanguage.classifiers.structure)/1205752174734");
    b.version(3);
    return b.create();
  }
  private static ConceptDescriptor createDescriptorForIMember() {
    ConceptDescriptorBuilder2 b = new ConceptDescriptorBuilder2("jetbrains.mps.baseLanguage.classifiers", "IMember", 0x443f4c36fcf54eb6L, 0x95008d06ed259e3eL, 0x118bc6becc0L);
    b.interface_();
    b.parent(0xceab519525ea4f22L, 0x9b92103b95ca8c0cL, 0x110396eaaa4L);
    b.origin("r:00000000-0000-4000-0000-011c89590373(jetbrains.mps.baseLanguage.classifiers.structure)/1205752032448");
    b.version(3);
    return b.create();
  }
  private static ConceptDescriptor createDescriptorForIMemberOperation() {
    ConceptDescriptorBuilder2 b = new ConceptDescriptorBuilder2("jetbrains.mps.baseLanguage.classifiers", "IMemberOperation", 0x443f4c36fcf54eb6L, 0x95008d06ed259e3eL, 0x118bca97396L);
    b.interface_();
    b.parent(0xf3061a5392264cc5L, 0xa443f952ceaf5816L, 0x116b46ac030L);
    b.origin("r:00000000-0000-4000-0000-011c89590373(jetbrains.mps.baseLanguage.classifiers.structure)/1205756064662");
    b.version(3);
    b.associate("member", 0x118bcb657ecL).target(0x443f4c36fcf54eb6L, 0x95008d06ed259e3eL, 0x118bc6becc0L).optional(false).origin("1205756909548").done();
    return b.create();
  }
  private static ConceptDescriptor createDescriptorForSuperClassifierExpresson() {
    ConceptDescriptorBuilder2 b = new ConceptDescriptorBuilder2("jetbrains.mps.baseLanguage.classifiers", "SuperClassifierExpresson", 0x443f4c36fcf54eb6L, 0x95008d06ed259e3eL, 0x11b74b0357cL);
    b.class_(false, false, false);
    // extends: jetbrains.mps.baseLanguage.structure.Expression
    b.super_(0xf3061a5392264cc5L, 0xa443f952ceaf5816L, 0xf8c37f506fL);
    b.origin("r:00000000-0000-4000-0000-011c89590373(jetbrains.mps.baseLanguage.classifiers.structure)/1217433449852");
    b.version(3);
    b.kind(ConceptKind.NORMAL, StaticScope.NONE);
    b.alias("super");
    return b.create();
  }
  private static ConceptDescriptor createDescriptorForThisClassifierExpression() {
    ConceptDescriptorBuilder2 b = new ConceptDescriptorBuilder2("jetbrains.mps.baseLanguage.classifiers", "ThisClassifierExpression", 0x443f4c36fcf54eb6L, 0x95008d06ed259e3eL, 0x118bc751a81L);
    b.class_(false, false, false);
    // extends: jetbrains.mps.baseLanguage.structure.Expression
    b.super_(0xf3061a5392264cc5L, 0xa443f952ceaf5816L, 0xf8c37f506fL);
    b.parent(0xf3061a5392264cc5L, 0xa443f952ceaf5816L, 0x11d206f8d91L);
    b.origin("r:00000000-0000-4000-0000-011c89590373(jetbrains.mps.baseLanguage.classifiers.structure)/1205752633985");
    b.version(3);
    b.associate("classifier", 0x11bc25d4bc3L).target(0x443f4c36fcf54eb6L, 0x95008d06ed259e3eL, 0x118bc6b2af5L).optional(true).origin("1218736638915").done();
    b.kind(ConceptKind.NORMAL, StaticScope.NONE);
    b.alias("this");
    return b.create();
  }
}
