Mojom compiler: Eliminate duplicate representation of enum values in mojom_types.mojom.

This cl addresses the problem that in mojom_files.mojom, the full definition of an enum value
(including for example the whole DeclarationData) occurred twice: It occurred once in the value
registry (i.e. the |resolved_values| map) and once within the owning MojomEnum strcut that lived
in the type registry (i.e. the |resolved_types| map.)

In order to address this I considered two possible strategies:
(a) Replace the field "array<EnumValue> values" within MojomEnum with a new field
"array<string> value_keys;"

or

(b) Take the enum values out of the value registry. Instead of a value registry we have only a constant registry.
References to enum values are now references to the owning EnumType plus an index into the list of values within the enum.

I first tried (a) In a different patch but I didn't like it (for reasons I will elaborate below*). In this patch strategy (b)
is used.

Summary of changes:

- In mojom_files.mojom in the struct MojomFileGraph replace the field "map<string, UserDefinedValue> resolved_values;"
with the field "map<string, DeclaredConstant> resolved_constants;" (I also fixed up some comments.)

- In mojom_types.mojom we made three changes:
  (i) We deleted |UserDefinedValue|. This was meant as a "super-type" to EnumValue and DeclaredConstant.
      We no longer need this abstraction.
  (ii) In struct UserValueReference (which represents a reference to a value) we replaced the field
       string? value_key; with three fields:
              - string? constant_key;
              - string? enum_type_key;
              - uint32 enum_value_index;
       If the UserValueReference is a reference to a constant then |constant_key| is populated. If the
       UserValueReference is a reference to an enum value then the |enum_type_key| and |enum_value_index|
       are populated. The idea is that for enun values instead of referring to them via a key to a value registry
       we refer to them via a key to the enum in the type registry and an index into the list of enum values.
  (iii) In struct EnumValue we deleted the field |enum_type_key|. Previously it was possible to access an enum
       value indirectly via its value key and so it was useful to be able to get the key to the containing enum.
       In the new scheme an enum value is always accessed via its enum and so this extra data is not useful.

- In serialization.go we modified the serialization logic based on these changes.
- In mojom_translatory.py we modified the translation logic based on these changes.
- All the other files are tests or generated files.

*Why did I end up not liking strategy (a)? If you think only about the use of mojom_files.mojom and mojom_types.mojom in the context
of the Mojom compiler then strategy (a) sounds good, which is why I initially pursued it. But I soon realized it is not great for
the runtime type querying use case. In this use case mojom_files.mojom is not used, only mojom_types.mojom along with service_describer.mojom.
Runtime type querying currently has no notion of a value registry, and it does not deal with constants at all--constants don't seem to be
useful at runtime. (At least I am not aware of a use for them at this time.) If I had taken the enum values out of the enum then for the
runtime type querying use case I would have added a registry of only enum values. It seemed more natural to just leave the enum values
within their enum. Strategy (b) also makes this CL shorter (believe it or not) because I don't have to make any changes to any runtime type querying code.

BUG=fixes #513
R=azani@chromium.org

Review URL: https://codereview.chromium.org/1958463003 .
diff --git a/mojo/dart/packages/_mojo_for_test_only/lib/dart_to_cpp/dart_to_cpp.mojom.dart b/mojo/dart/packages/_mojo_for_test_only/lib/dart_to_cpp/dart_to_cpp.mojom.dart
index 9c95b41..d6c650f 100644
--- a/mojo/dart/packages/_mojo_for_test_only/lib/dart_to_cpp/dart_to_cpp.mojom.dart
+++ b/mojo/dart/packages/_mojo_for_test_only/lib/dart_to_cpp/dart_to_cpp.mojom.dart
@@ -1371,7 +1371,7 @@
   // serializedRuntimeTypeInfo contains the bytes of the Mojo serialization of
   // a mojom_types.RuntimeTypeInfo struct describing the Mojom types in this
   // file. The string contains the base64 encoding of the gzip-compressed bytes.
-  var serializedRuntimeTypeInfo = "H4sIAAAJbogC/9yaPWzbRhTHSUqyJVmy5a9EbdNUBRLULWrT+UAgdFKRunDRDEYTFPGkMNJFYiGRKkkVaaeMHTtmzNgxY8eOGTtmTLeMWQJkc++qR/l8vjudCIU6iMDD6cxLeO/H/717d8eqMboqUO5Dyf49LvNMybZ7CeUOtiy2GtQbUD6A8gmUV7Bdwnbv+Oig+f3B8VdtJ4iakd9sDQZ7tweDu24bkXZXsX0savcN/g0Npe0OWl3/66AT4vufY/t0Urs7bhhBPw/BH+JnBlud8pvUX66c1k1szy6ere/snnIxKC7jyzxbbTC34/cSP/cErkODf61hW8YWI/wI/97EJsB77j0SjkVsDrZjbPYwDOye33J6dsf3Oz1kd/0+sn8LHLvv/+TbYdAa/SAPsIeeG0UojEIb9R+idhsFTVJFgU0/n7TvC3RUo/5OuNd/vJM7efU2Z/z7NmdiY/V1aI3KQXZUPl3i837DcCL/r4w3225fwHsdWwHb3Qg7eA+NdcP69Rk2K0WuNaYfb5hykt+xzuoCvz8A38d+7wbo56HY//hKy/+8cXYcsnHLYNpN0sv/GlThhtuZEr1sYSuR+IO7/63ruWEXtXm8vlgwvVwC32m/acksml5IvFLlZino5cj1Oj+gcOB7IeLx2l1QvdB+L7JezCn0klHQC0llZHrZ00QvA2u2eqH91kkvrE4aTF5H7hMBvDPULhVetO7YqwR5VM/l89kDpmnrwxDkg7Su6RR92nxeNl5N6rlp5esV6Eu8lIl1LFjmnHtP1zTJ17dgPRQjsqj7GerfPYdGL3KK8+iUep+Yp6Pods9FnihPva5JXHxgzThPj/3WLE/XLS7G6+cWrJF5+tjSIC5WBet91X2VpHHwtSAcqnA3FeYjku/xdHljzuPyNVOqjkuVvH6R8lpWH9YUvCwFfZApncfppib6eJyZrT6Ivzrpowqcx/O/KY7bBsTuWcZtEa9tbGVs3rD/He6/E7l4BSDQSTlFXtPOZ/kEXGRxdQXyLyfoGKJxc1Wj+SzOh+PUXXVfXxavLKrOjtt4Aru/Pdt8Pu4aL5+nun3ufRRgPk/rfTzFtoHtj7gOPJ5B4P4T4tlz2F//Cwb037DP/mJ5VP4D4F8VII8tUoGb+FcG/qvAdQ3278Hx39fheRvyeLKU8vo4dG/d5L2nIrznecYRWXyddRw55XHjOo/HiiY8spL+T8vDUuJx7RaPR0kTHhlB/1cT8MgozDOhW+fOM+WU45qIR1ESt6flkVXQx1AQP1Yh1s+bR0HQ/2oCHjklHvz4saYJj7xkf3laHktKPPjxo6IJj2XJPsm0PJYV4sdQED/WNYmnlqD/tQQ88gr7lY96vhM1f3F6gv26Dc25XEnApaDMxfUeCbhsas5lJwGXojIXz/EEXLY04WIK/NhPwGVFwmUD5vy2P3zYQ6cDieWyrUm8FXGpJ+BSUucyHkgslwuac2kk4FJW5zIeSCyXixpwMSX7SIcJuKwq5Cue0+eeQ1ZTPoesCM4faD6WRDhHCfisKXx3EUaB63WaThA4v/I4xedxae+3meADu08mWvfQHLMSjl8m4FiRcLwAa6M+CkOng5pdx2v30HmOHwLbeejNTMDpfgJO6xJOm5Azt53IGUPi6I18/3t5TpysCfuyJNZ2BfuyeeD4bsJ5SoPZlz1SOE+hPwmpwTNFn42wPC+nvI/Bnrc8MfX6fshDj7nnUp/A73nEuff5/dC8z3Ni7m6E+qLvcUoacE/rPOe/AAAA//9qGb5tyDIAAA==";
+  var serializedRuntimeTypeInfo = "H4sIAAAJbogC/9yaz2/bNhTHJdlObMdOnMTNvK3rPKDFsmKN0x8ojJ08dBkyrBiMtSjak6vGrK3Blj1JHrJbjjvu2D9lf8L+hByz2467FNitJdtHh6VJmRIs0YmAB1oxY/H74ePT45NqxvujAu0+tPzfaZvnWr7fKbS72LLY6nDegvY5tCfQXsd2FdvjZ+2Dzo8Hz77p2l7QCUado/F478F4/MjpItLvBrbPZP2+w5+hY2i/g6P+6Fuv5+Pvv8L2xbx+Dx0/gHEegh6iM4Otyeh+d752fm4SnTsfnv9185yLwXChx3/ceYs7p/NCr/sGjkNDfGxgW8VGEX6KP29jk+CdmUfCsYjtCbafsDX6oyFqeJPuaOi4yGsMR7+MGr539P4D+dXGxHWCAPmB30DDF6jbRV6HnOLO7EVJ/+Hs9eqMPxHOzScPc2/OXueMf17nTGy8P+1awCULXFbEfM84LuR3w/jy/fYlfDexFbA9CrC2x2jqJ7yuL7FZCXKsc9c949p5OqkfNSU6PwatU523PPTrRK6XHknpzRsfris+DhlcfJrnD+98TIUT7meG+EMVW4nEEzzy7x3X8fuoK+Jz84L7w1XQyupkXeKi+wOJN6qcLAV/aDtu72fkj0euj0R8bl0Sf2B1XiZ/MCP4Q0bBH0hqEeYPe5r8oW0t1h9YnTr9gfeDFpdHke/JBP9rqB0qfFi/4o8S5DEDR8xjDxgmPf+GJP9i/ZRNgaPmy2Hrz2Sum1Y+XIGx0K0C9VPJNmJmXm5ryoersL+g3Czm+wwzzhPodJxTvM9F9Oe5eTAKHgwc5Mrywjua4lrLWnAeTHVqzoOXLa7R/eYR7ClF81/VENdqkv2wat0hbhw75fOICJxNhfsHybdEfnc35XV2yrWq60wlb77IeSQ//1YEPpbC/JNbrojLPU3zf5hZ7PwTfTrnvwYcp/VPUx5nDYi1i4yzMj5XsJWxuZPhD3joduDgDFviB+UE+US93+RjcAiLg2uQ/9hez5Ctgxsa7zc036SpsWpdOizeWMw5vw5pvrxbXWy+TIcmypeZYc/wL8D9Nin+r/BvbmH7E673B6zPEwi0xxCPxlAf7sMCfQ514qersO8F0O0CtEVooZ7fLkFbhnYd/n8DrguCX22Gx4eVlPeXvnP/nmheijCvacaFsPi46Lhwrv/uHZH+NU36syHjjarfUtJ/+75If0mT/oxkvOsx9GcU7gu+0xTeF8oJxyWZ/mJInI2qP6sw/xPJ+l+H2Jy2/oJkvLUY+nNK+sXrf0OT/nxIvTSq/hUl/eL1X9GkfzWkbhBV/6rC+p9I1v+mpvhnScZbj6E/r1CPezkY2UHnN3sgqU9tLRmH6zE4FJQ5OO5LCYftJeOwG4NDUZmDa7sSDlVNHEzJuPdjcFgL4bAF9+DuaPJigM4XBs/hiqb4KOPQjMGhpM5hujB4DjtLxqEVg0NZncN0YfAcPtLAwQypoxzG4LCukC+49lD43KuW8HOviqQ+zvKwBM8D6dGOwWND4Tm9H3iO2+vYnmf/LuJCnwclXV8yYcx8XUi2b2C5ZUO4fR2DWyWE2w7sLYbI9+0e6vRttztAs9w+AZZp+JMZg8vTGFw2Q7hsQ07atQN7CkXgT+T9zGspcbHm1BlJbOxL6oz/Q/v3nHp/i6szthXq/ewrBHW4puw1A57ftYT39fzzgLG5XO+TuOhY+Jzkc/icRpxK8n0S3c8bKGcnQEMR5zr0SZtzWs8b3gYAAP//ZmL1wygwAAA=";
 
   // Deserialize RuntimeTypeInfo
   var bytes = BASE64.decode(serializedRuntimeTypeInfo);
diff --git a/mojo/dart/packages/_mojo_for_test_only/lib/imported/sample_import.mojom.dart b/mojo/dart/packages/_mojo_for_test_only/lib/imported/sample_import.mojom.dart
index d9896c5..0c962c5 100644
--- a/mojo/dart/packages/_mojo_for_test_only/lib/imported/sample_import.mojom.dart
+++ b/mojo/dart/packages/_mojo_for_test_only/lib/imported/sample_import.mojom.dart
@@ -562,7 +562,7 @@
   // serializedRuntimeTypeInfo contains the bytes of the Mojo serialization of
   // a mojom_types.RuntimeTypeInfo struct describing the Mojom types in this
   // file. The string contains the base64 encoding of the gzip-compressed bytes.
-  var serializedRuntimeTypeInfo = "H4sIAAAJbogC/9SYzW7TThDA18m/f9I2LQH6kX4AKRQwIGKOEadWJSIRFYraHNoDatPUNEZJbGxXKjxBH4Mjj8EjcOTII/TYG6zr2dge76Y2pMasNFrbu7Znfjv7MVMkbilA/Rxq/JzVOVTjfkTyvjNGRYbHNagNqE+h/gz1Qyp3qDR3G9W919XdF1rP0E1bPSyv93W7o5rbnZahEvKU9rnP7VeHi3rfVs13rbZ68d27VOa5/Ru61reHtLs/fEzbVrjtu6odVO2i7IDdBWS3c5917B/z7h1U57kgv0Y+eP/t5nDOayRY2Pix5z+hNAi/zFBxfolNuU1llopgGEL63AK7nba3VJRjy1S6ervVVY50/airKh29pyqfzJbS09/rimW23Qvj+KCrtRWNjZqlHGj9Q61/ZCm2atmWYrV6RlfdcxUpO+/06PdLwJPpcQI8vmaCHJj/laSgvhW4nyDxOO4ION6gMk5lq7rRXH/zarMKzx+BD3I5lr3emKczLpkEeUadf8yPJwifc1Hi85m8hHMlor9OU/mfykZ9a8OBvEqvl4V8Wa+wv86mlG9UnvkR8SzAWt7cql84ItOTz5P1CvOcSynPwfxHdmOuIo41xHFfwHEB1gD+LkTIPSqLfq6CjpjrKsy1pLji/xd9/iYhv5F85wDM+UzAScSZ+DjznhPfPuOsJS/1bWq33aEGcbk9SNgfS4jXGaqj2O2UisDuJbDdZ/czU/1wTFXinw+gJGV/TuAXRaRPDvkJaz9nfpSNt66tCXhNwXnEPeW569O0f/5BA+bm7NXXEp5vGf98Q+e6CtJvjEQrUeeZLHh/HMbxRHDOL8FYJsUpLo//foOHFIHHRwGPlYR5DJtnGc76XYi4HsWdXyweCM0vaMD/n0w4TpDBF9h6Y8D8+gJxwo/s8HMs01uWAmHXH8ddonihBGMW5OgFCphnPuF97rJ4mcUHkiA+KAjOs5mYflmLGB+E4lgUGGCeUynjGZVfdkT8cDzA9EP8BoEA5jf9j/Bj6yfLC4yKXx7Wm8317ab/3Ib4seYQv+sp4yeKB7CfyLB2Cb4zcJirymPNAzuclQutp6gD1mfhL+exToHHd0EeS0b7Uk3y8kVxOO7H3JeeQAwr4lhGL2Cuiwn7ddy8Ldu3ZmLmtWavKK8Vyhti3tARc15KOWdRXhaXuZhcdyLuZ0xfIVcvxcX14+WU8/0VAAD//41PNDrQGQAA";
+  var serializedRuntimeTypeInfo = "H4sIAAAJbogC/8yYzW7TQBCA10kLKU2LEf1vARcKBBBxjxWnViUiERWK2hxSLv2LIUb1D7YjwRvwGDwKj9Mjx95gHc9ie7yb2ChxutJoY+84u/PtzHi8KyRoMvTb0OP7rC+hHusRKfyfaSoVuF2H3ob+B/Q/oX9G5SGV1nGzdvK+dvxGN2zL8bROdc+0vK7mHHXPbI2QV1TnCVevAT8apqc5n84utP7/PqKyzNVvWrrpDRgPJnxBxza548eaF19av7XBbhnZ7V8XqfyaCq99VNulOD97Nn5ducfnfA39Lom3bXT/D7Qm4bcFKmUq2JQHVBapCLYhsZ77YPdHKodU1K5laKrT61iGbmqOalhfLNV1LoIfdu/8Ur9QdbZVrnqumx3d/OyqnuZ6ruqeGfaldhLMXvWfMYJ5FODI5t8Ff2sWgBcJ9WJ+C3p3MnJrC7j52zLj21rbb+19eHdQg/vPwee43KqhNubn70MhB37MDxkHzAu32SG8dlL62TyVW1T2G4f7Pqwt+ntDyIlpJf1sMSdOw7iUR8RFhlzaOmz0HYPlQT4XppXksjRhLrIUvxZxqSMupwIuqxBj/KxOyGMqa1FOAkXMaQt8f9yc8LwrEb+R0P5Lkfcp5nsl4CPiSyJ8efdJJF/7sf3WOqIAvC61ibvupzn5lYI4XaE+jb1+2xHYuw42R+x97Whfe3RV/DoG2rjtLgn8YAWto0T4nH6z54vZ8tGugNMcvMeD6ijIK/PROIMBzMt/593OKa4K0bpUitu9g9Y1TdK1tPFUETw/A/v3TVAXK7CH4+aTlcPUf3CQUnD4LuCwmROHQfFU4ORlOWW+yRpHrF5OxBEM4Plnc6qjK7D3Cqqj61BHN4uD62n2EpNG9B0iqqcV2KM4t7CQxvzKOdfRUso6upDRr+op6+jEdxoqoDGfuRtSPxdHxAPXz+x7HvH4VzhjHvMT4iHDvNcj5lGGuD7YO2pF6x7Egw0neNydUL2noDgR7avonGZc5yPLwASf9iTyElLA61md0PlIHRJUe8j5CKujFjJyO82Yz1/Ct5uIWxU9gDmu5ZzfF1Lm98UxnZMkzpMwL1DEnNZvSJ5fysilnTLPs3NZIZfwqITrRxs58fkbAAD//3QI2/tgFwAA";
 
   // Deserialize RuntimeTypeInfo
   var bytes = BASE64.decode(serializedRuntimeTypeInfo);
diff --git a/mojo/dart/packages/_mojo_for_test_only/lib/imported/sample_import2.mojom.dart b/mojo/dart/packages/_mojo_for_test_only/lib/imported/sample_import2.mojom.dart
index 9f6547a..cb39b5d 100644
--- a/mojo/dart/packages/_mojo_for_test_only/lib/imported/sample_import2.mojom.dart
+++ b/mojo/dart/packages/_mojo_for_test_only/lib/imported/sample_import2.mojom.dart
@@ -288,7 +288,7 @@
   // serializedRuntimeTypeInfo contains the bytes of the Mojo serialization of
   // a mojom_types.RuntimeTypeInfo struct describing the Mojom types in this
   // file. The string contains the base64 encoding of the gzip-compressed bytes.
-  var serializedRuntimeTypeInfo = "H4sIAAAJbogC/8yXzW7TQBCA101DgoASaKGh/IUDUrlkEaeIU0uIiNQKVTSXXqhSx42N7GxkuwL1CXgcHq1HbjDuzkbO2Gu7Uep2pdHU2fV655vZmWmTydFA/R41/V3pOtF03W/ULZBKbF7t20f9GmQTZHB00Dve6x19dLyp8ENr1O4KV/jsFcw9TZ0/dM6trPcHtjMZsw5+X51rO3ZOA+RPZf65Xku35wL1Dpsfyp4O6n846Do1HoBUQaR10rY1EGJ24vvqvVOQ7yD8LPC5K8yhy8dCjF2L28Kz+Lk/5J74IXjgm/KP6dmJ65jcmYSWfzo0rYCfOJMRoAl4aAVhwIOhN3WtY3mAD+3oJU9+fyX2/b4xb++Mo8EyR1Fefc3799B/33qfL5+3QB4neLXVdILbGtpRFre8eC7Kz1gSPxU3n/Z3u3ugX4BsJPmp6QS/h7eMX4vkm7+KZ2U59/M+yCqIzC6MPUGGJO0kOEUxWbvB+9k05u3vkPNVWbGh48di/OLxq4u3n84otFM4rWPNKIvTVXmsLsDDyOAR5Z87ILbljO0wyWOjZB6zOkfuESPxpLtnv2rLrYOySqfUQZygvDZLvmfbGBOKxwXeM9U31Kv6e1eNcVPn3zGu994F9nCalp+i50clcmuR89G4Svj7UB5cn//lAl380v0jW+9e9g3dwe7XL/s9/P0dyBv9/m26vqhfO8b15A/lVxP7RWrvs5Lzh86vTU1/m1fPi/pzHXtB0q6wtyAv9fvPVub5kY76An5cyfBjA/eMXBM6YkLt3LqlfjwQsHOmH+WKq/JtLMC3ksFX9W0B9m2U7/OS60YeX9pn5v2fm1W34/XpfwAAAP//Xi3pisgPAAA=";
+  var serializedRuntimeTypeInfo = "H4sIAAAJbogC/8yXzW7TQBCA101CgwolQKGhIMixp7jiFHGihIhIrVBFcqk4VKmz1Itib2S7QuIJ+gg8HsceeQNYZ2fAGXvtNEpMVxpNnbV3d77Z+WmT6dEAfQCa/o66TjR97wp0S0klMY/r9kG/UrKrZHh60js76p2+Ed5UBhEft7tyIgP2Us09zZwfiO887/uhK/wL1oH98Vz7iXNa8Tkq889Xd7LtuQb9ls0PtKcD+jcM+h6O+0pqSrR12rZtJcTs1P743WclAyW2Kz1uB5dj6QmfB7Ynv0o7DBz9x/TyfCIcW/gRD76MHB7a58IfKx6hHfEwCu1w5E0n/Ezv+rodf+T9tXsjsW/TmufWYvljUT59w/db4K9Pvfez5z0lj1J82jid4rQN5183pyIe1op4oN/fHR92j5R+oWQnzQOnUzwelMSjRfLALzxHZTVxc09JNbZhFvWMPQE2JB2k7I/vzuZ/iJuGNW93h5yrxhYbJm4swS15H03355sYR24Gn8eQw9fN56YcqktwsHI4xHkhTu0uFxdulOawUxIHrDO0bjJyf0zx1N9cbR3SVTKjDsEE5bRbUjztwx1ADj8hnn5APrmumuOrlsw/OG+tN75CdzTNyj/x88MS8y8j++PvKf8O9IHN/ZN+oQH3sm64l5RLbOvdWf3uDg8/fjjuFfZ5ep9F/XhgrSc/oB8d6MuoH5+VlB9Mfmwa+sei/nlR/1mJerCF6/9rKwr3KfIfHfUl/LeR478GrDmRzigS0qf+27tl/juRavFcrvqNm3JtLMG1ksMV+64Q+i7K9XlJ9aCIK+0Pi/5vzKvDybrzJwAA//8GIg9dGA8AAA==";
 
   // Deserialize RuntimeTypeInfo
   var bytes = BASE64.decode(serializedRuntimeTypeInfo);
diff --git a/mojo/dart/packages/_mojo_for_test_only/lib/math/math_calculator.mojom.dart b/mojo/dart/packages/_mojo_for_test_only/lib/math/math_calculator.mojom.dart
index 3de2bb2..9546dd4 100644
--- a/mojo/dart/packages/_mojo_for_test_only/lib/math/math_calculator.mojom.dart
+++ b/mojo/dart/packages/_mojo_for_test_only/lib/math/math_calculator.mojom.dart
@@ -810,7 +810,7 @@
   // serializedRuntimeTypeInfo contains the bytes of the Mojo serialization of
   // a mojom_types.RuntimeTypeInfo struct describing the Mojom types in this
   // file. The string contains the base64 encoding of the gzip-compressed bytes.
-  var serializedRuntimeTypeInfo = "H4sIAAAJbogC/+xXTY/TMBBtU5CyLR/lc8OtEpdeWO9xxWkRWgkJIXHgsqfKm5pskBOHOEGCX8uxR/4BOGTcOtOYflDasMpIo2kcW5n3+ual9TplDKGeQsXrurqo4n1nxnXX2DeCvR8u319M3l5cvoxodn3ymnI/5zQTqQf7i3M949zYOF+JbvXyHN0+Res/Id506uOhyr7KRUfl+rHK+ypRu0u4XTgfqJyoJLlMCRc+5SQQIuCMXIuIkW8pJZH4JIhM/fJDkl/x0CdhnLH0I/WZJFdhPA3jQJKMyUyS4skTf/7kk+JUtPR8zc9j4E9T5Bj3e8b3ldwq6/ejep5nGpezHs84xpb1uypvFzxzRtMa/RxBz/vicYR0PEN1FV6tKxsPTwDzb7wvUvY5V83U4NaxL9yuZU491I+LdIF50gL7W56eqrxn8CQTEUt2eJ4wP+c1PldjR9bY1fx8oTxnlvk5PiA/HrLoYefP/jLqVflbxU8X0sbPAHzu1XRa+37qN8RfdjU3jwCzwmu4Szs3m85NH97zTZubf62f4vfCnbl+tOu2+tlGP8//Q9911uTHgbTxM4Re3uU8CxP+FfMzuGG+6wE2jVebbzs3m83NADyo6b77A/0fWlc/ZxZenql8UNXPwnxb/91KR+MG6uhXAAAA//+Vb42mYBEAAA==";
+  var serializedRuntimeTypeInfo = "H4sIAAAJbogC/+xXTWvyQBA2+r4Q9f3w/WhNb0IvXup6lJ4sRSiUgodehILEZFtT8mHzUeg/6c/z2GOPvbWbZlbXaRYjKNqSgWGa7Q6Z5+GZJ6gVkqhBbUPF57yqqOJ7HeFZEe414O7loN8bnvcGx44ejlunum1Eth56vgb3476S0NcU+sV4Qc9d9NxG568QZ4X0+MuywnI+UXJeZ/mbJRr3A24V+q9ijCzJ2HMo8SPTcyyX+sTxbj0S+EbyxyQa2ZZBLDek/rVu0ICMLNe03JuAhDQIAxK/bmjMXteKu5w0vjkv/4G3AvBYFP5fEvr635L6WE7nd8r5VbLxi6MpOf/J8nvMr011PwVHGWbeNH8NpNspqstwch3J8O8B1necRz69i9g8KXh5bBqvKtlHDc2hIh1gfp6V9fCzz/KXwE8w8dyAbo8fzEs3xcf4TmWJde3JvW5HVLIn9S3wIupFEeaR+YdaWuRtGS8KpIyXKvjYiWmmfncqW/aPde3HP8DKcAruke9H1v2owPd6V/Zj03qJv/s/ZnrhbprrZRW9HH4iPy1m5KUIKeOlBrNcRHZoTewHzEv1i/ipBpg4Tm6q+X5k248qeMyu+ukT+r2SVS8dCR8HLP8s6mVuqrmvrqSb5g7p5i0AAP//5ns7IOgQAAA=";
 
   // Deserialize RuntimeTypeInfo
   var bytes = BASE64.decode(serializedRuntimeTypeInfo);
