package jetbrains.mps.kotlin.javaRefs.behavior;

/*Generated by MPS */

import jetbrains.mps.core.aspects.behaviour.BaseBHDescriptor;
import org.jetbrains.mps.openapi.language.SAbstractConcept;
import jetbrains.mps.smodel.adapter.structure.MetaAdapterFactory;
import jetbrains.mps.core.aspects.behaviour.api.SMethod;
import jetbrains.mps.core.aspects.behaviour.SMethodBuilder;
import jetbrains.mps.core.aspects.behaviour.SJavaCompoundTypeImpl;
import jetbrains.mps.core.aspects.behaviour.AccessPrivileges;
import jetbrains.mps.kotlin.api.members.SuperTypesVisitor;
import jetbrains.mps.kotlin.api.members.SignatureCollector;
import org.jetbrains.mps.openapi.model.SNode;
import jetbrains.mps.kotlin.api.declaration.TypeParameterDeclaration;
import jetbrains.mps.kotlin.scopes.signed.SignatureScope;
import jetbrains.mps.kotlin.scopes.SignatureFilter;
import jetbrains.mps.baseLanguage.closures.runtime._FunctionTypes;
import java.util.List;
import java.util.Arrays;
import org.jetbrains.annotations.NotNull;
import jetbrains.mps.baseLanguage.behavior.IClassifierType__BehaviorDescriptor;
import jetbrains.mps.baseLanguage.behavior.Classifier__BehaviorDescriptor;
import jetbrains.mps.lang.smodel.generator.smodelAdapter.SLinkOperations;
import jetbrains.mps.baseLanguage.behavior.IClassifier__BehaviorDescriptor;
import jetbrains.mps.kotlin.baseLanguage.typeConversion.ClassToClassEnum;
import jetbrains.mps.internal.collections.runtime.Sequence;
import java.util.Collections;
import jetbrains.mps.internal.collections.runtime.ListSequence;
import jetbrains.mps.kotlin.baseLanguage.toKotlin.JavaTypeParameterDeclaration;
import jetbrains.mps.lang.smodel.generator.smodelAdapter.SPropertyOperations;
import jetbrains.mps.internal.collections.runtime.IterableUtils;
import jetbrains.mps.lang.core.behavior.BaseConcept__BehaviorDescriptor;
import jetbrains.mps.kotlin.scopes.signed.ListSignatureScope;
import jetbrains.mps.kotlin.scopes.signed.FilterSignatureCollector;
import jetbrains.mps.kotlin.signatures.FunctionSignature;
import jetbrains.mps.kotlin.signatures.PropertySignature;
import jetbrains.mps.lang.smodel.generator.smodelAdapter.SNodeOperations;
import jetbrains.mps.baseLanguage.behavior.ClassConcept__BehaviorDescriptor;
import jetbrains.mps.kotlin.api.members.SignatureBuilder;
import jetbrains.mps.kotlin.baseLanguage.toKotlin.JavaMethodDeclaration;
import jetbrains.mps.kotlin.api.members.TypeExpander;
import org.jetbrains.annotations.ApiStatus;
import java.util.Iterator;
import jetbrains.mps.baseLanguage.behavior.BaseMethodDeclaration__BehaviorDescriptor;
import jetbrains.mps.kotlin.behavior.NodeTypeVarSubs;
import jetbrains.mps.kotlin.behavior.FunctionTypeToLambdaHelper;
import jetbrains.mps.kotlin.api.builtins.BuiltIn;
import jetbrains.mps.core.aspects.behaviour.api.SConstructor;
import org.jetbrains.annotations.Nullable;
import jetbrains.mps.core.aspects.behaviour.api.BHMethodNotFoundException;
import jetbrains.mps.smodel.builder.SNodeBuilder;
import org.jetbrains.mps.openapi.language.SReferenceLink;
import org.jetbrains.mps.openapi.language.SContainmentLink;
import org.jetbrains.mps.openapi.language.SProperty;
import org.jetbrains.mps.openapi.language.SConcept;
import org.jetbrains.mps.openapi.language.SInterfaceConcept;

public final class JavaClassType__BehaviorDescriptor extends BaseBHDescriptor {
  private static final SAbstractConcept CONCEPT = MetaAdapterFactory.getConcept(0x9e4ff22b60f143efL, 0xa50bf9f0fcec22e0L, 0x68fcefc6c20600f5L, "jetbrains.mps.kotlin.javaRefs.structure.JavaClassType");

