The TMGMT tests are broken afterbecause empty configuration is loaded as a config entity and then the field config system fatals:
Fatal error: Class name must be a valid object or a string in /usr/local/var/www/d8/www/core/lib/Drupal/Core/Field/FieldConfigStorageBase.php on line 31
The problem is that a ConfigFactory::get() implicitly creates new object and puts them in the static cache. And then when you call getMultiple() for the same object, it returns that and then everything explodes.
We had this for months if not years and so far didn't notice it because we usually don't mix single load and multiple load. We use the first for simple config and the second for config entities in almost all cases. But NodeTypeConfigMapper now breaks that by calling directly into the config factory for a config entity to see if it exists. I'm now sure why it does that, honestly, probably to access the config name?
Either way, this is definitely a wrong behavior and it's a bad one. Raising to major and moving to configuration system.
Luckily, the fix is easy. Just not sure which of the following approaches we should pick:
a) *not* store new objects in the static cache. Downside is that accessing the same non-existing object would be slower since we'd re-create it every time.
b) in doLoadMultiple(), check if object stored in the static cache is not new and only use it then. This needs a bit more work in doGet() or we still don't re-use it.
c) let callers deal with this. Not really an option IMHO but here it is, for completeness.
Attached are patches for both a) and b). I think I prefer a, I don't think we should store them in the static cache. Working on tests now.
User interface changes
Why this should be an RC target
Without out this patch ConfigFactory::loadMultiple() can return configuration that does not exist. This is a severe and unexpected bug.