Sync changes from internal repo. (#96)

* Added enumValues to FieldInfo. Fixes dart-lang/protobuf#63.
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 03d8c0f..27c3a9c 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,3 +1,7 @@
+## 0.7.8 - 2017-10-25
+
+* Added enumValues to FieldInfo.
+
 ## 0.7.7 - 2017-09-25
 
 * Avoid name clashes between import prefix and field names.
diff --git a/lib/code_generator.dart b/lib/code_generator.dart
index 8c17f01..862ac82 100644
--- a/lib/code_generator.dart
+++ b/lib/code_generator.dart
@@ -46,7 +46,8 @@
     Dart_options.registerAllExtensions(extensions);
 
     _streamIn
-        .fold(new BytesBuilder(), (builder, data) => builder..add(data))
+        .fold(new BytesBuilder(),
+            (BytesBuilder builder, data) => builder..add(data))
         .then((builder) => builder.takeBytes())
         .then((List<int> bytes) {
       var request = new CodeGeneratorRequest.fromBuffer(bytes, extensions);
diff --git a/lib/extension_generator.dart b/lib/extension_generator.dart
index 977bffa..3ae54ae 100644
--- a/lib/extension_generator.dart
+++ b/lib/extension_generator.dart
@@ -85,7 +85,8 @@
       if (type.isMessage || type.isGroup) {
         out.println(', $dartType.$checkItem, $dartType.create);');
       } else if (type.isEnum) {
-        out.println(', $dartType.$checkItem, null, $dartType.valueOf);');
+        out.println(', $dartType.$checkItem, null, '
+            '$dartType.valueOf, $dartType.values);');
       } else {
         out.println(", getCheckFunction(${_field.typeConstant}));");
       }
@@ -102,8 +103,8 @@
       out.println(', $initializer, $dartType.create);');
     } else if (type.isEnum) {
       var dartEnum = type.getDartType(package);
-      String valueOf = '(var v) => $dartEnum.valueOf(v)';
-      out.println(", $initializer, null, $valueOf);");
+      String enumParams = '(var v) => $dartEnum.valueOf(v), $dartEnum.values';
+      out.println(", $initializer, null, $enumParams);");
     } else if (initializer != null) {
       out.println(", $initializer);");
     } else {
diff --git a/lib/protobuf_field.dart b/lib/protobuf_field.dart
index 0238cfc..98a06a8 100644
--- a/lib/protobuf_field.dart
+++ b/lib/protobuf_field.dart
@@ -110,7 +110,7 @@
             ' $type.$checkItem, $type.create)';
       } else if (baseType.isEnum) {
         return '..pp<$type>($number, $quotedName, $typeConstant,'
-            ' $type.$checkItem, null, $type.valueOf)';
+            ' $type.$checkItem, null, $type.valueOf, $type.values)';
       } else {
         return '..p<$type>($number, $quotedName, $typeConstant)';
       }
@@ -118,9 +118,9 @@
 
     String makeDefault = generateDefaultFunction(package);
     if (baseType.isEnum) {
-      String valueOf = '$type.valueOf';
+      String enumParams = '$type.valueOf, $type.values';
       return '..e<$type>('
-          '$number, $quotedName, $typeConstant, $makeDefault, $valueOf)';
+          '$number, $quotedName, $typeConstant, $makeDefault, $enumParams)';
     }
 
     String prefix = '..a<$type>($number, $quotedName, $typeConstant';
diff --git a/lib/src/descriptor.pb.dart b/lib/src/descriptor.pb.dart
index b5ad945..e2c15b6 100644
--- a/lib/src/descriptor.pb.dart
+++ b/lib/src/descriptor.pb.dart
@@ -354,13 +354,15 @@
         'label',
         PbFieldType.OE,
         FieldDescriptorProto_Label.LABEL_OPTIONAL,
-        FieldDescriptorProto_Label.valueOf)
+        FieldDescriptorProto_Label.valueOf,
+        FieldDescriptorProto_Label.values)
     ..e<FieldDescriptorProto_Type>(
         5,
         'type',
         PbFieldType.OE,
         FieldDescriptorProto_Type.TYPE_DOUBLE,
-        FieldDescriptorProto_Type.valueOf)
+        FieldDescriptorProto_Type.valueOf,
+        FieldDescriptorProto_Type.values)
     ..a<String>(6, 'typeName', PbFieldType.OS)
     ..a<String>(7, 'defaultValue', PbFieldType.OS)
     ..a<FieldOptions>(8, 'options', PbFieldType.OM, FieldOptions.getDefault,
@@ -786,8 +788,13 @@
   static final BuilderInfo _i = new BuilderInfo('FileOptions')
     ..a<String>(1, 'javaPackage', PbFieldType.OS)
     ..a<String>(8, 'javaOuterClassname', PbFieldType.OS)
-    ..e<FileOptions_OptimizeMode>(9, 'optimizeFor', PbFieldType.OE,
-        FileOptions_OptimizeMode.SPEED, FileOptions_OptimizeMode.valueOf)
+    ..e<FileOptions_OptimizeMode>(
+        9,
+        'optimizeFor',
+        PbFieldType.OE,
+        FileOptions_OptimizeMode.SPEED,
+        FileOptions_OptimizeMode.valueOf,
+        FileOptions_OptimizeMode.values)
     ..a<bool>(10, 'javaMultipleFiles', PbFieldType.OB)
     ..a<String>(11, 'goPackage', PbFieldType.OS)
     ..a<bool>(16, 'ccGenericServices', PbFieldType.OB)
@@ -1041,13 +1048,23 @@
 
 class FieldOptions extends GeneratedMessage {
   static final BuilderInfo _i = new BuilderInfo('FieldOptions')
-    ..e<FieldOptions_CType>(1, 'ctype', PbFieldType.OE,
-        FieldOptions_CType.STRING, FieldOptions_CType.valueOf)
+    ..e<FieldOptions_CType>(
+        1,
+        'ctype',
+        PbFieldType.OE,
+        FieldOptions_CType.STRING,
+        FieldOptions_CType.valueOf,
+        FieldOptions_CType.values)
     ..a<bool>(2, 'packed', PbFieldType.OB)
     ..a<bool>(3, 'deprecated', PbFieldType.OB)
     ..a<bool>(5, 'lazy', PbFieldType.OB)
-    ..e<FieldOptions_JSType>(6, 'jstype', PbFieldType.OE,
-        FieldOptions_JSType.JS_NORMAL, FieldOptions_JSType.valueOf)
+    ..e<FieldOptions_JSType>(
+        6,
+        'jstype',
+        PbFieldType.OE,
+        FieldOptions_JSType.JS_NORMAL,
+        FieldOptions_JSType.valueOf,
+        FieldOptions_JSType.values)
     ..a<bool>(10, 'weak', PbFieldType.OB)
     ..pp<UninterpretedOption>(999, 'uninterpretedOption', PbFieldType.PM,
         UninterpretedOption.$checkItem, UninterpretedOption.create)
@@ -1307,7 +1324,8 @@
         'idempotencyLevel',
         PbFieldType.OE,
         MethodOptions_IdempotencyLevel.IDEMPOTENCY_UNKNOWN,
-        MethodOptions_IdempotencyLevel.valueOf)
+        MethodOptions_IdempotencyLevel.valueOf,
+        MethodOptions_IdempotencyLevel.values)
     ..pp<UninterpretedOption>(999, 'uninterpretedOption', PbFieldType.PM,
         UninterpretedOption.$checkItem, UninterpretedOption.create)
     ..hasExtensions = true;
