コード例 #1
0
 public DefaultReferenceSubstituteInfoActionsFactory(
     SNode sourceNode, SNode linkDeclaration, DefaultReferenceSubstituteInfo substituteInfo) {
   mySourceNode = sourceNode;
   myLinkDeclaration = linkDeclaration;
   SNode genuineLinkDeclaration =
       BehaviorReflection.invokeNonVirtual(
           (Class<SNode>) ((Class) Object.class),
           myLinkDeclaration,
           "jetbrains.mps.lang.structure.structure.LinkDeclaration",
           "call_getGenuineLink_1213877254523",
           new Object[] {});
   if (genuineLinkDeclaration == null) {
     return;
   }
   if (SPropertyOperations.hasValue(
       genuineLinkDeclaration, "metaClass", "aggregation", "reference")) {
     DefaultReferenceSubstituteInfoActionsFactory.LOG.error(
         "only reference links are allowed here", myLinkDeclaration);
   }
   if (!(BehaviorReflection.invokeNonVirtual(
       Boolean.TYPE,
       genuineLinkDeclaration,
       "jetbrains.mps.lang.structure.structure.LinkDeclaration",
       "call_isSingular_1213877254557",
       new Object[] {}))) {
     DefaultReferenceSubstituteInfoActionsFactory.LOG.error(
         "cardinalities 1 or 0..1 are allowed here", myLinkDeclaration);
   }
   myCurrentReferent =
       SLinkOperations.getTargetNode(SNodeOperations.getReference(sourceNode, myLinkDeclaration));
   mySubstituteInfo = substituteInfo;
 }
コード例 #2
0
    public void test_setReference() throws Exception {
      this.addNodeById("8150353254540236423");
      this.addNodeById("8150353254540236549");
      this.addNodeById("4195712261513743410");
      SNode sNode =
          SNodeOperations.cast(
              this.getNodeById("4195712261513781536"),
              "jetbrains.mps.baseLanguage.structure.LocalVariableReference");

      StatCountNodeReadAccessInEditorListener listener =
          new StatCountNodeReadAccessInEditorListener(sNode);
      NodeReadAccessCasterInEditor.setCellBuildNodeReadAccessListener(listener);

      sNode.setReference(
          "localVariableDeclaration",
          SNodeOperations.getReference(
              SNodeOperations.cast(
                  this.getNodeById("4195712261513781536"),
                  "jetbrains.mps.baseLanguage.structure.LocalVariableReference"),
              SLinkOperations.findLinkDeclaration(
                  "jetbrains.mps.baseLanguage.structure.LocalVariableReference",
                  "localVariableDeclaration")));

      this.assertMethod(
          "public void jetbrains.mps.smodel.SNode.setReference(java.lang.String,org.jetbrains.mps.openapi.model.SReference)",
          listener.getResults().o1);
    }
コード例 #3
0
 public DefaultReferenceSubstituteInfoActionsFactory(
     SNode sourceNode, SNode linkDeclaration, DefaultReferenceSubstituteInfo substituteInfo) {
   mySourceNode = sourceNode;
   myLinkDeclaration = linkDeclaration;
   SNode genuineLinkDeclaration =
       ((SNode)
           BehaviorManager.getInstance()
               .invoke(
                   Object.class,
                   SNodeOperations.cast(
                       myLinkDeclaration,
                       "jetbrains.mps.lang.structure.structure.LinkDeclaration"),
                   "call_getGenuineLink_1213877254523",
                   new Class[] {SNode.class}));
   if (genuineLinkDeclaration == null) {
     return;
   }
   if (SPropertyOperations.hasValue(
       genuineLinkDeclaration, "metaClass", "aggregation", "reference")) {
     DefaultReferenceSubstituteInfoActionsFactory.LOG.error(
         "only reference links are allowed here", myLinkDeclaration);
   }
   if (!(((Boolean)
       BehaviorManager.getInstance()
           .invoke(
               Boolean.class,
               SNodeOperations.cast(
                   genuineLinkDeclaration,
                   "jetbrains.mps.lang.structure.structure.LinkDeclaration"),
               "call_isSingular_1213877254557",
               new Class[] {SNode.class})))) {
     DefaultReferenceSubstituteInfoActionsFactory.LOG.error(
         "cardinalities 1 or 0..1 are allowed here", myLinkDeclaration);
   }
   myCurrentReferent =
       SLinkOperations.getTargetNode(SNodeOperations.getReference(sourceNode, myLinkDeclaration));
   mySubstituteInfo = substituteInfo;
 }