987a346015
The only way to make the compiler compile several modules with a dependency loop is via the "build file", given by -Xbuild-file and used in the JPS (IntelliJ built-in build system) plugin. For the old frontend/backend it works like this: we _analyze_ sources of all modules once, as if it's one big module, and then for each module, we _generate_ (invoke backend) only sources of that module. Backend needs to be invoked separately per-module because every module has its own destination directory specified in the build file. For JVM IR, this separation into just two steps, analyze and generate, was problematic because there's psi2ir, which works like frontend, in that it needs the global analysis result to be able to create and link IR correctly. So, in case of JVM IR, we need to run psi2ir on the whole module after analysis and before generation. In this change, psi2ir is run on the whole module via `CodegenFactory.convertToIr` (which does nothing in the old backend), and then parts of the resulting IR module are extracted according to the original separation of the combined module into individual modules via `getModuleChunkBackendInput` by matching IrFile against KtFile. And then, backend is run for each such module. #KT-45915 Fixed #KT-48668 Fixed
2 lines
59 B
Plaintext
Vendored
2 lines
59 B
Plaintext
Vendored
-Xbuild-file=$TESTDATA_DIR$/modulesWithDependencyCycle.xml
|