diff -u b/core/lib/Drupal/Core/Extension/ModuleInstaller.php b/core/lib/Drupal/Core/Extension/ModuleInstaller.php --- b/core/lib/Drupal/Core/Extension/ModuleInstaller.php +++ b/core/lib/Drupal/Core/Extension/ModuleInstaller.php @@ -85,7 +85,7 @@ $this->moduleHandler = $module_handler; $this->kernel = $kernel; $this->entityManager = $entity_manager; - $this->entityQueryFactory = $entity_query; + $this->queryFactory = $entity_query; } /** @@ -494,12 +494,12 @@ * {@inheritdoc} */ public function validateUninstall(array $module_list) { - foreach ($module_list as $module) { + foreach ($module_list as $key => $module) { if (isset($this->uninstallValidated[$module])) { continue; } if ($this->moduleHasContent($module)) { - unset($module_list[$module]); + unset($module_list[$key]); } else { $this->uninstallValidated[] = $module; @@ -520,7 +520,7 @@ protected function moduleHasContent($module) { $entities = $this->entityManager->getDefinitions(); foreach ($entities as $entity_type) { - if ($module == $entity_type->getProvider() && is_subclass_of($entity_type->getClass(), 'Drupal\Core\Entity\ContentEntityInterface')) { + if ($module == $entity_type->getProvider() && is_subclass_of($entity_type->getClass(), 'Drupal\Core\Entity\ContentEntityInterface') && $entity_type->getDataTable()) { $content = $this->queryFactory->get($entity_type->id()) ->accessCheck(FALSE) ->range(0, 1) diff -u b/core/modules/system/src/Form/ModulesUninstallForm.php b/core/modules/system/src/Form/ModulesUninstallForm.php --- b/core/modules/system/src/Form/ModulesUninstallForm.php +++ b/core/modules/system/src/Form/ModulesUninstallForm.php @@ -83,10 +83,9 @@ // Get a list of disabled, installed modules. $modules = system_rebuild_module_data(); - $uninstallable = array_filter($modules, function ($module) use ($modules) { - // @todo use validateUninstall here also. - //$modules = $this->moduleInstaller->validateUninstall($modules); - return empty($modules[$module->getName()]->info['required']) && drupal_get_installed_schema_version($module->getName()) > SCHEMA_UNINSTALLED; + $modules_no_content = $this->moduleInstaller->validateUninstall(array_keys($modules)); + $uninstallable = array_filter($modules, function ($module) use ($modules, $modules_no_content) { + return empty($modules[$module->getName()]->info['required']) && drupal_get_installed_schema_version($module->getName()) > SCHEMA_UNINSTALLED && in_array($module->getName(), $modules_no_content); }); // Include system.admin.inc so we can use the sort callbacks.