Esempio n. 1
0
  private static CharSequence generateModuleScript(
      String moduleName,
      ModuleChunk chunk,
      List<VirtualFile> files,
      boolean tests,
      VirtualFile mainOutput,
      Set<VirtualFile> directoriesToFilterOut) {
    StringBuilder script = new StringBuilder();

    if (tests) {
      script.append("// Module script for tests\n");
    } else {
      script.append("// Module script for production\n");
    }

    script.append("import kotlin.modules.*\n");
    script.append("fun project() {\n");
    script.append("    module(\"" + moduleName + "\") {\n");

    for (VirtualFile sourceFile : files) {
      script.append("        sources += \"" + path(sourceFile) + "\"\n");
    }

    // TODO: have a bootclasspath in script API
    script.append("        // Boot classpath\n");
    for (VirtualFile root : chunk.getCompilationBootClasspathFiles()) {
      script.append("        classpath += \"" + path(root) + "\"\n");
    }

    script.append("        // Compilation classpath\n");
    for (VirtualFile root : chunk.getCompilationClasspathFiles()) {
      String path = path(root);
      if (directoriesToFilterOut.contains(root)) {
        // For IDEA's make (incremental compilation) purposes, output directories of the current
        // module and its dependencies
        // appear on the class path, so we are at risk of seeing the results of the previous build,
        // i.e. if some class was
        // removed in the sources, it may still be there in binaries. Thus, we delete these entries
        // from the classpath.
        script.append("        // Output directory, commented out\n");
        script.append("        // ");
      }
      script.append("        classpath += \"" + path + "\"\n");
    }

    // This is for java files in same roots
    script.append("        // Java classpath (for Java sources)\n");
    for (VirtualFile root : chunk.getSourceRoots()) {
      script.append("        classpath += \"" + path(root) + "\"\n");
    }

    script.append("        // Main output\n");
    if (tests && mainOutput != null) {
      script.append("        classpath += \"" + path(mainOutput) + "\"\n");
    }

    script.append("    }\n");
    script.append("}\n");
    return script;
  }