  public static final SMethod<Void> visitHierarchy_id5q426iHtYvR = new SMethodBuilder<Void>(new SJavaCompoundTypeImpl(Void.class)).name("visitHierarchy").modifiers(8, AccessPrivileges.PUBLIC).concept(CONCEPT).baseMethodId(6234117012687677431L).languageId(0x8baff8e6c33ed689L, 0x6b3888c1980244d8L).build2(SMethodBuilder.createJavaParameter(SuperTypesVisitor.class, ""));
  public static final SMethod<Void> populateTypeSignatures_id5q426iHK5S9 = new SMethodBuilder<Void>(new SJavaCompoundTypeImpl(Void.class)).name("populateSignatures").modifiers(8, AccessPrivileges.PUBLIC).concept(CONCEPT).baseMethodId(6234117012692426249L).languageId(0x8baff8e6c33ed689L, 0x6b3888c1980244d8L).build2(SMethodBuilder.createJavaParameter(SignatureCollector.class, ""));
  public static final SMethod<SNode> getClassifier_id7an2tsIdpk7 = new SMethodBuilder<SNode>(new SJavaCompoundTypeImpl((Class<SNode>) ((Class) Object.class))).name("getClassifier").modifiers(8, AccessPrivileges.PUBLIC).concept(CONCEPT).baseMethodId(8257079261604975879L).languageId(0x8baff8e6c33ed689L, 0x6b3888c1980244d8L).build2();
  public static final SMethod<SNode> getClassifier_id6r77ob2URY9 = new SMethodBuilder<SNode>(new SJavaCompoundTypeImpl((Class<SNode>) ((Class) Object.class))).name("getClassifier").modifiers(8, AccessPrivileges.PUBLIC).concept(CONCEPT).baseMethodId(7405920559687237513L).languageId(0xa443f952ceaf5816L, 0xf3061a5392264cc5L).build2();
  public static final SMethod<Iterable<SNode>> getTypeParameters_id6r77ob2URYe = new SMethodBuilder<Iterable<SNode>>(new SJavaCompoundTypeImpl((Class<Iterable<SNode>>) ((Class) Object.class))).name("getTypeParameters").modifiers(8, AccessPrivileges.PUBLIC).concept(CONCEPT).baseMethodId(7405920559687237518L).languageId(0xa443f952ceaf5816L, 0xf3061a5392264cc5L).build2();
  public static final SMethod<Iterable<TypeParameterDeclaration>> getTypeParameters_id7an2tsIdpkM = new SMethodBuilder<Iterable<TypeParameterDeclaration>>(new SJavaCompoundTypeImpl((Class<Iterable<TypeParameterDeclaration>>) ((Class) Object.class))).name("getTypeParameters").modifiers(8, AccessPrivileges.PUBLIC).concept(CONCEPT).baseMethodId(8257079261604975922L).languageId(0x8baff8e6c33ed689L, 0x6b3888c1980244d8L).build2();
  public static final SMethod<String> toString_id4nn3FPlZH$r = new SMethodBuilder<String>(new SJavaCompoundTypeImpl(String.class)).name("toString").modifiers(8, AccessPrivileges.PUBLIC).concept(CONCEPT).baseMethodId(5032507314964191515L).languageId(0x8baff8e6c33ed689L, 0x6b3888c1980244d8L).build2(SMethodBuilder.createJavaParameter(Boolean.TYPE, ""));
  public static final SMethod<SignatureScope> getStaticScope_id1ODRHGtufGw = new SMethodBuilder<SignatureScope>(new SJavaCompoundTypeImpl(SignatureScope.class)).name("getStaticScope").modifiers(8, AccessPrivileges.PUBLIC).concept(CONCEPT).baseMethodId(2101455733818719008L).languageId(0x8baff8e6c33ed689L, 0x6b3888c1980244d8L).build2(SMethodBuilder.createJavaParameter(SignatureFilter.class, ""), SMethodBuilder.createJavaParameter((Class<SNode>) ((Class) Object.class), ""));
  public static final SMethod<_FunctionTypes._return_P0_E0<? extends SNode>> createConstructor_id2$1CHwF$28b = new SMethodBuilder<_FunctionTypes._return_P0_E0<? extends SNode>>(new SJavaCompoundTypeImpl((Class<_FunctionTypes._return_P0_E0<? extends SNode>>) ((Class) Object.class))).name("createConstructor").modifiers(8, AccessPrivileges.PUBLIC).concept(CONCEPT).baseMethodId(2954821879859257867L).languageId(0x8baff8e6c33ed689L, 0x6b3888c1980244d8L).build2();