diff --git a/mojo/dart/packages/_mojo_for_test_only/lib/mojo/examples/echo.mojom.dart b/mojo/dart/packages/_mojo_for_test_only/lib/mojo/examples/echo.mojom.dart
index 5874496..6689a76 100644
--- a/mojo/dart/packages/_mojo_for_test_only/lib/mojo/examples/echo.mojom.dart
+++ b/mojo/dart/packages/_mojo_for_test_only/lib/mojo/examples/echo.mojom.dart
@@ -426,7 +426,7 @@
   // serializedRuntimeTypeInfo contains the bytes of the Mojo serialization of
   // a mojom_types.RuntimeTypeInfo struct describing the Mojom types in this
   // file. The string contains the base64 encoding of the gzip-compressed bytes.
-  var serializedRuntimeTypeInfo = "H4sIAAAJbogC/5JggAABKN0BpdHFLZD4jEDMAeXLALEIEOfmZ+VbWaVWJOYW5KQWW1m5JmfkY1OvDMTSQBwSGeAa7+0aaQXSqAfTpwfThmG/Aw77STGPEaqfGUm/BpRWgNIBjBA6A0ozoNkPC4cZUHoBlP4PBRsYsAN0dytgCWd2JHFhIOYG4uDUorLM5FS/xNxUosKbB4hZgBjGlwJiIah6LMGCEc6cQMwFxC5AbAPE+qXFRfo5+cmJOfrp+fnpOan6Gfm5qfpVRYn6ICP1i4uS9WHG6qcCjQUTeiC5XGLci24/jM8DDS9c4Ycebxeg9AMm7PEGAwZofFCcYROHASFoeIDcG1xSlJmXjj3cQGqYqBhu6OkD5r8bjMT7CwQscPgLli4Q/tItSi0sTS0uwe4/GKCW/9Dj0wFHOXODgThAbDxr4NDPC8SsQFyWmFOaiiN+RansfwakNI4eHhJIbmNEUk/rdCENLXtQ0kVxQX5ecepousCRLjQGQboABAAA///YBJ9/yAcAAA==";
+  var serializedRuntimeTypeInfo = "H4sIAAAJbogC/5JggAABKN0BpdHFLZD4jEDMAeXLALEIEOfmZ+VbWaVWJOYW5KQWW1m5JmfkY1OvDMTSQBwSGeAa7+0aaQXSqAfTpwfThmG/Aw77STGPEaqfGUm/BpRWgNIejBA6AUozoNkPC4cZUHoBlP4PBRsYsAN0dytgCWd2JHFhIOYG4uDUorLM5FS/xNxUosKbB4hZgBjGlwJiIah6LMGCEc6cQMwFxJZAbAjE+hn5uan6RaUp+bmZealF+iBz9IuLkvVhZumnAs0CE3oguVwi0wW6vTA+DzSccIUbenydgNFM2OMLBgzQ+KC4wiYOA0LQcAC5N7ikKDMvHXt4gdQwUSG80NMD3F+MxPsHBCxw+AeWDhD+0S1KLSxNLS7B7i8YoNRf6PHngKM8ucBAHCA2XjVw6OcFYlYgLkvMKU3FEZ+iVPI3A1JaRg8HCSQ3MSKpp3U6kIaWLSjpoLggP684dTQdoKUDjQFMB4AAAAD//1YHjLGYBwAA";
 
   // Deserialize RuntimeTypeInfo
   var bytes = BASE64.decode(serializedRuntimeTypeInfo);
diff --git a/mojo/dart/packages/_mojo_for_test_only/lib/mojo/test/rect.mojom.dart b/mojo/dart/packages/_mojo_for_test_only/lib/mojo/test/rect.mojom.dart
index d432bee..a6111e7 100644
--- a/mojo/dart/packages/_mojo_for_test_only/lib/mojo/test/rect.mojom.dart
+++ b/mojo/dart/packages/_mojo_for_test_only/lib/mojo/test/rect.mojom.dart
@@ -139,7 +139,7 @@
   // serializedRuntimeTypeInfo contains the bytes of the Mojo serialization of
   // a mojom_types.RuntimeTypeInfo struct describing the Mojom types in this
   // file. The string contains the base64 encoding of the gzip-compressed bytes.
-  var serializedRuntimeTypeInfo = "H4sIAAAJbogC/5JggAABKG0ApdHFYTQHGo2uzgKJz4ikTh6IxYE4JDLANd7bNdIqNz8rX68ktbhELyg1uQRsDiMWfQpo9nyAuZMVQjswoAIDNHf8hwJ0dTDAA8QsQAx2BBCIATEfEKM5D8OfIPexA3EMyE9ArF9aXKSfk5+cmKOfnp+fnpOqn5Gfm6pfVZSoDzJKv7goGcIoKE3KyUzWz8wrSS1KS0xOLdZPysxLycxLL9YHWVesXwS0Tw+kNBdkjwbUfbBwUGCE0kxQmhk1HCzQ3MnKQBzAFY4MSOEIcw82wAmNtwoc6YITGma0Di9Sw4GFjHBgJCIcKnGEA9cgDQcOMsKBCU848ELtKs9MKcnAEg7cgzQceMgIB2Y84QAqS9iAOCM1Mz0DSznCQ6dwQC9XJdDyAIwPCAAA//9Y6fq5EAYAAA==";
+  var serializedRuntimeTypeInfo = "H4sIAAAJbogC/5JggAABKG0ApdHFYTQHGo2uzgKJz4ikTh6IxYE4JDLANd7bNdIqNz8rX68ktbhELyg1uQRsDiMWfQpo9ryA2c8KoR0YUIEBmjv+QwG6OhjgAWIWIAY7AgjEgJgPiNGch+FPkPvYgTgQiD2BWD8jPzdVv6g0JT83My+1SB+kX7+4KBnCKChNyslM1s/MK0ktSktMTi3WT8rMS8nMSy/WB9lRrF8EtEQPpDQXar4G1F1w/zNC7WeC2s+M6n8LNPexMhAHcIUfA1L4wdyDDXBC46sCR3rghIYVrcKJVP+zkOF/RiL8X4nD/1yDzP8cZPifCY//eaF2lWemlGRg8T/3IPM/Dxn+Z8bjf1BZwQbEGamZ6RlYygkeGvsfvbyUQEvrMD4gAAD///PaA+DoBQAA";
 
   // Deserialize RuntimeTypeInfo
   var bytes = BASE64.decode(serializedRuntimeTypeInfo);
diff --git a/mojo/dart/packages/_mojo_for_test_only/lib/mojo/test/serialization_test_structs.mojom.dart b/mojo/dart/packages/_mojo_for_test_only/lib/mojo/test/serialization_test_structs.mojom.dart
index 8ece68d..c6c0948 100644
--- a/mojo/dart/packages/_mojo_for_test_only/lib/mojo/test/serialization_test_structs.mojom.dart
+++ b/mojo/dart/packages/_mojo_for_test_only/lib/mojo/test/serialization_test_structs.mojom.dart
@@ -588,7 +588,7 @@
   // serializedRuntimeTypeInfo contains the bytes of the Mojo serialization of
   // a mojom_types.RuntimeTypeInfo struct describing the Mojom types in this
   // file. The string contains the base64 encoding of the gzip-compressed bytes.
-  var serializedRuntimeTypeInfo = "H4sIAAAJbogC/+yYzW7TQBDH7ZQobmlFkEBK+ZBCy6EHlKX5UsQpl0qRkAAJDvQUNo6bbLWJK68joT4FRx6DI4/AkSOPwCNwg108hvWyG5mExA4w0mi8ztgZ/+eX3XUqVmRliA8hqufj6ChRzRvbUexyL3HvwPmXEF9DfAvxPcRPEL9APOB+i/uL02cn/ccnp48m/rlfCz0W1p6HwcwNj1Pm1VPmNVLmNVPmtVLmtaO8B9zvz8t7evZkRikeUI/FOpZAdyH5WOqDGH8sJMe9YnLsOMnx553k+MNectyFBlfVvkO/O4WffZct5inm4CtYz9LbNXiuuMn7/Pg6d0P7f+HPgesD7ufc0YwFiPoupmjk+yPqobE/8dBlgJG4JWKBGx1czAaUuIhMQy84w67H0IBMh2Q6Ykh8LUPMCwim5BKHxJ/2xbk++14Kq4kbTBR9raQeHaXOkpXOTHpakp4iHhmu34Z6iEGvbag1L3pVpNptqU4Td72VcFc3clc36Li7AdxdEZ/b6+HuKvctMS8NqVavPWAvS71kW5bDNyvhsGHksDFnnc47h8U1cliGWqJS+8eqXkLbnQz1qmrqlfuqrodp90XL8vxuJTw3jTw3DTzf2ACeC2vkeRfm8SEOsU6vm6BvHngWz/Lj9279i7y3jLy3DLxX/vOu5f0Ck0Cn1z7MEXngvSCvbznnfTX75raR97aB9zsbwLudwb6Zl6rV6+5fsm8+Aj0rxfm69RQOXxl0i7nT/lnC7ZD7bQ2XaqaqdzVjPqvAQ1xX17Be5fU9717G++uyxOIi7yPOAnrZS7yPHICmWa9n9h9er353Xi0voHthiXn1MGeczptXt6Q+fQsAAP//9zy6HcAXAAA=";
+  var serializedRuntimeTypeInfo = "H4sIAAAJbogC/+yYzW7TQBDHbbdV3NKqQQLJ5UMKLYccUNzmSxUnLpUqIQESHOjJOInbLHLsyOtIiBOPwJFH4MiRR+mjcIPdeqyuF0/kxvgDwUqj8Vpje/yfn2c3MZRoNMEfgpfPx16XvBw3VSP/jFmD2TGcfwv+A/gv4L+DvwT/A/w+s3vM3py9OrGen5w9nfnv/U7o0LDzOgwW4/AoY1w3Y1wvY1w/Y9wgY9wwinvC7PGyuJfnLxaua49ch8Y6NkB3LvlUqAOff9OSc30jOf/aSM6nW8l5eyc5/7QbzVtS3RWot6Fd110cMU8xBz9hnCrpYxfeKy7yHju+zQwp/2/86XD9BTOLmTn1Z44ZLCb+jHhOYPL7mDQYRwfzxcglY5N4oROc22OHmiPiTYh3QU3+LGpSJyC2Sz7aIfE9i5+z6NXzaYffYHatr5J8/2Mpr4aSbWD6KYJ+3LeR6zchH4Loswm5VqWPIeSqCnlhXLUL4aqLctVFdNuuIVfrQr8smqtbzNZ4n5i4qfrsAFtl6iOOvJzNC+Gsh3LWW7LO1o2zjRI5a0IuUZbWkawP13KrRH1aKfmJdZPXq6z7lry8fi6E1z7Kax/h9U4NedVK5HUb+vDEDu00fe6CnlXwynOPv19d4unf4HmA8jxAeDb+83zF89wmQZo+e/DNV8GzJqxHdee5mH3rEOV5iPD8oIY8qxXsW1mWqfo8/Ev3rQZwdrm+XKdTibN3iE4xV6l/NrBxwOx+CndypKxvq2T+WlDvOI9DZH2p6++oRyXvb5vJtnXj/b++gj5qjv3/PmhY9vqj/uH15aZ9sbmCzlqOvnhQMYfL+uKa0A9/BQAA//9CnCj5wBYAAA==";
 
   // Deserialize RuntimeTypeInfo
   var bytes = BASE64.decode(serializedRuntimeTypeInfo);
diff --git a/mojo/dart/packages/_mojo_for_test_only/lib/mojo/test/test_enums.mojom.dart b/mojo/dart/packages/_mojo_for_test_only/lib/mojo/test/test_enums.mojom.dart
index a57b993..ae7a3c6 100644
--- a/mojo/dart/packages/_mojo_for_test_only/lib/mojo/test/test_enums.mojom.dart
+++ b/mojo/dart/packages/_mojo_for_test_only/lib/mojo/test/test_enums.mojom.dart
@@ -157,7 +157,7 @@
   // serializedRuntimeTypeInfo contains the bytes of the Mojo serialization of
   // a mojom_types.RuntimeTypeInfo struct describing the Mojom types in this
   // file. The string contains the base64 encoding of the gzip-compressed bytes.
-  var serializedRuntimeTypeInfo = "H4sIAAAJbogC/8yWy07yQBTHabl8n4IG78YriS5YdQwr4wpNakxcQLQhwQ1CrVhTWtLCxifxMXwEH8udnmlPEzpOucQGZpJ/T2dynPn76ymnu6lgFDGeYWTXw/ifiWxef2Rd5ux7AtoHac262rpVmxc959VRBoY3UDS4qPaw5+edgg7G51VoXpk5h/XznuOvf2GspqIj9HmO8RvHTYo/isgiNLUH9+ugmH/rl480KAvqgB5AZOi5xHL0tkW6jtO1DPLi9Azy5rYJ3ZJ4rh7c9Icdy9SJaQ8M97mtGx7pmPaTaXc9Qo8Nri0DDvYU+gd4PuWVAZXC5yUF8VNGX5koh3LoV4r6LktRDn/lWEBfmnqv0fkxaIfLUfFTWI4ZrIN5cZy2jov4jFkuk7hKCXFdwr0aOKfv1Cafa4NXn1nBuUozcpUT4prH869rNX9+BNrmc/VTWK45wbnKM3JNJ8z16vJuElc/heX6T3Cu6Zg+FRZyHL8qw68ew28N3/lIk0SPG1yOFa6f5QX3pUfk8SGP/MCPqce4kXRfKiErDke/MbEc83Oux2m/mxbdhw5BWzEcG5x6LAjKUbQ+FP/dVPEbEct1RXCuovShcVxpDst1VXCuIaefAAAA//9EmEpVAA4AAA==";
+  var serializedRuntimeTypeInfo = "H4sIAAAJbogC/+SVTU/yQBDHoYXnUUGD78bXJnrg1BJOxhOa1Jh4gGiD4UQEqtbYlrTwHfyoHvkGOrudJjLuAomlHpjk32mXYXf21+nsXiayEvoKejoe+yXiaVz/27gimPcUdACyWg2zfWu2Llz/1dcHdjjQLbiY3tDlcWegw8lxVRZXJuvQfN7z4vEP9LXMuMV5nqP/RLvJiK2ELOKk9uF+AyTZ1o88VBBL8QFUBxkvvmsbwbDnu45nBwabxwiDbnTTH3benK7heAM7eHrs2qHRcbye4z2HBlsrurZtWC3U2R9czicH0uL9ZXHfSuQbauTL+LtG8huR/f6WVxHzscx7iz2fgHaFvHQeQnnl8H3Pi1cJ30ls07hkE+KyjHM18ZnV/paYS1NUR/mUuGRn5KIkxKWA617X6/z5GLQj5sJDKJd/KXFRZuSiJszl6vJuGhceQrn8T4mLKunLoykcaoRDQ8JhHb+dsUMBz5hNIY+qMJ+VlPuwhh9SBQunJunDMku6D2vIRMCLN2LKqzDn+vmrvnsE2pZwaArqprggfVd+Tld546VcVhek707iwmIol7WU++5XAAAA//9rPPmt4AsAAA==";
 
   // Deserialize RuntimeTypeInfo
   var bytes = BASE64.decode(serializedRuntimeTypeInfo);
diff --git a/mojo/dart/packages/_mojo_for_test_only/lib/mojo/test/test_included_unions.mojom.dart b/mojo/dart/packages/_mojo_for_test_only/lib/mojo/test/test_included_unions.mojom.dart
index d29e13f..edb6f59 100644
--- a/mojo/dart/packages/_mojo_for_test_only/lib/mojo/test/test_included_unions.mojom.dart
+++ b/mojo/dart/packages/_mojo_for_test_only/lib/mojo/test/test_included_unions.mojom.dart
@@ -104,7 +104,7 @@
   // serializedRuntimeTypeInfo contains the bytes of the Mojo serialization of
   // a mojom_types.RuntimeTypeInfo struct describing the Mojom types in this
   // file. The string contains the base64 encoding of the gzip-compressed bytes.
-  var serializedRuntimeTypeInfo = "H4sIAAAJbogC/7yRsU/FIBDGeZroczBxMb5NR6ees5PLG4zLG3To1FDAiqFgoCz+83qk14SiOHrJr1cIx/f1647NdUH9jnq5v/Rt0ctzD9l6k527RW6Q5/aw75727f3o3l0zqTA1j1aYKJV8sdrZHc2l+aM/dLabtR4r/C/7X1QH9ntdIufIygSur5ErpGLzh59T5AQxiEQgBg/GCW5gcG4wCt7cqODTc0hXQvBifvmIvdECtJ2Uf+VCBei1ldoOAZLs/Ow0iXcxqYcmjY61nBllnfs7Lr67lhvLcsvvK+uMdHnt/1Am/53HdwAAAP//oYyvYtACAAA=";
+  var serializedRuntimeTypeInfo = "H4sIAAAJbogC/5JggAABKG0ApdHFYTQHGo2uzgGJz4ikTgOIFYA4JDLANd7bNdIqNz8rX68ktbhEzzMvOac0JTUlNC8zP08Cqg+knwmPPWBFSPYxoLkfJv4fCgIYsANRIOYFYhRHAPnyQCwOxDicieEediBmA+JEII4EYv2M/NxU/aLSlPzczLzUIn2QOfrFRckQRkFpUk5msn5mXklqUVpicmqxflJmXkpmXnqxPsguCBmfCbUxvhRkZbEeSGsunvBlgIYxsruY0fyLK7wYkMIL2Tx0wAm1NxFHvHBAw4Je4QAIAAD//8B6whbAAgAA";
 
   // Deserialize RuntimeTypeInfo
   var bytes = BASE64.decode(serializedRuntimeTypeInfo);
diff --git a/mojo/dart/packages/_mojo_for_test_only/lib/mojo/test/test_structs.mojom.dart b/mojo/dart/packages/_mojo_for_test_only/lib/mojo/test/test_structs.mojom.dart
index f9a7236..3b81529 100644
--- a/mojo/dart/packages/_mojo_for_test_only/lib/mojo/test/test_structs.mojom.dart
+++ b/mojo/dart/packages/_mojo_for_test_only/lib/mojo/test/test_structs.mojom.dart
@@ -6254,7 +6254,7 @@
   // serializedRuntimeTypeInfo contains the bytes of the Mojo serialization of
   // a mojom_types.RuntimeTypeInfo struct describing the Mojom types in this
   // file. The string contains the base64 encoding of the gzip-compressed bytes.
-  var serializedRuntimeTypeInfo = "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";
+  var serializedRuntimeTypeInfo = "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";
 
   // Deserialize RuntimeTypeInfo
   var bytes = BASE64.decode(serializedRuntimeTypeInfo);
diff --git a/mojo/dart/packages/_mojo_for_test_only/lib/mojo/test/test_unions.mojom.dart b/mojo/dart/packages/_mojo_for_test_only/lib/mojo/test/test_unions.mojom.dart
index b2af3f1..ea6ee4c 100644
--- a/mojo/dart/packages/_mojo_for_test_only/lib/mojo/test/test_unions.mojom.dart
+++ b/mojo/dart/packages/_mojo_for_test_only/lib/mojo/test/test_unions.mojom.dart
@@ -3481,7 +3481,7 @@
   // serializedRuntimeTypeInfo contains the bytes of the Mojo serialization of
   // a mojom_types.RuntimeTypeInfo struct describing the Mojom types in this
   // file. The string contains the base64 encoding of the gzip-compressed bytes.
-  var serializedRuntimeTypeInfo = "H4sIAAAJbogC/+xdTXDbxhUGSVGmbDWm4z8mbhvGaVomqUX5pyrHbVN1bCVSOpHUyG3oSTs0RIKmNCTBkERip52pjz72mKOPOeaYY4495uijjzrq6FsLgG9J7MMusKDBxUYyZuA1qEdg3/d+9u3bh2VBGx15aJehxZ+TNodaTHeQGbVP7POsfX4Nn38H7VNon0NbTI3aVWhb0D6G9hto/wvtAbT5NPQX2nvQPob2W2ifQqtBv4rQvmmfr9nnnbvba7U/r9292TH3zaWhMRgu/am71rU68LVf2ufP2XS3rU7n4c6wb9WHgXTrerfRNv7a3TO7mvauTXOZTbfRrbetxl73Prmnc7xln5fY9JvGl3BTLfC+W7v7Rn241W0/nJAH9XdED7QBz99qNyY3DKDbNj10b9vnz9h0Ox293b6l11uG/fd3QEY8OruTXpiC+HHpCfGKTbMUSrdpdjetdlvfHcvNsYsS53ujr1hupwhyQf136beaLt0A+v8eYMigv9N/CP3xcBxwf/e+G92h0W/qdQPu7/S9GEBPuhNA92lf7/WM/qgTldTIvondl1ITP+D89/u5ybVjgvkT9N+10/TfvzuDrs/R16WL9PXTIrq+PLl2TLxylX5e9SZ9XXqfvn7yEX3d+5i+Xt1Gf79LP++bf9D9KRjo/h22vzyEdlWjD+KHK9D+Dw5MR45X7HPePonzKsAzsFvDz1+wz6x91u3zM/ssW4N+uW3W9Xb5vmnebxvlltkxyl/19bJzq/KgXx/9p2fttvfq5T2iZ4Py7l7X8V6DsvO40b81y1WqJecbnTH/ac/zt1M0vyXSv5QWeIjitc75/k+A7w82Ptm5A77jAgOvJSDAuJ0EPmThJjpeieKYiglHonc7a7e2Nm9r2hv2/y+ycAQCjOMpRXEsovgmB4AV08G4rSLctjm4nQXeqSACxsbzFH40BcZvwz5PSMSP+LMc4reC+pXRxA4ejpoHR68+8/SvWbM5qfjx+ShhfArI5vKcuJkYZFx6RQWdTL2iKXB/bgKusnCrwPMIv8uARwXsbR0Uqgpxxb0s7eeKnv47JM9i1rM8yLRZa7m4Ybx+B2OpTD3zHjwcDgT9vReHFONzclwAm2vWOsZgoN83ar29nuHXn9/DOJAEHqkAPEi8lY6AR9rj3/DxU/s85+LR0Ie6C0atbnfN6hh9lp3/AWwxCVzSArhkIuCSiYhLr282rDobl/cTxCUjYD9zEXCZC7CfizD1adYGLb1vNGq7VrNpQ4Lx+CNglAQecxw8sh48shHwyAbgcR5icRsPZ/pdq8P8H+OxCnSy8Cgy/L/381dhDkAlLSLkN3B8SeL0xxHjy2qInuGkEol/Q9JOPvz/rWCcmfXkEWcdZy5Af3QOPo/g/6roJ7GrkXSNcQYuIL9DkYbFsQUODs9jmleSeIskOV8Hm+OkP339+Epy/IrzGiTgYvlR1vxo1vOgf0q2Xx7fc1PGozy+TwNfLt9XV3x8/wv0SKYeUOslqXj9OU7m+/05M93v69dnku0D+xNefPFsRnbRcLIoV/04/B1oVPHbvLyQ6DrUrPMK1OIQM69AU7DWF2Xq3Sr4hwpapyhBnPUAHPEP4JgOILAtnlDLf19VwH+nPPYZl/+e5FUGw77dK8z3NQXzKl4/FTWPED6OuZ7KJ//rR8xPhc0vo+YhePNLMk9r1rqwoMseD2+ADGTjm5KIb3oG+Qwnx7Po4qv3+/pD8F5+fH+ToP46PGC/zcInM4P8xkT/OnpvjI4fnxXAUhY+ywz7TjH6lcHxRIhfJPjNR8BvPgA/YgfNWs9sjNhg4vdboEvaPxbQuEaKX0TrY2Y9nyZFO/75NFXO4+vHFwrOF5KIw76UHIfNWh+I8vn1gVJLXz9ekawPPchnteD5VRg4t0m+FBRhGQa2IjjwPHFEEM8fQvsMFOuHhVH7/UmoGzyllr6dViRvk4l5HXESNzh818xhi70ulFeE/xMzi/ctV/CY7zOS81Zh+bqo8fi0+bpXFeE7N2WcHD7PtVzGMd9nJc9zeXxnp4x/heR9/ZpP3ucUkffClHGrmLyvX8N8n1dE3mh4FOL7hKi8V2745H1BEXmfRHYuwndOWN4rNzDfFxWRdxrpuwjfC0LybrZNfeiTd0EReaeQ3EX4Pikk74Zp99RXD/aaIvImx6kIfJ8Sild3TbPtj9deVyBe8+ZnFyPwvSjEtzGur/fyfUmyvMPyD/h9ANG6Z4ynhtYxw+Y9outJvPoZUjfGKZvx4d6C+yQ1Hy+g/Kq3PsJbD1DNsPE9fMF6lbC82Y4x3OgO/6a3LYPZ/z1Nbv09rnsi/OfT4nw7B6/u8BLw7uH7St/43LI7w+SfHKrVz8/HXNfE05Mz4LdsPmpfjLWErSfnNPXq6Hn2VEjHm68g9vRhiD3tK2JPh1q89vShovaUQ+sXLH3x0s3a/5Dxi8Zr0LN7bbz0P9P7n32ILVXzP1ifSJz0JBNPnETet8AvPRfhmbzXojF+9QTWLbzxz6MUX9+yXkctSd/M3X3PaqJf3xqK1lvg+ivR9/h5dp4JmN9GxT31AuschqbOe3ppD+48+15fjLeujtqkgFlXR1Ng/D6WjB+uqyP7dORBob6GxHkJBpJvIcFYXVDDD5D1J7fayqk9A+AxrptHrC4oKu65Kf1AmP+lqzn8uG+BfJLG/UXrOVh4pwPwLkyBd1oLf99sjPeoTsuH9zboVhJ4k/qsLCNO1yTJI8eRR3EKeQS9F0niNlKNWEOCwXL5i+R5t6hcZNkJ7/2u0hRymRNYxxhw7OMTiMVVt49ZjhOZAL+1PIU8RN4LnZhHR+8xxokdyGvLrptMobxDAY2nvHm+TL+WCfBrlSnkNR/g18j+OQy/5goO43FH8nw+LrnF7feC5iGOP1rnzEPIeyxPQvJW22ge0uPIj/Q3cBM0+7iijd5xFtw2zYfnp5qa7xHLzj+Exb9V7WjUM4u+R4z1uyCo3+tIv+9xcCfzaeZmffbnv9JGe1eFbOvnk1PtpT4L5dPuJTi/YMVHvPdpo+6jOa1+j8flhZjzxGhzSUaemKLAcipJ1udl0FcSl/8HcCmQfWQhj1SZD9Z32ftAWBw9f+cY5I2D5mVx542dHJCjAnrNtFh4vwt+Pcn3yqaZl8mSx7T5pHB5tJjyeO9HKg+8X57ofs68eddzLd58Upg8Ohz7+HVC8yyNs56sgr1kJOaVJvJh28uVIyKfae0nKH7KeuSG4yeyX1ZuLlr8VA3wk05f8Gbbl0E+Idtx++T6ecLr7Q9SasRLZN5I8kIYp/7L9bVY19fIumbX7FI7HmDcB9rR2k8ibD2/gPw77k/c9c1kPoY34/fPx2gKLCcHPRXqmxeRCoe9n032AXiQidefkPF0rd4yWf3tasnWXxK+qxHrCcPs2eHXW3j5Y6gjlDnOkPqiva5TRsjWi/wxzqfGrZdkfQ70clzg+lIv2evKpuXWtzL18u1jpJez2p+O6CP1YzYa6/coaArcnzc0ufta4PwnidsPwE7JfvdPA/a7n8W+iWF5zuIRy3Py9st6huYLs85nvnnM8plhuKcl5S0vH7O8JW//M4J7RlJ+8q1jnp8Mk8OcpDzkL455HpK3PvsoG298Qv2IHjM+oSmwnG5JzisWQR9JP8jvch6m1ag/IPNj0zWqSQkCxu22onnGONc1gnDPx5xnFK1jWtOObh1/EN7FKdddw/R89OtTfD3/QFE9n8X6kLfO/v8BAAD//x0VKCHIeAAA";
+  var serializedRuntimeTypeInfo = "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";
 
   // Deserialize RuntimeTypeInfo
   var bytes = BASE64.decode(serializedRuntimeTypeInfo);
