def processModule()

in src/org/jetbrains/jps/builders/StandardBuilders.groovy [334:413]


  def processModule(ModuleBuildState state, ModuleChunk moduleChunk, ProjectBuilder projectBuilder) {
    if (state.loader == null) {
      final StringBuilder cp = new StringBuilder()

      cp.append(state.targetFolder)
      cp.append(File.pathSeparator)

      state.classpath.each {
        cp.append(it)
        cp.append(File.pathSeparator)
      }

      state.loader = InstrumentationUtil.createPseudoClassLoader(cp.toString())

      final List<File> formFiles = new ArrayList<File>();
      final ProjectWrapper pw = state.projectWrapper;

      if (pw != null) {
        for (Module m: moduleChunk.elements) {
          final Set<S> names = state.tests ? pw.getModule(m.getName()).getTests() : pw.getModule(m.getName()).getSources();
          for (S name: names) {
            if (name.value.endsWith(".form")) {
              formFiles.add(new File(pw.getAbsolutePath(name.value)));
            }
          }
        }
      }

      final List<PrefixedPath> nestedFormDirs = new ArrayList<PrefixedPath>();

      state.sourceRootsFromModuleWithDependencies.each {
        nestedFormDirs << getPrefixedPath(projectBuilder, it, moduleChunk)
      }

      state.formInstrumenter = new CustomFormInstrumenter(new File(state.targetFolder), nestedFormDirs, formFiles, state);

      if (!state.incremental) {
        for (File formFile: formFiles) {
          state.formInstrumenter.instrumentForm(formFile, state.loader);
        }
      }
    }

    if (state.incremental) {
      for (String f: state.sourceFiles) {
        if (f.endsWith(".form")) {
          state.formInstrumenter.instrumentForm(new File(f), state.loader);
        }
      }
    }

    if (projectBuilder.useInProcessJavac)
      return;

    if (!state.incremental) {
      new Object() {
        public void traverse(final File root) {
          final File[] files = root.listFiles();

          for (File f: files) {
            final String name = f.getName();

            if (name.endsWith(".class")) {
              InstrumentationUtil.instrumentNotNull(f, state.loader)
            }
            else if (f.isDirectory()) {
              traverse(f)
            }
          }
        }
      }.traverse(new File(state.targetFolder))
    }
    else {
      final Collection<StringCache.S> classes = state.callback.getClassFiles()

      classes.each {
        InstrumentationUtil.instrumentNotNull(new File(state.targetFolder + File.separator + it.value + ".class"), state.loader)
      }
    }
  }