public SModelLanguageEnhancements_Pointers_MigrationScript()

in languages/languageDesign/smodel/source_gen/jetbrains/mps/lang/smodel/scripts/SModelLanguageEnhancements_Pointers_MigrationScript.java [26:675]


  public SModelLanguageEnhancements_Pointers_MigrationScript() {
    super("SModel Lanugage Enhancements (node-ptr<> and model-ptr)");
    // whitespace
    // whitespace
    this.addRefactoring(new AbstractMigrationRefactoring() {
      @Override
      public String getName() {
        return "Replace reference link assignment with `.set ptr` operation";
      }
      @Override
      public String getAdditionalInfo() {
        return "Replace reference link assignment with `.set ptr` operation";
      }
      @Override
      public SAbstractConcept getApplicableConcept() {
        return CONCEPTS.AssignmentExpression$SE;
      }
      @Override
      public boolean isApplicableInstanceNode(SNode node) {
        return SEnumOperations.isMember(SPropertyOperations.getEnum(SLinkOperations.getTarget(SNodeOperations.as(SLinkOperations.getTarget(SNodeOperations.as(SLinkOperations.getTarget(node, LINKS.lValue$splI), CONCEPTS.DotExpression$yW), LINKS.operation$gs9E), CONCEPTS.SLinkAccess$Pk), LINKS.link$zuOT), PROPS.metaClass$PeKc), 0xfc6f4e95b8L) && SNodeOperations.isInstanceOf(SLinkOperations.getTarget(node, LINKS.rValue$spNK), CONCEPTS.AbstractNodeRefExpression$M3);
      }
      @Override
      public void doUpdateInstanceNode(SNode node) {
        SNode linkAccessExpression = SLinkOperations.getTarget(node, LINKS.lValue$splI);
        SNode targetNodeIdentity = NodePointerMigrations.toNodeIdentity(SNodeOperations.cast(SLinkOperations.getTarget(node, LINKS.rValue$spNK), CONCEPTS.AbstractNodeRefExpression$M3));
        SNode replacement = createDotExpression_y8o86o_a0c0a4(linkAccessExpression, targetNodeIdentity);
        SNodeOperations.replaceWithAnother(node, replacement);
      }
      @Override
      public boolean isShowAsIntention() {
        return true;
      }
    });
    this.addRefactoring(new AbstractMigrationRefactoring() {
      @Override
      public String getName() {
        return "Replace `.set` with `.set ptr` operation";
      }
      @Override
      public String getAdditionalInfo() {
        return "Replace `.set` with `.set ptr` operation";
      }
      @Override
      public SAbstractConcept getApplicableConcept() {
        return CONCEPTS.Link_SetTargetOperation$Mn;
      }
      @Override
      public boolean isApplicableInstanceNode(SNode node) {
        return SEnumOperations.isMember(SPropertyOperations.getEnum(SLinkOperations.getTarget(SNodeOperations.as(SNodeOperation__BehaviorDescriptor.getLeftExpressionOperation_idhEwJdHi.invoke(node), CONCEPTS.SLinkAccess$Pk), LINKS.link$zuOT), PROPS.metaClass$PeKc), 0xfc6f4e95b8L) && SNodeOperations.isInstanceOf(SLinkOperations.getTarget(node, LINKS.linkTarget$tLt0), CONCEPTS.AbstractNodeRefExpression$M3);
      }
      @Override
      public void doUpdateInstanceNode(SNode node) {
        SNode targetNodeIdentity = NodePointerMigrations.toNodeIdentity(SNodeOperations.cast(SLinkOperations.getTarget(node, LINKS.linkTarget$tLt0), CONCEPTS.AbstractNodeRefExpression$M3));
        SNode replacement = createLink_SetTargetPointerOperation_y8o86o_a0b0a5(targetNodeIdentity);
        SNodeOperations.replaceWithAnother(node, replacement);
      }
      @Override
      public boolean isShowAsIntention() {
        return false;
      }
    });
    this.addRefactoring(new AbstractMigrationRefactoring() {
      @Override
      public String getName() {
        return "Replace `==` with `.is` operation";
      }
      @Override
      public String getAdditionalInfo() {
        return "Replace `==` with `.is` operation";
      }
      @Override
      public SAbstractConcept getApplicableConcept() {
        return CONCEPTS.EqualsExpression$MF;
      }
      @Override
      public boolean isApplicableInstanceNode(SNode node) {
        return NodePointerMigrations.isValidForEquality(SLinkOperations.getTarget(node, LINKS.leftExpression$sEj), SLinkOperations.getTarget(node, LINKS.rightExpression$nvX));
      }
      @Override
      public void doUpdateInstanceNode(SNode node) {
        SNodeOperations.replaceWithAnother(node, NodePointerMigrations.getEqualityReplacement(SLinkOperations.getTarget(node, LINKS.leftExpression$sEj), SLinkOperations.getTarget(node, LINKS.rightExpression$nvX)));
      }
      @Override
      public boolean isShowAsIntention() {
        return true;
      }
    });
    this.addRefactoring(new AbstractMigrationRefactoring() {
      @Override
      public String getName() {
        return "Replace `==` with `.is` operation";
      }
      @Override
      public String getAdditionalInfo() {
        return "Replace `==` with `.is` operation";
      }
      @Override
      public SAbstractConcept getApplicableConcept() {
        return CONCEPTS.EqualsExpression$MF;
      }
      @Override
      public boolean isApplicableInstanceNode(SNode node) {
        return NodePointerMigrations.isValidForEquality(SLinkOperations.getTarget(node, LINKS.rightExpression$nvX), SLinkOperations.getTarget(node, LINKS.leftExpression$sEj));
      }
      @Override
      public void doUpdateInstanceNode(SNode node) {
        SNodeOperations.replaceWithAnother(node, NodePointerMigrations.getEqualityReplacement(SLinkOperations.getTarget(node, LINKS.rightExpression$nvX), SLinkOperations.getTarget(node, LINKS.leftExpression$sEj)));
      }
      @Override
      public boolean isShowAsIntention() {
        return true;
      }
    });
    this.addRefactoring(new AbstractMigrationRefactoring() {
      @Override
      public String getName() {
        return "Replace `!=` with `.is` operation";
      }
      @Override
      public String getAdditionalInfo() {
        return "Replace `!=` with `.is` operation";
      }
      @Override
      public SAbstractConcept getApplicableConcept() {
        return CONCEPTS.NotEqualsExpression$aX;
      }
      @Override
      public boolean isApplicableInstanceNode(SNode node) {
        return NodePointerMigrations.isValidForEquality(SLinkOperations.getTarget(node, LINKS.leftExpression$sEj), SLinkOperations.getTarget(node, LINKS.rightExpression$nvX));
      }
      @Override
      public void doUpdateInstanceNode(SNode node) {
        SNodeOperations.replaceWithAnother(node, NodePointerMigrations.getNotEqualityReplacement(SLinkOperations.getTarget(node, LINKS.leftExpression$sEj), SLinkOperations.getTarget(node, LINKS.rightExpression$nvX)));
      }
      @Override
      public boolean isShowAsIntention() {
        return true;
      }
    });
    this.addRefactoring(new AbstractMigrationRefactoring() {
      @Override
      public String getName() {
        return "Replace `!=` with `.is` operation";
      }
      @Override
      public String getAdditionalInfo() {
        return "Replace `!=` with `.is` operation";
      }
      @Override
      public SAbstractConcept getApplicableConcept() {
        return CONCEPTS.NotEqualsExpression$aX;
      }
      @Override
      public boolean isApplicableInstanceNode(SNode node) {
        return NodePointerMigrations.isValidForEquality(SLinkOperations.getTarget(node, LINKS.rightExpression$nvX), SLinkOperations.getTarget(node, LINKS.leftExpression$sEj));
      }
      @Override
      public void doUpdateInstanceNode(SNode node) {
        SNodeOperations.replaceWithAnother(node, NodePointerMigrations.getNotEqualityReplacement(SLinkOperations.getTarget(node, LINKS.rightExpression$nvX), SLinkOperations.getTarget(node, LINKS.leftExpression$sEj)));
      }
      @Override
      public boolean isShowAsIntention() {
        return true;
      }
    });
    this.addRefactoring(new AbstractMigrationRefactoring() {
      @Override
      public String getName() {
        return "Replace `:eq:` with `.is` operation";
      }
      @Override
      public String getAdditionalInfo() {
        return "Replace `:eq:` with `.is` operation";
      }
      @Override
      public SAbstractConcept getApplicableConcept() {
        return CONCEPTS.NPEEqualsExpression$Ey;
      }
      @Override
      public boolean isApplicableInstanceNode(SNode node) {
        return NodePointerMigrations.isValidForEquality(SLinkOperations.getTarget(node, LINKS.leftExpression$sEj), SLinkOperations.getTarget(node, LINKS.rightExpression$nvX));
      }
      @Override
      public void doUpdateInstanceNode(SNode node) {
        SNodeOperations.replaceWithAnother(node, NodePointerMigrations.getEqualityReplacement(SLinkOperations.getTarget(node, LINKS.leftExpression$sEj), SLinkOperations.getTarget(node, LINKS.rightExpression$nvX)));
      }
      @Override
      public boolean isShowAsIntention() {
        return true;
      }
    });
    this.addRefactoring(new AbstractMigrationRefactoring() {
      @Override
      public String getName() {
        return "Replace `:eq:` with `.is` operation";
      }
      @Override
      public String getAdditionalInfo() {
        return "Replace `:eq:` with `.is` operation";
      }
      @Override
      public SAbstractConcept getApplicableConcept() {
        return CONCEPTS.NPEEqualsExpression$Ey;
      }
      @Override
      public boolean isApplicableInstanceNode(SNode node) {
        return NodePointerMigrations.isValidForEquality(SLinkOperations.getTarget(node, LINKS.rightExpression$nvX), SLinkOperations.getTarget(node, LINKS.leftExpression$sEj));
      }
      @Override
      public void doUpdateInstanceNode(SNode node) {
        SNodeOperations.replaceWithAnother(node, NodePointerMigrations.getEqualityReplacement(SLinkOperations.getTarget(node, LINKS.rightExpression$nvX), SLinkOperations.getTarget(node, LINKS.leftExpression$sEj)));
      }
      @Override
      public boolean isShowAsIntention() {
        return true;
      }
    });
    this.addRefactoring(new AbstractMigrationRefactoring() {
      @Override
      public String getName() {
        return "Replace `:ne:` with `.is` operation";
      }
      @Override
      public String getAdditionalInfo() {
        return "Replace `:ne:` with `.is` operation";
      }
      @Override
      public SAbstractConcept getApplicableConcept() {
        return CONCEPTS.NPENotEqualsExpression$Ef;
      }
      @Override
      public boolean isApplicableInstanceNode(SNode node) {
        return NodePointerMigrations.isValidForEquality(SLinkOperations.getTarget(node, LINKS.leftExpression$sEj), SLinkOperations.getTarget(node, LINKS.rightExpression$nvX));
      }
      @Override
      public void doUpdateInstanceNode(SNode node) {
        SNodeOperations.replaceWithAnother(node, NodePointerMigrations.getNotEqualityReplacement(SLinkOperations.getTarget(node, LINKS.leftExpression$sEj), SLinkOperations.getTarget(node, LINKS.rightExpression$nvX)));
      }
      @Override
      public boolean isShowAsIntention() {
        return true;
      }
    });
    this.addRefactoring(new AbstractMigrationRefactoring() {
      @Override
      public String getName() {
        return "Replace `:ne:` with `.is` operation";
      }
      @Override
      public String getAdditionalInfo() {
        return "Replace `:ne:` with `.is` operation";
      }
      @Override
      public SAbstractConcept getApplicableConcept() {
        return CONCEPTS.NPENotEqualsExpression$Ef;
      }
      @Override
      public boolean isApplicableInstanceNode(SNode node) {
        return NodePointerMigrations.isValidForEquality(SLinkOperations.getTarget(node, LINKS.rightExpression$nvX), SLinkOperations.getTarget(node, LINKS.leftExpression$sEj));
      }
      @Override
      public void doUpdateInstanceNode(SNode node) {
        SNodeOperations.replaceWithAnother(node, NodePointerMigrations.getNotEqualityReplacement(SLinkOperations.getTarget(node, LINKS.rightExpression$nvX), SLinkOperations.getTarget(node, LINKS.leftExpression$sEj)));
      }
      @Override
      public boolean isShowAsIntention() {
        return true;
      }
    });
    // whitespace
    // whitespace
    this.addRefactoring(new AbstractMigrationRefactoring() {
      @Override
      public String getName() {
        return "Replace reference link assigment and quotation with `.set ptr` operation";
      }
      @Override
      public String getAdditionalInfo() {
        return "Replace reference link assigment and quotation with `.set ptr` operation";
      }
      @Override
      public SAbstractConcept getApplicableConcept() {
        return CONCEPTS.AssignmentExpression$SE;
      }
      @Override
      public boolean isApplicableInstanceNode(SNode node) {
        return SEnumOperations.isMember(SPropertyOperations.getEnum(SLinkOperations.getTarget(SNodeOperations.as(SLinkOperations.getTarget(SNodeOperations.as(SLinkOperations.getTarget(node, LINKS.lValue$splI), CONCEPTS.DotExpression$yW), LINKS.operation$gs9E), CONCEPTS.SLinkAccess$Pk), LINKS.link$zuOT), PROPS.metaClass$PeKc), 0xfc6f4e95b8L) && NodePointerMigrations.isQuotationSuitForNodePointer(SLinkOperations.getTarget(node, LINKS.rValue$spNK));
      }
      @Override
      public void doUpdateInstanceNode(SNode node) {
        SNode linkAccessExpression = SLinkOperations.getTarget(node, LINKS.lValue$splI);
        SNode targetNodeIdentity = NodePointerMigrations.quotationToNodeIdentity(SLinkOperations.getTarget(node, LINKS.rValue$spNK));
        SNode replacement = createDotExpression_y8o86o_a0c0a91(linkAccessExpression, targetNodeIdentity);
        SNodeOperations.replaceWithAnother(node, replacement);
      }
      @Override
      public boolean isShowAsIntention() {
        return true;
      }
    });
    this.addRefactoring(new AbstractMigrationRefactoring() {
      @Override
      public String getName() {
        return "Replace `.set` and quotation with `.set ptr` operation";
      }
      @Override
      public String getAdditionalInfo() {
        return "Replace `.set` and quotation with `.set ptr` operation";
      }
      @Override
      public SAbstractConcept getApplicableConcept() {
        return CONCEPTS.Link_SetTargetOperation$Mn;
      }
      @Override
      public boolean isApplicableInstanceNode(SNode node) {
        return SEnumOperations.isMember(SPropertyOperations.getEnum(SLinkOperations.getTarget(SNodeOperations.as(SNodeOperation__BehaviorDescriptor.getLeftExpressionOperation_idhEwJdHi.invoke(node), CONCEPTS.SLinkAccess$Pk), LINKS.link$zuOT), PROPS.metaClass$PeKc), 0xfc6f4e95b8L) && NodePointerMigrations.isQuotationSuitForNodePointer(SLinkOperations.getTarget(node, LINKS.linkTarget$tLt0));
      }
      @Override
      public void doUpdateInstanceNode(SNode node) {
        SNode targetNodeIdentity = NodePointerMigrations.quotationToNodeIdentity(SLinkOperations.getTarget(node, LINKS.linkTarget$tLt0));
        SNode replacement = createLink_SetTargetPointerOperation_y8o86o_a0b0a02(targetNodeIdentity);
        SNodeOperations.replaceWithAnother(node, replacement);
      }
      @Override
      public boolean isShowAsIntention() {
        return false;
      }
    });
    this.addRefactoring(new AbstractMigrationRefactoring() {
      @Override
      public String getName() {
        return "Replace `==` and quotation with `.is` operation";
      }
      @Override
      public String getAdditionalInfo() {
        return "Replace `==` and quotation with `.is` operation";
      }
      @Override
      public SAbstractConcept getApplicableConcept() {
        return CONCEPTS.EqualsExpression$MF;
      }
      @Override
      public boolean isApplicableInstanceNode(SNode node) {
        return NodePointerMigrations.isValidForEquality_Quotation(SLinkOperations.getTarget(node, LINKS.leftExpression$sEj), SLinkOperations.getTarget(node, LINKS.rightExpression$nvX));
      }
      @Override
      public void doUpdateInstanceNode(SNode node) {
        SNodeOperations.replaceWithAnother(node, NodePointerMigrations.getEqualityReplacement_Quotation(SLinkOperations.getTarget(node, LINKS.leftExpression$sEj), SLinkOperations.getTarget(node, LINKS.rightExpression$nvX)));
      }
      @Override
      public boolean isShowAsIntention() {
        return true;
      }
    });
    this.addRefactoring(new AbstractMigrationRefactoring() {
      @Override
      public String getName() {
        return "Replace `==` and quotation with `.is` operation";
      }
      @Override
      public String getAdditionalInfo() {
        return "Replace `==` and quotation with `.is` operation";
      }
      @Override
      public SAbstractConcept getApplicableConcept() {
        return CONCEPTS.EqualsExpression$MF;
      }
      @Override
      public boolean isApplicableInstanceNode(SNode node) {
        return NodePointerMigrations.isValidForEquality_Quotation(SLinkOperations.getTarget(node, LINKS.rightExpression$nvX), SLinkOperations.getTarget(node, LINKS.leftExpression$sEj));
      }
      @Override
      public void doUpdateInstanceNode(SNode node) {
        SNodeOperations.replaceWithAnother(node, NodePointerMigrations.getEqualityReplacement_Quotation(SLinkOperations.getTarget(node, LINKS.rightExpression$nvX), SLinkOperations.getTarget(node, LINKS.leftExpression$sEj)));
      }
      @Override
      public boolean isShowAsIntention() {
        return true;
      }
    });
    // whitespace
    this.addRefactoring(new AbstractMigrationRefactoring() {
      @Override
      public String getName() {
        return "Replace `!=` and quotation with `.is` operation";
      }
      @Override
      public String getAdditionalInfo() {
        return "Replace `!=` and quotation with `.is` operation";
      }
      @Override
      public SAbstractConcept getApplicableConcept() {
        return CONCEPTS.NotEqualsExpression$aX;
      }
      @Override
      public boolean isApplicableInstanceNode(SNode node) {
        return NodePointerMigrations.isValidForEquality_Quotation(SLinkOperations.getTarget(node, LINKS.leftExpression$sEj), SLinkOperations.getTarget(node, LINKS.rightExpression$nvX));
      }
      @Override
      public void doUpdateInstanceNode(SNode node) {
        SNodeOperations.replaceWithAnother(node, NodePointerMigrations.getNotEqualityReplacement_Quotation(SLinkOperations.getTarget(node, LINKS.leftExpression$sEj), SLinkOperations.getTarget(node, LINKS.rightExpression$nvX)));
      }
      @Override
      public boolean isShowAsIntention() {
        return true;
      }
    });
    this.addRefactoring(new AbstractMigrationRefactoring() {
      @Override
      public String getName() {
        return "Replace `!=` and quotation with `.is` operation";
      }
      @Override
      public String getAdditionalInfo() {
        return "Replace `!=` and quotation with `.is` operation";
      }
      @Override
      public SAbstractConcept getApplicableConcept() {
        return CONCEPTS.NotEqualsExpression$aX;
      }
      @Override
      public boolean isApplicableInstanceNode(SNode node) {
        return NodePointerMigrations.isValidForEquality_Quotation(SLinkOperations.getTarget(node, LINKS.rightExpression$nvX), SLinkOperations.getTarget(node, LINKS.leftExpression$sEj));
      }
      @Override
      public void doUpdateInstanceNode(SNode node) {
        SNodeOperations.replaceWithAnother(node, NodePointerMigrations.getNotEqualityReplacement_Quotation(SLinkOperations.getTarget(node, LINKS.rightExpression$nvX), SLinkOperations.getTarget(node, LINKS.leftExpression$sEj)));
      }
      @Override
      public boolean isShowAsIntention() {
        return true;
      }
    });
    // whitespace
    this.addRefactoring(new AbstractMigrationRefactoring() {
      @Override
      public String getName() {
        return "Replace `:eq:` and quotation with `.is` operation";
      }
      @Override
      public String getAdditionalInfo() {
        return "Replace `:eq:` and quotation with `.is` operation";
      }
      @Override
      public SAbstractConcept getApplicableConcept() {
        return CONCEPTS.NPEEqualsExpression$Ey;
      }
      @Override
      public boolean isApplicableInstanceNode(SNode node) {
        return NodePointerMigrations.isValidForEquality_Quotation(SLinkOperations.getTarget(node, LINKS.leftExpression$sEj), SLinkOperations.getTarget(node, LINKS.rightExpression$nvX));
      }
      @Override
      public void doUpdateInstanceNode(SNode node) {
        SNodeOperations.replaceWithAnother(node, NodePointerMigrations.getEqualityReplacement_Quotation(SLinkOperations.getTarget(node, LINKS.leftExpression$sEj), SLinkOperations.getTarget(node, LINKS.rightExpression$nvX)));
      }
      @Override
      public boolean isShowAsIntention() {
        return true;
      }
    });
    this.addRefactoring(new AbstractMigrationRefactoring() {
      @Override
      public String getName() {
        return "Replace `:eq:` and quotation with `.is` operation";
      }
      @Override
      public String getAdditionalInfo() {
        return "Replace `:eq:` and quotation with `.is` operation";
      }
      @Override
      public SAbstractConcept getApplicableConcept() {
        return CONCEPTS.NPEEqualsExpression$Ey;
      }
      @Override
      public boolean isApplicableInstanceNode(SNode node) {
        return NodePointerMigrations.isValidForEquality_Quotation(SLinkOperations.getTarget(node, LINKS.rightExpression$nvX), SLinkOperations.getTarget(node, LINKS.leftExpression$sEj));
      }
      @Override
      public void doUpdateInstanceNode(SNode node) {
        SNodeOperations.replaceWithAnother(node, NodePointerMigrations.getEqualityReplacement_Quotation(SLinkOperations.getTarget(node, LINKS.rightExpression$nvX), SLinkOperations.getTarget(node, LINKS.leftExpression$sEj)));
      }
      @Override
      public boolean isShowAsIntention() {
        return true;
      }
    });
    // whitespace
    this.addRefactoring(new AbstractMigrationRefactoring() {
      @Override
      public String getName() {
        return "Replace `:ne:` and quotation with `.is` operation";
      }
      @Override
      public String getAdditionalInfo() {
        return "Replace `:ne:` and quotation with `.is` operation";
      }
      @Override
      public SAbstractConcept getApplicableConcept() {
        return CONCEPTS.NPENotEqualsExpression$Ef;
      }
      @Override
      public boolean isApplicableInstanceNode(SNode node) {
        return NodePointerMigrations.isValidForEquality_Quotation(SLinkOperations.getTarget(node, LINKS.leftExpression$sEj), SLinkOperations.getTarget(node, LINKS.rightExpression$nvX));
      }
      @Override
      public void doUpdateInstanceNode(SNode node) {
        SNodeOperations.replaceWithAnother(node, NodePointerMigrations.getNotEqualityReplacement_Quotation(SLinkOperations.getTarget(node, LINKS.leftExpression$sEj), SLinkOperations.getTarget(node, LINKS.rightExpression$nvX)));
      }
      @Override
      public boolean isShowAsIntention() {
        return true;
      }
    });
    this.addRefactoring(new AbstractMigrationRefactoring() {
      @Override
      public String getName() {
        return "Replace `:ne:` and quotation with `.is` operation";
      }
      @Override
      public String getAdditionalInfo() {
        return "Replace `:ne:` and quotation with `.is` operation";
      }
      @Override
      public SAbstractConcept getApplicableConcept() {
        return CONCEPTS.NPENotEqualsExpression$Ef;
      }
      @Override
      public boolean isApplicableInstanceNode(SNode node) {
        return NodePointerMigrations.isValidForEquality_Quotation(SLinkOperations.getTarget(node, LINKS.rightExpression$nvX), SLinkOperations.getTarget(node, LINKS.leftExpression$sEj));
      }
      @Override
      public void doUpdateInstanceNode(SNode node) {
        SNodeOperations.replaceWithAnother(node, NodePointerMigrations.getNotEqualityReplacement_Quotation(SLinkOperations.getTarget(node, LINKS.rightExpression$nvX), SLinkOperations.getTarget(node, LINKS.leftExpression$sEj)));
      }
      @Override
      public boolean isShowAsIntention() {
        return true;
      }
    });
    // whitespace
    // whitespace
    // whitespace
    this.addRefactoring(new AbstractMigrationRefactoring() {
      @Override
      public String getName() {
        return "Replace downcast and SNode#getReference method call with `.pointer` operation";
      }
      @Override
      public String getAdditionalInfo() {
        return "Replace downcast and SNode#getReference method call with `.pointer` operation";
      }
      @Override
      public SAbstractConcept getApplicableConcept() {
        return CONCEPTS.DotExpression$yW;
      }
      @Override
      public boolean isApplicableInstanceNode(SNode node) {
        return NodePointerMigrations.isDowncastToGetReferenceMethod_Node(node) && NodePointerMigrations.isSafeToReplace(node);
      }
      @Override
      public void doUpdateInstanceNode(SNode node) {
        NodePointerMigrations.replaceDowncastToGetReferenceMethod_Node(node);
      }
      @Override
      public boolean isShowAsIntention() {
        return true;
      }
    });
    this.addRefactoring(new AbstractMigrationRefactoring() {
      @Override
      public String getName() {
        return "Replace downcast and SNode#getReference method call with `.pointer` operation (may lead typesystem errors)";
      }
      @Override
      public String getAdditionalInfo() {
        return "Replace downcast and SNode#getReference method call with `.pointer` operation (may lead typesystem errors)";
      }
      @Override
      public SAbstractConcept getApplicableConcept() {
        return CONCEPTS.DotExpression$yW;
      }
      @Override
      public boolean isApplicableInstanceNode(SNode node) {
        return NodePointerMigrations.isDowncastToGetReferenceMethod_Node(node) && !(NodePointerMigrations.isSafeToReplace(node));
      }
      @Override
      public void doUpdateInstanceNode(SNode node) {
        NodePointerMigrations.replaceDowncastToGetReferenceMethod_Node(node);
      }
      @Override
      public boolean isShowAsIntention() {
        return true;
      }
    });
    // whitespace
    // whitespace
    this.addRefactoring(new AbstractMigrationRefactoring() {
      @Override
      public String getName() {
        return "Replace downcast and SModel#getReference method call with `.pointer` operation";
      }
      @Override
      public String getAdditionalInfo() {
        return "Replace downcast and SModel#getReference method call with `.pointer` operation";
      }
      @Override
      public SAbstractConcept getApplicableConcept() {
        return CONCEPTS.DotExpression$yW;
      }
      @Override
      public boolean isApplicableInstanceNode(SNode node) {
        return NodePointerMigrations.isDowncastToGetReferenceMethod_Model(node) && NodePointerMigrations.isSafeToReplace(node);
      }
      @Override
      public void doUpdateInstanceNode(SNode node) {
        NodePointerMigrations.replaceDowncastToGetReferenceMethod_Model(node);
      }
      @Override
      public boolean isShowAsIntention() {
        return true;
      }
    });
    this.addRefactoring(new AbstractMigrationRefactoring() {
      @Override
      public String getName() {
        return "Replace downcast and SModel#getReference method call with `.pointer` operation (may lead typesystem errors)";
      }
      @Override
      public String getAdditionalInfo() {
        return "Replace downcast and SModel#getReference method call with `.pointer` operation (may lead typesystem errors)";
      }
      @Override
      public SAbstractConcept getApplicableConcept() {
        return CONCEPTS.DotExpression$yW;
      }
      @Override
      public boolean isApplicableInstanceNode(SNode node) {
        return NodePointerMigrations.isDowncastToGetReferenceMethod_Model(node) && !(NodePointerMigrations.isSafeToReplace(node));
      }
      @Override
      public void doUpdateInstanceNode(SNode node) {
        NodePointerMigrations.replaceDowncastToGetReferenceMethod_Model(node);
      }
      @Override
      public boolean isShowAsIntention() {
        return true;
      }
    });
    // whitespace
  }