diff --git a/mojo/dart/packages/_mojo_for_test_only/lib/mojo/test/validation_test_interfaces.mojom.dart b/mojo/dart/packages/_mojo_for_test_only/lib/mojo/test/validation_test_interfaces.mojom.dart
index ca300b6..f860b31 100644
--- a/mojo/dart/packages/_mojo_for_test_only/lib/mojo/test/validation_test_interfaces.mojom.dart
+++ b/mojo/dart/packages/_mojo_for_test_only/lib/mojo/test/validation_test_interfaces.mojom.dart
@@ -4578,7 +4578,7 @@
   // serializedRuntimeTypeInfo contains the bytes of the Mojo serialization of
   // a mojom_types.RuntimeTypeInfo struct describing the Mojom types in this
   // file. The string contains the base64 encoding of the gzip-compressed bytes.
-  var serializedRuntimeTypeInfo = "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";
+  var serializedRuntimeTypeInfo = "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";
 
   // Deserialize RuntimeTypeInfo
   var bytes = BASE64.decode(serializedRuntimeTypeInfo);
diff --git a/mojo/dart/packages/_mojo_for_test_only/lib/mojo/test/versioning/versioning_test_client.mojom.dart b/mojo/dart/packages/_mojo_for_test_only/lib/mojo/test/versioning/versioning_test_client.mojom.dart
index 41ed26d..31930de 100644
--- a/mojo/dart/packages/_mojo_for_test_only/lib/mojo/test/versioning/versioning_test_client.mojom.dart
+++ b/mojo/dart/packages/_mojo_for_test_only/lib/mojo/test/versioning/versioning_test_client.mojom.dart
@@ -1220,7 +1220,7 @@
   // serializedRuntimeTypeInfo contains the bytes of the Mojo serialization of
   // a mojom_types.RuntimeTypeInfo struct describing the Mojom types in this
   // file. The string contains the base64 encoding of the gzip-compressed bytes.
-  var serializedRuntimeTypeInfo = "H4sIAAAJbogC/+xaT2/jRBS3nUCzXVZb9l8NC10XBEQLG1cgpCh7aUWDilhQoGjFniLXmbZGiR1sp+py2iNHPgZHjvsR+Bh75MixN5hZv1lPxjO2k7ixI+1IT1O7jmfeb977vd9MoitR24D+OfT8/R5zrWJrwPWX2B5gG3m/eJ1OiIKw0zlDfuB4ruOedDoHk5Hl/ogCb+LbaN8KrSMrQIL3PMT2BbafnvS6/W+7TzrkhS3yvlb8upbsbcn5/g29ga3G/H8X+lPod7A1M8fdR2PLD0fIDVv42Y8zn++OxkPvKUKL+9WG+VO/mtw6GPX4mjx3cEW8fhvqtP8K4z97/z9oPyvidgPbOrYYkej+J9juQRykwJeY11Vsb2BzsR1jMyeBbw492xqaJ553MkTmqTdC5m++ZZJXm4FvR3+MJ0dDxzYdN0T+sWWjwDxy3AEeLTDJ8IEZj98nN/r20CHrRz48ivDRmHmM1Wk8KM5NVUltMjzbOfG8Bv4f7j3qHkIufZSNY4s+z+P5Fvi1bDxnzaO8OKsF4XwV8mO/+/jl9afYPsyBM32ex/naiuBs8HwOgF7UZ8O1J8F1AzicMh6J3fdluMa0mOQnbGsl4MnXhx3Ap6dN49Pm5ruu5GsyfBUGX9F92m5C7CKAru8MhPH4NrYrJeAnwkdlE5drjTnwURme4BvhOxLKrjVCIlxulITLhsRPFifC+w1Vnlez4qSlxBGt2wOubvN43QRuKyMPRf4bGbpjVj7kdafOjFljxmty4z+HdfoHek2yrn9x+pPy578p/MnOxxDo7zXmPuWDQ+SfOTb6HsJ+bh1OuPo20Y2S/3+O7b6Mz+WyNRFXm7B+y46reXHRJXGoA99QitMgbppwnz6382bU/3496l/cEcfVBfR/1i6nbuwNBkzVTfqll6Rj+DinOJxr+f0nrS3x/y5gwPj/wEe/TvBMhDjQVkadYPNfVicUtVi90czQc1RviOJls0L1QZfo0Fn36Wl1QZXwABu3ekFx+x62W4m4DcaeG6BVi9tZ2qJxex3qZDCxsS+BkOfuVwAnWVzJ6sKLer59MK+XZXXhNui7HybIf5qyH3u3YnXhj1ox+UX1zpT/TGWoSn7x51OGutz9qCzP1mFesA0Vxs1mRfahaa0hOV+inz+X5NWzBXR8jRmP7me+c9zHkWPT8emj0HfQGeofY4eR3x/7jhtK8DarEJ8Z/KZzmlnPqKeNejH5voXtjiDfaUWtar4/U1dDD94FvVJWnVAvSQ+KcCfr01OL5ZPzS+aTW3BGxtGIIlrHhyWvI8GEzmeN258uyjO8vjqg5zn1+DxHzblu2hLqwDtwprsXhpZ9+vXL1evRxROs31ZF9Bp17HRGvbYrwXMbsEjgMLWbf63bFtVtW8ABVdBtWsq5+LzfH8j2Q3n5keDzWcnnHiJ+TNtfpuksmqeGVkyefgBaVJSn8enF6/OLec8vSPx9tULnF7sQX2Mt/m5Fy1lfawXoIi2jvm4C5o+cIKSq75tBEvftip2DXCjF7IvuAQac/6+qalXytJGD55SUeKB4tQs6nzXg3UncIpZbJX7TlriPpL+/cXCOierANvyGrCr7j/Ucccfy3/8BAAD//9CpxZ1IKQAA";
+  var serializedRuntimeTypeInfo = "H4sIAAAJbogC/+xaT4/bRBS3nS1rtlRd+i+GwjYLAqJC4wqEFKWXXbFBRRQUWFRRcQheZ0qM1nawnVV64yNw5MhH6JEjx34EjnyEPfZGZ5o39WQ8YzuJ106kHenJa8eZmfeb937ze7MxlGnbhuvfcOWf95h7FZsO959ju4PN9X/1O50IhVGnc4KC0PE9x/ul07k/di3vexT648BGB1ZkHVkhEvRzD9tn2H541Ov2v+4+6pAOW6S/VtxdS9Zbcr7P4NrAVmM+34PrEK53sTUzxz1AIyuIXORFLfzuh5nvd93Rsf8EoeX9asP8qV9Nbh3+rMX35M+/dPH66eqs/wrjP/v8f2g/KuJ2BdsWthiR6fOPsN2COEiBLzGvi9guYLOx/YTNHPouMoPxwHcdDwUm6c8MA3v6x2h8dOzYpuNFKHhs2Sg0jxxvgIcITTJmaMaD9smDvn3skEUjX3Zf4aIx499VZ3FtKOlNhl87J36XwN/D/QfdQ8idD7Jxa9H3efzeAH/Kwi8LJ7UgnC5CPB90H768/xjb+zlwou/zOF0qGacGx6M0//7dmA+fngSfbeBOyjQkht6V4RPTUQIXct0sGReWj5uUl7RZXNrcPLeUfE2Gq8LgKnpO21WIPQSQ9Z2BMJ7exPZ6ibiJcCHQPZf4oS+Ai8rkN98Iz5DQ9SwXifC4UjIe2xL/WHwusIQkyJ958dFS4obuiwNuX+RxugpcVDYP8X43MvbzeXURr+cMZswaMx6/fzyF9fkPrppkPZ9yuo7y42kKP7LzaQh07SbznOb9IQpOHBt9C2G+sL4lXHwdm+zzT7HdlvG1XA4m4qkO61dWPC2KhyGJPwN4haaqBvHShOf0Pf01iJ/LUI/cEMcTjYc/amezL+wPBsxumvTLqFhnUP+HWn6/SWtL/L4JvjN+3wnQb2M8GaH/tJW5D7B5LtsHnhesH5oZuozqB1F81FeA/w2Jjpy3vk3jfVWS72yc6gXF6TvYriXiNBz5XojWJU7nacvG6WXY/8Kxjd0JhTx2u0J8ZHEk4/t/NvLVn7zelfH9ddBp341R8CSlfnp7Rfh+Uismj6humfGbYfyq84g/vzHUcutGWT5twbygXBTGSb3iejGt6ZLzG/r9iSR/fl9Cf9eY8Wgd8o3jPZz6NhuPAYoCB52g/mPsMwr6o8DxIgnOZoXx2MjgL4PTukbG/nhaUF7vYLshyGu6Q65aXk/U9dBzN0F3lM3/6hnpORHeZF3uq8XyxuSMeeManFlxdKGI1u9eRetHsKDz2OTqx2X5hNdJewDYs434nEXNuV5aCTz/Fpyp7keRZQ+/fLlqPbpognXbqVh3Uf7pzcnPexIcdwGDhP8z1fa5/lpUf+1Arlepv7SU8+hFz+tl9Ute/iO4fFLReYSI/9LqwDS9RPNxWysmH98DLSnKx/hU4fxcYd5zBRJvX6zBuUIb8vRnLf4fhpZzv6wVoG+0jP2yDlg/cMKIqrevBkm8d1fkfOJUKaaOuQW+c36/2iWrzkc9B48pKetPcWoWdC7agL6TeE1ZbB34Syux3qO/O3FwLon4fRd+61R1vbCVI85YfnsRAAD//xqidsPoJwAA";
 
   // Deserialize RuntimeTypeInfo
   var bytes = BASE64.decode(serializedRuntimeTypeInfo);
diff --git a/mojo/dart/packages/_mojo_for_test_only/lib/regression_tests/regression_tests.mojom.dart b/mojo/dart/packages/_mojo_for_test_only/lib/regression_tests/regression_tests.mojom.dart
index 9adfad5..fad2213 100644
--- a/mojo/dart/packages/_mojo_for_test_only/lib/regression_tests/regression_tests.mojom.dart
+++ b/mojo/dart/packages/_mojo_for_test_only/lib/regression_tests/regression_tests.mojom.dart
@@ -3412,7 +3412,7 @@
   // serializedRuntimeTypeInfo contains the bytes of the Mojo serialization of
   // a mojom_types.RuntimeTypeInfo struct describing the Mojom types in this
   // file. The string contains the base64 encoding of the gzip-compressed bytes.
-  var serializedRuntimeTypeInfo = "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";
+  var serializedRuntimeTypeInfo = "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";
 
   // Deserialize RuntimeTypeInfo
   var bytes = BASE64.decode(serializedRuntimeTypeInfo);
diff --git a/mojo/dart/packages/_mojo_for_test_only/lib/sample/sample_factory.mojom.dart b/mojo/dart/packages/_mojo_for_test_only/lib/sample/sample_factory.mojom.dart
index 2b1f0d2..46a28ba 100644
--- a/mojo/dart/packages/_mojo_for_test_only/lib/sample/sample_factory.mojom.dart
+++ b/mojo/dart/packages/_mojo_for_test_only/lib/sample/sample_factory.mojom.dart
@@ -1804,7 +1804,7 @@
   // serializedRuntimeTypeInfo contains the bytes of the Mojo serialization of
   // a mojom_types.RuntimeTypeInfo struct describing the Mojom types in this
   // file. The string contains the base64 encoding of the gzip-compressed bytes.
-  var serializedRuntimeTypeInfo = "H4sIAAAJbogC/+xaT3PbRBTXH4eaf6nTDI0oberQNrgwRKYcyOTUGShNhhnIEA7kQkZ21omDbQlJZgwnjjlyzEfgI+Rj8DFy5MgNVtFbe73alSxHltYZ78zOWooU7fu93/uzu89QwlaB8RxG9v42da3iXobrD3Bfxd2zuk4H7ex8a3XR8XeNM9T0uc8/gXd+ONx/dfTNq8Od8MUt9j32+5cw1nAv4V5l5vUjjA6Mj3Ff43zna6vp2+5vE89D9H++R7/0kedfz8Pg/t1z7J6HdmG+gRw6g2NwfVEdx7X28fi1Ux/JrVByk/Yvc/2Sua4zOP0HjX2OtLu438Gd4HQf/14e6ncIX0Q/G7i/hXsL959wN/uea3bsptUxT2z7pIPMU7uLzN9dy+zaZ7bpuc3wh9NvdNpNs93zkduymsgzG+3ecbt34pk+Btgzwy8ftcIvbwUvdaPfJ/g8xH0Jfgf4aYBzicJjiXr+HIhZXQ7Hv1fC8dTg434F40VpMtwVCnf6/4lw/8o+8PutVkS+D0GWvPCtMn6AyD3QJ5c3aHWBvGsgM8j7qQv2xMpNWp680qjvn6rj8tL2u8SxP1HLih8inAJ+3CuAHwozD4OZL/GTSX6Uh28pBt/yFPiqMfi+A99z2g7ixZ8A389yxLdC+TCVE0cNau4adT1ruzVgLiO7DePcwm75rQI6E+H0BPInWeyWzJfkL0n5zUtBfpi33fpo4PPsNsD3aQF2qwjyZZHdivKMuj7yA1ngRfQL9vuCxeupJHlGRZuJv3pBEo2i/RXLi7TxL2s/lRT/Al5sFmRHWoIdqdQ8WT79Q65T8mlbgNP7uK+M8yl0hIJ1s4y8Ugvglcg/B7z6QlL/rHLWl1XBultLgZdG6UPEry9dZPmI3Y2I4vesYH9NcHBS2pdo/2EDMIjIP1whzo+d5Zlnvg37HHbjTMiTjQJ4ojHzIPdXYc4swyfdl7up3V5CXqWnwF+PsVuSJ8N6dq/r2K6PjvcIbKw+NiWx2/OM7LYGGIjkn6e8Sya73cw5Porstk7tgzzAvQ0K3opoOnzuE7DloR0nvDBtfkcWRn+m5PGuQB/PwU/G8Hju8j2Z+PxRzusI2fmcFJ9KKfRSiolPj3B/L5i/9TPizZh3nnKb4tMzwIArP5VbLuw5nT0H730uwf6lrPEpax4HvnM9hsckOC14nI7Hz8FHLHjMj0sDkmepfL0QvV7A+BfD58uY/Wh6PlVOXnWHs248QO6v7eb1BsFEdSii9eYDODcVLDMjPHmYc51DklxGzDmORumVPR/b1+PPHWZ1fn2A/GudsfN+dMvOHUh9A8grTX2DrPvDPTBkHi9W5nB/mPCprGV7fkfs6LXAjtYlsaMrJVs7ei2ZHZUn4IcSE9dmdc45wkmOuox58zfrwDnZ/Y1onWG8EY9T2jpQUp/F1IGS2xH83oX38sKPrQeukbofsKs/dDHvFGVUKzpr3r0J+hsI9g2XQed54Za23qCUc73dXbhXVL0dDx+NDuQZ1DVpnPuk3YN1Rtd20VEAksfnTTA+LiDeqyAD4U2ZE2fUKdb9lSlw1G+w7l8Fn18EfrKs+2n/KYor23o2cYWtLyT5HVNWGNHT/ZzjCrteNtT5iCNrizgS2Q8pMo4k1X+S5/8PAAD//wmWKGaINQAA";
+  var serializedRuntimeTypeInfo = "H4sIAAAJbogC/+xaSZPbRBTW4qmYJYknU8QiJDMekgyZohiZcMA1p1RBSFJUQQpzIMVhxkubaIgsIcmUuXHMT+DIkZ+QI8f8jBw55pgbtKzXdrvVrcXR5mBVdbWlkab7ff19771eNCm4GlA/hZp93qHuZVzqcP8BLju4uD3TfoKOj7/pmWj4bf8MDTzu+9fhm+8fPbx78vXdR8fBh0fsd2z7z6C+hUsNlxbTrx+gtqHew6XJaeer3sCznN8S90P0f75Dv0yQ6836oXH/7trW2EX3ob++HSqDo3//fG8ZV+1w+b6jL+yWKLvJ9ZK5v8Pctxmc/oWLfY9cF3E5hwvB6TL+fWE+vnP4QuOzj8vbuPyISxcX/bFlIt2ZDC3TGCNHN60zS3edQfDDnvSfGAPdGHvIGfUGyNX7xnhojH9ydQ+j6upBcyejoLkj/yOTywuCy1VctuC3j5sC+NYoHLao9x8CIf8+D/zZDurnTT7eL6Ce1pLhLVF40/9PhPeXVtebjEYh+z4EW/LGtcXonth7qia307/aAjubYCvY+YkD+mHtJVcRPFKodk/lZTtpnW5xdCa6suKDCB+fD5cK5IPEtK8x/SR+MM5P8nCtReBaXwFXOQLXd6E927ARz4/4uH5aAK4NykfJnPioUX1WqPu89alBXxb6DOLXRp9hHdRn+uTjcx3yobL1SfpJ8pC4POWOIM8rWp8emno8ffq43ihQn5Ig3xXpU5QvaOpC71ngRMYVdHqbxelGyfnCrPHs/dFtkjCU5Y9YHqSNZ1n7obh45vPgoGC9KDF6kan3Wf78Q/xKSv50BPi8j8v2Mn8CRyeY31aJR3IJPBL5XZ9Hn1fM78qc+V9LMB9WUuCkUOMg4tMXDup5iF0lCON2syQ/TOw/Takj0XrAPtgesns+g6u+norMD9+BdQerfybkxX6BvFCY9snzHegry+Sk62Kvq88/IS9SU+CuRuiT5Lcw33xg2pbjoeEDghw7Dgcl63OakT5vQRsiu9chb6qSPg8Kincifbap9YgruBgwoEehkQ3e+xg0O9drzAer5mevoP49JW/vC8bhEPxgBG/XJl+rEn8/Kijvrzp/4+JOLcV41CLizjVc3vP73/sZ8XrM2694E+LOTbCdazeVG250m0y3/neflbhuWNW4kzVvfd+4G8FbEnQ2vE3G20PwBf933rLxxoYF36cyfzzIeP4B9V8Mf59FrP/S/Wlx8qNznHleFzm/GoPZBD7RuQ3R/PAK7D8KpoUhflwt6FxAnD1axD6JQo0nu+/UUaPX9/Pa/+0ibzZWbL+vvSHr++Q8ANhZ+nmAqq7LjkGwPB5sr9G6LOHPKznb/TCil3sCveyWrJcXUrZ6uVcRvdQT8EGKiFN57Rcu8Cn3/MK6+ZNd4FhV/YloXvByKxqftOceyXkl5twjeRzC7Tx8lzdu7LnXFjjQNujnsSrmmSQtzkbmzbO3YNymgnW7CzDWeeOVdn++ltN5FtH+/EV4VvR5Mx4uCrW+m8U5H4XznFyXYD5gWg468cFx+Tzx670C47YMfSc8qXPihrzCfLyxAn7qa8zHd8CXF4lbVebjS/5REC9aajbxgj1fR/Iz5lhdaHwuFxQv2HlsQ16P+NDcxIc5LmXEh7jzjuT9/wIAAP//4cQFxDg0AAA=";
 
   // Deserialize RuntimeTypeInfo
   var bytes = BASE64.decode(serializedRuntimeTypeInfo);
diff --git a/mojo/dart/packages/_mojo_for_test_only/lib/sample/sample_interfaces.mojom.dart b/mojo/dart/packages/_mojo_for_test_only/lib/sample/sample_interfaces.mojom.dart
index 72ac689..59da5b9 100644
--- a/mojo/dart/packages/_mojo_for_test_only/lib/sample/sample_interfaces.mojom.dart
+++ b/mojo/dart/packages/_mojo_for_test_only/lib/sample/sample_interfaces.mojom.dart
@@ -2392,7 +2392,7 @@
   // serializedRuntimeTypeInfo contains the bytes of the Mojo serialization of
   // a mojom_types.RuntimeTypeInfo struct describing the Mojom types in this
   // file. The string contains the base64 encoding of the gzip-compressed bytes.