  private static final List<SMethod<?>> BH_METHODS = Arrays.<SMethod<?>>asList(visitHierarchy_id5q426iHtYvR, populateTypeSignatures_id5q426iHK5S9, getClassifier_id7an2tsIdpk7, getClassifier_id6r77ob2URY9, getTypeParameters_id6r77ob2URYe, getTypeParameters_id7an2tsIdpkM, toString_id4nn3FPlZH$r, getStaticScope_id1ODRHGtufGw, createConstructor_id2$1CHwF$28b);

  private static void ___init___(@NotNull SNode __thisNode__) {
  }

  /*package*/ static void visitHierarchy_id5q426iHtYvR(@NotNull SNode __thisNode__, SuperTypesVisitor visitor) {
    // use simplified implementation of supertypes enumeration
    IClassifierType__BehaviorDescriptor.enumerateTypesHierarchy_id65_8Gi1edLu.invoke(Classifier__BehaviorDescriptor.getThisType_id2RtWPFZ12w7.invoke(SLinkOperations.getTarget(__thisNode__, LINKS.javaClass$CQOW)), new JavaSupertypesVisitor(visitor));
  }
  /*package*/ static void populateTypeSignatures_id5q426iHK5S9(@NotNull SNode __thisNode__, SignatureCollector visitor) {
    // Wrap visitor into the java implementation of the signature visitor
    MembersPopulatingContextWrapper context = new MembersPopulatingContextWrapper(visitor, Classifier__BehaviorDescriptor.getThisType_id2RtWPFZ12w7.invoke(SLinkOperations.getTarget(__thisNode__, LINKS.javaClass$CQOW)));

    // Call member population on the classifier (as if entered from getThisType), visitor should deny any visit on supertypes
    IClassifier__BehaviorDescriptor.enumerateMembers_id65_8Gi2s6iV.invoke(SLinkOperations.getTarget(__thisNode__, LINKS.javaClass$CQOW), context);
  }
  /*package*/ static SNode getClassifier_id7an2tsIdpk7(@NotNull SNode __thisNode__) {
    // Map to kotlin classes automatically (only built-in classes as they wont be compiled)
    return ClassToClassEnum.getKotlinUsedClassifier(SLinkOperations.getTarget(__thisNode__, LINKS.javaClass$CQOW));
  }
  /*package*/ static SNode getClassifier_id6r77ob2URY9(@NotNull SNode __thisNode__) {
    return SLinkOperations.getTarget(__thisNode__, LINKS.javaClass$CQOW);
  }
  /*package*/ static Iterable<SNode> getTypeParameters_id6r77ob2URYe(@NotNull SNode __thisNode__) {
    // At time of writing this should not really matter, those are handled by kotlin implementation anyway
    return Sequence.fromIterable(Collections.emptyList());
  }
  /*package*/ static Iterable<TypeParameterDeclaration> getTypeParameters_id7an2tsIdpkM(@NotNull SNode __thisNode__) {
    return ListSequence.fromList(SLinkOperations.getChildren(SLinkOperations.getTarget(__thisNode__, LINKS.javaClass$CQOW), LINKS.typeVariableDeclaration$Lipp)).select(new _FunctionTypes._return_P1_E0<JavaTypeParameterDeclaration, SNode>() {
      public JavaTypeParameterDeclaration invoke(@NotNull SNode typeVariableDeclaration) {
        return new JavaTypeParameterDeclaration(typeVariableDeclaration);
      }
    });
  }
  /*package*/ static String toString_id4nn3FPlZH$r(@NotNull SNode __thisNode__, boolean erased) {
    StringBuilder pres = new StringBuilder();
    pres.append((isNotEmptyString(SPropertyOperations.getString(SLinkOperations.getTarget(__thisNode__, LINKS.javaClass$CQOW), PROPS.name$MnvL)) ? SPropertyOperations.getString(SLinkOperations.getTarget(__thisNode__, LINKS.javaClass$CQOW), PROPS.name$MnvL) : "<no class>"));
    if (!(erased) && ListSequence.fromList(SLinkOperations.getChildren(__thisNode__, LINKS.typeProjections$vhti)).isNotEmpty()) {
      pres.append("<");
      pres.append(IterableUtils.join(ListSequence.fromList(SLinkOperations.getChildren(__thisNode__, LINKS.typeProjections$vhti)).select((it) -> ((it != null) ? BaseConcept__BehaviorDescriptor.getDetailedPresentation_id22G2W3WJ92t.invoke(it) : "?")), ", "));
      pres.append(">");
    }
    return pres.toString();
  }
  /*package*/ static SignatureScope getStaticScope_id1ODRHGtufGw(@NotNull final SNode __thisNode__, final SignatureFilter filter, final SNode contextNode) {
    return new ListSignatureScope(() -> {
      final FilterSignatureCollector collector = new FilterSignatureCollector(filter);
      boolean acceptFunctions = filter.acceptKind(FunctionSignature.class);
      boolean acceptProperty = filter.acceptKind(PropertySignature.class);

      if (acceptFunctions) {
        // Directly get the constructors of nested classes
        Sequence.fromIterable(SNodeOperations.ofConcept(SLinkOperations.getChildren(SLinkOperations.getTarget(__thisNode__, LINKS.javaClass$CQOW), LINKS.member$L_2d), CONCEPTS.ClassConcept$bK)).where((it) -> {
          // Only static classes, non static are instance fields
          return SPropertyOperations.getBoolean(it, PROPS.isStatic$3WAz) && JavaSignatures.isAllowedVisibility(it, contextNode);
        }).visitAll((klass) -> {
          Iterable<SNode> constructors = ClassConcept__BehaviorDescriptor.constructors_id4_LVZ3pCvsd.invoke(klass);
          if (Sequence.fromIterable(constructors).isEmpty() && !(SNodeOperations.isInstanceOf(klass, CONCEPTS.EnumClass$Vk))) {
            JavaSignatures.declareConstructor(collector, klass);
          }

          SignatureBuilder.create(Sequence.fromIterable(constructors).where((it) -> JavaSignatures.isAllowedVisibility(it, contextNode)), FunctionSignature.class).withSignature((SNode node) -> new FunctionSignature(new JavaMethodDeclaration(node), (TypeExpander) null));
        });
      }

      // Unlike kotlin, companion member (static) of a java class are also contained in the class
      if (acceptFunctions || acceptProperty) {
        Sequence.fromIterable(SNodeOperations.ofConcept(SLinkOperations.getChildren(SLinkOperations.getTarget(__thisNode__, LINKS.javaClass$CQOW), LINKS.member$L_2d), CONCEPTS.StaticMethodDeclaration$FJ)).where((it) -> JavaSignatures.isAllowedVisibility(it, contextNode)).visitAll((it) -> {
          // This will apply the filter on signatures
          JavaSignatures.declareMethod(collector, it);
        });
      }

      if (acceptProperty) {
        // Static properties
        Sequence.fromIterable(SNodeOperations.ofConcept(SLinkOperations.getChildren(SLinkOperations.getTarget(__thisNode__, LINKS.javaClass$CQOW), LINKS.member$L_2d), CONCEPTS.StaticFieldDeclaration$jR)).where((it) -> JavaSignatures.isAllowedVisibility(it, contextNode)).visitAll((it) -> JavaSignatures.declareField(collector, it));

        // Enum variables
        ListSequence.fromList(SLinkOperations.getChildren(SNodeOperations.as(SLinkOperations.getTarget(__thisNode__, LINKS.javaClass$CQOW), CONCEPTS.EnumClass$Vk), LINKS.enumConstant$qtgW)).visitAll((it) -> JavaSignatures.declareField(collector, it, true));
      }

      return collector.getCollected();
    });

  }
  @ApiStatus.Experimental
  /*package*/ static _FunctionTypes._return_P0_E0<? extends SNode> createConstructor_id2$1CHwF$28b(@NotNull final SNode __thisNode__) {
    // Abstract or undefined classes
    if ((SLinkOperations.getTarget(__thisNode__, LINKS.javaClass$CQOW) == null) || SPropertyOperations.getBoolean(SNodeOperations.as(SLinkOperations.getTarget(__thisNode__, LINKS.javaClass$CQOW), CONCEPTS.ClassConcept$bK), PROPS.abstractClass$Ta1X)) {
      return null;
    }

    // Support for SAM methods
    if (SNodeOperations.isInstanceOf(SLinkOperations.getTarget(__thisNode__, LINKS.javaClass$CQOW), CONCEPTS.Interface$db)) {
      Iterator<SNode> methods = Sequence.fromIterable(SNodeOperations.ofConcept(SLinkOperations.getChildren(SLinkOperations.getTarget(__thisNode__, LINKS.javaClass$CQOW), LINKS.member$L_2d), CONCEPTS.InstanceMethodDeclaration$39)).where((m) -> (boolean) BaseMethodDeclaration__BehaviorDescriptor.isAnAbstractMethod_id28P2dHxCoRl.invoke(m) && !("equals".equals(SPropertyOperations.getString(m, PROPS.name$MnvL)))).iterator();
      final SNode sam = (methods.hasNext() ? methods.next() : null);
      if ((sam == null) || methods.hasNext()) {
        return null;
      }

      return () -> {
        // We need substitutions because the method may contain parameters
        NodeTypeVarSubs subs = new NodeTypeVarSubs(__thisNode__);
        return FunctionTypeToLambdaHelper.createLambda(new JavaMethodDeclaration(sam).getParameters(), subs);
      };
    }

    // Regular class constructor
    return () -> {
      SNode constructor = Sequence.fromIterable(SNodeOperations.ofConcept(SLinkOperations.getChildren(SLinkOperations.getTarget(__thisNode__, LINKS.javaClass$CQOW), LINKS.member$L_2d), CONCEPTS.ConstructorDeclaration$yG)).first();
      if (constructor != null) {
        return createJavaMethodCall_x7iids_a0a1a0h0i(constructor, ListSequence.fromList(SLinkOperations.getChildren(__thisNode__, LINKS.typeProjections$vhti)).select((it) -> {
          // This could be computed is a smarter way (in+out => nothing, ...)
          SNode type = SLinkOperations.getTarget(SNodeOperations.as(it, CONCEPTS.TypeProjection$5e), LINKS.type$x3no);
          return ((type != null) ? type : createNullableType_x7iids_a0c0a0a0b0a0a1a0h0i(BuiltIn.ANY.toClassType()));
        }));
      }
      return createJavaDefaultConstructorCall_x7iids_a2a0h0i(SLinkOperations.getTarget(__thisNode__, LINKS.javaClass$CQOW));
    };
  }

