On Wed, 1 Mar 2023 10:12:41 GMT, Jan Lahoda <jlah...@openjdk.org> 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