-  var serializedRuntimeTypeInfo = "H4sIAAAJbogC/+yb3W7jRBTH7Thdyi4L3W0K6X5mFy3kpnVSJKi4Si8iUkGlSIVV92pxkyExSuxgO6jwBPsIPAaPwCPso3DZO7Cbc5rxZMYfidOM2440mvornvn5f86Zr5aVSdqAsgYlex7LdaZk7/sHyqqfi36uwPE+lCdQjqB84ueSn398026+/b755lvXGI4GZLdpjYfB9S/9/Jxz/dDySI84B50OcV3buXhPmXNf27F/N7vEEf3O8UUR/Jrzi9EhSgvqvcHUOzjW/PyuED5+/0n4uFrnczmHsqGEU415z3+Q2PswfQT1Qz6bfr7nZwbbzPuD59b8bPrZ8LM+dh19YHeMgd6z7d6A6H17SPQ/HUMf2r/auut0Jn+MxqcDs6ObSMjVT02ra1o9V/eI67n65M1vpzfsBs8NqferlF5qlD4u6qkqkSkpr5bg+fvQ7tcHP/zU9MttPz8I89rFazxuwfOFFXCLswvkV2HauwE8tRh+DYZfW8DvMz8HEmft7Zl/7tMpR/byDMfg+O4KOPLqgcdgyhf6LMMx3nd2J6zTCmPH1UIynSoUZ955TA+Bz3fEA5b8+m+vSI8Vht95Qr+mMDrbF7T/ETCYtn/HIb+N/ZrxOWC6ag7rAr9WZuq1HsPtvZYNt8cQA0Lc3JFtuUQqbqx9VdRw+/eZet5RkqWkdleNiaddwzNE9ra9Al48LkEcawniJeqtIHj+jMNFpfphbGL1XeH4T416H/qvI9N6TRzXtK0wX++PERHx/WqF/kwRxAe2nxUXj2f0zfELKuc9BchlhR9vGsz3ViEn/b5nC35fNeb74vnjmLj1WLK4lZX/xbh1LHncyqv/xfiWF/+rXbH/1Rb0vwHfnRvsf7UY/xt6eI5xaSPi+wbfFucncJzFTFtw52FkGEdVqXHqGoWoAEyLFJc16v5zuLn6MfxeaVK2H0WPt0605Yy3mp2+few5Pgd+Ox9IFrdw3JlV3Jq2X864xfpBnl9WOfa5rHj1IbzKUMR6Ka2IU1T8EPnBZesM43dIZxKOT/Oos5c50pnIr78rhsNrEm5qhF/H+fCp3lwuv4eS+fUTbVn25oYcu6zjkZqaD7sLdLMlgd2l5bQ+Byc1AafTCE7PJfdPdL9/2XaJ45ewXU4D4a1dLm6XO7d2mcguv8mRXc6Mx4FjX+PPd0dxK1DfhU1Pwa8H9nlEXNfokbY5Ii3D6g4Ih+OmJP0H5FFL2V8XzUu8AhZcDlRPIk/99qJEfmpTAj+lLjA+zFpvX/j5WYTeMELe6m1+vR3mSG+sv/8Xx4lasn0tNDctghvOvwa6C+aQWW4lSfw7tv/nlPYmGh+XoY3YbnTpebKvNYnsqwR/5339ZNH5wn5G84W4P4/SJzVbmK84IJtOn9wgnYriyD4EkGIK7sUI7sGa3Qeg10PLm+G+JVkc2cgojuB6JbT7cmSQJ/tUqLXLVdvn1oriyLx+P2s90f2SiZ4mbv9WT/Pr6anEeorbvx7HqcHoKm7/Ovt/Hsz+dfbyDM+KJPsuKlQ815h9F3hdo55rw4W/70avw6XVJ75XZM+B/u5fcj8iXt/u1jjtealcz/3sOJ8Yar+E82dp97OL9HOWch1XjdCVSD91DrcXkumnpS1PP3UJ9ZN2X+lVxcd74AdNq871oy/gnAz7Sq9yfWjKZU/I5dUK5wvVjNZt/8rIDrGfwNqhbPPSsq7b4vjeHnt1kd6+lkBvaedvsrZLitOeiNPBNZ+/iVr3ZfupSdd98f9r0vQz9jj8P79B/dS9a9BP/T8AAP//qXbi1dhAAAA=";
+  var serializedRuntimeTypeInfo = "H4sIAAAJbogC/+xb3W7jRBT2xOkSdil0ty2k7F920UJu2qRFgoir9CIiFVSqVKjYG1ZpMjRGjR1sBy13PAqXPAaPwmUv9w1gvDmnGU9m/NM69qTbkUZT/2V8Pn/nOzNnplVjWtagbUIrnse2IrTiff9AW2e1zGoNjlvQ/gTtGNpHrG6w+sPLo86r7zovv/F6o/E53enYk1Fw/QtWn0quH9g+PaPufr9PPc9x3/ZTldx35Dq/WwPqqn7n+G0T/Jr7S69PjS6895rw3sGxyWq7FD6++DB8/OeOHJcLaNtGuDSFfv6DIt6H5QN4P8RnndV7rAqwzfUfPLfC6s+snrDaGDoj2nAnA2dk2dRtjJxfnYbn9qd/jCen51a/YSEsXuPUsgeWfeY1fOr5XmPa3avZDTvBc6Npf4TjRx3amhFdkuLSVTy/Cvad7H//Y4e1W6zeD+Oyg9dk+ATPl3LAR4kHmTZmDB5tAY8jBR6fsPoRq6KfPGHnPp7hIl6ewyU4vpsDLrJ+8bjEQVSFY7yvfkfOM/S3SikZzwwOV9l5LA8Aj2+pD9jJ+bSVE59qAl4XCfXGEHjUUtj7Kdg8s3fbpb9N2EvJ7cayaLsrXL9EEo8MIU6pcPrLzAanh6DFIZy8sWN7tFCcRH9ZI2F7W8J73TGSlaR+VI+JY4Oe31P5z1YO+MhwCOJIi8jfG/lUMuQ4vpbgQLjxjlhE/tYk+mdy/aH+HFr2CXU9y7HDePp/jKkKzy9z1CNDoefi+CVu/CfytybxcyLppwS1qhiHNMl8+CUpvufra35PEvM98fxxTJx5WHCcyUo/Mc4caxZnllU/MR7pqp9mzvppXlM/Azy33yH9NGP0E8ubK87j2hHfM/iWOG/HeYwwnZfmJ4qYp9S5PMYKh2cJMCxzOKxw9/8NNw9X4cQ64FmNns/UzcXMZzr9oXPsuwwCud7eLzjO4Dwuqzgzs1ePOCPqmExXicTfFhVf3of+eoaaDxs54RKl9yodWzSPML6GeKTBfG8ZefRcYx6pdLhbDqXtEuFEInQY87gzPnlSvB4UrMN1c1H+44WEWJfxfo0shx8FvNgswI/S4lK5Ai4kAS6nEbg81Uxf+HH1ov0M5wdhP5sFqls/S+9n27d+JsXla439TIzjiFvLlOdzo3Aqcd9BLI9BhwN/O6Se1zujR9aYdnv24JxKcFsvKJ6j/Wspx8OqefsLsF1qNxfZdR4XlzXSmfUCdIZcY36VNZ8+Z/VJBJ8wgt3yKTmfDjTmk6jP/+J+ITPZvggeJzMCJ8wvBrwKcqQiThsF6THa207pP6r5ZBVsQjtRgnX2lxWN/GUD/l62fP9182PdjPJjuP+K4x+XHdNbt3Xj4aMbzEOV7ldA8MspcC5H4BysIb0HfDyw/TmcNwvW/TckG93H9TKw83LkrbO/GdzaWdH+tpmT7l9Vp7PmCz9OmPJlKtO3fEnOl8ca8SVuf3EcLm2BN3H7i8X988L+YvHyHH61gtbta1x8NYV1e7xucjg34ULtbvS6UFr+Yb8q/wz4tXqJ8yH1h86gKeHhc+Nm7DfG/FnIXg3yR2n3G6v40Uq5bkgieKPix64Ep2cF86NqLo4fuxrwI+0+wbzi1z3QMcvelcavZ3CuiH2Cea5fzHDYU+LwIsf8GMlonXCYkV9h3Bb9qug8q67rhDgfdib+ropPXxXAp7T5jKz9jMNlT4XL/g3LZ0StM4rjwqTrjPj/C2ni/p4E789u8LhwbwnHhf8HAAD//+5ePoRwPQAA";
 
   // Deserialize RuntimeTypeInfo
   var bytes = BASE64.decode(serializedRuntimeTypeInfo);
diff --git a/mojo/dart/packages/_mojo_for_test_only/lib/sample/sample_service.mojom.dart b/mojo/dart/packages/_mojo_for_test_only/lib/sample/sample_service.mojom.dart
index 071f106..c99caf0 100644
--- a/mojo/dart/packages/_mojo_for_test_only/lib/sample/sample_service.mojom.dart
+++ b/mojo/dart/packages/_mojo_for_test_only/lib/sample/sample_service.mojom.dart
@@ -2235,7 +2235,7 @@
   // serializedRuntimeTypeInfo contains the bytes of the Mojo serialization of
   // a mojom_types.RuntimeTypeInfo struct describing the Mojom types in this
   // file. The string contains the base64 encoding of the gzip-compressed bytes.
-  var serializedRuntimeTypeInfo = "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";
+  var serializedRuntimeTypeInfo = "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";
 
   // Deserialize RuntimeTypeInfo
   var bytes = BASE64.decode(serializedRuntimeTypeInfo);
diff --git a/mojo/dart/packages/_mojo_for_test_only/lib/test/echo_service.mojom.dart b/mojo/dart/packages/_mojo_for_test_only/lib/test/echo_service.mojom.dart
index 4a3be3c..2c539f4 100644
--- a/mojo/dart/packages/_mojo_for_test_only/lib/test/echo_service.mojom.dart
+++ b/mojo/dart/packages/_mojo_for_test_only/lib/test/echo_service.mojom.dart
@@ -785,7 +785,7 @@
   // serializedRuntimeTypeInfo contains the bytes of the Mojo serialization of
   // a mojom_types.RuntimeTypeInfo struct describing the Mojom types in this
   // file. The string contains the base64 encoding of the gzip-compressed bytes.
-  var serializedRuntimeTypeInfo = "H4sIAAAJbogC/+xYvY4TMRDenwPCXUD8SstPEahCwZkyioSUglRICHQ01xBZe75k0W52WW8OwRPwCJSUlJQ8Ao9yJSUd2OwYnIkdNtGR1Z5upLmJfZnY3+dvxpsETmlXIH6AiOd72tgV3oLxLeFXhReMF/3+MJykeyw/ikJmef89yHm5/3w4ejrc78vE3cU8vP7gBD7PhXxfy+9C7EDMXOABooPWVzx8hPgZ4k+wL47Z8L47BpwXtPnrwneEA4pnNGGV+FZ5+D8BrIHpwTzL/W0LPxT+SjiZ8ZzEaUhjMk7TcczIJE0YeZ9TkqSvU8LzsHxxQPOC0CyTC3Ai/47EiJNoWrD8kIaMEyaWHfFy3V2ZlPwbD96fztsWvJa8enCuXZhX7/t2royf2mX8etl87t/VOfvmc1f2CI3lmZvmlV0DPn8jK/JoOjbjuggYNsU71p/CH3jVcUvrWXDfBux/cT/M2ZuZ2J4Zv7JN4cf1OLD0uR9ONauqk64l/5JwKdUjGs+YRR83N8yPqi1T/wq0vbuW+vwfuroDPW5OVzxLp5yd6WpNXXUboCvcrxV/k635z6vCl6udBzZ1Hz1hMX3HDnDbXuBvu+a+rXjo+avV18CCXz1PLeCfb9+111kAvP/Rh9uMepN6uVtjvZn4cWDPJmutwY+7hB/5+HVeeBLFccTN/DyosV/r/cfTxra663gnU3f34ZnJVHfa9XZ2v61Rb48beL8dI5zeCnx5S/hqw/ejvbc0M+lpp+b77BjFqnVl+/51AzBLvPoVVncdtSrow1nyOwXWh78CX34FfbyYRUae2qdUHxJvk/XxKwAA///0GO/NyBMAAA==";
+  var serializedRuntimeTypeInfo = "H4sIAAAJbogC/+xYS28TMRDeR4HQBlReUngcAqdwoOZYRULKgUiVkFBRuVQcolViyKLsA3u3iBtHfgJHjhz5ST1y5B+AzY7BmdiRFzUsQRlpOvE2s/b3+ZvxbjpeZbsQP0DE1/e1sS+8BeObwq8ILygv+v3heJodUXYSj6nl+3ch5/nx4XD0ZHjcl4l7i3l4/sEZ3M+H/FDL70HsQpz6VXwP0UPzKx4+QvwM8TvYF89seN1dA84L2vVrwneEA4qnUUKd+FZ5+D8dmAPTg3mW69sW/kLOLZxMs4QSVk6yJE4pI0n2OiOcjasPk4gVJMpzeVdO5N+RGHESpwVlL6Mx5YSKuUa8mmxPJiVOOPC6dL624LPkM4D97MF19b1P56p40K7i4WXzfn9VOgjN+63sIRrLvTZdV3YVePyJrGBx+sqM6yJgWDXfWG8Kdytwxytt34L3FmD+jfcBo29KsUIzbmWrxo3rbmDpZ988N3PVRc+Sf0m4lOZJNCupRQ83/hIvqoZMPHW0NfuWOlyFjm5DD5vTEc+zlNONjmrqqPcP6wj3YcXbwdb8/Vx48rV9wKbOmcd0Fr2jE9yOF3jbbqgfK/zdsF4dDSy41XPRAu75ttxYPXWA5199xV+PupL6uNNAXZl48WCtJmv9AS/+El7k49N54Uk8m8XczMv9Bvqw3l8CbWyrr93gbOrrHjzzmOpLO64251WNunq0RufVKcIX1OApWMJTG95jjt5GuUk/Ow2dT6coutaP7f3oOmCVOPUjqal6aTnowVvyuwHWQ1iDp9BBD8/K2MhP+z/Tg8S5jnr4EQAA//+qos9XSBMAAA==";
 
   // Deserialize RuntimeTypeInfo
   var bytes = BASE64.decode(serializedRuntimeTypeInfo);
diff --git a/mojo/dart/packages/_mojo_for_test_only/lib/test/pingpong_service.mojom.dart b/mojo/dart/packages/_mojo_for_test_only/lib/test/pingpong_service.mojom.dart
index 0de3b90..2ca1bab 100644
--- a/mojo/dart/packages/_mojo_for_test_only/lib/test/pingpong_service.mojom.dart
+++ b/mojo/dart/packages/_mojo_for_test_only/lib/test/pingpong_service.mojom.dart
@@ -1358,7 +1358,7 @@
   // serializedRuntimeTypeInfo contains the bytes of the Mojo serialization of
   // a mojom_types.RuntimeTypeInfo struct describing the Mojom types in this
   // file. The string contains the base64 encoding of the gzip-compressed bytes.
-  var serializedRuntimeTypeInfo = "H4sIAAAJbogC/+xZz1PTThRPUgr9wpdfarX8nILo4AHCjB4YTswIIzM6TlU8cGJiWUswbWqSMuqJI38CR4/+CR79M/wzOHrTXfoWt5vdNumEduN0Zx5ht033vc++9z5vdwtas03B8xye/Pgm09ex5KC/gCWPJUB+sLVVsmuVklurvEHeqV1Ggu8/gHf2D0q7h893D7bIi+vh9/j564xeBjO+Ac8VLPPS333q2KgWxJl/lZknw+lD+j+Gmv1VGC9qrW1Kb+1vc59vcOO/oZU0cbuLZQILb9EcHrsN+AvMDeG4hGUUywmWd1jMhu+Zjlu2HLPiuhUHmcduFZlfPMusuieu6Xvl5j9HlheYVr1OJvJN8vcQ93zTrgXIe2+VkW/W8fR1PP2h34RxnbxYFfsT7f8P/qFJ/IvH91KCjwxfjcGX/T2+ET3IkhL4RPougz/0Grcihxe1v2BEt5u0DYndd8B2Yveahz42sIIi+2nrtf28P2wL8pHGfN6pRfUTGV63IH6u9D21nAYS+/cyxGu/8SowuuuMfnxcnUEQXkjyFsX7Ap7fOP/6LsGL16co4JcRZpzksjEskIlfWlUUiWfuYZlk8iP9ZB58XJLmQ+uW61N+7GQfryfLeyPM+hrATySXZbEMM+s4wqzjZQbG4eXiRPN5nIffnwE8FsT+8uuG4msay39X6x8wLBa2f1SRfExx+BQzH29K7J8BDK7tZ5NyyvJyVuPIPYG8LOPvCfD1MjiNyF/m+ugvGqdPsUNdF7We7Tbf83WUHmMd9Ch1lC2uo8b/9TrKHtRRseoou30dNZ6yOuqaD2B/aMTAy2iDVx6wIP61b3kVFLx9/UKA17RivLiXSYYXaX3UYj8TaKrEWeh8QpfHm95DfhyDurDhOcI4m4Yauh9x1m6/0Skv5brAqR1/jUPdUnYbtUCC033F8pHB9GVxWEioPl2EmoWPQx8r7qP08Z2m9Sb+6H7F/aBJ4+9xiniO5q2fwHOZGDhlmHWQ7X/++hezWRfglleE7ygeX2Py3bYEhyXAIoSDovtBnvfOdDX2hZNw7gEqC/1nRcF9oew8K+r9heo8SnB/kiIepf5aNJKJb3I+PCuJb8qladw/qsKnxL92UsintA3FwGmoDZ/Owl77GQoEp9/iezmV+PQs4XgL49BKqIPz1e54lPQf9tFvjBvi0W7jOcetSzbGOmQF3+PrwrAf7yDH+oyOJHXhnCJxTXE5jxnXexI8HgEmUjwG9yeJxDfxn7VBfEvvT4ZjrMNwhPuTVw1beH+wqNj9yaWW7P0JsVvF+5Oc1rm+Y7/3JwAA///Y0/jDWCcAAA==";
+  var serializedRuntimeTypeInfo = "H4sIAAAJbogC/+xZTU/bTBB2HD7ywhs+3hdKSigKlFb0AEZqD4gTUkFFalWlLVXLKVhhC26T2LUdpN565CfwE/oTeuxP4dgjR27tLpltl/VOYkeJbVpWGsyuP3bn2Zl5ZicFrdUm4HoCV3l8XehnqOSgf4fKNBWfeP7GRtlqHJbtxuEr4h5bVaJ4/h68s7tX3q483d7bYC+uBt+T53eEdenC+Bpcl6jMod99XLNIw48y/7IwT1ZaD+t/Hmj1l2G8pEktc7W7Kd1ek8Z/QCtr6naLyhgVWaMiHfsf8FeoG8BxgcoIlQqVN1SMI7tODLd5YNetBnGNuv3eNjy32vrnwHR9w3Qc9nXPYH8rtOcZVsMn7juzSjzDoXM6dM6K18Julb1YD8zL+/9K0Mj2IeN5huCB4akJeIrfkxtbB9tCBpcKp0XY/37jVJLw4fpeZMLrydoaoucU6Mr0XHHJxyZdm0pf3vqtr7zfm4r4ogn3O7WwdoDh8x/4w+VSj81ak6jj3yL4X9z4FKSQMoH4iQP2coLEHY7vKVy/SPbzFcFHXk9JwQ/DwjiLRaNUIJI+N+skFE/MUBkX4hu/Mwc2jITpwD7lYopvnfSR1yXy1LCwnzrwCYtFg1SGhH0bFvbtWxbiAzywn29dd6ZgfAb2v6i2j+998p9JKv9c7rcvsE5Q/5GE4inX+60eLZ6uI/reBp1/6SsG1ZTHVWZf5z2Oqxi/joEtV8EoVPZQjNEeNGn+Uoe8Kmw+2W28PkPSxTC4Z8LkNZY6r8n/aXmNdZPXtM1rrPZ5TT7leQ2P3+tw3tIj4KO3wWcadGf2s2u6h8R//fKZAp/JhHmrkO0Nb/F85Yq+guMk5Tfyeb6Uwf0nEyN/jUJe1nRrSr+ZhJw1Dr9pl893iiu5LnBpxy95yCOqdrPhI7jcTTie6EIf86uoPIT51TzkELJfeXTNHkk/H2kx+RPP/+0PGupPD1PMQzzunAIPZSPgkhVwx84Tv+1HONwqcJpOiI+4/k5EPtpE9F4A3QN6p+Q8JfOSk0nHuWoc6gKwWqV9LKXgXIXVc8LW39POcwznRynmuXPxoR74K6t/ziL+yrnuOpy/0sJ3zH62rgHf8TYQAZeBNnw3C2fTJ8RXVHM15e9GSfLdfo/9J6j3VcK7qR+G4znWvx+jXeh94rlu/fNCwmswAu6DiufkvCxop1ukZn4iB0heVkzITzkORxH9dAfR/wFggOp/U+/vyl+Zfaz8xf4q1/uHIuA+FKLe/6JpKevf8wnX+8+03tb7mZ5pqPfnkN/HC8i55GcAAAD//zW0L99oJQAA";
 
   // Deserialize RuntimeTypeInfo
   var bytes = BASE64.decode(serializedRuntimeTypeInfo);
diff --git a/mojo/dart/packages/mojo/lib/mojo/bindings/types/mojom_files.mojom.dart b/mojo/dart/packages/mojo/lib/mojo/bindings/types/mojom_files.mojom.dart
index bccd039..ade7eb4 100644
--- a/mojo/dart/packages/mojo/lib/mojo/bindings/types/mojom_files.mojom.dart
+++ b/mojo/dart/packages/mojo/lib/mojo/bindings/types/mojom_files.mojom.dart
@@ -207,7 +207,7 @@
   ];
   Map<String, MojomFile> files = null;
   Map<String, mojom_types_mojom.UserDefinedType> resolvedTypes = null;
-  Map<String, mojom_types_mojom.UserDefinedValue> resolvedValues = null;
+  Map<String, mojom_types_mojom.DeclaredConstant> resolvedConstants = null;
 
   MojomFileGraph() : super(kVersions.last.size);
 
@@ -325,7 +325,7 @@
       {
         decoder1.decodeDataHeaderForMap();
         List<String> keys0;
-        List<mojom_types_mojom.UserDefinedValue> values0;
+        List<mojom_types_mojom.DeclaredConstant> values0;
         {
           
           var decoder2 = decoder1.decodePointer(bindings.ArrayDataHeader.kHeaderSize, false);
@@ -342,19 +342,16 @@
           
           var decoder2 = decoder1.decodePointer(bindings.ArrayDataHeader.kHeaderSize + bindings.kPointerSize, false);
           {
-            var si2 = decoder2.decodeDataHeaderForUnionArray(keys0.length);
-            values0 = new List<mojom_types_mojom.UserDefinedValue>(si2.numElements);
+            var si2 = decoder2.decodeDataHeaderForPointerArray(keys0.length);
+            values0 = new List<mojom_types_mojom.DeclaredConstant>(si2.numElements);
             for (int i2 = 0; i2 < si2.numElements; ++i2) {
               
-                values0[i2] = mojom_types_mojom.UserDefinedValue.decode(decoder2, bindings.ArrayDataHeader.kHeaderSize + bindings.kUnionSize * i2);
-                if (values0[i2] == null) {
-                  throw new bindings.MojoCodecError(
-                    'Trying to decode null union for non-nullable mojom_types_mojom.UserDefinedValue.');
-                }
+              var decoder3 = decoder2.decodePointer(bindings.ArrayDataHeader.kHeaderSize + bindings.kPointerSize * i2, false);
+              values0[i2] = mojom_types_mojom.DeclaredConstant.decode(decoder3);
             }
           }
         }
-        result.resolvedValues = new Map<String, mojom_types_mojom.UserDefinedValue>.fromIterables(
+        result.resolvedConstants = new Map<String, mojom_types_mojom.DeclaredConstant>.fromIterables(
             keys0, values0);
       }
     }
@@ -418,12 +415,12 @@
       rethrow;
     }
     try {
-      if (resolvedValues == null) {
+      if (resolvedConstants == null) {
         encoder0.encodeNullPointer(24, false);
       } else {
         var encoder1 = encoder0.encoderForMap(24);
-        var keys0 = resolvedValues.keys.toList();
-        var values0 = resolvedValues.values.toList();
+        var keys0 = resolvedConstants.keys.toList();
+        var values0 = resolvedConstants.values.toList();
         
         {
           var encoder2 = encoder1.encodePointerArray(keys0.length, bindings.ArrayDataHeader.kHeaderSize, bindings.kUnspecifiedArrayLength);
@@ -433,15 +430,15 @@
         }
         
         {
-          var encoder2 = encoder1.encodeUnionArray(values0.length, bindings.ArrayDataHeader.kHeaderSize + bindings.kPointerSize, bindings.kUnspecifiedArrayLength);
+          var encoder2 = encoder1.encodePointerArray(values0.length, bindings.ArrayDataHeader.kHeaderSize + bindings.kPointerSize, bindings.kUnspecifiedArrayLength);
           for (int i1 = 0; i1 < values0.length; ++i1) {
-            encoder2.encodeUnion(values0[i1], bindings.ArrayDataHeader.kHeaderSize + bindings.kUnionSize * i1, false);
+            encoder2.encodeStruct(values0[i1], bindings.ArrayDataHeader.kHeaderSize + bindings.kPointerSize * i1, false);
           }
         }
       }
     } on bindings.MojoCodecError catch(e) {
       e.message = "Error encountered while encoding field "
-          "resolvedValues of struct MojomFileGraph: $e";
+          "resolvedConstants of struct MojomFileGraph: $e";
       rethrow;
     }
   }
@@ -450,14 +447,14 @@
     return "MojomFileGraph("
            "files: $files" ", "
            "resolvedTypes: $resolvedTypes" ", "
-           "resolvedValues: $resolvedValues" ")";
+           "resolvedConstants: $resolvedConstants" ")";
   }
 
   Map toJson() {
     Map map = new Map();
     map["files"] = files;
     map["resolvedTypes"] = resolvedTypes;
-    map["resolvedValues"] = resolvedValues;
+    map["resolvedConstants"] = resolvedConstants;
     return map;
   }
 }
diff --git a/mojo/dart/packages/mojo/lib/mojo/bindings/types/mojom_types.mojom.dart b/mojo/dart/packages/mojo/lib/mojo/bindings/types/mojom_types.mojom.dart
index f98a5a6..4ef15b2 100644
--- a/mojo/dart/packages/mojo/lib/mojo/bindings/types/mojom_types.mojom.dart
+++ b/mojo/dart/packages/mojo/lib/mojo/bindings/types/mojom_types.mojom.dart
@@ -1414,10 +1414,9 @@
 
 class EnumValue extends bindings.Struct {
   static const List<bindings.StructDataHeader> kVersions = const [
-    const bindings.StructDataHeader(48, 0)
+    const bindings.StructDataHeader(40, 0)
   ];
   DeclarationData declData = null;
-  String enumTypeKey = null;
   Value initializerValue = null;
   int intValue = 0;
 
@@ -1463,15 +1462,11 @@
     }
     if (mainDataHeader.version >= 0) {
       
-      result.enumTypeKey = decoder0.decodeString(16, false);
+        result.initializerValue = Value.decode(decoder0, 16);
     }
     if (mainDataHeader.version >= 0) {
       
-        result.initializerValue = Value.decode(decoder0, 24);
-    }
-    if (mainDataHeader.version >= 0) {
-      
-      result.intValue = decoder0.decodeInt32(40);
+      result.intValue = decoder0.decodeInt32(32);
     }
     return result;
   }