  /*package*/ JavaClassType__BehaviorDescriptor() {
  }

  @Override
  protected void initNode(@NotNull SNode node, @NotNull SConstructor constructor, @Nullable Object[] parameters) {
    ___init___(node);
  }

  @Override
  protected <T> T invokeSpecial0(@NotNull SNode node, @NotNull SMethod<T> method, @Nullable Object[] parameters) {
    int methodIndex = BH_METHODS.indexOf(method);
    if (methodIndex < 0) {
      throw new BHMethodNotFoundException(this, method);
    }
    switch (methodIndex) {
      case 0:
        visitHierarchy_id5q426iHtYvR(node, (SuperTypesVisitor) parameters[0]);
        return null;
      case 1:
        populateTypeSignatures_id5q426iHK5S9(node, (SignatureCollector) parameters[0]);
        return null;
      case 2:
        return (T) ((SNode) getClassifier_id7an2tsIdpk7(node));
      case 3:
        return (T) ((SNode) getClassifier_id6r77ob2URY9(node));
      case 4:
        return (T) ((Iterable<SNode>) getTypeParameters_id6r77ob2URYe(node));
      case 5:
        return (T) ((Iterable<TypeParameterDeclaration>) getTypeParameters_id7an2tsIdpkM(node));
      case 6:
        return (T) ((String) toString_id4nn3FPlZH$r(node, ((boolean) (Boolean) parameters[0])));
      case 7:
        return (T) ((SignatureScope) getStaticScope_id1ODRHGtufGw(node, (SignatureFilter) parameters[0], (SNode) parameters[1]));
      case 8:
        return (T) ((_FunctionTypes._return_P0_E0<? extends SNode>) createConstructor_id2$1CHwF$28b(node));
      default:
        throw new BHMethodNotFoundException(this, method);
    }
  }

