{"shas":[["eaf05064c957f501a0384e2f1ef6d33963acfb53","4a85cd989c6c1af99258905a444b3ddb835e7914@improving.org","Allow for the overriding of objects.\n\nVarious and sundry manipulations to allow for objects to be overridden\nwhen the mood is right. It is not enabled by default.\n\nThe major contributor of change turned out to be the decoupling of\nthe FINAL flag (and the \"isFinal\" test which examines only that flag)\nand the many semantics which were attributed to this interpretation\nof finality in different circumstances. Since objects no longer have\nthe FINAL flag automatically applied (only top-level objects and those\nmarked final in source code do) we need apply a more nuanced test.\n\nFortunately there is such a nuanced test: isEffectivelyFinal,\nwhich is always true if the FINAL flag is set but also in various\nother circumstances. In almost every case, you should be testing\n\"isEffectivelyFinal\", not \"isFinal\".\n\nTo enable overridable objects, use:\n\n  -Yoverride-objects\n  -Xexperimental      // includes the above and others\n\nRemain to be done: working out transition logistics. Most likely this\nwould involve bumping the scala signature version, and all objects in\nversions before that would be assumed final.\n\nReview by moors.","Paul Phillips"]],"ref":"refs/heads/override-objects","size":1,"head":"eaf05064c957f501a0384e2f1ef6d33963acfb53","push_id":42108851}