@@ -1486,21 +1481,14 @@
       rethrow;
     }
     try {
-      encoder0.encodeString(enumTypeKey, 16, false);
-    } on bindings.MojoCodecError catch(e) {
-      e.message = "Error encountered while encoding field "
-          "enumTypeKey of struct EnumValue: $e";
-      rethrow;
-    }
-    try {
-      encoder0.encodeUnion(initializerValue, 24, true);
+      encoder0.encodeUnion(initializerValue, 16, true);
     } on bindings.MojoCodecError catch(e) {
       e.message = "Error encountered while encoding field "
           "initializerValue of struct EnumValue: $e";
       rethrow;
     }
     try {
-      encoder0.encodeInt32(intValue, 40);
+      encoder0.encodeInt32(intValue, 32);
     } on bindings.MojoCodecError catch(e) {
       e.message = "Error encountered while encoding field "
           "intValue of struct EnumValue: $e";
@@ -1511,7 +1499,6 @@
   String toString() {
     return "EnumValue("
            "declData: $declData" ", "
-           "enumTypeKey: $enumTypeKey" ", "
            "initializerValue: $initializerValue" ", "
            "intValue: $intValue" ")";
   }
@@ -1519,7 +1506,6 @@
   Map toJson() {
     Map map = new Map();
     map["declData"] = declData;
-    map["enumTypeKey"] = enumTypeKey;
     map["initializerValue"] = initializerValue;
     map["intValue"] = intValue;
     return map;
@@ -1914,16 +1900,16 @@
 }
 
 
-class UserValueReference extends bindings.Struct {
+class ConstantReference extends bindings.Struct {
   static const List<bindings.StructDataHeader> kVersions = const [
     const bindings.StructDataHeader(24, 0)
   ];
   String identifier = null;
-  String valueKey = null;
+  String constantKey = null;
 
-  UserValueReference() : super(kVersions.last.size);
+  ConstantReference() : super(kVersions.last.size);
 
-  static UserValueReference deserialize(bindings.Message message) {
+  static ConstantReference deserialize(bindings.Message message) {
     var decoder = new bindings.Decoder(message);
     var result = decode(decoder);
     if (decoder.excessHandles != null) {
@@ -1932,11 +1918,11 @@
     return result;
   }
 
-  static UserValueReference decode(bindings.Decoder decoder0) {
+  static ConstantReference decode(bindings.Decoder decoder0) {
     if (decoder0 == null) {
       return null;
     }
-    UserValueReference result = new UserValueReference();
+    ConstantReference result = new ConstantReference();
 
     var mainDataHeader = decoder0.decodeStructDataHeader();
     if (mainDataHeader.version <= kVersions.last.version) {
@@ -1962,7 +1948,7 @@
     }
     if (mainDataHeader.version >= 0) {
       
-      result.valueKey = decoder0.decodeString(16, true);
+      result.constantKey = decoder0.decodeString(16, false);
     }
     return result;
   }
@@ -1973,28 +1959,128 @@
       encoder0.encodeString(identifier, 8, false);
     } on bindings.MojoCodecError catch(e) {
       e.message = "Error encountered while encoding field "
-          "identifier of struct UserValueReference: $e";
+          "identifier of struct ConstantReference: $e";
       rethrow;
     }
     try {
-      encoder0.encodeString(valueKey, 16, true);
+      encoder0.encodeString(constantKey, 16, false);
     } on bindings.MojoCodecError catch(e) {
       e.message = "Error encountered while encoding field "
-          "valueKey of struct UserValueReference: $e";
+          "constantKey of struct ConstantReference: $e";
       rethrow;
     }
   }
 
   String toString() {
-    return "UserValueReference("
+    return "ConstantReference("
            "identifier: $identifier" ", "
-           "valueKey: $valueKey" ")";
+           "constantKey: $constantKey" ")";
   }
 
   Map toJson() {
     Map map = new Map();
     map["identifier"] = identifier;
-    map["valueKey"] = valueKey;
+    map["constantKey"] = constantKey;
+    return map;
+  }
+}
+
+
+class EnumValueReference extends bindings.Struct {
+  static const List<bindings.StructDataHeader> kVersions = const [
+    const bindings.StructDataHeader(32, 0)
+  ];
+  String identifier = null;
+  String enumTypeKey = null;
+  int enumValueIndex = 0;
+
+  EnumValueReference() : super(kVersions.last.size);
+
+  static EnumValueReference deserialize(bindings.Message message) {
+    var decoder = new bindings.Decoder(message);
+    var result = decode(decoder);
+    if (decoder.excessHandles != null) {
+      decoder.excessHandles.forEach((h) => h.close());
+    }
+    return result;
+  }
+
+  static EnumValueReference decode(bindings.Decoder decoder0) {
+    if (decoder0 == null) {
+      return null;
+    }
+    EnumValueReference result = new EnumValueReference();
+
+    var mainDataHeader = decoder0.decodeStructDataHeader();
+    if (mainDataHeader.version <= kVersions.last.version) {
+      // Scan in reverse order to optimize for more recent versions.
+      for (int i = kVersions.length - 1; i >= 0; --i) {
+        if (mainDataHeader.version >= kVersions[i].version) {
+          if (mainDataHeader.size == kVersions[i].size) {
+            // Found a match.
+            break;
+          }
+          throw new bindings.MojoCodecError(
+              'Header size doesn\'t correspond to known version size.');
+        }
+      }
+    } else if (mainDataHeader.size < kVersions.last.size) {
+      throw new bindings.MojoCodecError(
+        'Message newer than the last known version cannot be shorter than '
+        'required by the last known version.');
+    }
+    if (mainDataHeader.version >= 0) {
+      
+      result.identifier = decoder0.decodeString(8, false);
+    }
+    if (mainDataHeader.version >= 0) {
+      
+      result.enumTypeKey = decoder0.decodeString(16, false);
+    }
+    if (mainDataHeader.version >= 0) {
+      
+      result.enumValueIndex = decoder0.decodeUint32(24);
+    }
+    return result;
+  }
+
+  void encode(bindings.Encoder encoder) {
+    var encoder0 = encoder.getStructEncoderAtOffset(kVersions.last);
+    try {
+      encoder0.encodeString(identifier, 8, false);
+    } on bindings.MojoCodecError catch(e) {
+      e.message = "Error encountered while encoding field "
+          "identifier of struct EnumValueReference: $e";
+      rethrow;
+    }
+    try {
+      encoder0.encodeString(enumTypeKey, 16, false);
+    } on bindings.MojoCodecError catch(e) {
+      e.message = "Error encountered while encoding field "
+          "enumTypeKey of struct EnumValueReference: $e";
+      rethrow;
+    }
+    try {
+      encoder0.encodeUint32(enumValueIndex, 24);
+    } on bindings.MojoCodecError catch(e) {
+      e.message = "Error encountered while encoding field "
+          "enumValueIndex of struct EnumValueReference: $e";
+      rethrow;
+    }
+  }
+
+  String toString() {
+    return "EnumValueReference("
+           "identifier: $identifier" ", "
+           "enumTypeKey: $enumTypeKey" ", "
+           "enumValueIndex: $enumValueIndex" ")";
+  }
+
+  Map toJson() {
+    Map map = new Map();
+    map["identifier"] = identifier;
+    map["enumTypeKey"] = enumTypeKey;
+    map["enumValueIndex"] = enumValueIndex;
     return map;
   }
 }
@@ -3285,7 +3371,8 @@
 
 enum ValueTag {
   literalValue,
-  userValueReference,
+  constantReference,
+  enumValueReference,
   builtinValue,
   unknown
 }
@@ -3293,14 +3380,16 @@
 class Value extends bindings.Union {
   static final _tagToInt = const {
     ValueTag.literalValue: 0,
-    ValueTag.userValueReference: 1,
-    ValueTag.builtinValue: 2,
+    ValueTag.constantReference: 1,
+    ValueTag.enumValueReference: 2,
+    ValueTag.builtinValue: 3,
   };
 
   static final _intToTag = const {
     0: ValueTag.literalValue,
-    1: ValueTag.userValueReference,
-    2: ValueTag.builtinValue,
+    1: ValueTag.constantReference,
+    2: ValueTag.enumValueReference,
+    3: ValueTag.builtinValue,
   };
 
   var _data;
@@ -3318,15 +3407,26 @@
     _tag = ValueTag.literalValue;
     _data = value;
   }
-  UserValueReference get userValueReference {
-    if (_tag != ValueTag.userValueReference) {
-      throw new bindings.UnsetUnionTagError(_tag, ValueTag.userValueReference);
+  ConstantReference get constantReference {
+    if (_tag != ValueTag.constantReference) {
+      throw new bindings.UnsetUnionTagError(_tag, ValueTag.constantReference);
     }
     return _data;
   }
 
-  set userValueReference(UserValueReference value) {
-    _tag = ValueTag.userValueReference;
+  set constantReference(ConstantReference value) {
+    _tag = ValueTag.constantReference;
+    _data = value;
+  }
+  EnumValueReference get enumValueReference {
+    if (_tag != ValueTag.enumValueReference) {
+      throw new bindings.UnsetUnionTagError(_tag, ValueTag.enumValueReference);
+    }
+    return _data;
+  }
+
+  set enumValueReference(EnumValueReference value) {
+    _tag = ValueTag.enumValueReference;
     _data = value;
   }
   BuiltinConstantValue get builtinValue {
@@ -3355,10 +3455,15 @@
         var decoder1 = decoder0.decodePointer(offset + 8, false);
         result.literalValue = LiteralValue.decode(decoder1, 0);
         break;
-      case ValueTag.userValueReference:
+      case ValueTag.constantReference:
         
         var decoder1 = decoder0.decodePointer(offset + 8, false);
-        result.userValueReference = UserValueReference.decode(decoder1);
+        result.constantReference = ConstantReference.decode(decoder1);
+        break;
+      case ValueTag.enumValueReference:
+        
+        var decoder1 = decoder0.decodePointer(offset + 8, false);
+        result.enumValueReference = EnumValueReference.decode(decoder1);
         break;
       case ValueTag.builtinValue:
         
@@ -3383,8 +3488,11 @@
       case ValueTag.literalValue:
         encoder0.encodeNestedUnion(literalValue, offset + 8, false);
         break;
-      case ValueTag.userValueReference:
-        encoder0.encodeStruct(userValueReference, offset + 8, false);
+      case ValueTag.constantReference:
+        encoder0.encodeStruct(constantReference, offset + 8, false);
+        break;
+      case ValueTag.enumValueReference:
+        encoder0.encodeStruct(enumValueReference, offset + 8, false);
         break;
       case ValueTag.builtinValue:
         encoder0.encodeEnum(builtinValue, offset + 8);
@@ -3400,8 +3508,11 @@
       case ValueTag.literalValue:
         result += "literalValue";
         break;
-      case ValueTag.userValueReference:
-        result += "userValueReference";
+      case ValueTag.constantReference:
+        result += "constantReference";
+        break;
+      case ValueTag.enumValueReference:
+        result += "enumValueReference";
         break;
       case ValueTag.builtinValue:
         result += "builtinValue";
@@ -3758,108 +3869,3 @@
 }
 
 
-enum UserDefinedValueTag {
-  enumValue,
-  declaredConstant,
-  unknown
-}
-
-class UserDefinedValue extends bindings.Union {
-  static final _tagToInt = const {
-    UserDefinedValueTag.enumValue: 0,
-    UserDefinedValueTag.declaredConstant: 1,
-  };
-
-  static final _intToTag = const {
-    0: UserDefinedValueTag.enumValue,
-    1: UserDefinedValueTag.declaredConstant,
-  };
-
-  var _data;
-  UserDefinedValueTag _tag = UserDefinedValueTag.unknown;
-
-  UserDefinedValueTag get tag => _tag;
-  EnumValue get enumValue {
-    if (_tag != UserDefinedValueTag.enumValue) {
-      throw new bindings.UnsetUnionTagError(_tag, UserDefinedValueTag.enumValue);
-    }
-    return _data;
-  }
-
-  set enumValue(EnumValue value) {
-    _tag = UserDefinedValueTag.enumValue;
-    _data = value;
-  }
-  DeclaredConstant get declaredConstant {
-    if (_tag != UserDefinedValueTag.declaredConstant) {
-      throw new bindings.UnsetUnionTagError(_tag, UserDefinedValueTag.declaredConstant);
-    }
-    return _data;
-  }
-
-  set declaredConstant(DeclaredConstant value) {
-    _tag = UserDefinedValueTag.declaredConstant;
-    _data = value;
-  }
-
-  static UserDefinedValue decode(bindings.Decoder decoder0, int offset) {
-    int size = decoder0.decodeUint32(offset);
-    if (size == 0) {
-      return null;
-    }
-    UserDefinedValue result = new UserDefinedValue();
-
-    
-    UserDefinedValueTag tag = _intToTag[decoder0.decodeUint32(offset + 4)];
-    switch (tag) {
-      case UserDefinedValueTag.enumValue:
-        
-        var decoder1 = decoder0.decodePointer(offset + 8, false);
-        result.enumValue = EnumValue.decode(decoder1);
-        break;
-      case UserDefinedValueTag.declaredConstant:
-        
-        var decoder1 = decoder0.decodePointer(offset + 8, false);
-        result.declaredConstant = DeclaredConstant.decode(decoder1);
-        break;
-      default:
-        throw new bindings.MojoCodecError("Bad union tag: $tag");
-    }
-
-    return result;
-  }
-
-  void encode(bindings.Encoder encoder0, int offset) {
-    
-    encoder0.encodeUint32(16, offset);
-    encoder0.encodeUint32(_tagToInt[_tag], offset + 4);
-    switch (_tag) {
-      case UserDefinedValueTag.enumValue:
-        encoder0.encodeStruct(enumValue, offset + 8, false);
-        break;
-      case UserDefinedValueTag.declaredConstant:
-        encoder0.encodeStruct(declaredConstant, offset + 8, false);
-        break;
-      default:
-        throw new bindings.MojoCodecError("Bad union tag: $_tag");
-    }
-  }
-
-  String toString() {
-    String result = "UserDefinedValue(";
-    switch (_tag) {
-      case UserDefinedValueTag.enumValue:
-        result += "enumValue";
-        break;
-      case UserDefinedValueTag.declaredConstant:
-        result += "declaredConstant";
-        break;
-      default:
-        result += "unknown";
-    }
-    result += ": $_data)";
-    return result;
-  }
-}
-
-
diff --git a/mojo/dart/unittests/embedder_tests/bindings_generation_test.dart b/mojo/dart/unittests/embedder_tests/bindings_generation_test.dart
index 80cd0d4..efc3bf7 100644
--- a/mojo/dart/unittests/embedder_tests/bindings_generation_test.dart
+++ b/mojo/dart/unittests/embedder_tests/bindings_generation_test.dart
@@ -453,8 +453,7 @@
     Expect.isNotNull(ev.declData);
     Expect.isNotNull(labelMap[ev.declData.shortName]);
 
-    // Check that the enumTypeKey matches the enumID.
-    Expect.equals(ev.enumTypeKey, enumID);
+    // Check that the enum value's intValue is as expected.
     Expect.equals(ev.intValue, labelMap[ev.declData.shortName]);
   });
 }
diff --git a/mojo/go/tests/validation_type_test.go b/mojo/go/tests/validation_type_test.go
index bb2ba6f..d95cff4 100644
--- a/mojo/go/tests/validation_type_test.go
+++ b/mojo/go/tests/validation_type_test.go
@@ -71,22 +71,6 @@
 		if _, ok := labelMap[*label.DeclData.ShortName]; !ok {
 			t.Fatalf("Declaration Data's ShortName for BasicEnum's label %s is unknown ", *label.DeclData.ShortName)
 		}
-		// label's EnumTypeKey must be correct.
-		if label.EnumTypeKey == "" {
-			t.Fatalf("EnumTypeKey for BasicEnum's label %s was empty.", *label.DeclData.ShortName)
-		}
-		userDefinedType := test.GetAllMojomTypeDefinitions()[label.EnumTypeKey]
-		if userDefinedType == nil {
-			t.Fatalf("EnumTypeKey for BasicEnum's label %s was invalid:.", *label.DeclData.ShortName, label.EnumTypeKey)
-		}
-		enumType, ok := userDefinedType.(*mojom_types.UserDefinedTypeEnumType)
-		if !ok {
-			t.Fatalf("UserDefinedType for the EnumTypeKey for BasicEnum's label %s was not a EnumType", *label.DeclData.ShortName)
-		}
-		if *enumType.Value.DeclData.FullIdentifier != fullIdentifier {
-			t.Fatalf("EnumTypeKey for BasicEnum's label %s was %s.", *label.DeclData.ShortName, label.EnumTypeKey)
-		}
-
 		// Check that the label's IntValue matches the expected one.
 		if expectedOrdinal := labelMap[*label.DeclData.ShortName]; label.IntValue != expectedOrdinal {
 			t.Fatalf("IntValue for Enum BasicEnum's label %s was %d but expected %d",
diff --git a/mojo/public/interfaces/bindings/mojom_files.mojom b/mojo/public/interfaces/bindings/mojom_files.mojom
index 6914434..823f4e3 100644
--- a/mojo/public/interfaces/bindings/mojom_files.mojom
+++ b/mojo/public/interfaces/bindings/mojom_files.mojom
@@ -17,8 +17,8 @@
  * code generators passing them data derived from the MojomFileGraph.
  *
  * A MojomFile represents the data parsed from a single .mojom file. Mojom
- * modules form a directed acyclic graph via the "imports" relation.
- * That is, if Module A imports Module B then there is a directed edge in the
+ * files form a directed acyclic graph via the "imports" relation.
+ * That is, if file A imports file B then there is a directed edge in the
  * graph from A to B. A MojomFileGraph represents the whole Graph.
 
  * The Mojom structures represented here have been fully resolved, meaning that
@@ -81,27 +81,26 @@
   // All the files in this graph. The keys are |file_name|s.
   map<string, MojomFile> files;
 
-  // All the resolved user-defined types known to this structure. The keys are
+  // All the resolved user-defined types in all the files in the graph. The keys are
   // the |type_key|s.
   map<string, UserDefinedType> resolved_types;
 
-  // All the resolved user-defined values known to this structure. The keys are
-  // the |value_key|s.
-  map<string, UserDefinedValue> resolved_values;
+  // All the resolved DeclaredConstants in all the files in the graph. The keys are
+  // the |constant_key|s.
+  map<string, DeclaredConstant> resolved_constants;
 };
 
-// A KeysByType struct organizes by type all of the type and constant keys known
-// to an associated MojomFileGraph.
+// A KeysByType struct organizes by type the keys of all types and consants in
+// a MojomFile
 struct KeysByType {
-  // All the type_keys known to the owning MojomFileGraph, organized by
-  // type;
+  // The type keys of the types in the MojomFile.
   array<string>? interfaces;
   array<string>? structs;
   array<string>? unions;
   array<string>? top_level_enums;
   array<string>? embedded_enums;
 
-  // All the constant_keys known to the owning MojomFileGraph.
+  // The constant keys of the constants in the MojomFile.
   array<string>? top_level_constants;
   array<string>? embedded_constants;
 };
diff --git a/mojo/public/interfaces/bindings/mojom_types.mojom b/mojo/public/interfaces/bindings/mojom_types.mojom
index bc79282..4b68fbb 100644
--- a/mojo/public/interfaces/bindings/mojom_types.mojom
+++ b/mojo/public/interfaces/bindings/mojom_types.mojom
@@ -38,14 +38,11 @@
  * We refer to this higher-layer context as the *owning context.*
  *
  * In addition to types, Mojom values are also representd by structures in this
- * file. A |Value| may be a LiteralValue, a UserValueReference or a
- * BuiltinConstantValue. Similarly to the situation with TypeReferences,
- * UserValueReferences contain a |value_key| which may be used to lookup
- * a UserDefinedValue (an EnumValue or a DeclaredConstant) in
- * the owning context. For example the |MojomFileGraph| struct in
- * mojom_files.mojom contains the map:
- *     map<string, UserDefinedValue> resolved_values;
- * for this purpose.
+ * file. A |Value| may be a LiteralValue, a ConstantReference, 
+ * an EnumValueReference or a BuiltinConstantValue. Similarly to the situation 
+ * with TypeReferences, ConstantReferences and EnumValueReferences contain a 
+ * key which may be used to lookup user-defined value (an EnumValue or a
+ * DeclaredConstant) in the owning context. 
  */
 
 // The different kinds of types. We divide the types into five categories:
@@ -239,14 +236,11 @@
 struct EnumValue {
   DeclarationData? decl_data;
 
-  // The type key of the enum that this value belongs to.
-  string enum_type_key;
-
   // This is the value specified in the right-hand-side of the optional
   // initializer of an enum value declaration. The value must be a literal value
-  // of integer type or a UserValueReference that resolves to a different
-  // EnumValue from the same enum that was defined earlier lexically,
-  // or a UserValueReference that resolves to
+  // of integer type or an EnumValueReference that resolves to a different
+  // EnumValue from the same MojomEnum that was defined earlier lexically,
+  // or a ConstantReference that resolves to
   // a DeclaredConstant whose |resolved_concrete_value| is one of those.
   Value? initializer_value;
 
@@ -259,6 +253,7 @@
 struct MojomEnum {
   DeclarationData? decl_data;  // Some implementations may not provide this.
 
+  // The enum values in declaration order.
   array<EnumValue> values;
 };
 
@@ -316,8 +311,11 @@
   // A literal number, boolean or string
   LiteralValue literal_value;
 
-  // A reference to a user-defined value (a declared constant or enum value.)
-  UserValueReference user_value_reference;
+  // A reference to a DeclaredConstant.
+  ConstantReference constant_reference;
+
+  // A reference to an EnumValue
+  EnumValueReference enum_value_reference;
 
   // A built-in numeric constant.
   BuiltinConstantValue builtin_value;
@@ -348,20 +346,29 @@
   FLOAT_NAN,
 };
 
-// A reference to a user-defined value (a declared constant or enum value.)
-struct UserValueReference {
+// A reference to a DeclaredConstant.
+struct ConstantReference {
   // The identifier, as it appears at the reference site.
   string identifier;
 
-  // The key to the resolved value of this identifier. It refers to
-  // an instance of |UserDefinedValue| and so an EnumValue or
-  // DeclaredConstant.
-  string? value_key;
+  // The DeclaredConstant to which this reference has resolved can be looked up 
+  // using this key in the appropriate map in the owning context.
+  string constant_key;
 };
 
-union UserDefinedValue {
-  EnumValue enum_value;
-  DeclaredConstant declared_constant;
+// A reference to an EnumValue
+struct EnumValueReference {
+  // The identifier, as it appears at the reference site.
+  string identifier;
+
+  // The type key of the MojomEnum containing the EnumValue to which this
+  // reference has resolved. The MojomEnum can be looked up using this key in
+  // the appropriate map in the owning context. 
+  string enum_type_key;
+
+  // The 0-based index into the |values| array within the MojomEnum specified 
+  // by |enum_type_key| of the EnumValue to which this reference has resolved.
+  uint32 enum_value_index;
 };
 
 // This represents a Mojom constant declaration.
@@ -375,34 +382,33 @@
   // This is the value specified in the right-hand-side of the constant
   // declaration. The value must be one of the following:
   // (a) a LiteralValue or a BuiltinConstantValue of the same type as |type|
-  // (b) a UserValueReference whose resolved value is an EnumValue of the same
-  // type as |type|, or
-  // (c) a UserValueReference whose resolved value is a different
+  // (b) an EnumValueReference that resolves to an EnumValue of the same
+  // enum type as |type|, or
+  // (c) a ConstantReference that resolves to a different
   // DeclaredConstant whose |resolved_concrete_value| is one of (a) or (b)
   Value value;
 
 
   // The resolved concrete value. This must be a LiteralValue, a
-  // BuiltinConstantValue, or UserValueReference that resolves to an
-  // EnumValue. It may not be a UserValueReference that resolves
-  // to a DeclaredConstant.
+  // BuiltinConstantValue, or an EnumValueReference. It may not be a 
+  // ConstantReference.
   //
   // The resolved concrete value is defined as follows:
-  // If |value| is a LiteralValue, a BuiltinConstantValue or a
-  // UserValueReference that refers to an EnumValue then the resolved
+  // If |value| is a LiteralValue, a BuiltinConstantValue or an
+  // EnunValueReference then the resolved
   // concrete value is conceptually equal to |value| and this will
   // be indicated by setting the |resolved_concrete_value| field to null.
   //
-  // Otherwise |value| is a UserValueReference that refers to a different
+  // Otherwise |value| is a ConstantReference that refers to a different
   // DeclaredConstant and in this case |resolved_concrete_value| will be
   // non-null. It will be set to the conceptual resolved concrete value of that
   // other DeclaredConstant (even if that other declared constant has its own
   // |resolved_concrete_value| field set to null.) This chain of references
   // must terminate in well-formed Mojom.
   //
-  // In the case that |resolved_concrete_value| is set to a UserValueReference,
-  // only the |value_key| field of the UserValueReference is meaningful. The
-  // other fields should be ignored.
+  // In the case that |resolved_concrete_value| is set to an EnumValueReference
+  // only the |enum_type_key| and |enum_value_index| fields of the 
+  // EnumValueReference are meaningful. The other fields should be ignored.
   Value? resolved_concrete_value;
 };
 
diff --git a/mojo/public/tools/bindings/mojom_tool/bin/linux64/mojom.sha1 b/mojo/public/tools/bindings/mojom_tool/bin/linux64/mojom.sha1
index ad2de1d..6315bc3 100644
--- a/mojo/public/tools/bindings/mojom_tool/bin/linux64/mojom.sha1
+++ b/mojo/public/tools/bindings/mojom_tool/bin/linux64/mojom.sha1
@@ -1 +1 @@
-98f6e516f4fbabd421f6090632783f117f7dc687
\ No newline at end of file
+d84f07bd0b75a4ebf505375238e6bb7e23c894b3
\ No newline at end of file
diff --git a/mojo/public/tools/bindings/mojom_tool/bin/mac64/mojom.sha1 b/mojo/public/tools/bindings/mojom_tool/bin/mac64/mojom.sha1
index 4c36fff..8b19cd4 100644
--- a/mojo/public/tools/bindings/mojom_tool/bin/mac64/mojom.sha1
+++ b/mojo/public/tools/bindings/mojom_tool/bin/mac64/mojom.sha1
@@ -1 +1 @@
-cc88ce85a04fa888ad6322a71695aba30774a1b1
\ No newline at end of file
+629a131f79909f9e77eda82253cee731427f6e9e
\ No newline at end of file
diff --git a/mojo/public/tools/bindings/pylib/mojom/generate/generated/mojom_files_mojom.py b/mojo/public/tools/bindings/pylib/mojom/generate/generated/mojom_files_mojom.py
index 6bd12d2..f14bda7 100644
--- a/mojo/public/tools/bindings/pylib/mojom/generate/generated/mojom_files_mojom.py
+++ b/mojo/public/tools/bindings/pylib/mojom/generate/generated/mojom_files_mojom.py
@@ -27,7 +27,7 @@
     'fields': [
       _descriptor.SingleFieldGroup('files', _descriptor.MapType(_descriptor.TYPE_STRING, _descriptor.StructType(lambda: MojomFile)), 0, 0),
       _descriptor.SingleFieldGroup('resolved_types', _descriptor.MapType(_descriptor.TYPE_STRING, _descriptor.UnionType(lambda: mojom_types_mojom.UserDefinedType)), 1, 0),
-      _descriptor.SingleFieldGroup('resolved_values', _descriptor.MapType(_descriptor.TYPE_STRING, _descriptor.UnionType(lambda: mojom_types_mojom.UserDefinedValue)), 2, 0),
+      _descriptor.SingleFieldGroup('resolved_constants', _descriptor.MapType(_descriptor.TYPE_STRING, _descriptor.StructType(lambda: mojom_types_mojom.DeclaredConstant)), 2, 0),
     ],
   }
 
diff --git a/mojo/public/tools/bindings/pylib/mojom/generate/generated/mojom_types_mojom.py b/mojo/public/tools/bindings/pylib/mojom/generate/generated/mojom_types_mojom.py
index dae6e6a..3ca0cba 100644
--- a/mojo/public/tools/bindings/pylib/mojom/generate/generated/mojom_types_mojom.py
+++ b/mojo/public/tools/bindings/pylib/mojom/generate/generated/mojom_types_mojom.py
@@ -150,9 +150,8 @@
   DESCRIPTOR = {
     'fields': [
       _descriptor.SingleFieldGroup('decl_data', _descriptor.StructType(lambda: DeclarationData, nullable=True), 0, 0),
-      _descriptor.SingleFieldGroup('enum_type_key', _descriptor.TYPE_STRING, 1, 0),
-      _descriptor.SingleFieldGroup('initializer_value', _descriptor.UnionType(lambda: Value, nullable=True), 2, 0),
-      _descriptor.SingleFieldGroup('int_value', _descriptor.TYPE_INT32, 3, 0),
+      _descriptor.SingleFieldGroup('initializer_value', _descriptor.UnionType(lambda: Value, nullable=True), 1, 0),
+      _descriptor.SingleFieldGroup('int_value', _descriptor.TYPE_INT32, 2, 0),
     ],
   }
 
@@ -188,12 +187,22 @@
     ],
   }
 
-class UserValueReference(object):
+class ConstantReference(object):
   __metaclass__ = _reflection.MojoStructType
   DESCRIPTOR = {
     'fields': [
       _descriptor.SingleFieldGroup('identifier', _descriptor.TYPE_STRING, 0, 0),
-      _descriptor.SingleFieldGroup('value_key', _descriptor.TYPE_NULLABLE_STRING, 1, 0),
+      _descriptor.SingleFieldGroup('constant_key', _descriptor.TYPE_STRING, 1, 0),
+    ],
+  }
+
+class EnumValueReference(object):
+  __metaclass__ = _reflection.MojoStructType
+  DESCRIPTOR = {
+    'fields': [
+      _descriptor.SingleFieldGroup('identifier', _descriptor.TYPE_STRING, 0, 0),
+      _descriptor.SingleFieldGroup('enum_type_key', _descriptor.TYPE_STRING, 1, 0),
+      _descriptor.SingleFieldGroup('enum_value_index', _descriptor.TYPE_UINT32, 2, 0),
     ],
   }
 
@@ -298,8 +307,9 @@
   DESCRIPTOR = {
     'fields': [
       _descriptor.SingleFieldGroup('literal_value', _descriptor.UnionType(lambda: LiteralValue), 0, 0),
-      _descriptor.SingleFieldGroup('user_value_reference', _descriptor.StructType(lambda: UserValueReference), 1, 0),
-      _descriptor.SingleFieldGroup('builtin_value', _descriptor.TYPE_INT32, 2, 0),
+      _descriptor.SingleFieldGroup('constant_reference', _descriptor.StructType(lambda: ConstantReference), 1, 0),
+      _descriptor.SingleFieldGroup('enum_value_reference', _descriptor.StructType(lambda: EnumValueReference), 2, 0),
+      _descriptor.SingleFieldGroup('builtin_value', _descriptor.TYPE_INT32, 3, 0),
     ],
    }
 
@@ -322,12 +332,3 @@
     ],
    }
 