  @Override
  protected <T> T invokeSpecial0(@NotNull SAbstractConcept concept, @NotNull SMethod<T> method, @Nullable Object[] parameters) {
    int methodIndex = BH_METHODS.indexOf(method);
    if (methodIndex < 0) {
      throw new BHMethodNotFoundException(this, method);
    }
    switch (methodIndex) {
      default:
        throw new BHMethodNotFoundException(this, method);
    }
  }

  @NotNull
  @Override
  public List<SMethod<?>> getDeclaredMethods() {
    return BH_METHODS;
  }

  @NotNull
  @Override
  public SAbstractConcept getConcept() {
    return CONCEPT;
  }
  private static SNode createJavaMethodCall_x7iids_a0a1a0h0i(SNode p0, Iterable<? extends SNode> p1) {
    SNodeBuilder n0 = new SNodeBuilder().init(CONCEPTS.JavaMethodCall$gD);
    n0.setReferenceTarget(LINKS.method$yYmq, p0);
    n0.forChild(LINKS.typeArguments$86s6).initNodeList(p1, CONCEPTS.IType$Ni);
    return n0.getResult();
  }
  private static SNode createNullableType_x7iids_a0c0a0a0b0a0a1a0h0i(SNode p0) {
    SNodeBuilder n0 = new SNodeBuilder().init(CONCEPTS.NullableType$E0);
    n0.forChild(LINKS.type$Tm0J).initNode(p0, CONCEPTS.IType$Ni, true);
    return n0.getResult();
  }
  private static SNode createJavaDefaultConstructorCall_x7iids_a2a0h0i(SNode p0) {
    SNodeBuilder n0 = new SNodeBuilder().init(CONCEPTS.JavaDefaultConstructorCall$gf);
    n0.setReferenceTarget(LINKS.classifier$yYTH, p0);
    return n0.getResult();
  }
  private static boolean isNotEmptyString(String str) {
    return str != null && str.length() > 0;
  }

