public static String call_getOutputPath_WithMacro_202934866059116697(
     SNode thisNode, Context context) {
   if ((SNodeOperations.getParent(thisNode) != null)
       && SNodeOperations.isInstanceOf(
           SNodeOperations.getParent(thisNode),
           "jetbrains.mps.build.structure.BuildLayout_Container")) {
     String parentChildrenTargetDir =
         BuildLayout_Container_Behavior.call_getChildrenOutputDir_WithMacro_4701820937132344011(
             SNodeOperations.cast(
                 SNodeOperations.getParent(thisNode),
                 "jetbrains.mps.build.structure.BuildLayout_Container"),
             context);
     return parentChildrenTargetDir
         + "/"
         + BuildString_Behavior.call_getText_4380385936562005550(
             SLinkOperations.getTarget(thisNode, "fileName", true), context.getMacros(thisNode));
   }
   return null;
 }
 public static String call_getOutputPath_WithMacro_280273048052535414(
     SNode thisNode, Context context) {
   if ((SNodeOperations.getParent(thisNode) != null)
       && SNodeOperations.isInstanceOf(
           SNodeOperations.getParent(thisNode),
           "jetbrains.mps.build.structure.BuildLayout_Container")) {
     String parentChildrenTargetDir =
         BehaviorReflection.invokeVirtual(
             String.class,
             SNodeOperations.cast(
                 SNodeOperations.getParent(thisNode),
                 "jetbrains.mps.build.structure.BuildLayout_Container"),
             "virtual_getChildrenOutputDir_WithMacro_4701820937132344011",
             new Object[] {context});
     return parentChildrenTargetDir
         + "/"
         + BuildString_Behavior.call_getText_4380385936562005550(
             SLinkOperations.getTarget(
                 SLinkOperations.getTarget(thisNode, "plugin", false), "containerName", true),
             context.getMacros(thisNode));
   }
   return null;
 }
예제 #3
0
    @Override
    public String expandPath(@Nullable String path) {
      if (path == null) {
        return null;
      }

      if (moduleSourceDir != null) {
        for (String macro : MacrosFactory.descriptors) {
          if (path.startsWith(macro)) {
            String relPath = path.substring(path.indexOf('}') + 1);
            return IFileUtils.getCanonicalPath(moduleSourceDir.getDescendant(relPath));
          }
        }
      }
      if (path.startsWith("${")) {
        int index = path.indexOf("}");
        if (index == -1) {
          reporter.report("invalid macro in `" + path + "'", null, null);
          return path;
        }

        String macroName = path.substring(2, index);
        SNode found = null;
        for (SNode macro :
            SLinkOperations.getTargets(
                SNodeOperations.getAncestor(
                    originalModule, "jetbrains.mps.build.structure.BuildProject", false, false),
                "macros",
                true)) {
          if (!(SNodeOperations.isInstanceOf(
              macro, "jetbrains.mps.build.structure.BuildFolderMacro"))) {
            continue;
          }

          if (eq_krgnbt_a0c0f0d0f4(SPropertyOperations.getString(macro, "name"), macroName)) {
            found = SNodeOperations.cast(macro, "jetbrains.mps.build.structure.BuildFolderMacro");
            break;
          }
        }
        if (found == null) {
          reporter.report("macro is not declared in build script: " + path, null, null);
          return path;
        }

        String localPath =
            BehaviorReflection.invokeVirtual(
                String.class,
                SLinkOperations.getTarget(found, "defaultPath", true),
                "virtual_getLocalPath_5481553824944787364",
                new Object[] {
                  (genContext != null
                      ? Context.defaultContext(genContext)
                      : Context.defaultContext())
                });
        if (localPath == null) {
          if (genContext != null) {
            genContext.showWarningMessage(
                found, "cannot resolve local path: " + path + ", macro has no default value");
          }
          return path;
        }

        String relPath = path.substring(index + 1);
        return IFileUtils.getCanonicalPath(
            FileSystem.getInstance().getFileByPath(localPath).getDescendant(relPath));
      }
      return path;
    }