-class UserDefinedValue(object):
-  __metaclass__ = _reflection.MojoUnionType
-  DESCRIPTOR = {
-    'fields': [
-      _descriptor.SingleFieldGroup('enum_value', _descriptor.StructType(lambda: EnumValue), 0, 0),
-      _descriptor.SingleFieldGroup('declared_constant', _descriptor.StructType(lambda: DeclaredConstant), 1, 0),
-    ],
-   }
-
diff --git a/mojo/public/tools/bindings/pylib/mojom/generate/mojom_translator.py b/mojo/public/tools/bindings/pylib/mojom/generate/mojom_translator.py
index 222261d..ed117c0 100755
--- a/mojo/public/tools/bindings/pylib/mojom/generate/mojom_translator.py
+++ b/mojo/public/tools/bindings/pylib/mojom/generate/mojom_translator.py
@@ -73,7 +73,7 @@
     if mojom_file.declared_mojom_objects:
       if mojom_file.declared_mojom_objects.top_level_constants:
         mod.constants = [
-            self.ConstantFromValueKey(key)
+            self.ConstantFromKey(key)
             for key in mojom_file.declared_mojom_objects.top_level_constants]
 
       user_defined_types = ['interfaces', 'structs', 'unions']
@@ -336,7 +336,7 @@
 
     if contained_declarations.constants:
       for const_key in contained_declarations.constants:
-        const = self.ConstantFromValueKey(const_key)
+        const = self.ConstantFromKey(const_key)
         parent_kind.constants.append(const)
 
   def EnumFromMojom(self, enum, mojom_type):
@@ -511,22 +511,23 @@
 
     return method
 
-  def ConstantFromValueKey(self, value_key):
-    """Takes a value key into a graph.resolved_values referring to a constant
-    and returns the module equivalent.
+  def ConstantFromKey(self, constant_key):
+    """Takes a key into the map graph.resolved_constants and returns the module
+    equivalent constant.
 
     Args:
-      value_key: {str} the value key referring to the value to be returned.
+      constant_key: {str} the key referring to the constant whose translation
+        is to be returned.
 
     Returns:
       {module.Constant} translated.
     """
-    if value_key in self._constant_cache:
-      return self._constant_cache[value_key]
+    if constant_key in self._constant_cache:
+      return self._constant_cache[constant_key]
 
-    mojom_const = self._graph.resolved_values[value_key].declared_constant
+    mojom_const = self._graph.resolved_constants[constant_key]
     const = module.Constant()
-    self._constant_cache[value_key] = const
+    self._constant_cache[constant_key] = const
 
     self.ConstantFromMojom(const, mojom_const)
     return const
@@ -598,75 +599,82 @@
         mojom_types_mojom.BuiltinConstantValue.FLOAT_NAN: 'float.NAN',
           }
       return module.BuiltinValue(mojom_to_builtin[value.builtin_value])
+    return self.FromUserValueReference(value)
 
-    assert value.tag == mojom_types_mojom.Value.Tags.user_value_reference
-    return self.UserDefinedFromValueKey(value.user_value_reference.value_key)
-
-  def UserDefinedFromValueKey(self, value_key):
-    """Takes a value key into graph.resolved_values and returns the module
-    equivalent.
+  def FromUserValueReference(self, value):
+    """Translates a mojom_types.EnumValueReference or ConstantReference into the
+    module equivalent.
 
     Args:
-      value_key: {str} the value key referring to the value to be returned.
+      value: {mojom_types_mojom.Value} the value ref to be translated. It
+      must be of type EnumValueReference or ConstantReference.
 
     Returns:
       {module.EnumValue|module.ConstantValue} translated.
     """
-    if value_key in self._value_cache:
-      return self._value_cache[value_key]
+    if value.tag == mojom_types_mojom.Value.Tags.constant_reference:
+      return self.ConstantValueFromKey(value.constant_reference.constant_key)
+    assert value.tag == mojom_types_mojom.Value.Tags.enum_value_reference
+    return self.EnumValueFromKey(value.enum_value_reference.enum_type_key,
+        value.enum_value_reference.enum_value_index)
 
-    value = self._graph.resolved_values[value_key]
-    if value.tag == mojom_types_mojom.UserDefinedValue.Tags.enum_value:
-      return self.EnumValueFromMojom(value.enum_value)
-    return self.ConstantValueFromValueKey(value_key)
-
-  def ConstantValueFromValueKey(self, value_key):
-    """Takes a value key into graph.resolved_values referring to a declared
-    constant and returns the module equivalent.
+  def ConstantValueFromKey(self, constant_key):
+    """Takes a key into graph.resolved_constants referring to a
+    mojom declared_constant and returns a module.ConstantValue referring to the
+    module equivalent constant.
 
     Args:
-      value_key: {str} the value key referring to the value to be returned.
+      constant_key: {str} the constant key referring to a constant.
 
     Returns:
       {module.ConstantValue} translated.
     """
-    const_value = module.ConstantValue()
-    self._value_cache[value_key] = const_value
+    if constant_key in self._value_cache:
+      return self._value_cache[constant_key]
 
-    const = self.ConstantFromValueKey(value_key)
+    const_value = module.ConstantValue()
+    self._value_cache[constant_key] = const_value
+
+    const = self.ConstantFromKey(constant_key)
     const_value.constant = const
     const_value.name = const.name
     const_value.parent_kind = const.parent_kind
     self.PopulateModuleOrImportedFrom(const_value,
-        self._graph.resolved_values[value_key].declared_constant)
+        self._graph.resolved_constants[constant_key])
     const_value.namespace = const_value.module.namespace
     return const_value
 
-  def EnumValueFromMojom(self, mojom_enum_value):
-    """Translates an mojom_types_mojom.EnumValue to a module.EnumValue.
+  def EnumValueFromKey(self, enum_type_key, enum_value_index):
+    """Takes an enum type key and an enum value index (together these
+    form a key to a mojom_enum_value) and returns a module.EnumValue referring
+    the module equivalent enum value
 
-    mojom_enum_value: {mojom_types_mojom.EnumValue} to be translated.
+    Args:
+      enum_type_key: {str} the type key of a mojom_enum
+      enum_value_index: {int} the 0-based index into the |values| array of
+        the mojom_enum
 
     Returns:
       {module.EnumValue} translated from mojom_enum_value.
     """
-    enum_type_key = mojom_enum_value.enum_type_key
-    name = mojom_enum_value.decl_data.short_name
-    value_key = (enum_type_key, name)
-    if value_key in self._value_cache:
-      return self._value_cache[value_key]
+    enum_value_key = (enum_type_key, enum_value_index)
+    if enum_value_key in self._value_cache:
+      return self._value_cache[enum_value_key]
+
+    mojom_enum = self._graph.resolved_types[enum_type_key].enum_type
+    mojom_enum_value = mojom_enum.values[enum_value_index]
 
     # We need to create and cache the EnumValue object just in case later calls
     # require the creation of that same EnumValue object.
     enum_value = module.EnumValue()
-    self._value_cache[value_key] = enum_value
+    self._value_cache[enum_value_key] = enum_value
 
     enum = self.UserDefinedFromTypeKey(enum_type_key)
     enum_value.enum = enum
     self.PopulateModuleOrImportedFrom(enum_value, mojom_enum_value)
     enum_value.namespace = enum_value.module.namespace
     enum_value.parent_kind = enum.parent_kind
-    enum_value.name = name
+    enum_value.name = mojom_enum_value.decl_data.short_name
 
     return enum_value
 
diff --git a/mojo/public/tools/bindings/pylib/mojom/generate/mojom_translator_unittest.py b/mojo/public/tools/bindings/pylib/mojom/generate/mojom_translator_unittest.py
index 03e20c7..5999305 100644
--- a/mojo/public/tools/bindings/pylib/mojom/generate/mojom_translator_unittest.py
+++ b/mojo/public/tools/bindings/pylib/mojom/generate/mojom_translator_unittest.py
@@ -115,16 +115,14 @@
         value=mojom_types_mojom.Value(
           literal_value=mojom_types_mojom.LiteralValue(
             int64_value=30)))
-    user_defined_value = mojom_types_mojom.UserDefinedValue()
-    user_defined_value.declared_constant = mojom_const
-    graph.resolved_values = {'value_key': user_defined_value}
+    graph.resolved_constants = {'constant_key': mojom_const}
 
     mojom_file.declared_mojom_objects = mojom_files_mojom.KeysByType(
         interfaces=['interface_key'],
         structs=['struct_key'],
         unions=['union_key'],
         top_level_enums=['enum_key'],
-        top_level_constants=['value_key']
+        top_level_constants=['constant_key']
         )
 
     mod = mojom_translator.FileTranslator(graph, file_name).Translate()
@@ -367,13 +365,11 @@
         source_file_info=mojom_types_mojom.SourceFileInfo(file_name=file_name))
     value1 = mojom_types_mojom.EnumValue(
         decl_data=mojom_types_mojom.DeclarationData(short_name='val1'),
-        enum_type_key='AnEnum',
         initializer_value=mojom_types_mojom.Value(
             literal_value=mojom_types_mojom.LiteralValue(uint64_value=20)),
         int_value=20)
     value2 = mojom_types_mojom.EnumValue(
         decl_data=mojom_types_mojom.DeclarationData(short_name='val2'),
-        enum_type_key='AnEnum',
         int_value=70)
     mojom_enum.values = [value1, value2]
 
@@ -757,12 +753,10 @@
         value=mojom_types_mojom.Value(
           literal_value=mojom_types_mojom.LiteralValue(
             int64_value=30)))
-    user_defined_value = mojom_types_mojom.UserDefinedValue()
-    user_defined_value.declared_constant = mojom_const
-    graph.resolved_values = {'value_key': user_defined_value}
+    graph.resolved_constants = {'constant_key': mojom_const}
 
     contained_declarations = mojom_types_mojom.ContainedDeclarations(
-        enums=['enum_key'], constants=['value_key'])
+        enums=['enum_key'], constants=['constant_key'])
 
     translator = mojom_translator.FileTranslator(graph, file_name)
     struct = module.Struct(name='parent')
@@ -838,28 +832,23 @@
           short_name='val1',
           source_file_info=mojom_types_mojom.SourceFileInfo(
             file_name=file_name)),
-        enum_type_key='enum_key',
         initializer_value=mojom_types_mojom.Value(
             literal_value=mojom_types_mojom.LiteralValue(uint64_value=20)),
         int_value=20)
     value2 = mojom_types_mojom.EnumValue(
         decl_data=mojom_types_mojom.DeclarationData(short_name='val2'),
-        enum_type_key='enum_key',
         int_value=70)
     mojom_enum.values = [value1, value2]
 
     graph = mojom_files_mojom.MojomFileGraph()
     graph.resolved_types = {
         'enum_key': mojom_types_mojom.UserDefinedType(enum_type=mojom_enum)}
-    graph.resolved_values = {
-        'enum_value1': mojom_types_mojom.UserDefinedValue(enum_value=value1),
-        'enum_value2': mojom_types_mojom.UserDefinedValue(enum_value=value2),
-        }
 
     mojom = mojom_types_mojom.Value(
-        user_value_reference=mojom_types_mojom.UserValueReference(
+        enum_value_reference=mojom_types_mojom.EnumValueReference(
           identifier='SOMEID',
-          value_key='enum_value1'))
+          enum_type_key='enum_key',
+          enum_value_index=0))
 
     translator = mojom_translator.FileTranslator(graph, file_name)
     enum_value = translator.ValueFromMojom(mojom)
@@ -880,21 +869,19 @@
         value=mojom_types_mojom.Value(
           literal_value=mojom_types_mojom.LiteralValue(
             int64_value=30)))
-    user_defined_value = mojom_types_mojom.UserDefinedValue()
-    user_defined_value.declared_constant = mojom_const
 
     graph = mojom_files_mojom.MojomFileGraph()
-    graph.resolved_values = {'value_key': user_defined_value}
+    graph.resolved_constants = {'constant_key': mojom_const}
 
     mojom = mojom_types_mojom.Value(
-        user_value_reference=mojom_types_mojom.UserValueReference(
+        constant_reference=mojom_types_mojom.ConstantReference(
           identifier='SOMEID',
-          value_key='value_key'))
+          constant_key='constant_key'))
 
     translator = mojom_translator.FileTranslator(graph, file_name)
     const_value = translator.ValueFromMojom(mojom)
     self.assertIs(
-        translator.ConstantFromValueKey('value_key'), const_value.constant)
+        translator.ConstantFromKey('constant_key'), const_value.constant)
     self.assertIs(mojom_const.decl_data.short_name, const_value.name)
 
 