  private static final class LINKS {
    /*package*/ static final SReferenceLink javaClass$CQOW = MetaAdapterFactory.getReferenceLink(0x9e4ff22b60f143efL, 0xa50bf9f0fcec22e0L, 0x68fcefc6c20600f5L, 0x68fcefc6c2060179L, "javaClass");
    /*package*/ static final SContainmentLink typeVariableDeclaration$Lipp = MetaAdapterFactory.getContainmentLink(0xf3061a5392264cc5L, 0xa443f952ceaf5816L, 0x102463b447aL, 0x102463bb98eL, "typeVariableDeclaration");
    /*package*/ static final SContainmentLink typeProjections$vhti = MetaAdapterFactory.getContainmentLink(0x6b3888c1980244d8L, 0x8baff8e6c33ed689L, 0x5b1dd60162c97579L, 0x5b1dd60162c9757cL, "typeProjections");
    /*package*/ static final SContainmentLink member$L_2d = MetaAdapterFactory.getContainmentLink(0xf3061a5392264cc5L, 0xa443f952ceaf5816L, 0x101d9d3ca30L, 0x4a9a46de59132803L, "member");
    /*package*/ static final SContainmentLink enumConstant$qtgW = MetaAdapterFactory.getContainmentLink(0xf3061a5392264cc5L, 0xa443f952ceaf5816L, 0xfc367070a5L, 0xfc367503acL, "enumConstant");
    /*package*/ static final SContainmentLink type$x3no = MetaAdapterFactory.getContainmentLink(0x6b3888c1980244d8L, 0x8baff8e6c33ed689L, 0x28bef6d7551af3ccL, 0x28bef6d7551af67fL, "type");
    /*package*/ static final SReferenceLink method$yYmq = MetaAdapterFactory.getReferenceLink(0x9e4ff22b60f143efL, 0xa50bf9f0fcec22e0L, 0x2196e93e834d57ccL, 0x2196e93e834d58feL, "method");
    /*package*/ static final SContainmentLink typeArguments$86s6 = MetaAdapterFactory.getContainmentLink(0x6b3888c1980244d8L, 0x8baff8e6c33ed689L, 0x241317ddbda99714L, 0x5b1dd60162c9757cL, "typeArguments");
    /*package*/ static final SContainmentLink type$Tm0J = MetaAdapterFactory.getContainmentLink(0x6b3888c1980244d8L, 0x8baff8e6c33ed689L, 0x28b83021333e575L, 0x28b83021333ef14L, "type");
    /*package*/ static final SReferenceLink classifier$yYTH = MetaAdapterFactory.getReferenceLink(0x9e4ff22b60f143efL, 0xa50bf9f0fcec22e0L, 0x5b64d6b00d61fa7bL, 0x5b64d6b00d61fa82L, "classifier");
  }

