From a8f56c2a5e39f9ba8044bbf3a71797be54906e45 Mon Sep 17 00:00:00 2001
From: Christopher Caldwell <chrisolof@gmail.com>
Date: Thu, 11 Apr 2019 20:56:36 -0600
Subject: [PATCH] Provide consistent entity and field tokens

---
 tests/src/Kernel/FieldTest.php |  4 ++--
 token.tokens.inc               | 19 +++++--------------
 2 files changed, 7 insertions(+), 16 deletions(-)

diff --git a/tests/src/Kernel/FieldTest.php b/tests/src/Kernel/FieldTest.php
index 1d0b2de..7b52483 100644
--- a/tests/src/Kernel/FieldTest.php
+++ b/tests/src/Kernel/FieldTest.php
@@ -441,8 +441,8 @@ class FieldTest extends KernelTestBase {
     $this->assertEquals($token_info['description'], 'Text (plain) field.');
     $this->assertEquals($token_info['module'], 'token');
 
-    // Verify that node entity type doesn't have a uid token.
-    $this->assertNull($tokenService->getTokenInfo('node', 'uid'));
+    // Verify that node entity type has a uid token.
+    $this->assertNotNull($tokenService->getTokenInfo('node', 'uid'));
   }
 
   /*
diff --git a/token.tokens.inc b/token.tokens.inc
index ba15160..1499f2a 100644
--- a/token.tokens.inc
+++ b/token.tokens.inc
@@ -14,7 +14,6 @@ use Drupal\Component\Utility\Crypt;
 use Drupal\Component\Utility\Html;
 use Drupal\Core\TypedData\DataReferenceDefinitionInterface;
 use Drupal\Core\Url;
-use Drupal\field\FieldStorageConfigInterface;
 use Drupal\menu_link_content\MenuLinkContentInterface;
 use Drupal\node\Entity\Node;
 use Drupal\node\Entity\NodeType;
@@ -1380,20 +1379,12 @@ function field_token_info_alter(&$info) {
       continue;
     }
 
-    $fields = \Drupal::service('entity_field.manager')->getFieldStorageDefinitions($entity_type_id);
+    // Get base and storage field definitions for the entity type.
+    // Base field definitions include computed fields, while storage field
+    // definitions include
+    $fields = \Drupal::service('entity_field.manager')->getBaseFieldDefinitions($entity_type_id)
+      + \Drupal::service('entity_field.manager')->getFieldStorageDefinitions($entity_type_id);
     foreach ($fields as $field_name => $field) {
-      /** @var \Drupal\field\FieldStorageConfigInterface $field */
-
-      // Ensure the token implements FieldStorageConfigInterface or is defined
-      // in token module.
-      $provider = '';
-      if (isset($info['types'][$token_type]['module'])) {
-        $provider = $info['types'][$token_type]['module'];
-      }
-      if (!($field instanceof FieldStorageConfigInterface) && $provider != 'token') {
-        continue;
-      }
-
       // If a token already exists for this field, then don't add it.
       if (isset($info['tokens'][$token_type][$field_name])) {
         continue;
-- 
2.17.1