diff --git a/mojom/generated/mojom_files/mojom_files.mojom.go b/mojom/generated/mojom_files/mojom_files.mojom.go
index 98471af..9aba8d8 100644
--- a/mojom/generated/mojom_files/mojom_files.mojom.go
+++ b/mojom/generated/mojom_files/mojom_files.mojom.go
@@ -287,9 +287,9 @@
 }
 
 type MojomFileGraph struct {
-	Files          map[string]MojomFile
-	ResolvedTypes  map[string]mojom_types.UserDefinedType
-	ResolvedValues map[string]mojom_types.UserDefinedValue
+	Files             map[string]MojomFile
+	ResolvedTypes     map[string]mojom_types.UserDefinedType
+	ResolvedConstants map[string]mojom_types.DeclaredConstant
 }
 
 func (s *MojomFileGraph) Encode(encoder *bindings.Encoder) error {
@@ -412,18 +412,18 @@
 	encoder.StartMap()
 	{
 		var keys0 []string
-		var values0 []mojom_types.UserDefinedValue
+		var values0 []mojom_types.DeclaredConstant
 		if encoder.Deterministic() {
-			for key0, _ := range s.ResolvedValues {
+			for key0, _ := range s.ResolvedConstants {
 				keys0 = append(keys0, key0)
 			}
 			bindings.SortMapKeys(&keys0)
-			values0 = make([]mojom_types.UserDefinedValue, len(keys0))
+			values0 = make([]mojom_types.DeclaredConstant, len(keys0))
 			for i, key := range keys0 {
-				values0[i] = s.ResolvedValues[key]
+				values0[i] = s.ResolvedConstants[key]
 			}
 		} else {
-			for key0, value0 := range s.ResolvedValues {
+			for key0, value0 := range s.ResolvedConstants {
 				keys0 = append(keys0, key0)
 				values0 = append(values0, value0)
 			}
@@ -446,10 +446,10 @@
 		if err := encoder.WritePointer(); err != nil {
 			return err
 		}
-		encoder.StartArray(uint32(len(values0)), 128)
+		encoder.StartArray(uint32(len(values0)), 64)
 		for _, elem1 := range values0 {
-			if elem1 == nil {
-				return &bindings.ValidationError{bindings.UnexpectedNullUnion, "unexpected null union"}
+			if err := encoder.WritePointer(); err != nil {
+				return err
 			}
 			if err := elem1.Encode(encoder); err != nil {
 				return err
@@ -719,7 +719,7 @@
 					}
 				}
 			}
-			var values0 []mojom_types.UserDefinedValue
+			var values0 []mojom_types.DeclaredConstant
 			{
 				pointer1, err := decoder.ReadPointer()
 				if err != nil {
@@ -728,19 +728,22 @@
 				if pointer1 == 0 {
 					return &bindings.ValidationError{bindings.UnexpectedNullPointer, "unexpected null pointer"}
 				} else {
-					len1, err := decoder.StartArray(128)
+					len1, err := decoder.StartArray(64)
 					if err != nil {
 						return err
 					}
-					values0 = make([]mojom_types.UserDefinedValue, len1)
+					values0 = make([]mojom_types.DeclaredConstant, len1)
 					for i1 := uint32(0); i1 < len1; i1++ {
-						var err error
-						values0[i1], err = mojom_types.DecodeUserDefinedValue(decoder)
+						pointer2, err := decoder.ReadPointer()
 						if err != nil {
 							return err
 						}
-						if values0[i1] == nil {
-							return &bindings.ValidationError{bindings.UnexpectedNullUnion, "unexpected null union"}
+						if pointer2 == 0 {
+							return &bindings.ValidationError{bindings.UnexpectedNullPointer, "unexpected null pointer"}
+						} else {
+							if err := values0[i1].Decode(decoder); err != nil {
+								return err
+							}
 						}
 					}
 					if err := decoder.Finish(); err != nil {
@@ -757,11 +760,11 @@
 				return err
 			}
 			len0 := len(keys0)
-			map0 := make(map[string]mojom_types.UserDefinedValue)
+			map0 := make(map[string]mojom_types.DeclaredConstant)
 			for i0 := 0; i0 < len0; i0++ {
 				map0[keys0[i0]] = values0[i0]
 			}
-			s.ResolvedValues = map0
+			s.ResolvedConstants = map0
 		}
 	}
 	if err := decoder.Finish(); err != nil {
diff --git a/mojom/generated/mojom_types/mojom_types.mojom.go b/mojom/generated/mojom_types/mojom_types.mojom.go
index 5db8a33..b66e55f 100644
--- a/mojom/generated/mojom_types/mojom_types.mojom.go
+++ b/mojom/generated/mojom_types/mojom_types.mojom.go
@@ -20,7 +20,7 @@
 type SimpleType int32
 
 const (
-	SimpleType_Bool = 0
+	SimpleType_Bool SimpleType = 0
 	SimpleType_Double = SimpleType_Bool + 1;
 	SimpleType_Float = SimpleType_Double + 1;
 	SimpleType_Int8 = SimpleType_Float + 1;
@@ -37,7 +37,7 @@
 type BuiltinConstantValue int32
 
 const (
-	BuiltinConstantValue_DoubleInfinity = 0
+	BuiltinConstantValue_DoubleInfinity BuiltinConstantValue = 0
 	BuiltinConstantValue_DoubleNegativeInfinity = BuiltinConstantValue_DoubleInfinity + 1;
 	BuiltinConstantValue_DoubleNan = BuiltinConstantValue_DoubleNegativeInfinity + 1;
 	BuiltinConstantValue_FloatInfinity = BuiltinConstantValue_DoubleNan + 1;
@@ -49,7 +49,7 @@
 type HandleType_Kind int32
 
 const (
-	HandleType_Kind_Unspecified = 0
+	HandleType_Kind_Unspecified HandleType_Kind = 0
 	HandleType_Kind_MessagePipe = HandleType_Kind_Unspecified + 1;
 	HandleType_Kind_DataPipeConsumer = HandleType_Kind_MessagePipe + 1;
 	HandleType_Kind_DataPipeProducer = HandleType_Kind_DataPipeConsumer + 1;
@@ -1075,14 +1075,13 @@
 
 type EnumValue struct {
 	DeclData *DeclarationData
-	EnumTypeKey string
 	InitializerValue Value
 	IntValue int32
 }
 
 
 func (s *EnumValue) Encode(encoder *bindings.Encoder) error {
-	encoder.StartStruct(40, 0)
+	encoder.StartStruct(32, 0)
 	if s.DeclData == nil {
 		encoder.WriteNullPointer()
 	} else {
@@ -1093,12 +1092,6 @@
 			return err
 		}
 	}
-	if err := encoder.WritePointer(); err != nil {
-		return err
-	}
-	if err := encoder.WriteString(s.EnumTypeKey); err != nil {
-		return err
-	}
 	if s.InitializerValue == nil {
 		encoder.WriteNullUnion()
 	} else {
@@ -1116,7 +1109,7 @@
 }
 
 var enumValue_Versions []bindings.DataHeader = []bindings.DataHeader{
-	bindings.DataHeader{48, 0},
+	bindings.DataHeader{40, 0},
 }
 
 func (s *EnumValue) Decode(decoder *bindings.Decoder) error {
@@ -1153,21 +1146,6 @@
 		}
 	}
 	if header.ElementsOrVersion >= 0 {
-		pointer0, err := decoder.ReadPointer()
-		if err != nil {
-			return err
-		}
-		if pointer0 == 0 {
-			return &bindings.ValidationError{bindings.UnexpectedNullPointer, "unexpected null pointer"}
-		} else {
-			value0, err := decoder.ReadString()
-			if err != nil {
-				return err
-			}
-			s.EnumTypeKey = value0
-		}
-	}
-	if header.ElementsOrVersion >= 0 {
 		var err error
 		s.InitializerValue, err = DecodeValue(decoder)
 		if err != nil {
@@ -1676,13 +1654,13 @@
 	return nil
 }
 
-type UserValueReference struct {
+type ConstantReference struct {
 	Identifier string
-	ValueKey *string
+	ConstantKey string
 }
 
 
-func (s *UserValueReference) Encode(encoder *bindings.Encoder) error {
+func (s *ConstantReference) Encode(encoder *bindings.Encoder) error {
 	encoder.StartStruct(16, 0)
 	if err := encoder.WritePointer(); err != nil {
 		return err
@@ -1690,15 +1668,11 @@
 	if err := encoder.WriteString(s.Identifier); err != nil {
 		return err
 	}
-	if s.ValueKey == nil {
-		encoder.WriteNullPointer()
-	} else {
-		if err := encoder.WritePointer(); err != nil {
-			return err
-		}
-		if err := encoder.WriteString((*s.ValueKey)); err != nil {
-			return err
-		}
+	if err := encoder.WritePointer(); err != nil {
+		return err
+	}
+	if err := encoder.WriteString(s.ConstantKey); err != nil {
+		return err
 	}
 	if err := encoder.Finish(); err != nil {
 		return err
@@ -1706,23 +1680,23 @@
 	return nil
 }
 
-var userValueReference_Versions []bindings.DataHeader = []bindings.DataHeader{
+var constantReference_Versions []bindings.DataHeader = []bindings.DataHeader{
 	bindings.DataHeader{24, 0},
 }
 
-func (s *UserValueReference) Decode(decoder *bindings.Decoder) error {
+func (s *ConstantReference) Decode(decoder *bindings.Decoder) error {
 	header, err := decoder.StartStruct()
 	if err != nil {
 		return err
 	}
-	index := sort.Search(len(userValueReference_Versions), func(i int) bool {
-		return userValueReference_Versions[i].ElementsOrVersion >= header.ElementsOrVersion
+	index := sort.Search(len(constantReference_Versions), func(i int) bool {
+		return constantReference_Versions[i].ElementsOrVersion >= header.ElementsOrVersion
 	})
-	if index < len(userValueReference_Versions) {
-		if userValueReference_Versions[index].ElementsOrVersion > header.ElementsOrVersion {
+	if index < len(constantReference_Versions) {
+		if constantReference_Versions[index].ElementsOrVersion > header.ElementsOrVersion {
 			index--
 		}
-		expectedSize := userValueReference_Versions[index].Size
+		expectedSize := constantReference_Versions[index].Size
 		if expectedSize != header.Size {
 			return &bindings.ValidationError{bindings.UnexpectedStructHeader,
 				fmt.Sprintf("invalid struct header size: should be %d, but was %d", expectedSize, header.Size),
@@ -1750,14 +1724,13 @@
 			return err
 		}
 		if pointer0 == 0 {
-			s.ValueKey = nil
+			return &bindings.ValidationError{bindings.UnexpectedNullPointer, "unexpected null pointer"}
 		} else {
-			s.ValueKey = new(string)
 			value0, err := decoder.ReadString()
 			if err != nil {
 				return err
 			}
-			(*s.ValueKey) = value0
+			s.ConstantKey = value0
 		}
 	}
 	if err := decoder.Finish(); err != nil {
@@ -1766,6 +1739,102 @@
 	return nil
 }
 
+type EnumValueReference struct {
+	Identifier string
+	EnumTypeKey string
+	EnumValueIndex uint32
+}
+
+
+func (s *EnumValueReference) Encode(encoder *bindings.Encoder) error {
+	encoder.StartStruct(24, 0)
+	if err := encoder.WritePointer(); err != nil {
+		return err
+	}
+	if err := encoder.WriteString(s.Identifier); err != nil {
+		return err
+	}
+	if err := encoder.WritePointer(); err != nil {
+		return err
+	}
+	if err := encoder.WriteString(s.EnumTypeKey); err != nil {
+		return err
+	}
+	if err := encoder.WriteUint32(s.EnumValueIndex); err != nil {
+		return err
+	}
+	if err := encoder.Finish(); err != nil {
+		return err
+	}
+	return nil
+}
+
+var enumValueReference_Versions []bindings.DataHeader = []bindings.DataHeader{
+	bindings.DataHeader{32, 0},
+}
+
+func (s *EnumValueReference) Decode(decoder *bindings.Decoder) error {
+	header, err := decoder.StartStruct()
+	if err != nil {
+		return err
+	}
+	index := sort.Search(len(enumValueReference_Versions), func(i int) bool {
+		return enumValueReference_Versions[i].ElementsOrVersion >= header.ElementsOrVersion
+	})
+	if index < len(enumValueReference_Versions) {
+		if enumValueReference_Versions[index].ElementsOrVersion > header.ElementsOrVersion {
+			index--
+		}
+		expectedSize := enumValueReference_Versions[index].Size
+		if expectedSize != header.Size {
+			return &bindings.ValidationError{bindings.UnexpectedStructHeader,
+				fmt.Sprintf("invalid struct header size: should be %d, but was %d", expectedSize, header.Size),
+			}
+		}
+	}
+	if header.ElementsOrVersion >= 0 {
+		pointer0, err := decoder.ReadPointer()
+		if err != nil {
+			return err
+		}
+		if pointer0 == 0 {
+			return &bindings.ValidationError{bindings.UnexpectedNullPointer, "unexpected null pointer"}
+		} else {
+			value0, err := decoder.ReadString()
+			if err != nil {
+				return err
+			}
+			s.Identifier = value0
+		}
+	}
+	if header.ElementsOrVersion >= 0 {
+		pointer0, err := decoder.ReadPointer()
+		if err != nil {
+			return err
+		}
+		if pointer0 == 0 {
+			return &bindings.ValidationError{bindings.UnexpectedNullPointer, "unexpected null pointer"}
+		} else {
+			value0, err := decoder.ReadString()
+			if err != nil {
+				return err
+			}
+			s.EnumTypeKey = value0
+		}
+	}
+	if header.ElementsOrVersion >= 0 {
+		value0, err := decoder.ReadUint32()
+		if err != nil {
+			return err
+		}
+		s.EnumValueIndex = value0
+	}
+	if err := decoder.Finish(); err != nil {
+		return err
+	}
+	return nil
+}
+
 type DeclaredConstant struct {
 	DeclData DeclarationData
 	Type Type
@@ -3442,7 +3511,8 @@
 
 type __ValueReflect struct {
 	LiteralValue LiteralValue
-	UserValueReference UserValueReference
+	ConstantReference ConstantReference
+	EnumValueReference EnumValueReference
 	BuiltinValue BuiltinConstantValue
 }
 
@@ -3466,13 +3536,20 @@
 		decoder.FinishReadingUnionValue()
 		return &value, nil
 	case 1:
-		var value ValueUserValueReference
+		var value ValueConstantReference
 		if err := value.decodeInternal(decoder); err != nil {
 			return nil, err
 		}
 		decoder.FinishReadingUnionValue()
 		return &value, nil
 	case 2:
+		var value ValueEnumValueReference
+		if err := value.decodeInternal(decoder); err != nil {
+			return nil, err
+		}
+		decoder.FinishReadingUnionValue()
+		return &value, nil
+	case 3:
 		var value ValueBuiltinValue
 		if err := value.decodeInternal(decoder); err != nil {
 			return nil, err
@@ -3546,12 +3623,12 @@
 
 
 
-type ValueUserValueReference struct { Value UserValueReference }
-func (u *ValueUserValueReference) Tag() uint32 { return 1 }
-func (u *ValueUserValueReference) Interface() interface{} { return u.Value }
-func (u *ValueUserValueReference) __Reflect(__ValueReflect) {}
+type ValueConstantReference struct { Value ConstantReference }
+func (u *ValueConstantReference) Tag() uint32 { return 1 }
+func (u *ValueConstantReference) Interface() interface{} { return u.Value }
+func (u *ValueConstantReference) __Reflect(__ValueReflect) {}
 
-func (u *ValueUserValueReference) Encode(encoder *bindings.Encoder) error {
+func (u *ValueConstantReference) Encode(encoder *bindings.Encoder) error {
 	encoder.WriteUnionHeader(u.Tag())
 	if err := encoder.WritePointer(); err != nil {
 		return err
@@ -3564,7 +3641,43 @@
 	return nil
 }
 
-func (u *ValueUserValueReference) decodeInternal(decoder *bindings.Decoder) error {
+func (u *ValueConstantReference) decodeInternal(decoder *bindings.Decoder) error {
+	pointer0, err := decoder.ReadPointer()
+	if err != nil {
+		return err
+	}
+	if pointer0 == 0 {
+		return &bindings.ValidationError{bindings.UnexpectedNullPointer, "unexpected null pointer"}
+	} else {
+		if err := u.Value.Decode(decoder); err != nil {
+			return err
+		}
+	}
+	
+	return nil
+}
+
+
+
+type ValueEnumValueReference struct { Value EnumValueReference }
+func (u *ValueEnumValueReference) Tag() uint32 { return 2 }
+func (u *ValueEnumValueReference) Interface() interface{} { return u.Value }
+func (u *ValueEnumValueReference) __Reflect(__ValueReflect) {}
+
+func (u *ValueEnumValueReference) Encode(encoder *bindings.Encoder) error {
+	encoder.WriteUnionHeader(u.Tag())
+	if err := encoder.WritePointer(); err != nil {
+		return err
+	}
+	if err := u.Value.Encode(encoder); err != nil {
+		return err
+	}
+	
+	encoder.FinishWritingUnionValue()
+	return nil
+}
+
+func (u *ValueEnumValueReference) decodeInternal(decoder *bindings.Decoder) error {
 	pointer0, err := decoder.ReadPointer()
 	if err != nil {
 		return err
@@ -3583,7 +3696,7 @@
 
 
 type ValueBuiltinValue struct { Value BuiltinConstantValue }
-func (u *ValueBuiltinValue) Tag() uint32 { return 2 }
+func (u *ValueBuiltinValue) Tag() uint32 { return 3 }
 func (u *ValueBuiltinValue) Interface() interface{} { return u.Value }
 func (u *ValueBuiltinValue) __Reflect(__ValueReflect) {}
 
@@ -4081,131 +4194,3 @@
 
 
 
-type UserDefinedValue interface {
-	Tag() uint32
-	Interface() interface{}
-	__Reflect(__UserDefinedValueReflect)
-	Encode(encoder *bindings.Encoder) error
-}
-
-
-
-type __UserDefinedValueReflect struct {
-	EnumValue EnumValue
-	DeclaredConstant DeclaredConstant
-}
-
-func DecodeUserDefinedValue(decoder *bindings.Decoder) (UserDefinedValue, error) {
-	size, tag, err := decoder.ReadUnionHeader()
-	if err != nil {
-		return nil, err
-	}
-
-	if size == 0 {
-		decoder.SkipUnionValue()
-		return nil, nil
-	}
-
-	switch tag {
-	case 0:
-		var value UserDefinedValueEnumValue
-		if err := value.decodeInternal(decoder); err != nil {
-			return nil, err
-		}
-		decoder.FinishReadingUnionValue()
-		return &value, nil
-	case 1:
-		var value UserDefinedValueDeclaredConstant
-		if err := value.decodeInternal(decoder); err != nil {
-			return nil, err
-		}
-		decoder.FinishReadingUnionValue()
-		return &value, nil
-	}
-
-	decoder.SkipUnionValue()
-	return &UserDefinedValueUnknown{tag: tag}, nil
-}
-
-type UserDefinedValueUnknown struct { tag uint32 }
-func (u *UserDefinedValueUnknown) Tag() uint32 { return u.tag }
-func (u *UserDefinedValueUnknown) Interface() interface{} { return nil }
-func (u *UserDefinedValueUnknown) __Reflect(__UserDefinedValueReflect) {}
-
-func (u *UserDefinedValueUnknown) Encode(encoder *bindings.Encoder) error {
-	return fmt.Errorf("Trying to serialize an unknown UserDefinedValue. There is no sane way to do that!");
-}
-
-type UserDefinedValueEnumValue struct { Value EnumValue }
-func (u *UserDefinedValueEnumValue) Tag() uint32 { return 0 }
-func (u *UserDefinedValueEnumValue) Interface() interface{} { return u.Value }
-func (u *UserDefinedValueEnumValue) __Reflect(__UserDefinedValueReflect) {}
-
-func (u *UserDefinedValueEnumValue) Encode(encoder *bindings.Encoder) error {
-	encoder.WriteUnionHeader(u.Tag())
-	if err := encoder.WritePointer(); err != nil {
-		return err
-	}
-	if err := u.Value.Encode(encoder); err != nil {
-		return err
-	}
-	
-	encoder.FinishWritingUnionValue()
-	return nil
-}
-
-func (u *UserDefinedValueEnumValue) decodeInternal(decoder *bindings.Decoder) error {
-	pointer0, err := decoder.ReadPointer()
-	if err != nil {
-		return err
-	}
-	if pointer0 == 0 {
-		return &bindings.ValidationError{bindings.UnexpectedNullPointer, "unexpected null pointer"}
-	} else {
-		if err := u.Value.Decode(decoder); err != nil {
-			return err
-		}
-	}
-	
-	return nil
-}
-
-
-
-type UserDefinedValueDeclaredConstant struct { Value DeclaredConstant }
-func (u *UserDefinedValueDeclaredConstant) Tag() uint32 { return 1 }
-func (u *UserDefinedValueDeclaredConstant) Interface() interface{} { return u.Value }
-func (u *UserDefinedValueDeclaredConstant) __Reflect(__UserDefinedValueReflect) {}
-
-func (u *UserDefinedValueDeclaredConstant) Encode(encoder *bindings.Encoder) error {
-	encoder.WriteUnionHeader(u.Tag())
-	if err := encoder.WritePointer(); err != nil {
-		return err
-	}
-	if err := u.Value.Encode(encoder); err != nil {
-		return err
-	}
-	
-	encoder.FinishWritingUnionValue()
-	return nil
-}
-
-func (u *UserDefinedValueDeclaredConstant) decodeInternal(decoder *bindings.Decoder) error {
-	pointer0, err := decoder.ReadPointer()
-	if err != nil {
-		return err
-	}
-	if pointer0 == 0 {
-		return &bindings.ValidationError{bindings.UnexpectedNullPointer, "unexpected null pointer"}
-	} else {
-		if err := u.Value.Decode(decoder); err != nil {
-			return err
-		}
-	}
-	
-	return nil
-}
-
-
-
-
diff --git a/mojom/mojom_tool/mojom/user_defined_types.go b/mojom/mojom_tool/mojom/user_defined_types.go
index a3019ad..9cd5513 100644
--- a/mojom/mojom_tool/mojom/user_defined_types.go
+++ b/mojom/mojom_tool/mojom/user_defined_types.go
@@ -1123,6 +1123,7 @@
 func (e *MojomEnum) AddEnumValue(declData DeclarationData, valueRef ValueRef) DuplicateNameError {
 	enumValue := new(EnumValue)
 	enumValue.Init(declData, UserDefinedValueKindEnumValue, enumValue, valueRef)
+	enumValue.valueIndex = uint32(len(e.Values))
 	e.Values = append(e.Values, enumValue)
 	e.DeclaredObjects = append(e.DeclaredObjects, enumValue)
 	enumValue.enumType = e
@@ -1154,6 +1155,8 @@
 	UserDefinedValueBase
 
 	enumType *MojomEnum
+	// The 0-based index of this EnumValue in the |values| slice of |enumType|.
+	valueIndex uint32
 
 	// After all values in the MojomDescriptor have been resolved,
 	// MojomDescriptor.ComputeEnumValueIntegers() should be invoked. This
@@ -1168,6 +1171,10 @@
 	return ev.enumType
 }
 
+func (ev *EnumValue) ValueIndex() uint32 {
+	return ev.valueIndex
+}
+
 // EnumValue implements ConcreteValue
 func (ev *EnumValue) ValueType() ConcreteType {
 	return ev.enumType
diff --git a/mojom/mojom_tool/serialization/serialization.go b/mojom/mojom_tool/serialization/serialization.go
index d330de6..2c47971 100644
--- a/mojom/mojom_tool/serialization/serialization.go
+++ b/mojom/mojom_tool/serialization/serialization.go
@@ -87,10 +87,20 @@
 		fileGraph.ResolvedTypes[key] = translateUserDefinedType(userDefinedType)
 	}
 
-	// Add |resolved_values| field.
-	fileGraph.ResolvedValues = make(map[string]mojom_types.UserDefinedValue)
+	// Add |resolved_constants| field.
+	fileGraph.ResolvedConstants = make(map[string]mojom_types.DeclaredConstant)
 	for key, userDefinedValue := range d.ValuesByKey {
-		fileGraph.ResolvedValues[key] = translateUserDefinedValue(userDefinedValue)
+		switch c := userDefinedValue.(type) {
+		// Note that our representation of values in mojom_types.mojom is a little different than our
+		// pure Go representation. In the latter we use value keys to refer to both constants and
+		// enum values but in the former we only use value keys to refer to constants. Enum values
+		// are stored as part of their enum types and they are are referred to  not directly using
+		// value keyes but rather via the type key of their enum and an index into the |values| array
+		// of that enum. For this reason we are only looking for the constants here and ignoring the
+		// enum values. Thos will get translated when the
+		case *mojom.UserDefinedConstant:
+			fileGraph.ResolvedConstants[key] = translateUserDefinedConstant(c)
+		}
 	}
 
 	// Add |files| field.
@@ -407,45 +417,23 @@
 	return outUnionField
 }
 
-// WARNING: Do not invoke this function on a UserDefinedValue of type BuiltInConstantValue because
-// objects of those types do not have a type_key and do not correspond to a mojom_types.UserDefinedValue.
-func translateUserDefinedValue(v mojom.UserDefinedValue) mojom_types.UserDefinedValue {
-	switch t := v.(type) {
-	case *mojom.UserDefinedConstant:
-		return translateUserDefinedConstant(t)
-	case *mojom.EnumValue:
-		return &mojom_types.UserDefinedValueEnumValue{translateEnumValue(t)}
-	case *mojom.BuiltInConstantValue:
-		panic("Do not invoke translateUserDefinedValue on BuiltInConstantValue.")
-	default:
-		panic(fmt.Sprintf("Unexpected UserDefinedValue type %T", v))
-
-	}
-}
-
-func translateUserDefinedConstant(t *mojom.UserDefinedConstant) *mojom_types.UserDefinedValueDeclaredConstant {
-	declaredConstant := mojom_types.UserDefinedValueDeclaredConstant{}
-	declaredConstant.Value.Type = translateTypeRef(t.DeclaredType())
-	declaredConstant.Value.DeclData = *translateDeclarationData(&t.DeclarationData)
-	declaredConstant.Value.Value = translateValueRef(t.ValueRef())
-	// We set the |resolved_concrete_value| field only in the following situation.
-	// See the comments in mojom_types.mojom.
-	if _, ok := declaredConstant.Value.Value.(*mojom_types.ValueUserValueReference); ok {
-		// If the type of the |value| field is a UserValueReference...
-		userValueRef := t.ValueRef().(*mojom.UserValueRef)
-		if _, ok := userValueRef.ResolvedDeclaredValue().(*mojom.UserDefinedConstant); ok {
-			// and if that reference resolves to a user-defined constant.
-			declaredConstant.Value.ResolvedConcreteValue = translateConcreteValue(t.ValueRef().ResolvedConcreteValue())
-		}
+func translateUserDefinedConstant(t *mojom.UserDefinedConstant) mojom_types.DeclaredConstant {
+	declaredConstant := mojom_types.DeclaredConstant{}
+	declaredConstant.Type = translateTypeRef(t.DeclaredType())
+	declaredConstant.DeclData = *translateDeclarationData(&t.DeclarationData)
+	declaredConstant.Value = translateValueRef(t.ValueRef())
+	// We set the |resolved_concrete_value| field only in the case that the |value| field is a ConstantReference.
+	// See the comments for this field in mojom_types.mojom.
+	if _, ok := declaredConstant.Value.(*mojom_types.ValueConstantReference); ok {
+		declaredConstant.ResolvedConcreteValue = translateConcreteValue(t.ValueRef().ResolvedConcreteValue())
 	}
 
-	return &declaredConstant
+	return declaredConstant
 }
 
 func translateEnumValue(v *mojom.EnumValue) mojom_types.EnumValue {
 	enumValue := mojom_types.EnumValue{}
 	enumValue.DeclData = translateDeclarationData(&v.DeclarationData)
-	enumValue.EnumTypeKey = v.EnumType().TypeKey()
 	if v.ValueRef() != nil {
 		enumValue.InitializerValue = translateValueRef(v.ValueRef())
 	}
@@ -573,13 +561,13 @@
 	// value, not a value reference. In the case of a LiteralValue or a
 	// BuiltInConstantValue the distinction is immaterial. But in the case of an
 	// enum value the distinction is important. Here we are building and returning
-	// a synthetic mojom_types.UserValueReference to represent the enum value.
-	// It is only the |value_key| field that needs to be populated. It does not
-	// make sense to populate the |identifier| field for example because we
+	// a synthetic mojom_types.EnumValueReference to represent the enum value.
+	// It does not make sense to populate the |identifier| field for because we
 	// aren't representing any actual occrence in the .mojom file.
 	case *mojom.EnumValue:
-		return &mojom_types.ValueUserValueReference{mojom_types.UserValueReference{
-			ValueKey: stringPointer(cv.ValueKey())}}
+		return &mojom_types.ValueEnumValueReference{mojom_types.EnumValueReference{
+			EnumTypeKey:    cv.EnumType().TypeKey(),
+			EnumValueIndex: cv.ValueIndex()}}
 	case mojom.BuiltInConstantValue:
 		return translateBuiltInConstantValue(cv)
 	default:
@@ -642,14 +630,20 @@
 }
 
 func translateUserValueRef(r *mojom.UserValueRef) mojom_types.Value {
-	switch t := r.ResolvedConcreteValue().(type) {
+	switch t := r.ResolvedDeclaredValue().(type) {
 	case mojom.BuiltInConstantValue:
 		return translateBuiltInConstantValue(t)
+	case *mojom.UserDefinedConstant:
+		return &mojom_types.ValueConstantReference{mojom_types.ConstantReference{
+			Identifier:  r.Identifier(),
+			ConstantKey: t.ValueKey()}}
+	case *mojom.EnumValue:
+		return &mojom_types.ValueEnumValueReference{mojom_types.EnumValueReference{
+			Identifier:     r.Identifier(),
+			EnumTypeKey:    t.EnumType().TypeKey(),
+			EnumValueIndex: t.ValueIndex()}}
 	default:
-		valueKey := stringPointer(r.ResolvedDeclaredValue().ValueKey())
-		return &mojom_types.ValueUserValueReference{mojom_types.UserValueReference{
-			Identifier: r.Identifier(),
-			ValueKey:   valueKey}}
+		panic(fmt.Sprintf("Unrecognized UserDefinedValueType %T", r.ResolvedDeclaredValue()))
 	}
 }
 
diff --git a/mojom/mojom_tool/serialization/serialization_test.go b/mojom/mojom_tool/serialization/serialization_test.go
index c71adb0..8d390fd 100644
--- a/mojom/mojom_tool/serialization/serialization_test.go
+++ b/mojom/mojom_tool/serialization/serialization_test.go
@@ -64,7 +64,7 @@
 	test.expectedFile().ModuleNamespace = &moduleNameSpace
 
 	test.expectedGraph().ResolvedTypes = make(map[string]mojom_types.UserDefinedType)
-	test.expectedGraph().ResolvedValues = make(map[string]mojom_types.UserDefinedValue)
+	test.expectedGraph().ResolvedConstants = make(map[string]mojom_types.DeclaredConstant)
 }
 
 // endTestCase() should be invoked at the end of a case in
@@ -530,48 +530,33 @@
 		// DeclaredMojomObjects
 		test.expectedFile().DeclaredMojomObjects.TopLevelEnums = &[]string{"TYPE_KEY:Foo"}
 
-		// Resolved Values
-
-		// Foo.X0
-		test.expectedGraph().ResolvedValues["TYPE_KEY:Foo.X0"] = &mojom_types.UserDefinedValueEnumValue{mojom_types.EnumValue{
-			DeclData:    test.newDeclData("X0", "Foo.X0"),
-			EnumTypeKey: "TYPE_KEY:Foo",
-			IntValue:    0,
-		}}
-
-		// Foo.X1
-		test.expectedGraph().ResolvedValues["TYPE_KEY:Foo.X1"] = &mojom_types.UserDefinedValueEnumValue{mojom_types.EnumValue{
-			DeclData:         test.newDeclData("X1", "Foo.X1"),
-			EnumTypeKey:      "TYPE_KEY:Foo",
-			InitializerValue: &mojom_types.ValueLiteralValue{&mojom_types.LiteralValueInt8Value{42}},
-			IntValue:         42,
-		}}
-
-		// Foo.X2
-		test.expectedGraph().ResolvedValues["TYPE_KEY:Foo.X2"] = &mojom_types.UserDefinedValueEnumValue{mojom_types.EnumValue{
-			DeclData:    test.newDeclData("X2", "Foo.X2"),
-			EnumTypeKey: "TYPE_KEY:Foo",
-			InitializerValue: &mojom_types.ValueUserValueReference{mojom_types.UserValueReference{
-				Identifier: "X1",
-				ValueKey:   stringPointer("TYPE_KEY:Foo.X1"),
-			}},
-			IntValue: 42,
-		}}
-
 		// ResolvedTypes
 
 		// enum Foo
 		test.expectedGraph().ResolvedTypes["TYPE_KEY:Foo"] = &mojom_types.UserDefinedTypeEnumType{mojom_types.MojomEnum{
 			DeclData: test.newDeclData("Foo", "Foo"),
 			Values: []mojom_types.EnumValue{
-				// Note(rudominer) It is a bug that we need to copy the enum values here.
-				// See https://github.com/domokit/mojo/issues/513.
 				// value X1
-				test.expectedGraph().ResolvedValues["TYPE_KEY:Foo.X0"].(*mojom_types.UserDefinedValueEnumValue).Value,
+				mojom_types.EnumValue{
+					DeclData: test.newDeclData("X0", "Foo.X0"),
+					IntValue: 0,
+				},
 				// value X1
-				test.expectedGraph().ResolvedValues["TYPE_KEY:Foo.X1"].(*mojom_types.UserDefinedValueEnumValue).Value,
+				mojom_types.EnumValue{
+					DeclData:         test.newDeclData("X1", "Foo.X1"),
+					InitializerValue: &mojom_types.ValueLiteralValue{&mojom_types.LiteralValueInt8Value{42}},
+					IntValue:         42,
+				},
 				// value X2
-				test.expectedGraph().ResolvedValues["TYPE_KEY:Foo.X2"].(*mojom_types.UserDefinedValueEnumValue).Value,
+				mojom_types.EnumValue{
+					DeclData: test.newDeclData("X2", "Foo.X2"),
+					InitializerValue: &mojom_types.ValueEnumValueReference{mojom_types.EnumValueReference{
+						Identifier:     "X1",
+						EnumTypeKey:    "TYPE_KEY:Foo",
+						EnumValueIndex: 1,
+					}},
+					IntValue: 42,
+				},
 			},
 		}}
 
@@ -600,32 +585,19 @@
 		test.expectedFile().DeclaredMojomObjects.TopLevelEnums = &[]string{"TYPE_KEY:Color"}
 		test.expectedFile().DeclaredMojomObjects.Structs = &[]string{"TYPE_KEY:MyStruct"}
 
-		// Resolved Values
-
-		// Color.RED
-		test.expectedGraph().ResolvedValues["TYPE_KEY:Color.RED"] = &mojom_types.UserDefinedValueEnumValue{mojom_types.EnumValue{
-			DeclData:    test.newDeclData("RED", "Color.RED"),
-			EnumTypeKey: "TYPE_KEY:Color",
-			IntValue:    0,
-		}}
-
-		// Color.BLUE
-		test.expectedGraph().ResolvedValues["TYPE_KEY:Color.BLUE"] = &mojom_types.UserDefinedValueEnumValue{mojom_types.EnumValue{
-			DeclData:    test.newDeclData("BLUE", "Color.BLUE"),
-			EnumTypeKey: "TYPE_KEY:Color",
-			IntValue:    1,
-		}}
+		// Resolved Constants
 
 		// MyStruct.RED
-		test.expectedGraph().ResolvedValues["TYPE_KEY:MyStruct.RED"] = &mojom_types.UserDefinedValueDeclaredConstant{mojom_types.DeclaredConstant{
+		test.expectedGraph().ResolvedConstants["TYPE_KEY:MyStruct.RED"] = mojom_types.DeclaredConstant{
 			DeclData: *test.newContainedDeclData("RED", "MyStruct.RED", stringPointer("TYPE_KEY:MyStruct")),
 			Type: &mojom_types.TypeTypeReference{mojom_types.TypeReference{
 				false, false, stringPointer("Color"), stringPointer("TYPE_KEY:Color")}},
-			Value: &mojom_types.ValueUserValueReference{
-				mojom_types.UserValueReference{
-					Identifier: "BLUE",
-					ValueKey:   stringPointer("TYPE_KEY:Color.BLUE")}},
-		}}
+			Value: &mojom_types.ValueEnumValueReference{
+				mojom_types.EnumValueReference{
+					Identifier:     "BLUE",
+					EnumTypeKey:    "TYPE_KEY:Color",
+					EnumValueIndex: 1}},
+		}
 
 		// ResolvedTypes
 
@@ -633,12 +605,16 @@
 		test.expectedGraph().ResolvedTypes["TYPE_KEY:Color"] = &mojom_types.UserDefinedTypeEnumType{mojom_types.MojomEnum{
 			DeclData: test.newDeclData("Color", "Color"),
 			Values: []mojom_types.EnumValue{
-				// Note(rudominer) It is a bug that we need to copy the enum values here.
-				// See https://github.com/domokit/mojo/issues/513.
 				// value RED
-				test.expectedGraph().ResolvedValues["TYPE_KEY:Color.RED"].(*mojom_types.UserDefinedValueEnumValue).Value,
+				mojom_types.EnumValue{
+					DeclData: test.newDeclData("RED", "Color.RED"),
+					IntValue: 0,
+				},
 				// value BLUE
-				test.expectedGraph().ResolvedValues["TYPE_KEY:Color.BLUE"].(*mojom_types.UserDefinedValueEnumValue).Value,
+				mojom_types.EnumValue{
+					DeclData: test.newDeclData("BLUE", "Color.BLUE"),
+					IntValue: 1,
+				},
 			},
 		}}
 
@@ -661,10 +637,10 @@
 					DeclData: test.newShortDeclDataO(0, -1, "a_color"),
 					Type: &mojom_types.TypeTypeReference{mojom_types.TypeReference{
 						false, false, stringPointer("Color"), stringPointer("TYPE_KEY:Color")}},
-					DefaultValue: &mojom_types.DefaultFieldValueValue{&mojom_types.ValueUserValueReference{
-						mojom_types.UserValueReference{
-							Identifier: "RED",
-							ValueKey:   stringPointer("TYPE_KEY:MyStruct.RED")}}}, // Note this refers to MyStruct.RED and not Color.RED.
+					DefaultValue: &mojom_types.DefaultFieldValueValue{&mojom_types.ValueConstantReference{
+						mojom_types.ConstantReference{
+							Identifier:  "RED",
+							ConstantKey: "TYPE_KEY:MyStruct.RED"}}}, // Note this refers to MyStruct.RED and not Color.RED.
 				},
 			},
 		}}
@@ -869,60 +845,60 @@
 		// Resolved Values
 
 		// xu8
-		test.expectedGraph().ResolvedValues["TYPE_KEY:xu8"] = &mojom_types.UserDefinedValueDeclaredConstant{mojom_types.DeclaredConstant{
+		test.expectedGraph().ResolvedConstants["TYPE_KEY:xu8"] = mojom_types.DeclaredConstant{
 			DeclData: *test.newDeclData("xu8", "xu8"),
 			Type:     &mojom_types.TypeSimpleType{mojom_types.SimpleType_Uint8},
 			Value:    &mojom_types.ValueLiteralValue{&mojom_types.LiteralValueUint8Value{255}},
-		}}
+		}
 
 		// x8
-		test.expectedGraph().ResolvedValues["TYPE_KEY:x8"] = &mojom_types.UserDefinedValueDeclaredConstant{mojom_types.DeclaredConstant{
+		test.expectedGraph().ResolvedConstants["TYPE_KEY:x8"] = mojom_types.DeclaredConstant{
 			DeclData: *test.newDeclData("x8", "x8"),
 			Type:     &mojom_types.TypeSimpleType{mojom_types.SimpleType_Int8},
 			Value:    &mojom_types.ValueLiteralValue{&mojom_types.LiteralValueInt8Value{-127}},
-		}}
+		}
 
 		// xu16
-		test.expectedGraph().ResolvedValues["TYPE_KEY:xu16"] = &mojom_types.UserDefinedValueDeclaredConstant{mojom_types.DeclaredConstant{
+		test.expectedGraph().ResolvedConstants["TYPE_KEY:xu16"] = mojom_types.DeclaredConstant{
 			DeclData: *test.newDeclData("xu16", "xu16"),
 			Type:     &mojom_types.TypeSimpleType{mojom_types.SimpleType_Uint16},
 			Value:    &mojom_types.ValueLiteralValue{&mojom_types.LiteralValueUint16Value{0xFFFF}},
-		}}
+		}
 
 		// x16
-		test.expectedGraph().ResolvedValues["TYPE_KEY:x16"] = &mojom_types.UserDefinedValueDeclaredConstant{mojom_types.DeclaredConstant{
+		test.expectedGraph().ResolvedConstants["TYPE_KEY:x16"] = mojom_types.DeclaredConstant{
 			DeclData: *test.newDeclData("x16", "x16"),
 			Type:     &mojom_types.TypeSimpleType{mojom_types.SimpleType_Int16},
 			Value:    &mojom_types.ValueLiteralValue{&mojom_types.LiteralValueInt16Value{-0x7FFF}},
-		}}
+		}
 
 		// xu32
-		test.expectedGraph().ResolvedValues["TYPE_KEY:xu32"] = &mojom_types.UserDefinedValueDeclaredConstant{mojom_types.DeclaredConstant{
+		test.expectedGraph().ResolvedConstants["TYPE_KEY:xu32"] = mojom_types.DeclaredConstant{
 			DeclData: *test.newDeclData("xu32", "xu32"),
 			Type:     &mojom_types.TypeSimpleType{mojom_types.SimpleType_Uint32},
 			Value:    &mojom_types.ValueLiteralValue{&mojom_types.LiteralValueUint32Value{4294967295}},
-		}}
+		}
 
 		// x32
-		test.expectedGraph().ResolvedValues["TYPE_KEY:x32"] = &mojom_types.UserDefinedValueDeclaredConstant{mojom_types.DeclaredConstant{
+		test.expectedGraph().ResolvedConstants["TYPE_KEY:x32"] = mojom_types.DeclaredConstant{
 			DeclData: *test.newDeclData("x32", "x32"),
 			Type:     &mojom_types.TypeSimpleType{mojom_types.SimpleType_Int32},
 			Value:    &mojom_types.ValueLiteralValue{&mojom_types.LiteralValueInt32Value{-2147483647}},
-		}}
+		}
 
 		// xu64
-		test.expectedGraph().ResolvedValues["TYPE_KEY:xu64"] = &mojom_types.UserDefinedValueDeclaredConstant{mojom_types.DeclaredConstant{
+		test.expectedGraph().ResolvedConstants["TYPE_KEY:xu64"] = mojom_types.DeclaredConstant{
 			DeclData: *test.newDeclData("xu64", "xu64"),
 			Type:     &mojom_types.TypeSimpleType{mojom_types.SimpleType_Uint64},
 			Value:    &mojom_types.ValueLiteralValue{&mojom_types.LiteralValueUint64Value{0xFFFFFFFFFFFFFFFF}},
-		}}
+		}
 
 		// x64
-		test.expectedGraph().ResolvedValues["TYPE_KEY:x64"] = &mojom_types.UserDefinedValueDeclaredConstant{mojom_types.DeclaredConstant{
+		test.expectedGraph().ResolvedConstants["TYPE_KEY:x64"] = mojom_types.DeclaredConstant{
 			DeclData: *test.newDeclData("x64", "x64"),
 			Type:     &mojom_types.TypeSimpleType{mojom_types.SimpleType_Int64},
 			Value:    &mojom_types.ValueLiteralValue{&mojom_types.LiteralValueInt64Value{-0x7FFFFFFFFFFFFFFF}},
-		}}
+		}
 
 		test.endTestCase()
 	}
@@ -950,46 +926,46 @@
 		// Resolved Values
 
 		// f1
-		test.expectedGraph().ResolvedValues["TYPE_KEY:f1"] = &mojom_types.UserDefinedValueDeclaredConstant{mojom_types.DeclaredConstant{
+		test.expectedGraph().ResolvedConstants["TYPE_KEY:f1"] = mojom_types.DeclaredConstant{
 			DeclData: *test.newDeclData("f1", "f1"),
 			Type:     &mojom_types.TypeSimpleType{mojom_types.SimpleType_Float},
 			Value:    &mojom_types.ValueBuiltinValue{mojom_types.BuiltinConstantValue_FloatInfinity},
-		}}
+		}
 
 		// f2
-		test.expectedGraph().ResolvedValues["TYPE_KEY:f2"] = &mojom_types.UserDefinedValueDeclaredConstant{mojom_types.DeclaredConstant{
+		test.expectedGraph().ResolvedConstants["TYPE_KEY:f2"] = mojom_types.DeclaredConstant{
 			DeclData: *test.newDeclData("f2", "f2"),
 			Type:     &mojom_types.TypeSimpleType{mojom_types.SimpleType_Float},
 			Value:    &mojom_types.ValueBuiltinValue{mojom_types.BuiltinConstantValue_FloatNegativeInfinity},
-		}}
+		}
 
 		// f3
-		test.expectedGraph().ResolvedValues["TYPE_KEY:f3"] = &mojom_types.UserDefinedValueDeclaredConstant{mojom_types.DeclaredConstant{
+		test.expectedGraph().ResolvedConstants["TYPE_KEY:f3"] = mojom_types.DeclaredConstant{
 			DeclData: *test.newDeclData("f3", "f3"),
 			Type:     &mojom_types.TypeSimpleType{mojom_types.SimpleType_Float},
 			Value:    &mojom_types.ValueBuiltinValue{mojom_types.BuiltinConstantValue_FloatNan},
-		}}
+		}
 
 		// d1
-		test.expectedGraph().ResolvedValues["TYPE_KEY:d1"] = &mojom_types.UserDefinedValueDeclaredConstant{mojom_types.DeclaredConstant{
+		test.expectedGraph().ResolvedConstants["TYPE_KEY:d1"] = mojom_types.DeclaredConstant{
 			DeclData: *test.newDeclData("d1", "d1"),
 			Type:     &mojom_types.TypeSimpleType{mojom_types.SimpleType_Double},
 			Value:    &mojom_types.ValueBuiltinValue{mojom_types.BuiltinConstantValue_DoubleInfinity},
-		}}
+		}
 
 		// d2
-		test.expectedGraph().ResolvedValues["TYPE_KEY:d2"] = &mojom_types.UserDefinedValueDeclaredConstant{mojom_types.DeclaredConstant{
+		test.expectedGraph().ResolvedConstants["TYPE_KEY:d2"] = mojom_types.DeclaredConstant{
 			DeclData: *test.newDeclData("d2", "d2"),
 			Type:     &mojom_types.TypeSimpleType{mojom_types.SimpleType_Double},
 			Value:    &mojom_types.ValueBuiltinValue{mojom_types.BuiltinConstantValue_DoubleNegativeInfinity},
-		}}
+		}
 
 		// d3
-		test.expectedGraph().ResolvedValues["TYPE_KEY:d3"] = &mojom_types.UserDefinedValueDeclaredConstant{mojom_types.DeclaredConstant{
+		test.expectedGraph().ResolvedConstants["TYPE_KEY:d3"] = mojom_types.DeclaredConstant{
 			DeclData: *test.newDeclData("d3", "d3"),
 			Type:     &mojom_types.TypeSimpleType{mojom_types.SimpleType_Double},
 			Value:    &mojom_types.ValueBuiltinValue{mojom_types.BuiltinConstantValue_DoubleNan},
-		}}
+		}
 
 		test.endTestCase()
 	}
@@ -1019,82 +995,71 @@
 		test.expectedFile().DeclaredMojomObjects.TopLevelConstants = &[]string{"TYPE_KEY:x1", "TYPE_KEY:x2",
 			"TYPE_KEY:x3", "TYPE_KEY:c1", "TYPE_KEY:c2", "TYPE_KEY:c3"}
 
-		// Resolved Values
-
-		// Color.RED
-		test.expectedGraph().ResolvedValues["TYPE_KEY:Color.RED"] = &mojom_types.UserDefinedValueEnumValue{mojom_types.EnumValue{
-			DeclData:    test.newDeclData("RED", "Color.RED"),
-			EnumTypeKey: "TYPE_KEY:Color",
-			IntValue:    0,
-		}}
-
-		// Color.BLUE
-		test.expectedGraph().ResolvedValues["TYPE_KEY:Color.BLUE"] = &mojom_types.UserDefinedValueEnumValue{mojom_types.EnumValue{
-			DeclData:    test.newDeclData("BLUE", "Color.BLUE"),
-			EnumTypeKey: "TYPE_KEY:Color",
-			IntValue:    1,
-		}}
+		// Resolved Constants
 
 		// x1
-		test.expectedGraph().ResolvedValues["TYPE_KEY:x1"] = &mojom_types.UserDefinedValueDeclaredConstant{mojom_types.DeclaredConstant{
+		test.expectedGraph().ResolvedConstants["TYPE_KEY:x1"] = mojom_types.DeclaredConstant{
 			DeclData: *test.newDeclData("x1", "x1"),
 			Type:     &mojom_types.TypeSimpleType{mojom_types.SimpleType_Int32},
 			Value:    &mojom_types.ValueLiteralValue{&mojom_types.LiteralValueInt8Value{42}},
-		}}
+		}
 
 		// x2
-		test.expectedGraph().ResolvedValues["TYPE_KEY:x2"] = &mojom_types.UserDefinedValueDeclaredConstant{mojom_types.DeclaredConstant{
+		test.expectedGraph().ResolvedConstants["TYPE_KEY:x2"] = mojom_types.DeclaredConstant{
 			DeclData: *test.newDeclData("x2", "x2"),
 			Type:     &mojom_types.TypeSimpleType{mojom_types.SimpleType_Int32},
-			Value: &mojom_types.ValueUserValueReference{mojom_types.UserValueReference{
-				Identifier: "x1",
-				ValueKey:   stringPointer("TYPE_KEY:x1")}},
+			Value: &mojom_types.ValueConstantReference{mojom_types.ConstantReference{
+				Identifier:  "x1",
+				ConstantKey: "TYPE_KEY:x1"}},
 			ResolvedConcreteValue: &mojom_types.ValueLiteralValue{&mojom_types.LiteralValueInt8Value{42}},
-		}}
+		}
 
 		// x3
-		test.expectedGraph().ResolvedValues["TYPE_KEY:x3"] = &mojom_types.UserDefinedValueDeclaredConstant{mojom_types.DeclaredConstant{
+		test.expectedGraph().ResolvedConstants["TYPE_KEY:x3"] = mojom_types.DeclaredConstant{
 			DeclData: *test.newDeclData("x3", "x3"),
 			Type:     &mojom_types.TypeSimpleType{mojom_types.SimpleType_Int32},
-			Value: &mojom_types.ValueUserValueReference{mojom_types.UserValueReference{
-				Identifier: "x2",
-				ValueKey:   stringPointer("TYPE_KEY:x2")}},
+			Value: &mojom_types.ValueConstantReference{mojom_types.ConstantReference{
+				Identifier:  "x2",
+				ConstantKey: "TYPE_KEY:x2"}},
 			ResolvedConcreteValue: &mojom_types.ValueLiteralValue{&mojom_types.LiteralValueInt8Value{42}},
-		}}
+		}
 
 		// c1
-		test.expectedGraph().ResolvedValues["TYPE_KEY:c1"] = &mojom_types.UserDefinedValueDeclaredConstant{mojom_types.DeclaredConstant{
+		test.expectedGraph().ResolvedConstants["TYPE_KEY:c1"] = mojom_types.DeclaredConstant{
 			DeclData: *test.newDeclData("c1", "c1"),
 			Type: &mojom_types.TypeTypeReference{mojom_types.TypeReference{
 				false, false, stringPointer("Color"), stringPointer("TYPE_KEY:Color")}},
-			Value: &mojom_types.ValueUserValueReference{mojom_types.UserValueReference{
-				Identifier: "RED",
-				ValueKey:   stringPointer("TYPE_KEY:Color.RED")}},
-		}}
+			Value: &mojom_types.ValueEnumValueReference{mojom_types.EnumValueReference{
+				Identifier:     "RED",
+				EnumTypeKey:    "TYPE_KEY:Color",
+				EnumValueIndex: 0}},
+		}
 
 		// c2
-		test.expectedGraph().ResolvedValues["TYPE_KEY:c2"] = &mojom_types.UserDefinedValueDeclaredConstant{mojom_types.DeclaredConstant{
+		test.expectedGraph().ResolvedConstants["TYPE_KEY:c2"] = mojom_types.DeclaredConstant{
 			DeclData: *test.newDeclData("c2", "c2"),
 			Type: &mojom_types.TypeTypeReference{mojom_types.TypeReference{
 				false, false, stringPointer("Color"), stringPointer("TYPE_KEY:Color")}},
-			Value: &mojom_types.ValueUserValueReference{mojom_types.UserValueReference{
-				Identifier: "c1",
-				ValueKey:   stringPointer("TYPE_KEY:c1")}},
-			ResolvedConcreteValue: &mojom_types.ValueUserValueReference{mojom_types.UserValueReference{
-				ValueKey: stringPointer("TYPE_KEY:Color.RED")}},
-		}}
+			Value: &mojom_types.ValueConstantReference{mojom_types.ConstantReference{
+				Identifier:  "c1",
+				ConstantKey: "TYPE_KEY:c1"}},
+			ResolvedConcreteValue: &mojom_types.ValueEnumValueReference{mojom_types.EnumValueReference{
+				EnumTypeKey:    "TYPE_KEY:Color",
+				EnumValueIndex: 0}},
+		}
 
 		// c3
-		test.expectedGraph().ResolvedValues["TYPE_KEY:c3"] = &mojom_types.UserDefinedValueDeclaredConstant{mojom_types.DeclaredConstant{
+		test.expectedGraph().ResolvedConstants["TYPE_KEY:c3"] = mojom_types.DeclaredConstant{
 			DeclData: *test.newDeclData("c3", "c3"),
 			Type: &mojom_types.TypeTypeReference{mojom_types.TypeReference{
 				false, false, stringPointer("Color"), stringPointer("TYPE_KEY:Color")}},
-			Value: &mojom_types.ValueUserValueReference{mojom_types.UserValueReference{
-				Identifier: "c2",
-				ValueKey:   stringPointer("TYPE_KEY:c2")}},
-			ResolvedConcreteValue: &mojom_types.ValueUserValueReference{mojom_types.UserValueReference{
-				ValueKey: stringPointer("TYPE_KEY:Color.RED")}},
-		}}
+			Value: &mojom_types.ValueConstantReference{mojom_types.ConstantReference{
+				Identifier:  "c2",
+				ConstantKey: "TYPE_KEY:c2"}},
+			ResolvedConcreteValue: &mojom_types.ValueEnumValueReference{mojom_types.EnumValueReference{
+				EnumTypeKey:    "TYPE_KEY:Color",
+				EnumValueIndex: 0}},
+		}
 
 		// ResolvedTypes
 
@@ -1102,12 +1067,16 @@
 		test.expectedGraph().ResolvedTypes["TYPE_KEY:Color"] = &mojom_types.UserDefinedTypeEnumType{mojom_types.MojomEnum{
 			DeclData: test.newDeclData("Color", "Color"),
 			Values: []mojom_types.EnumValue{
-				// Note(rudominer) It is a bug that we need to copy the enum values here.
-				// See https://github.com/domokit/mojo/issues/513.
 				// value RED
-				test.expectedGraph().ResolvedValues["TYPE_KEY:Color.RED"].(*mojom_types.UserDefinedValueEnumValue).Value,
+				mojom_types.EnumValue{
+					DeclData: test.newDeclData("RED", "Color.RED"),
+					IntValue: 0,
+				},
 				// value BLUE
-				test.expectedGraph().ResolvedValues["TYPE_KEY:Color.BLUE"].(*mojom_types.UserDefinedValueEnumValue).Value,
+				mojom_types.EnumValue{
+					DeclData: test.newDeclData("BLUE", "Color.BLUE"),
+					IntValue: 1,
+				},
 			},
 		}}
 
@@ -1161,39 +1130,14 @@
 		test.expectedFile().DeclaredMojomObjects.Structs = &[]string{"TYPE_KEY:mojom.test.Foo"}
 		test.expectedFile().DeclaredMojomObjects.TopLevelConstants = &[]string{"TYPE_KEY:mojom.test.NUM_MAGI"}
 
-		// Resolved Values
+		// Resolved Constants
 
 		// NUM_MAGI
-		test.expectedGraph().ResolvedValues["TYPE_KEY:mojom.test.NUM_MAGI"] = &mojom_types.UserDefinedValueDeclaredConstant{mojom_types.DeclaredConstant{
+		test.expectedGraph().ResolvedConstants["TYPE_KEY:mojom.test.NUM_MAGI"] = mojom_types.DeclaredConstant{
 			DeclData: *test.newDeclData("NUM_MAGI", "mojom.test.NUM_MAGI"),
 			Type:     &mojom_types.TypeSimpleType{mojom_types.SimpleType_Uint16},
 			Value:    &mojom_types.ValueLiteralValue{&mojom_types.LiteralValueInt8Value{3}},
-		}}
-
-		// Hats.TOP
-		test.expectedGraph().ResolvedValues["TYPE_KEY:mojom.test.Foo.Hats.TOP"] = &mojom_types.UserDefinedValueEnumValue{mojom_types.EnumValue{
-			DeclData:    test.newDeclData("TOP", "mojom.test.Foo.Hats.TOP"),
-			EnumTypeKey: "TYPE_KEY:mojom.test.Foo.Hats",
-			IntValue:    0,
-		}}
-
-		// Hats.COWBOY
-		test.expectedGraph().ResolvedValues["TYPE_KEY:mojom.test.Foo.Hats.COWBOY"] = &mojom_types.UserDefinedValueEnumValue{mojom_types.EnumValue{
-			DeclData:    test.newDeclData("COWBOY", "mojom.test.Foo.Hats.COWBOY"),
-			EnumTypeKey: "TYPE_KEY:mojom.test.Foo.Hats",
-			IntValue:    3,
-			InitializerValue: &mojom_types.ValueUserValueReference{mojom_types.UserValueReference{
-				Identifier: "NUM_MAGI",
-				ValueKey:   stringPointer("TYPE_KEY:mojom.test.NUM_MAGI"),
-			}},
-		}}
-
-		// Hats.HARD
-		test.expectedGraph().ResolvedValues["TYPE_KEY:mojom.test.Foo.Hats.HARD"] = &mojom_types.UserDefinedValueEnumValue{mojom_types.EnumValue{
-			DeclData:    test.newDeclData("HARD", "mojom.test.Foo.Hats.HARD"),
-			EnumTypeKey: "TYPE_KEY:mojom.test.Foo.Hats",
-			IntValue:    4,
-		}}
+		}
 
 		// ResolvedTypes
 
@@ -1234,14 +1178,25 @@
 		test.expectedGraph().ResolvedTypes["TYPE_KEY:mojom.test.Foo.Hats"] = &mojom_types.UserDefinedTypeEnumType{mojom_types.MojomEnum{
 			DeclData: test.newContainedDeclData("Hats", "mojom.test.Foo.Hats", stringPointer("TYPE_KEY:mojom.test.Foo")),
 			Values: []mojom_types.EnumValue{
-				// Note(rudominer) It is a bug that we need to copy the enum values here.
-				// See https://github.com/domokit/mojo/issues/513.
 				// value TOP
-				test.expectedGraph().ResolvedValues["TYPE_KEY:mojom.test.Foo.Hats.TOP"].(*mojom_types.UserDefinedValueEnumValue).Value,
+				mojom_types.EnumValue{
+					DeclData: test.newDeclData("TOP", "mojom.test.Foo.Hats.TOP"),
+					IntValue: 0,
+				},
 				// value COWBOY
-				test.expectedGraph().ResolvedValues["TYPE_KEY:mojom.test.Foo.Hats.COWBOY"].(*mojom_types.UserDefinedValueEnumValue).Value,
+				mojom_types.EnumValue{
+					DeclData: test.newDeclData("COWBOY", "mojom.test.Foo.Hats.COWBOY"),
+					IntValue: 3,
+					InitializerValue: &mojom_types.ValueConstantReference{mojom_types.ConstantReference{
+						Identifier:  "NUM_MAGI",
+						ConstantKey: "TYPE_KEY:mojom.test.NUM_MAGI",
+					}},
+				},
 				// value HARD
-				test.expectedGraph().ResolvedValues["TYPE_KEY:mojom.test.Foo.Hats.HARD"].(*mojom_types.UserDefinedValueEnumValue).Value,
+				mojom_types.EnumValue{
+					DeclData: test.newDeclData("HARD", "mojom.test.Foo.Hats.HARD"),
+					IntValue: 4,
+				},
 			},
 		}}
 
@@ -2645,7 +2600,7 @@
 	}
 
 	test.expectedGraph().ResolvedTypes = make(map[string]mojom_types.UserDefinedType)
-	test.expectedGraph().ResolvedValues = make(map[string]mojom_types.UserDefinedValue)
+	test.expectedGraph().ResolvedConstants = make(map[string]mojom_types.DeclaredConstant)
 }
 
 // endTestCase() should be invoked at the end of a case in