@Nullable
 @Override
 public SNode resolveMethod(
     SNode contextNode,
     @NotNull String refText,
     List<SNode> actualArguments,
     List<SNode> methods) {
   // two variants:
   if (SNodeOperations.isInstanceOf(
       contextNode, "jetbrains.mps.baseLanguage.structure.InstanceMethodCallOperation")) {
     // as part of DotExpression
     SNode instanceType =
         SNodeOperations.cast(
             ((SNode)
                 BehaviorManager.getInstance()
                     .invoke(
                         Object.class,
                         ((SNode)
                             BehaviorManager.getInstance()
                                 .invoke(
                                     Object.class,
                                     SNodeOperations.cast(
                                         contextNode,
                                         "jetbrains.mps.baseLanguage.structure.InstanceMethodCallOperation"),
                                     "call_getDotExpression_1224687669172",
                                     new Class[] {SNode.class})),
                         "call_getOperandType_8871623299328377715",
                         new Class[] {SNode.class})),
             "jetbrains.mps.baseLanguage.structure.ClassifierType");
     Map<SNode, SNode> typeByTypeVar =
         ((SLinkOperations.getTarget(instanceType, "classifier", false) != null)
             ? MethodResolveUtil.getTypesByTypeVars(
                 SLinkOperations.getTarget(instanceType, "classifier", false),
                 SLinkOperations.getTargets(instanceType, "parameter", true))
             : Collections.<SNode, SNode>emptyMap());
     return MethodResolveUtil.chooseByParameterType(methods, actualArguments, typeByTypeVar);
   } else {
     // as local
     Map<SNode, SNode> typeByTypeVar = ClassifierScopeUtils.resolveClassifierTypeVars(classifier);
     return MethodResolveUtil.chooseByParameterType(methods, actualArguments, typeByTypeVar);
   }
 }