On Wed, 1 Mar 2023 10:12:41 GMT, Jan Lahoda <[email protected]> wrote:
> The OpenJDK build is using a Plugin called Depend to avoid building Java code
> unnecessarily. It has two parts, one is checking module APIs (and forces
> rebuild of dependent modules if a dependency changes), and second takes
> modified files in a module, and attempts to detect whether it is enough to
> recompile these files, or if the whole module must be rebuilt.
>
> There's a bug in the second part, it does not track changes in primitive
> types, so e.g. a change of a type of a public field form `int` to `long` does
> not cause recompile.
>
> This patch fixes that by visiting the primitive types, and including them in
> the hash computed for the given file.
>
> There's also another problem - if a module is being recompiled from scratch
> due to a change in a file hash, the new/updated file hashes are written
> immediately. And if the compilation consequently fails, the state is not
> compared to the original hash, but to the hash from the broken compilation,
> which may lead to missing compilation of some files.
>
> This patch moves the code to write the new hashes to the end of compilation,
> and only do that when there were no compile-time errors during the
> compilation.
make/jdk/src/classes/build/tools/depend/Depend.java line 885:
> 883: @Override
> 884: public Void visitPrimitiveType(PrimitiveTypeTree node, Void p) {
> 885: update(node.getPrimitiveTypeKind().name());
shouldn't `DependTest` include a test to stress this new code?
-------------
PR: https://git.openjdk.org/jdk/pull/12801