  private static final class PROPS {
    /*package*/ static final SProperty name$MnvL = MetaAdapterFactory.getProperty(0xceab519525ea4f22L, 0x9b92103b95ca8c0cL, 0x110396eaaa4L, 0x110396ec041L, "name");
    /*package*/ static final SProperty isStatic$3WAz = MetaAdapterFactory.getProperty(0xf3061a5392264cc5L, 0xa443f952ceaf5816L, 0xf8c108ca66L, 0x451f9e9f920b7f7dL, "isStatic");
    /*package*/ static final SProperty abstractClass$Ta1X = MetaAdapterFactory.getProperty(0xf3061a5392264cc5L, 0xa443f952ceaf5816L, 0xf8c108ca66L, 0xfa5cee6dfaL, "abstractClass");
  }

  private static final class CONCEPTS {
    /*package*/ static final SConcept ClassConcept$bK = MetaAdapterFactory.getConcept(0xf3061a5392264cc5L, 0xa443f952ceaf5816L, 0xf8c108ca66L, "jetbrains.mps.baseLanguage.structure.ClassConcept");
    /*package*/ static final SConcept EnumClass$Vk = MetaAdapterFactory.getConcept(0xf3061a5392264cc5L, 0xa443f952ceaf5816L, 0xfc367070a5L, "jetbrains.mps.baseLanguage.structure.EnumClass");
    /*package*/ static final SConcept StaticMethodDeclaration$FJ = MetaAdapterFactory.getConcept(0xf3061a5392264cc5L, 0xa443f952ceaf5816L, 0xfbbebabf0aL, "jetbrains.mps.baseLanguage.structure.StaticMethodDeclaration");
    /*package*/ static final SConcept StaticFieldDeclaration$jR = MetaAdapterFactory.getConcept(0xf3061a5392264cc5L, 0xa443f952ceaf5816L, 0xf93c84351fL, "jetbrains.mps.baseLanguage.structure.StaticFieldDeclaration");
    /*package*/ static final SConcept InstanceMethodDeclaration$39 = MetaAdapterFactory.getConcept(0xf3061a5392264cc5L, 0xa443f952ceaf5816L, 0xf8cc56b21dL, "jetbrains.mps.baseLanguage.structure.InstanceMethodDeclaration");
    /*package*/ static final SConcept Interface$db = MetaAdapterFactory.getConcept(0xf3061a5392264cc5L, 0xa443f952ceaf5816L, 0x101edd46144L, "jetbrains.mps.baseLanguage.structure.Interface");
    /*package*/ static final SConcept ConstructorDeclaration$yG = MetaAdapterFactory.getConcept(0xf3061a5392264cc5L, 0xa443f952ceaf5816L, 0xf8cc56b204L, "jetbrains.mps.baseLanguage.structure.ConstructorDeclaration");
    /*package*/ static final SConcept TypeProjection$5e = MetaAdapterFactory.getConcept(0x6b3888c1980244d8L, 0x8baff8e6c33ed689L, 0x28bef6d7551af3ccL, "jetbrains.mps.kotlin.structure.TypeProjection");
    /*package*/ static final SConcept JavaMethodCall$gD = MetaAdapterFactory.getConcept(0x9e4ff22b60f143efL, 0xa50bf9f0fcec22e0L, 0x2196e93e834d57ccL, "jetbrains.mps.kotlin.javaRefs.structure.JavaMethodCall");
    /*package*/ static final SInterfaceConcept IType$Ni = MetaAdapterFactory.getInterfaceConcept(0x6b3888c1980244d8L, 0x8baff8e6c33ed689L, 0x28bef6d7551af441L, "jetbrains.mps.kotlin.structure.IType");
    /*package*/ static final SConcept NullableType$E0 = MetaAdapterFactory.getConcept(0x6b3888c1980244d8L, 0x8baff8e6c33ed689L, 0x28b83021333e575L, "jetbrains.mps.kotlin.structure.NullableType");
    /*package*/ static final SConcept JavaDefaultConstructorCall$gf = MetaAdapterFactory.getConcept(0x9e4ff22b60f143efL, 0xa50bf9f0fcec22e0L, 0x5b64d6b00d61fa7bL, "jetbrains.mps.kotlin.javaRefs.structure.JavaDefaultConstructorCall");
  }
}