diff --git a/pubspec.yaml b/pubspec.yaml
index 58b2eb0..48fd204 100644
--- a/pubspec.yaml
+++ b/pubspec.yaml
@@ -1,5 +1,5 @@
 name: protoc_plugin
-version: 0.7.7
+version: 0.7.8
 author: Dart Team <misc@dartlang.org>
 description: Protoc compiler plugin to generate Dart code
 homepage: https://github.com/dart-lang/dart-protoc-plugin
@@ -8,7 +8,7 @@
 dependencies:
   fixnum: ^0.10.5
   path: ^1.0.0
-  protobuf: ^0.5.5
+  protobuf: ^0.6.0
   dart_style: ^1.0.6
 dev_dependencies:
   browser: any
diff --git a/test/message_generator_test.dart b/test/message_generator_test.dart
index 5f0d570..c207869 100755
--- a/test/message_generator_test.dart
+++ b/test/message_generator_test.dart
@@ -44,7 +44,7 @@
 class PhoneNumber extends GeneratedMessage {
   static final BuilderInfo _i = new BuilderInfo('PhoneNumber')
     ..a<String>(1, 'number', PbFieldType.QS)
-    ..e<PhoneNumber_PhoneType>(2, 'type', PbFieldType.OE, PhoneNumber_PhoneType.MOBILE, PhoneNumber_PhoneType.valueOf)
+    ..e<PhoneNumber_PhoneType>(2, 'type', PbFieldType.OE, PhoneNumber_PhoneType.MOBILE, PhoneNumber_PhoneType.valueOf, PhoneNumber_PhoneType.values)
     ..a<String>(3, 'name', PbFieldType.OS, '\$')
   ;