PerProjectInfo with almost all fields being public is a big mess. Every
thread can access every non final field at any time without any
consistency checks etc. Let make all non final fields volatile so that
they read at least the latest data, even if only partially consistent.
The object inconsistency may appear because most of the fields are set
in PerProjectInfo.setClasspath() in a non-atomic way, so readers who
don't lock on PerProjectInfo may observe partially updated
PerProjectInfo object.
Ideally all the fields should be made private and accessed from
dedicated synchronized methods on PerProjectInfo.
See https://github.com/eclipse-jdt/eclipse.jdt.core/pull/2753#issuecomment-2269557239