diff --git a/.travis.yml b/.travis.yml
index bceafee..5fe34c3 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -5,7 +5,7 @@
 env:
   global:
     - GRADLE_OPTS=-Xmx512m
-    - PROTOBUF_VERSION=3.4.0
+    - PROTOBUF_VERSION=3.5.0
     - LDFLAGS=-L/tmp/protobuf/lib
     - CXXFLAGS=-I/tmp/protobuf/include
     - LD_LIBRARY_PATH=/tmp/protobuf/lib
diff --git a/COMPILING.md b/COMPILING.md
index 40d21b1..6b3c642 100644
--- a/COMPILING.md
+++ b/COMPILING.md
@@ -33,7 +33,7 @@
 ```
 $ git clone https://github.com/google/protobuf.git
 $ cd protobuf
-$ git checkout v3.4.0
+$ git checkout v3.5.0
 $ ./autogen.sh
 $ ./configure
 $ make
@@ -72,16 +72,16 @@
 Gradle to find protobuf:
 ```
 .\gradlew install ^
-    -PvcProtobufInclude=C:\path\to\protobuf-3.4.0\src ^
-    -PvcProtobufLibs=C:\path\to\protobuf-3.4.0\vsprojects\Release ^
+    -PvcProtobufInclude=C:\path\to\protobuf-3.5.0\src ^
+    -PvcProtobufLibs=C:\path\to\protobuf-3.5.0\vsprojects\Release ^
     -PtargetArch=x86_32
 ```
 
 Since specifying those properties every build is bothersome, you can instead
 create ``<project-root>\gradle.properties`` with contents like:
 ```
-vcProtobufInclude=C:\\path\\to\\protobuf-3.4.0\\src
-vcProtobufLibs=C:\\path\\to\\protobuf-3.4.0\\vsprojects\\Release
+vcProtobufInclude=C:\\path\\to\\protobuf-3.5.0\\src
+vcProtobufLibs=C:\\path\\to\\protobuf-3.5.0\\vsprojects\\Release
 targetArch=x86_32
 ```
 
diff --git a/README.md b/README.md
index 777fca6..d73de63 100644
--- a/README.md
+++ b/README.md
@@ -85,7 +85,7 @@
       <artifactId>protobuf-maven-plugin</artifactId>
       <version>0.5.0</version>
       <configuration>
-        <protocArtifact>com.google.protobuf:protoc:3.4.0:exe:${os.detected.classifier}</protocArtifact>
+        <protocArtifact>com.google.protobuf:protoc:3.5.0:exe:${os.detected.classifier}</protocArtifact>
         <pluginId>grpc-java</pluginId>
         <pluginArtifact>io.grpc:protoc-gen-grpc-java:1.8.0:exe:${os.detected.classifier}</pluginArtifact>
       </configuration>
@@ -123,7 +123,7 @@
 
 protobuf {
   protoc {
-    artifact = "com.google.protobuf:protoc:3.4.0"
+    artifact = "com.google.protobuf:protoc:3.5.0"
   }
   plugins {
     grpc {
diff --git a/android-interop-testing/app/build.gradle b/android-interop-testing/app/build.gradle
index 421aa87..f496946 100644
--- a/android-interop-testing/app/build.gradle
+++ b/android-interop-testing/app/build.gradle
@@ -30,7 +30,7 @@
 
 protobuf {
     protoc {
-        artifact = 'com.google.protobuf:protoc:3.4.0'
+        artifact = 'com.google.protobuf:protoc:3.5.0'
     }
     plugins {
         grpc {
diff --git a/benchmarks/src/generated/main/java/io/grpc/benchmarks/proto/Control.java b/benchmarks/src/generated/main/java/io/grpc/benchmarks/proto/Control.java
index 691b438..2508a95 100644
--- a/benchmarks/src/generated/main/java/io/grpc/benchmarks/proto/Control.java
+++ b/benchmarks/src/generated/main/java/io/grpc/benchmarks/proto/Control.java
@@ -432,6 +432,9 @@
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       this();
+      if (extensionRegistry == null) {
+        throw new java.lang.NullPointerException();
+      }
       int mutable_bitField0_ = 0;
       com.google.protobuf.UnknownFieldSet.Builder unknownFields =
           com.google.protobuf.UnknownFieldSet.newBuilder();
@@ -850,7 +853,7 @@
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws com.google.protobuf.InvalidProtocolBufferException {
-          return new PoissonParams(input, extensionRegistry);
+        return new PoissonParams(input, extensionRegistry);
       }
     };
 
@@ -903,6 +906,9 @@
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       this();
+      if (extensionRegistry == null) {
+        throw new java.lang.NullPointerException();
+      }
       com.google.protobuf.UnknownFieldSet.Builder unknownFields =
           com.google.protobuf.UnknownFieldSet.newBuilder();
       try {
@@ -1244,7 +1250,7 @@
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws com.google.protobuf.InvalidProtocolBufferException {
-          return new ClosedLoopParams(input, extensionRegistry);
+        return new ClosedLoopParams(input, extensionRegistry);
       }
     };
 
@@ -1320,6 +1326,9 @@
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       this();
+      if (extensionRegistry == null) {
+        throw new java.lang.NullPointerException();
+      }
       int mutable_bitField0_ = 0;
       com.google.protobuf.UnknownFieldSet.Builder unknownFields =
           com.google.protobuf.UnknownFieldSet.newBuilder();
@@ -2133,7 +2142,7 @@
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws com.google.protobuf.InvalidProtocolBufferException {
-          return new LoadParams(input, extensionRegistry);
+        return new LoadParams(input, extensionRegistry);
       }
     };
 
@@ -2202,6 +2211,9 @@
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       this();
+      if (extensionRegistry == null) {
+        throw new java.lang.NullPointerException();
+      }
       int mutable_bitField0_ = 0;
       com.google.protobuf.UnknownFieldSet.Builder unknownFields =
           com.google.protobuf.UnknownFieldSet.newBuilder();
@@ -2727,7 +2739,7 @@
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws com.google.protobuf.InvalidProtocolBufferException {
-          return new SecurityParams(input, extensionRegistry);
+        return new SecurityParams(input, extensionRegistry);
       }
     };
 
@@ -2803,6 +2815,9 @@
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       this();
+      if (extensionRegistry == null) {
+        throw new java.lang.NullPointerException();
+      }
       int mutable_bitField0_ = 0;
       com.google.protobuf.UnknownFieldSet.Builder unknownFields =
           com.google.protobuf.UnknownFieldSet.newBuilder();
@@ -3560,7 +3575,7 @@
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws com.google.protobuf.InvalidProtocolBufferException {
-          return new ChannelArg(input, extensionRegistry);
+        return new ChannelArg(input, extensionRegistry);
       }
     };
 
@@ -3846,6 +3861,9 @@
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       this();
+      if (extensionRegistry == null) {
+        throw new java.lang.NullPointerException();
+      }
       int mutable_bitField0_ = 0;
       com.google.protobuf.UnknownFieldSet.Builder unknownFields =
           com.google.protobuf.UnknownFieldSet.newBuilder();
@@ -6396,7 +6414,7 @@
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws com.google.protobuf.InvalidProtocolBufferException {
-          return new ClientConfig(input, extensionRegistry);
+        return new ClientConfig(input, extensionRegistry);
       }
     };
 
@@ -6457,6 +6475,9 @@
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       this();
+      if (extensionRegistry == null) {
+        throw new java.lang.NullPointerException();
+      }
       int mutable_bitField0_ = 0;
       com.google.protobuf.UnknownFieldSet.Builder unknownFields =
           com.google.protobuf.UnknownFieldSet.newBuilder();
@@ -6975,7 +6996,7 @@
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws com.google.protobuf.InvalidProtocolBufferException {
-          return new ClientStatus(input, extensionRegistry);
+        return new ClientStatus(input, extensionRegistry);
       }
     };
 
@@ -7037,6 +7058,9 @@
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       this();
+      if (extensionRegistry == null) {
+        throw new java.lang.NullPointerException();
+      }
       int mutable_bitField0_ = 0;
       com.google.protobuf.UnknownFieldSet.Builder unknownFields =
           com.google.protobuf.UnknownFieldSet.newBuilder();
@@ -7452,7 +7476,7 @@
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws com.google.protobuf.InvalidProtocolBufferException {
-          return new Mark(input, extensionRegistry);
+        return new Mark(input, extensionRegistry);
       }
     };
 
@@ -7528,6 +7552,9 @@
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       this();
+      if (extensionRegistry == null) {
+        throw new java.lang.NullPointerException();
+      }
       int mutable_bitField0_ = 0;
       com.google.protobuf.UnknownFieldSet.Builder unknownFields =
           com.google.protobuf.UnknownFieldSet.newBuilder();
@@ -8341,7 +8368,7 @@
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws com.google.protobuf.InvalidProtocolBufferException {
-          return new ClientArgs(input, extensionRegistry);
+        return new ClientArgs(input, extensionRegistry);
       }
     };
 
@@ -8531,6 +8558,9 @@
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       this();
+      if (extensionRegistry == null) {
+        throw new java.lang.NullPointerException();
+      }
       int mutable_bitField0_ = 0;
       com.google.protobuf.UnknownFieldSet.Builder unknownFields =
           com.google.protobuf.UnknownFieldSet.newBuilder();
@@ -10045,7 +10075,7 @@
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws com.google.protobuf.InvalidProtocolBufferException {
-          return new ServerConfig(input, extensionRegistry);
+        return new ServerConfig(input, extensionRegistry);
       }
     };
 
@@ -10121,6 +10151,9 @@
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       this();
+      if (extensionRegistry == null) {
+        throw new java.lang.NullPointerException();
+      }
       int mutable_bitField0_ = 0;
       com.google.protobuf.UnknownFieldSet.Builder unknownFields =
           com.google.protobuf.UnknownFieldSet.newBuilder();
@@ -10934,7 +10967,7 @@
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws com.google.protobuf.InvalidProtocolBufferException {
-          return new ServerArgs(input, extensionRegistry);
+        return new ServerArgs(input, extensionRegistry);
       }
     };
 
@@ -11015,6 +11048,9 @@
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       this();
+      if (extensionRegistry == null) {
+        throw new java.lang.NullPointerException();
+      }
       int mutable_bitField0_ = 0;
       com.google.protobuf.UnknownFieldSet.Builder unknownFields =
           com.google.protobuf.UnknownFieldSet.newBuilder();
@@ -11679,7 +11715,7 @@
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws com.google.protobuf.InvalidProtocolBufferException {
-          return new ServerStatus(input, extensionRegistry);
+        return new ServerStatus(input, extensionRegistry);
       }
     };
 
@@ -11727,6 +11763,9 @@
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       this();
+      if (extensionRegistry == null) {
+        throw new java.lang.NullPointerException();
+      }
       com.google.protobuf.UnknownFieldSet.Builder unknownFields =
           com.google.protobuf.UnknownFieldSet.newBuilder();
       try {
@@ -12063,7 +12102,7 @@
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws com.google.protobuf.InvalidProtocolBufferException {
-          return new CoreRequest(input, extensionRegistry);
+        return new CoreRequest(input, extensionRegistry);
       }
     };
 
@@ -12121,6 +12160,9 @@
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       this();
+      if (extensionRegistry == null) {
+        throw new java.lang.NullPointerException();
+      }
       int mutable_bitField0_ = 0;
       com.google.protobuf.UnknownFieldSet.Builder unknownFields =
           com.google.protobuf.UnknownFieldSet.newBuilder();
@@ -12531,7 +12573,7 @@
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws com.google.protobuf.InvalidProtocolBufferException {
-          return new CoreResponse(input, extensionRegistry);
+        return new CoreResponse(input, extensionRegistry);
       }
     };
 
@@ -12579,6 +12621,9 @@
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       this();
+      if (extensionRegistry == null) {
+        throw new java.lang.NullPointerException();
+      }
       com.google.protobuf.UnknownFieldSet.Builder unknownFields =
           com.google.protobuf.UnknownFieldSet.newBuilder();
       try {
@@ -12915,7 +12960,7 @@
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws com.google.protobuf.InvalidProtocolBufferException {
-          return new Void(input, extensionRegistry);
+        return new Void(input, extensionRegistry);
       }
     };
 
@@ -13086,6 +13131,9 @@
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       this();
+      if (extensionRegistry == null) {
+        throw new java.lang.NullPointerException();
+      }
       int mutable_bitField0_ = 0;
       com.google.protobuf.UnknownFieldSet.Builder unknownFields =
           com.google.protobuf.UnknownFieldSet.newBuilder();
@@ -14404,7 +14452,7 @@
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws com.google.protobuf.InvalidProtocolBufferException {
-          return new Scenario(input, extensionRegistry);
+        return new Scenario(input, extensionRegistry);
       }
     };
 
@@ -14481,6 +14529,9 @@
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       this();
+      if (extensionRegistry == null) {
+        throw new java.lang.NullPointerException();
+      }
       int mutable_bitField0_ = 0;
       com.google.protobuf.UnknownFieldSet.Builder unknownFields =
           com.google.protobuf.UnknownFieldSet.newBuilder();
@@ -15166,7 +15217,7 @@
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws com.google.protobuf.InvalidProtocolBufferException {
-          return new Scenarios(input, extensionRegistry);
+        return new Scenarios(input, extensionRegistry);
       }
     };
 
@@ -15355,6 +15406,9 @@
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       this();
+      if (extensionRegistry == null) {
+        throw new java.lang.NullPointerException();
+      }
       int mutable_bitField0_ = 0;
       com.google.protobuf.UnknownFieldSet.Builder unknownFields =
           com.google.protobuf.UnknownFieldSet.newBuilder();
@@ -16817,7 +16871,7 @@
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws com.google.protobuf.InvalidProtocolBufferException {
-          return new ScenarioResultSummary(input, extensionRegistry);
+        return new ScenarioResultSummary(input, extensionRegistry);
       }
     };
 
@@ -17145,6 +17199,9 @@
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       this();
+      if (extensionRegistry == null) {
+        throw new java.lang.NullPointerException();
+      }
       int mutable_bitField0_ = 0;
       com.google.protobuf.UnknownFieldSet.Builder unknownFields =
           com.google.protobuf.UnknownFieldSet.newBuilder();
@@ -20026,7 +20083,7 @@
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws com.google.protobuf.InvalidProtocolBufferException {
-          return new ScenarioResult(input, extensionRegistry);
+        return new ScenarioResult(input, extensionRegistry);
       }
     };
 
@@ -20158,7 +20215,7 @@
       "ad\"C\n\016SecurityParams\022\023\n\013use_test_ca\030\001 \001(" +
       "\010\022\034\n\024server_host_override\030\002 \001(\t\"M\n\nChann" +
       "elArg\022\014\n\004name\030\001 \001(\t\022\023\n\tstr_value\030\002 \001(\tH\000" +
-      "\022\023\n\tint_value\030\003 \001(\005H\000B\007\n\005value\"\275\004\n\014Clien",
+      "\022\023\n\tint_value\030\003 \001(\005H\000B\007\n\005value\"\275\004\n\014Clien" +
       "tConfig\022\026\n\016server_targets\030\001 \003(\t\022-\n\013clien" +
       "t_type\030\002 \001(\0162\030.grpc.testing.ClientType\0225" +
       "\n\017security_params\030\003 \001(\0132\034.grpc.testing.S" +
@@ -20168,7 +20225,7 @@
       " \001(\0162\025.grpc.testing.RpcType\022-\n\013load_para" +
       "ms\030\n \001(\0132\030.grpc.testing.LoadParams\0223\n\016pa" +
       "yload_config\030\013 \001(\0132\033.grpc.testing.Payloa" +
-      "dConfig\0227\n\020histogram_params\030\014 \001(\0132\035.grpc",
+      "dConfig\0227\n\020histogram_params\030\014 \001(\0132\035.grpc" +
       ".testing.HistogramParams\022\021\n\tcore_list\030\r " +
       "\003(\005\022\022\n\ncore_limit\030\016 \001(\005\022\030\n\020other_client_" +
       "api\030\017 \001(\t\022.\n\014channel_args\030\020 \003(\0132\030.grpc.t" +
@@ -20178,7 +20235,7 @@
       "t\030\001 \001(\010\"h\n\nClientArgs\022+\n\005setup\030\001 \001(\0132\032.g" +
       "rpc.testing.ClientConfigH\000\022\"\n\004mark\030\002 \001(\013" +
       "2\022.grpc.testing.MarkH\000B\t\n\007argtype\"\264\002\n\014Se" +
-      "rverConfig\022-\n\013server_type\030\001 \001(\0162\030.grpc.t",
+      "rverConfig\022-\n\013server_type\030\001 \001(\0162\030.grpc.t" +
       "esting.ServerType\0225\n\017security_params\030\002 \001" +
       "(\0132\034.grpc.testing.SecurityParams\022\014\n\004port" +
       "\030\004 \001(\005\022\034\n\024async_server_threads\030\007 \001(\005\022\022\n\n" +
@@ -20188,7 +20245,7 @@
       "source_quota_size\030\351\007 \001(\005\"h\n\nServerArgs\022+" +
       "\n\005setup\030\001 \001(\0132\032.grpc.testing.ServerConfi" +
       "gH\000\022\"\n\004mark\030\002 \001(\0132\022.grpc.testing.MarkH\000B" +
-      "\t\n\007argtype\"U\n\014ServerStatus\022(\n\005stats\030\001 \001(",
+      "\t\n\007argtype\"U\n\014ServerStatus\022(\n\005stats\030\001 \001(" +
       "\0132\031.grpc.testing.ServerStats\022\014\n\004port\030\002 \001" +
       "(\005\022\r\n\005cores\030\003 \001(\005\"\r\n\013CoreRequest\"\035\n\014Core" +
       "Response\022\r\n\005cores\030\001 \001(\005\"\006\n\004Void\"\375\001\n\010Scen" +
@@ -20198,7 +20255,7 @@
       ".testing.ServerConfig\022\023\n\013num_servers\030\005 \001" +
       "(\005\022\026\n\016warmup_seconds\030\006 \001(\005\022\031\n\021benchmark_" +
       "seconds\030\007 \001(\005\022 \n\030spawn_local_worker_coun" +
-      "t\030\010 \001(\005\"6\n\tScenarios\022)\n\tscenarios\030\001 \003(\0132",
+      "t\030\010 \001(\005\"6\n\tScenarios\022)\n\tscenarios\030\001 \003(\0132" +
       "\026.grpc.testing.Scenario\"\274\003\n\025ScenarioResu" +
       "ltSummary\022\013\n\003qps\030\001 \001(\001\022\033\n\023qps_per_server" +
       "_core\030\002 \001(\001\022\032\n\022server_system_time\030\003 \001(\001\022" +
@@ -20208,7 +20265,7 @@
       "\022\n\nlatency_95\030\t \001(\001\022\022\n\nlatency_99\030\n \001(\001\022" +
       "\023\n\013latency_999\030\013 \001(\001\022\030\n\020server_cpu_usage" +
       "\030\014 \001(\001\022&\n\036successful_requests_per_second" +
-      "\030\r \001(\001\022\"\n\032failed_requests_per_second\030\016 \001",
+      "\030\r \001(\001\022\"\n\032failed_requests_per_second\030\016 \001" +
       "(\001\022 \n\030client_polls_per_request\030\017 \001(\001\022 \n\030" +
       "server_polls_per_request\030\020 \001(\001\"\203\003\n\016Scena" +
       "rioResult\022(\n\010scenario\030\001 \001(\0132\026.grpc.testi" +
@@ -20218,7 +20275,7 @@
       "tats\030\004 \003(\0132\031.grpc.testing.ServerStats\022\024\n" +
       "\014server_cores\030\005 \003(\005\0224\n\007summary\030\006 \001(\0132#.g" +
       "rpc.testing.ScenarioResultSummary\022\026\n\016cli" +
-      "ent_success\030\007 \003(\010\022\026\n\016server_success\030\010 \003(",
+      "ent_success\030\007 \003(\010\022\026\n\016server_success\030\010 \003(" +
       "\010\0229\n\017request_results\030\t \003(\0132 .grpc.testin" +
       "g.RequestResultCount*A\n\nClientType\022\017\n\013SY" +
       "NC_CLIENT\020\000\022\020\n\014ASYNC_CLIENT\020\001\022\020\n\014OTHER_C" +
diff --git a/benchmarks/src/generated/main/java/io/grpc/benchmarks/proto/Messages.java b/benchmarks/src/generated/main/java/io/grpc/benchmarks/proto/Messages.java
index f2f026d..34591b2 100644
--- a/benchmarks/src/generated/main/java/io/grpc/benchmarks/proto/Messages.java
+++ b/benchmarks/src/generated/main/java/io/grpc/benchmarks/proto/Messages.java
@@ -161,6 +161,9 @@
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       this();
+      if (extensionRegistry == null) {
+        throw new java.lang.NullPointerException();
+      }
       int mutable_bitField0_ = 0;
       com.google.protobuf.UnknownFieldSet.Builder unknownFields =
           com.google.protobuf.UnknownFieldSet.newBuilder();
@@ -578,7 +581,7 @@
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws com.google.protobuf.InvalidProtocolBufferException {
-          return new BoolValue(input, extensionRegistry);
+        return new BoolValue(input, extensionRegistry);
       }
     };
 
@@ -660,6 +663,9 @@
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       this();
+      if (extensionRegistry == null) {
+        throw new java.lang.NullPointerException();
+      }
       int mutable_bitField0_ = 0;
       com.google.protobuf.UnknownFieldSet.Builder unknownFields =
           com.google.protobuf.UnknownFieldSet.newBuilder();
@@ -1194,7 +1200,7 @@
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws com.google.protobuf.InvalidProtocolBufferException {
-          return new Payload(input, extensionRegistry);
+        return new Payload(input, extensionRegistry);
       }
     };
 
@@ -1264,6 +1270,9 @@
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       this();
+      if (extensionRegistry == null) {
+        throw new java.lang.NullPointerException();
+      }
       int mutable_bitField0_ = 0;
       com.google.protobuf.UnknownFieldSet.Builder unknownFields =
           com.google.protobuf.UnknownFieldSet.newBuilder();
@@ -1789,7 +1798,7 @@
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws com.google.protobuf.InvalidProtocolBufferException {
-          return new EchoStatus(input, extensionRegistry);
+        return new EchoStatus(input, extensionRegistry);
       }
     };
 
@@ -2002,6 +2011,9 @@
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       this();
+      if (extensionRegistry == null) {
+        throw new java.lang.NullPointerException();
+      }
       int mutable_bitField0_ = 0;
       com.google.protobuf.UnknownFieldSet.Builder unknownFields =
           com.google.protobuf.UnknownFieldSet.newBuilder();
@@ -3640,7 +3652,7 @@
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws com.google.protobuf.InvalidProtocolBufferException {
-          return new SimpleRequest(input, extensionRegistry);
+        return new SimpleRequest(input, extensionRegistry);
       }
     };
 
@@ -3757,6 +3769,9 @@
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       this();
+      if (extensionRegistry == null) {
+        throw new java.lang.NullPointerException();
+      }
       int mutable_bitField0_ = 0;
       com.google.protobuf.UnknownFieldSet.Builder unknownFields =
           com.google.protobuf.UnknownFieldSet.newBuilder();
@@ -4642,7 +4657,7 @@
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws com.google.protobuf.InvalidProtocolBufferException {
-          return new SimpleResponse(input, extensionRegistry);
+        return new SimpleResponse(input, extensionRegistry);
       }
     };
 
@@ -4753,6 +4768,9 @@
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       this();
+      if (extensionRegistry == null) {
+        throw new java.lang.NullPointerException();
+      }
       int mutable_bitField0_ = 0;
       com.google.protobuf.UnknownFieldSet.Builder unknownFields =
           com.google.protobuf.UnknownFieldSet.newBuilder();
@@ -5588,7 +5606,7 @@
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws com.google.protobuf.InvalidProtocolBufferException {
-          return new StreamingInputCallRequest(input, extensionRegistry);
+        return new StreamingInputCallRequest(input, extensionRegistry);
       }
     };
 
@@ -5650,6 +5668,9 @@
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       this();
+      if (extensionRegistry == null) {
+        throw new java.lang.NullPointerException();
+      }
       int mutable_bitField0_ = 0;
       com.google.protobuf.UnknownFieldSet.Builder unknownFields =
           com.google.protobuf.UnknownFieldSet.newBuilder();
@@ -6064,7 +6085,7 @@
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws com.google.protobuf.InvalidProtocolBufferException {
-          return new StreamingInputCallResponse(input, extensionRegistry);
+        return new StreamingInputCallResponse(input, extensionRegistry);
       }
     };
 
@@ -6171,6 +6192,9 @@
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       this();
+      if (extensionRegistry == null) {
+        throw new java.lang.NullPointerException();
+      }
       int mutable_bitField0_ = 0;
       com.google.protobuf.UnknownFieldSet.Builder unknownFields =
           com.google.protobuf.UnknownFieldSet.newBuilder();
@@ -6927,7 +6951,7 @@
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws com.google.protobuf.InvalidProtocolBufferException {
-          return new ResponseParameters(input, extensionRegistry);
+        return new ResponseParameters(input, extensionRegistry);
       }
     };
 
@@ -7100,6 +7124,9 @@
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       this();
+      if (extensionRegistry == null) {
+        throw new java.lang.NullPointerException();
+      }
       int mutable_bitField0_ = 0;
       com.google.protobuf.UnknownFieldSet.Builder unknownFields =
           com.google.protobuf.UnknownFieldSet.newBuilder();
@@ -8476,7 +8503,7 @@
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws com.google.protobuf.InvalidProtocolBufferException {
-          return new StreamingOutputCallRequest(input, extensionRegistry);
+        return new StreamingOutputCallRequest(input, extensionRegistry);
       }
     };
 
@@ -8553,6 +8580,9 @@
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       this();
+      if (extensionRegistry == null) {
+        throw new java.lang.NullPointerException();
+      }
       int mutable_bitField0_ = 0;
       com.google.protobuf.UnknownFieldSet.Builder unknownFields =
           com.google.protobuf.UnknownFieldSet.newBuilder();
@@ -9123,7 +9153,7 @@
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws com.google.protobuf.InvalidProtocolBufferException {
-          return new StreamingOutputCallResponse(input, extensionRegistry);
+        return new StreamingOutputCallResponse(input, extensionRegistry);
       }
     };
 
@@ -9182,6 +9212,9 @@
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       this();
+      if (extensionRegistry == null) {
+        throw new java.lang.NullPointerException();
+      }
       int mutable_bitField0_ = 0;
       com.google.protobuf.UnknownFieldSet.Builder unknownFields =
           com.google.protobuf.UnknownFieldSet.newBuilder();
@@ -9581,7 +9614,7 @@
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws com.google.protobuf.InvalidProtocolBufferException {
-          return new ReconnectParams(input, extensionRegistry);
+        return new ReconnectParams(input, extensionRegistry);
       }
     };
 
@@ -9655,6 +9688,9 @@
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       this();
+      if (extensionRegistry == null) {
+        throw new java.lang.NullPointerException();
+      }
       int mutable_bitField0_ = 0;
       com.google.protobuf.UnknownFieldSet.Builder unknownFields =
           com.google.protobuf.UnknownFieldSet.newBuilder();
@@ -10219,7 +10255,7 @@
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws com.google.protobuf.InvalidProtocolBufferException {
-          return new ReconnectInfo(input, extensionRegistry);
+        return new ReconnectInfo(input, extensionRegistry);
       }
     };
 
@@ -10316,7 +10352,7 @@
       "\rresponse_size\030\002 \001(\005\022&\n\007payload\030\003 \001(\0132\025." +
       "grpc.testing.Payload\022\025\n\rfill_username\030\004 " +
       "\001(\010\022\030\n\020fill_oauth_scope\030\005 \001(\010\0224\n\023respons" +
-      "e_compressed\030\006 \001(\0132\027.grpc.testing.BoolVa",
+      "e_compressed\030\006 \001(\0132\027.grpc.testing.BoolVa" +
       "lue\0221\n\017response_status\030\007 \001(\0132\030.grpc.test" +
       "ing.EchoStatus\0222\n\021expect_compressed\030\010 \001(" +
       "\0132\027.grpc.testing.BoolValue\"_\n\016SimpleResp" +
@@ -10326,7 +10362,7 @@
       "oad\030\001 \001(\0132\025.grpc.testing.Payload\0222\n\021expe" +
       "ct_compressed\030\002 \001(\0132\027.grpc.testing.BoolV" +
       "alue\"=\n\032StreamingInputCallResponse\022\037\n\027ag" +
-      "gregated_payload_size\030\001 \001(\005\"d\n\022ResponseP",
+      "gregated_payload_size\030\001 \001(\005\"d\n\022ResponseP" +
       "arameters\022\014\n\004size\030\001 \001(\005\022\023\n\013interval_us\030\002" +
       " \001(\005\022+\n\ncompressed\030\003 \001(\0132\027.grpc.testing." +
       "BoolValue\"\350\001\n\032StreamingOutputCallRequest" +
@@ -10336,7 +10372,7 @@
       "load\030\003 \001(\0132\025.grpc.testing.Payload\0221\n\017res" +
       "ponse_status\030\007 \001(\0132\030.grpc.testing.EchoSt" +
       "atus\"E\n\033StreamingOutputCallResponse\022&\n\007p" +
-      "ayload\030\001 \001(\0132\025.grpc.testing.Payload\"3\n\017R",
+      "ayload\030\001 \001(\0132\025.grpc.testing.Payload\"3\n\017R" +
       "econnectParams\022 \n\030max_reconnect_backoff_" +
       "ms\030\001 \001(\005\"3\n\rReconnectInfo\022\016\n\006passed\030\001 \001(" +
       "\010\022\022\n\nbackoff_ms\030\002 \003(\005*\037\n\013PayloadType\022\020\n\014" +
diff --git a/benchmarks/src/generated/main/java/io/grpc/benchmarks/proto/Payloads.java b/benchmarks/src/generated/main/java/io/grpc/benchmarks/proto/Payloads.java
index 02e3def..7c7f7ad 100644
--- a/benchmarks/src/generated/main/java/io/grpc/benchmarks/proto/Payloads.java
+++ b/benchmarks/src/generated/main/java/io/grpc/benchmarks/proto/Payloads.java
@@ -55,6 +55,9 @@
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       this();
+      if (extensionRegistry == null) {
+        throw new java.lang.NullPointerException();
+      }
       int mutable_bitField0_ = 0;
       com.google.protobuf.UnknownFieldSet.Builder unknownFields =
           com.google.protobuf.UnknownFieldSet.newBuilder();
@@ -506,7 +509,7 @@
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws com.google.protobuf.InvalidProtocolBufferException {
-          return new ByteBufferParams(input, extensionRegistry);
+        return new ByteBufferParams(input, extensionRegistry);
       }
     };
 
@@ -566,6 +569,9 @@
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       this();
+      if (extensionRegistry == null) {
+        throw new java.lang.NullPointerException();
+      }
       int mutable_bitField0_ = 0;
       com.google.protobuf.UnknownFieldSet.Builder unknownFields =
           com.google.protobuf.UnknownFieldSet.newBuilder();
@@ -1017,7 +1023,7 @@
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws com.google.protobuf.InvalidProtocolBufferException {
-          return new SimpleProtoParams(input, extensionRegistry);
+        return new SimpleProtoParams(input, extensionRegistry);
       }
     };
 
@@ -1070,6 +1076,9 @@
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       this();
+      if (extensionRegistry == null) {
+        throw new java.lang.NullPointerException();
+      }
       com.google.protobuf.UnknownFieldSet.Builder unknownFields =
           com.google.protobuf.UnknownFieldSet.newBuilder();
       try {
@@ -1411,7 +1420,7 @@
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws com.google.protobuf.InvalidProtocolBufferException {
-          return new ComplexProtoParams(input, extensionRegistry);
+        return new ComplexProtoParams(input, extensionRegistry);
       }
     };
 
@@ -1500,6 +1509,9 @@
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       this();
+      if (extensionRegistry == null) {
+        throw new java.lang.NullPointerException();
+      }
       int mutable_bitField0_ = 0;
       com.google.protobuf.UnknownFieldSet.Builder unknownFields =
           com.google.protobuf.UnknownFieldSet.newBuilder();
@@ -2517,7 +2529,7 @@
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws com.google.protobuf.InvalidProtocolBufferException {
-          return new PayloadConfig(input, extensionRegistry);
+        return new PayloadConfig(input, extensionRegistry);
       }
     };
 
@@ -2574,7 +2586,7 @@
       "sH\000\0228\n\rsimple_params\030\002 \001(\0132\037.grpc.testin" +
       "g.SimpleProtoParamsH\000\022:\n\016complex_params\030" +
       "\003 \001(\0132 .grpc.testing.ComplexProtoParamsH" +
-      "\000B\t\n\007payloadB$\n\030io.grpc.benchmarks.proto",
+      "\000B\t\n\007payloadB$\n\030io.grpc.benchmarks.proto" +
       "B\010Payloadsb\006proto3"
     };
     com.google.protobuf.Descriptors.FileDescriptor.InternalDescriptorAssigner assigner =
diff --git a/benchmarks/src/generated/main/java/io/grpc/benchmarks/proto/Services.java b/benchmarks/src/generated/main/java/io/grpc/benchmarks/proto/Services.java
index 36bf486..0e2e15d 100644
--- a/benchmarks/src/generated/main/java/io/grpc/benchmarks/proto/Services.java
+++ b/benchmarks/src/generated/main/java/io/grpc/benchmarks/proto/Services.java
@@ -32,7 +32,7 @@
       "nse(\0010\001\022R\n\023StreamingFromClient\022\033.grpc.te" +
       "sting.SimpleRequest\032\034.grpc.testing.Simpl" +
       "eResponse(\001\022R\n\023StreamingFromServer\022\033.grp" +
-      "c.testing.SimpleRequest\032\034.grpc.testing.S",
+      "c.testing.SimpleRequest\032\034.grpc.testing.S" +
       "impleResponse0\001\022R\n\021StreamingBothWays\022\033.g" +
       "rpc.testing.SimpleRequest\032\034.grpc.testing" +
       ".SimpleResponse(\0010\0012\227\002\n\rWorkerService\022E\n" +
@@ -42,7 +42,7 @@
       "ng.ClientStatus(\0010\001\022B\n\tCoreCount\022\031.grpc." +
       "testing.CoreRequest\032\032.grpc.testing.CoreR" +
       "esponse\0224\n\nQuitWorker\022\022.grpc.testing.Voi" +
-      "d\032\022.grpc.testing.Void2^\n\030ReportQpsScenar",
+      "d\032\022.grpc.testing.Void2^\n\030ReportQpsScenar" +
       "ioService\022B\n\016ReportScenario\022\034.grpc.testi" +
       "ng.ScenarioResult\032\022.grpc.testing.VoidB$\n" +
       "\030io.grpc.benchmarks.protoB\010Servicesb\006pro" +
diff --git a/benchmarks/src/generated/main/java/io/grpc/benchmarks/proto/Stats.java b/benchmarks/src/generated/main/java/io/grpc/benchmarks/proto/Stats.java
index 6e87193..8337a33 100644
--- a/benchmarks/src/generated/main/java/io/grpc/benchmarks/proto/Stats.java
+++ b/benchmarks/src/generated/main/java/io/grpc/benchmarks/proto/Stats.java
@@ -104,6 +104,9 @@
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       this();
+      if (extensionRegistry == null) {
+        throw new java.lang.NullPointerException();
+      }
       int mutable_bitField0_ = 0;
       com.google.protobuf.UnknownFieldSet.Builder unknownFields =
           com.google.protobuf.UnknownFieldSet.newBuilder();
@@ -895,7 +898,7 @@
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws com.google.protobuf.InvalidProtocolBufferException {
-          return new ServerStats(input, extensionRegistry);
+        return new ServerStats(input, extensionRegistry);
       }
     };
 
@@ -967,6 +970,9 @@
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       this();
+      if (extensionRegistry == null) {
+        throw new java.lang.NullPointerException();
+      }
       int mutable_bitField0_ = 0;
       com.google.protobuf.UnknownFieldSet.Builder unknownFields =
           com.google.protobuf.UnknownFieldSet.newBuilder();
@@ -1460,7 +1466,7 @@
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws com.google.protobuf.InvalidProtocolBufferException {
-          return new HistogramParams(input, extensionRegistry);
+        return new HistogramParams(input, extensionRegistry);
       }
     };
 
@@ -1556,6 +1562,9 @@
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       this();
+      if (extensionRegistry == null) {
+        throw new java.lang.NullPointerException();
+      }
       int mutable_bitField0_ = 0;
       com.google.protobuf.UnknownFieldSet.Builder unknownFields =
           com.google.protobuf.UnknownFieldSet.newBuilder();
@@ -2360,7 +2369,7 @@
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws com.google.protobuf.InvalidProtocolBufferException {
-          return new HistogramData(input, extensionRegistry);
+        return new HistogramData(input, extensionRegistry);
       }
     };
 
@@ -2420,6 +2429,9 @@
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       this();
+      if (extensionRegistry == null) {
+        throw new java.lang.NullPointerException();
+      }
       int mutable_bitField0_ = 0;
       com.google.protobuf.UnknownFieldSet.Builder unknownFields =
           com.google.protobuf.UnknownFieldSet.newBuilder();
@@ -2872,7 +2884,7 @@
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws com.google.protobuf.InvalidProtocolBufferException {
-          return new RequestResultCount(input, extensionRegistry);
+        return new RequestResultCount(input, extensionRegistry);
       }
     };
 
@@ -3022,6 +3034,9 @@
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       this();
+      if (extensionRegistry == null) {
+        throw new java.lang.NullPointerException();
+      }
       int mutable_bitField0_ = 0;
       com.google.protobuf.UnknownFieldSet.Builder unknownFields =
           com.google.protobuf.UnknownFieldSet.newBuilder();
@@ -4297,7 +4312,7 @@
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws com.google.protobuf.InvalidProtocolBufferException {
-          return new ClientStats(input, extensionRegistry);
+        return new ClientStats(input, extensionRegistry);
       }
     };
 
@@ -4359,7 +4374,7 @@
       "HistogramData\022\016\n\006bucket\030\001 \003(\r\022\020\n\010min_see" +
       "n\030\002 \001(\001\022\020\n\010max_seen\030\003 \001(\001\022\013\n\003sum\030\004 \001(\001\022\026" +
       "\n\016sum_of_squares\030\005 \001(\001\022\r\n\005count\030\006 \001(\001\"8\n" +
-      "\022RequestResultCount\022\023\n\013status_code\030\001 \001(\005",
+      "\022RequestResultCount\022\023\n\013status_code\030\001 \001(\005" +
       "\022\r\n\005count\030\002 \001(\003\"\315\001\n\013ClientStats\022.\n\tlaten" +
       "cies\030\001 \001(\0132\033.grpc.testing.HistogramData\022" +
       "\024\n\014time_elapsed\030\002 \001(\001\022\021\n\ttime_user\030\003 \001(\001" +
diff --git a/build.gradle b/build.gradle
index 9e8ac1e..dc2e3a2 100644
--- a/build.gradle
+++ b/build.gradle
@@ -98,7 +98,7 @@
 
         nettyVersion = '4.1.17.Final'
         guavaVersion = '19.0'
-        protobufVersion = '3.4.0'
+        protobufVersion = '3.5.0'
         protocVersion = protobufVersion
         protobufNanoVersion = '3.0.0-alpha-5'
 
diff --git a/buildscripts/kokoro/unix.sh b/buildscripts/kokoro/unix.sh
index 74d90ee..0ab9945 100755
--- a/buildscripts/kokoro/unix.sh
+++ b/buildscripts/kokoro/unix.sh
@@ -7,7 +7,7 @@
 set -exu -o pipefail
 
 export GRADLE_OPTS=-Xmx512m
-export PROTOBUF_VERSION=3.4.0
+export PROTOBUF_VERSION=3.5.0
 export LDFLAGS=-L/tmp/protobuf/lib
 export CXXFLAGS=-I/tmp/protobuf/include
 export LD_LIBRARY_PATH=/tmp/protobuf/lib
diff --git a/buildscripts/make_dependencies.bat b/buildscripts/make_dependencies.bat
index e4447cc..873fa2e 100644
--- a/buildscripts/make_dependencies.bat
+++ b/buildscripts/make_dependencies.bat
@@ -4,7 +4,7 @@
 REM Prerequisite:
 REM   7za.exe in current directory or PATH
 
-set PROTOBUF_VER=3.4.0
+set PROTOBUF_VER=3.5.0
 set CMAKE_NAME=cmake-3.3.2-win32-x86
 
 if not exist "protobuf-%PROTOBUF_VER%\cmake\build\Release\" (
diff --git a/compiler/Dockerfile b/compiler/Dockerfile
index c873b75..370006f 100644
--- a/compiler/Dockerfile
+++ b/compiler/Dockerfile
@@ -2,7 +2,7 @@
 
 RUN scl enable devtoolset-1.1 'bash -c "cd /protobuf && \
     git fetch && \
-    git checkout v3.4.0 && \
+    git checkout v3.5.0 && \
     ./autogen.sh && \
     CXXFLAGS=-m32 ./configure --disable-shared --prefix=/protobuf-32 && \
     make clean && make -j$(nproc) && make -j$(nproc) install"'
diff --git a/examples/android/helloworld/app/build.gradle b/examples/android/helloworld/app/build.gradle
index b79af42..6034160 100644
--- a/examples/android/helloworld/app/build.gradle
+++ b/examples/android/helloworld/app/build.gradle
@@ -28,7 +28,7 @@
 
 protobuf {
     protoc {
-        artifact = 'com.google.protobuf:protoc:3.4.0'
+        artifact = 'com.google.protobuf:protoc:3.5.0'
     }
     plugins {
         javalite {
diff --git a/examples/android/routeguide/app/build.gradle b/examples/android/routeguide/app/build.gradle
index 7f183a5..08f49c7 100644
--- a/examples/android/routeguide/app/build.gradle
+++ b/examples/android/routeguide/app/build.gradle
@@ -25,7 +25,7 @@
 
 protobuf {
     protoc {
-        artifact = 'com.google.protobuf:protoc:3.4.0'
+        artifact = 'com.google.protobuf:protoc:3.5.0'
     }
     plugins {
         javalite {
diff --git a/examples/build.gradle b/examples/build.gradle
index edab878..b39949b 100644
--- a/examples/build.gradle
+++ b/examples/build.gradle
@@ -37,7 +37,7 @@
 
 protobuf {
   protoc {
-    artifact = 'com.google.protobuf:protoc:3.4.0'
+    artifact = 'com.google.protobuf:protoc:3.5.0'
   }
   plugins {
     grpc {
diff --git a/examples/pom.xml b/examples/pom.xml
index e63764a..e671bbc 100644
--- a/examples/pom.xml
+++ b/examples/pom.xml
@@ -67,7 +67,7 @@
         <artifactId>protobuf-maven-plugin</artifactId>
         <version>0.5.0</version>
         <configuration>
-          <protocArtifact>com.google.protobuf:protoc:3.4.0:exe:${os.detected.classifier}</protocArtifact>
+          <protocArtifact>com.google.protobuf:protoc:3.5.0:exe:${os.detected.classifier}</protocArtifact>
           <pluginId>grpc-java</pluginId>
           <pluginArtifact>io.grpc:protoc-gen-grpc-java:${grpc.version}:exe:${os.detected.classifier}</pluginArtifact>
         </configuration>
diff --git a/grpclb/src/generated/main/java/io/grpc/grpclb/ClientStats.java b/grpclb/src/generated/main/java/io/grpc/grpclb/ClientStats.java
index 82a878e..c5b6f8d 100644
--- a/grpclb/src/generated/main/java/io/grpc/grpclb/ClientStats.java
+++ b/grpclb/src/generated/main/java/io/grpc/grpclb/ClientStats.java
@@ -38,6 +38,9 @@
       com.google.protobuf.ExtensionRegistryLite extensionRegistry)
       throws com.google.protobuf.InvalidProtocolBufferException {
     this();
+    if (extensionRegistry == null) {
+      throw new java.lang.NullPointerException();
+    }
     int mutable_bitField0_ = 0;
     com.google.protobuf.UnknownFieldSet.Builder unknownFields =
         com.google.protobuf.UnknownFieldSet.newBuilder();
@@ -1348,7 +1351,7 @@
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
-        return new ClientStats(input, extensionRegistry);
+      return new ClientStats(input, extensionRegistry);
     }
   };
 
diff --git a/grpclb/src/generated/main/java/io/grpc/grpclb/ClientStatsPerToken.java b/grpclb/src/generated/main/java/io/grpc/grpclb/ClientStatsPerToken.java
index a9f5871..c89c058 100644
--- a/grpclb/src/generated/main/java/io/grpc/grpclb/ClientStatsPerToken.java
+++ b/grpclb/src/generated/main/java/io/grpc/grpclb/ClientStatsPerToken.java
@@ -34,6 +34,9 @@
       com.google.protobuf.ExtensionRegistryLite extensionRegistry)
       throws com.google.protobuf.InvalidProtocolBufferException {
     this();
+    if (extensionRegistry == null) {
+      throw new java.lang.NullPointerException();
+    }
     int mutable_bitField0_ = 0;
     com.google.protobuf.UnknownFieldSet.Builder unknownFields =
         com.google.protobuf.UnknownFieldSet.newBuilder();
@@ -603,7 +606,7 @@
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
-        return new ClientStatsPerToken(input, extensionRegistry);
+      return new ClientStatsPerToken(input, extensionRegistry);
     }
   };
 
diff --git a/grpclb/src/generated/main/java/io/grpc/grpclb/InitialLoadBalanceRequest.java b/grpclb/src/generated/main/java/io/grpc/grpclb/InitialLoadBalanceRequest.java
index 96162e7..f16055d 100644
--- a/grpclb/src/generated/main/java/io/grpc/grpclb/InitialLoadBalanceRequest.java
+++ b/grpclb/src/generated/main/java/io/grpc/grpclb/InitialLoadBalanceRequest.java
@@ -29,6 +29,9 @@
       com.google.protobuf.ExtensionRegistryLite extensionRegistry)
       throws com.google.protobuf.InvalidProtocolBufferException {
     this();
+    if (extensionRegistry == null) {
+      throw new java.lang.NullPointerException();
+    }
     int mutable_bitField0_ = 0;
     com.google.protobuf.UnknownFieldSet.Builder unknownFields =
         com.google.protobuf.UnknownFieldSet.newBuilder();
@@ -527,7 +530,7 @@
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
-        return new InitialLoadBalanceRequest(input, extensionRegistry);
+      return new InitialLoadBalanceRequest(input, extensionRegistry);
     }
   };
 
diff --git a/grpclb/src/generated/main/java/io/grpc/grpclb/InitialLoadBalanceResponse.java b/grpclb/src/generated/main/java/io/grpc/grpclb/InitialLoadBalanceResponse.java
index f43f63d..79ed897 100644
--- a/grpclb/src/generated/main/java/io/grpc/grpclb/InitialLoadBalanceResponse.java
+++ b/grpclb/src/generated/main/java/io/grpc/grpclb/InitialLoadBalanceResponse.java
@@ -29,6 +29,9 @@
       com.google.protobuf.ExtensionRegistryLite extensionRegistry)
       throws com.google.protobuf.InvalidProtocolBufferException {
     this();
+    if (extensionRegistry == null) {
+      throw new java.lang.NullPointerException();
+    }
     int mutable_bitField0_ = 0;
     com.google.protobuf.UnknownFieldSet.Builder unknownFields =
         com.google.protobuf.UnknownFieldSet.newBuilder();
@@ -801,7 +804,7 @@
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
-        return new InitialLoadBalanceResponse(input, extensionRegistry);
+      return new InitialLoadBalanceResponse(input, extensionRegistry);
     }
   };
 
diff --git a/grpclb/src/generated/main/java/io/grpc/grpclb/LoadBalanceRequest.java b/grpclb/src/generated/main/java/io/grpc/grpclb/LoadBalanceRequest.java
index 3522a5f..bdf27ef 100644
--- a/grpclb/src/generated/main/java/io/grpc/grpclb/LoadBalanceRequest.java
+++ b/grpclb/src/generated/main/java/io/grpc/grpclb/LoadBalanceRequest.java
@@ -28,6 +28,9 @@
       com.google.protobuf.ExtensionRegistryLite extensionRegistry)
       throws com.google.protobuf.InvalidProtocolBufferException {
     this();
+    if (extensionRegistry == null) {
+      throw new java.lang.NullPointerException();
+    }
     int mutable_bitField0_ = 0;
     com.google.protobuf.UnknownFieldSet.Builder unknownFields =
         com.google.protobuf.UnknownFieldSet.newBuilder();
@@ -949,7 +952,7 @@
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
-        return new LoadBalanceRequest(input, extensionRegistry);
+      return new LoadBalanceRequest(input, extensionRegistry);
     }
   };
 
diff --git a/grpclb/src/generated/main/java/io/grpc/grpclb/LoadBalanceResponse.java b/grpclb/src/generated/main/java/io/grpc/grpclb/LoadBalanceResponse.java
index a3715a6..aa223bb 100644
--- a/grpclb/src/generated/main/java/io/grpc/grpclb/LoadBalanceResponse.java
+++ b/grpclb/src/generated/main/java/io/grpc/grpclb/LoadBalanceResponse.java
@@ -28,6 +28,9 @@
       com.google.protobuf.ExtensionRegistryLite extensionRegistry)
       throws com.google.protobuf.InvalidProtocolBufferException {
     this();
+    if (extensionRegistry == null) {
+      throw new java.lang.NullPointerException();
+    }
     int mutable_bitField0_ = 0;
     com.google.protobuf.UnknownFieldSet.Builder unknownFields =
         com.google.protobuf.UnknownFieldSet.newBuilder();
@@ -949,7 +952,7 @@
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
-        return new LoadBalanceResponse(input, extensionRegistry);
+      return new LoadBalanceResponse(input, extensionRegistry);
     }
   };
 
diff --git a/grpclb/src/generated/main/java/io/grpc/grpclb/LoadBalancerProto.java b/grpclb/src/generated/main/java/io/grpc/grpclb/LoadBalancerProto.java
index 25be279..d7eafe1 100644
--- a/grpclb/src/generated/main/java/io/grpc/grpclb/LoadBalancerProto.java
+++ b/grpclb/src/generated/main/java/io/grpc/grpclb/LoadBalancerProto.java
@@ -72,7 +72,7 @@
       "load_balance_request_type\")\n\031InitialLoad" +
       "BalanceRequest\022\014\n\004name\030\001 \001(\t\"D\n\023ClientSt" +
       "atsPerToken\022\032\n\022load_balance_token\030\001 \001(\t\022" +
-      "\021\n\tnum_calls\030\002 \001(\003\"\244\002\n\013ClientStats\022-\n\tti",
+      "\021\n\tnum_calls\030\002 \001(\003\"\244\002\n\013ClientStats\022-\n\tti" +
       "mestamp\030\001 \001(\0132\032.google.protobuf.Timestam" +
       "p\022\031\n\021num_calls_started\030\002 \001(\003\022\032\n\022num_call" +
       "s_finished\030\003 \001(\003\0225\n-num_calls_finished_w" +
@@ -82,7 +82,7 @@
       "1.ClientStatsPerTokenJ\004\010\004\020\005J\004\010\005\020\006\"\246\001\n\023Lo" +
       "adBalanceResponse\022B\n\020initial_response\030\001 " +
       "\001(\0132&.grpc.lb.v1.InitialLoadBalanceRespo" +
-      "nseH\000\022-\n\013server_list\030\002 \001(\0132\026.grpc.lb.v1.",
+      "nseH\000\022-\n\013server_list\030\002 \001(\0132\026.grpc.lb.v1." +
       "ServerListH\000B\034\n\032load_balance_response_ty" +
       "pe\"}\n\032InitialLoadBalanceResponse\022\036\n\026load" +
       "_balancer_delegate\030\001 \001(\t\022?\n\034client_stats" +
@@ -92,7 +92,7 @@
       "ip_address\030\001 \001(\014\022\014\n\004port\030\002 \001(\005\022\032\n\022load_b" +
       "alance_token\030\003 \001(\t\022\014\n\004drop\030\004 \001(\010J\004\010\005\020\0062b" +
       "\n\014LoadBalancer\022R\n\013BalanceLoad\022\036.grpc.lb." +
-      "v1.LoadBalanceRequest\032\037.grpc.lb.v1.LoadB",
+      "v1.LoadBalanceRequest\032\037.grpc.lb.v1.LoadB" +
       "alanceResponse(\0010\001B%\n\016io.grpc.grpclbB\021Lo" +
       "adBalancerProtoP\001b\006proto3"
     };
diff --git a/grpclb/src/generated/main/java/io/grpc/grpclb/Server.java b/grpclb/src/generated/main/java/io/grpc/grpclb/Server.java
index e5501c1..cf3eeea 100644
--- a/grpclb/src/generated/main/java/io/grpc/grpclb/Server.java
+++ b/grpclb/src/generated/main/java/io/grpc/grpclb/Server.java
@@ -37,6 +37,9 @@
       com.google.protobuf.ExtensionRegistryLite extensionRegistry)
       throws com.google.protobuf.InvalidProtocolBufferException {
     this();
+    if (extensionRegistry == null) {
+      throw new java.lang.NullPointerException();
+    }
     int mutable_bitField0_ = 0;
     com.google.protobuf.UnknownFieldSet.Builder unknownFields =
         com.google.protobuf.UnknownFieldSet.newBuilder();
@@ -796,7 +799,7 @@
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
-        return new Server(input, extensionRegistry);
+      return new Server(input, extensionRegistry);
     }
   };
 
diff --git a/grpclb/src/generated/main/java/io/grpc/grpclb/ServerList.java b/grpclb/src/generated/main/java/io/grpc/grpclb/ServerList.java
index 29fe3c6..33fc04f 100644
--- a/grpclb/src/generated/main/java/io/grpc/grpclb/ServerList.java
+++ b/grpclb/src/generated/main/java/io/grpc/grpclb/ServerList.java
@@ -29,6 +29,9 @@
       com.google.protobuf.ExtensionRegistryLite extensionRegistry)
       throws com.google.protobuf.InvalidProtocolBufferException {
     this();
+    if (extensionRegistry == null) {
+      throw new java.lang.NullPointerException();
+    }
     int mutable_bitField0_ = 0;
     com.google.protobuf.UnknownFieldSet.Builder unknownFields =
         com.google.protobuf.UnknownFieldSet.newBuilder();
@@ -871,7 +874,7 @@
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
-        return new ServerList(input, extensionRegistry);
+      return new ServerList(input, extensionRegistry);
     }
   };
 
diff --git a/interop-testing/src/generated/main/java/com/google/protobuf/EmptyProtos.java b/interop-testing/src/generated/main/java/com/google/protobuf/EmptyProtos.java
index 23d7e6a..fb4bb99 100644
--- a/interop-testing/src/generated/main/java/com/google/protobuf/EmptyProtos.java
+++ b/interop-testing/src/generated/main/java/com/google/protobuf/EmptyProtos.java
@@ -52,6 +52,9 @@
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       this();
+      if (extensionRegistry == null) {
+        throw new java.lang.NullPointerException();
+      }
       com.google.protobuf.UnknownFieldSet.Builder unknownFields =
           com.google.protobuf.UnknownFieldSet.newBuilder();
       try {
@@ -397,7 +400,7 @@
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws com.google.protobuf.InvalidProtocolBufferException {
-          return new Empty(input, extensionRegistry);
+        return new Empty(input, extensionRegistry);
       }
     };
 
diff --git a/interop-testing/src/generated/main/java/io/grpc/testing/integration/Messages.java b/interop-testing/src/generated/main/java/io/grpc/testing/integration/Messages.java
index 65587b6..f75290a 100644
--- a/interop-testing/src/generated/main/java/io/grpc/testing/integration/Messages.java
+++ b/interop-testing/src/generated/main/java/io/grpc/testing/integration/Messages.java
@@ -213,6 +213,9 @@
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       this();
+      if (extensionRegistry == null) {
+        throw new java.lang.NullPointerException();
+      }
       int mutable_bitField0_ = 0;
       com.google.protobuf.UnknownFieldSet.Builder unknownFields =
           com.google.protobuf.UnknownFieldSet.newBuilder();
@@ -747,7 +750,7 @@
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws com.google.protobuf.InvalidProtocolBufferException {
-          return new Payload(input, extensionRegistry);
+        return new Payload(input, extensionRegistry);
       }
     };
 
@@ -817,6 +820,9 @@
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       this();
+      if (extensionRegistry == null) {
+        throw new java.lang.NullPointerException();
+      }
       int mutable_bitField0_ = 0;
       com.google.protobuf.UnknownFieldSet.Builder unknownFields =
           com.google.protobuf.UnknownFieldSet.newBuilder();
@@ -1342,7 +1348,7 @@
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws com.google.protobuf.InvalidProtocolBufferException {
-          return new EchoStatus(input, extensionRegistry);
+        return new EchoStatus(input, extensionRegistry);
       }
     };
 
@@ -1555,6 +1561,9 @@
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       this();
+      if (extensionRegistry == null) {
+        throw new java.lang.NullPointerException();
+      }
       int mutable_bitField0_ = 0;
       com.google.protobuf.UnknownFieldSet.Builder unknownFields =
           com.google.protobuf.UnknownFieldSet.newBuilder();
@@ -3193,7 +3202,7 @@
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws com.google.protobuf.InvalidProtocolBufferException {
-          return new SimpleRequest(input, extensionRegistry);
+        return new SimpleRequest(input, extensionRegistry);
       }
     };
 
@@ -3310,6 +3319,9 @@
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       this();
+      if (extensionRegistry == null) {
+        throw new java.lang.NullPointerException();
+      }
       int mutable_bitField0_ = 0;
       com.google.protobuf.UnknownFieldSet.Builder unknownFields =
           com.google.protobuf.UnknownFieldSet.newBuilder();
@@ -4195,7 +4207,7 @@
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws com.google.protobuf.InvalidProtocolBufferException {
-          return new SimpleResponse(input, extensionRegistry);
+        return new SimpleResponse(input, extensionRegistry);
       }
     };
 
@@ -4254,6 +4266,9 @@
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       this();
+      if (extensionRegistry == null) {
+        throw new java.lang.NullPointerException();
+      }
       int mutable_bitField0_ = 0;
       com.google.protobuf.UnknownFieldSet.Builder unknownFields =
           com.google.protobuf.UnknownFieldSet.newBuilder();
@@ -4717,7 +4732,7 @@
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws com.google.protobuf.InvalidProtocolBufferException {
-          return new SimpleContext(input, extensionRegistry);
+        return new SimpleContext(input, extensionRegistry);
       }
     };
 
@@ -4828,6 +4843,9 @@
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       this();
+      if (extensionRegistry == null) {
+        throw new java.lang.NullPointerException();
+      }
       int mutable_bitField0_ = 0;
       com.google.protobuf.UnknownFieldSet.Builder unknownFields =
           com.google.protobuf.UnknownFieldSet.newBuilder();
@@ -5663,7 +5681,7 @@
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws com.google.protobuf.InvalidProtocolBufferException {
-          return new StreamingInputCallRequest(input, extensionRegistry);
+        return new StreamingInputCallRequest(input, extensionRegistry);
       }
     };
 
@@ -5725,6 +5743,9 @@
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       this();
+      if (extensionRegistry == null) {
+        throw new java.lang.NullPointerException();
+      }
       int mutable_bitField0_ = 0;
       com.google.protobuf.UnknownFieldSet.Builder unknownFields =
           com.google.protobuf.UnknownFieldSet.newBuilder();
@@ -6139,7 +6160,7 @@
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws com.google.protobuf.InvalidProtocolBufferException {
-          return new StreamingInputCallResponse(input, extensionRegistry);
+        return new StreamingInputCallResponse(input, extensionRegistry);
       }
     };
 
@@ -6246,6 +6267,9 @@
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       this();
+      if (extensionRegistry == null) {
+        throw new java.lang.NullPointerException();
+      }
       int mutable_bitField0_ = 0;
       com.google.protobuf.UnknownFieldSet.Builder unknownFields =
           com.google.protobuf.UnknownFieldSet.newBuilder();
@@ -7002,7 +7026,7 @@
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws com.google.protobuf.InvalidProtocolBufferException {
-          return new ResponseParameters(input, extensionRegistry);
+        return new ResponseParameters(input, extensionRegistry);
       }
     };
 
@@ -7175,6 +7199,9 @@
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       this();
+      if (extensionRegistry == null) {
+        throw new java.lang.NullPointerException();
+      }
       int mutable_bitField0_ = 0;
       com.google.protobuf.UnknownFieldSet.Builder unknownFields =
           com.google.protobuf.UnknownFieldSet.newBuilder();
@@ -8551,7 +8578,7 @@
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws com.google.protobuf.InvalidProtocolBufferException {
-          return new StreamingOutputCallRequest(input, extensionRegistry);
+        return new StreamingOutputCallRequest(input, extensionRegistry);
       }
     };
 
@@ -8628,6 +8655,9 @@
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       this();
+      if (extensionRegistry == null) {
+        throw new java.lang.NullPointerException();
+      }
       int mutable_bitField0_ = 0;
       com.google.protobuf.UnknownFieldSet.Builder unknownFields =
           com.google.protobuf.UnknownFieldSet.newBuilder();
@@ -9198,7 +9228,7 @@
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws com.google.protobuf.InvalidProtocolBufferException {
-          return new StreamingOutputCallResponse(input, extensionRegistry);
+        return new StreamingOutputCallResponse(input, extensionRegistry);
       }
     };
 
@@ -9257,6 +9287,9 @@
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       this();
+      if (extensionRegistry == null) {
+        throw new java.lang.NullPointerException();
+      }
       int mutable_bitField0_ = 0;
       com.google.protobuf.UnknownFieldSet.Builder unknownFields =
           com.google.protobuf.UnknownFieldSet.newBuilder();
@@ -9656,7 +9689,7 @@
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws com.google.protobuf.InvalidProtocolBufferException {
-          return new ReconnectParams(input, extensionRegistry);
+        return new ReconnectParams(input, extensionRegistry);
       }
     };
 
@@ -9730,6 +9763,9 @@
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       this();
+      if (extensionRegistry == null) {
+        throw new java.lang.NullPointerException();
+      }
       int mutable_bitField0_ = 0;
       com.google.protobuf.UnknownFieldSet.Builder unknownFields =
           com.google.protobuf.UnknownFieldSet.newBuilder();
@@ -10294,7 +10330,7 @@
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws com.google.protobuf.InvalidProtocolBufferException {
-          return new ReconnectInfo(input, extensionRegistry);
+        return new ReconnectInfo(input, extensionRegistry);
       }
     };
 
@@ -10391,7 +10427,7 @@
       "(\0162\031.grpc.testing.PayloadType\022\025\n\rrespons" +
       "e_size\030\002 \001(\005\022&\n\007payload\030\003 \001(\0132\025.grpc.tes" +
       "ting.Payload\022\025\n\rfill_username\030\004 \001(\010\022\030\n\020f" +
-      "ill_oauth_scope\030\005 \001(\010\0227\n\023response_compre",
+      "ill_oauth_scope\030\005 \001(\010\0227\n\023response_compre" +
       "ssed\030\006 \001(\0132\032.google.protobuf.BoolValue\0221" +
       "\n\017response_status\030\007 \001(\0132\030.grpc.testing.E" +
       "choStatus\0225\n\021expect_compressed\030\010 \001(\0132\032.g" +
@@ -10401,7 +10437,7 @@
       "\t\"\036\n\rSimpleContext\022\r\n\005value\030\001 \001(\t\"z\n\031Str" +
       "eamingInputCallRequest\022&\n\007payload\030\001 \001(\0132" +
       "\025.grpc.testing.Payload\0225\n\021expect_compres" +
-      "sed\030\002 \001(\0132\032.google.protobuf.BoolValue\"=\n",
+      "sed\030\002 \001(\0132\032.google.protobuf.BoolValue\"=\n" +
       "\032StreamingInputCallResponse\022\037\n\027aggregate" +
       "d_payload_size\030\001 \001(\005\"g\n\022ResponseParamete" +
       "rs\022\014\n\004size\030\001 \001(\005\022\023\n\013interval_us\030\002 \001(\005\022.\n" +
@@ -10411,7 +10447,7 @@
       "adType\022=\n\023response_parameters\030\002 \003(\0132 .gr" +
       "pc.testing.ResponseParameters\022&\n\007payload" +
       "\030\003 \001(\0132\025.grpc.testing.Payload\0221\n\017respons" +
-      "e_status\030\007 \001(\0132\030.grpc.testing.EchoStatus",
+      "e_status\030\007 \001(\0132\030.grpc.testing.EchoStatus" +
       "\"E\n\033StreamingOutputCallResponse\022&\n\007paylo" +
       "ad\030\001 \001(\0132\025.grpc.testing.Payload\"3\n\017Recon" +
       "nectParams\022 \n\030max_reconnect_backoff_ms\030\001" +
diff --git a/interop-testing/src/generated/main/java/io/grpc/testing/integration/Metrics.java b/interop-testing/src/generated/main/java/io/grpc/testing/integration/Metrics.java
index 2a9f84e..f9b5e49 100644
--- a/interop-testing/src/generated/main/java/io/grpc/testing/integration/Metrics.java
+++ b/interop-testing/src/generated/main/java/io/grpc/testing/integration/Metrics.java
@@ -80,6 +80,9 @@
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       this();
+      if (extensionRegistry == null) {
+        throw new java.lang.NullPointerException();
+      }
       int mutable_bitField0_ = 0;
       com.google.protobuf.UnknownFieldSet.Builder unknownFields =
           com.google.protobuf.UnknownFieldSet.newBuilder();
@@ -917,7 +920,7 @@
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws com.google.protobuf.InvalidProtocolBufferException {
-          return new GaugeResponse(input, extensionRegistry);
+        return new GaugeResponse(input, extensionRegistry);
       }
     };
 
@@ -980,6 +983,9 @@
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       this();
+      if (extensionRegistry == null) {
+        throw new java.lang.NullPointerException();
+      }
       int mutable_bitField0_ = 0;
       com.google.protobuf.UnknownFieldSet.Builder unknownFields =
           com.google.protobuf.UnknownFieldSet.newBuilder();
@@ -1447,7 +1453,7 @@
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws com.google.protobuf.InvalidProtocolBufferException {
-          return new GaugeRequest(input, extensionRegistry);
+        return new GaugeRequest(input, extensionRegistry);
       }
     };
 
@@ -1495,6 +1501,9 @@
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       this();
+      if (extensionRegistry == null) {
+        throw new java.lang.NullPointerException();
+      }
       com.google.protobuf.UnknownFieldSet.Builder unknownFields =
           com.google.protobuf.UnknownFieldSet.newBuilder();
       try {
@@ -1831,7 +1840,7 @@
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws com.google.protobuf.InvalidProtocolBufferException {
-          return new EmptyMessage(input, extensionRegistry);
+        return new EmptyMessage(input, extensionRegistry);
       }
     };
 
@@ -1883,7 +1892,7 @@
       "llGauges\022\032.grpc.testing.EmptyMessage\032\033.g" +
       "rpc.testing.GaugeResponse0\001\022C\n\010GetGauge\022" +
       "\032.grpc.testing.GaugeRequest\032\033.grpc.testi" +
-      "ng.GaugeResponseB\035\n\033io.grpc.testing.inte",
+      "ng.GaugeResponseB\035\n\033io.grpc.testing.inte" +
       "grationb\006proto3"
     };
     com.google.protobuf.Descriptors.FileDescriptor.InternalDescriptorAssigner assigner =
diff --git a/interop-testing/src/generated/main/java/io/grpc/testing/integration/Test.java b/interop-testing/src/generated/main/java/io/grpc/testing/integration/Test.java
index 44903d2..ba87a36 100644
--- a/interop-testing/src/generated/main/java/io/grpc/testing/integration/Test.java
+++ b/interop-testing/src/generated/main/java/io/grpc/testing/integration/Test.java
@@ -32,7 +32,7 @@
       "impleRequest\032\034.grpc.testing.SimpleRespon" +
       "se\022O\n\022CacheableUnaryCall\022\033.grpc.testing." +
       "SimpleRequest\032\034.grpc.testing.SimpleRespo" +
-      "nse\022l\n\023StreamingOutputCall\022(.grpc.testin",
+      "nse\022l\n\023StreamingOutputCall\022(.grpc.testin" +
       "g.StreamingOutputCallRequest\032).grpc.test" +
       "ing.StreamingOutputCallResponse0\001\022i\n\022Str" +
       "eamingInputCall\022\'.grpc.testing.Streaming" +
@@ -42,7 +42,7 @@
       "\032).grpc.testing.StreamingOutputCallRespo" +
       "nse(\0010\001\022i\n\016HalfDuplexCall\022(.grpc.testing" +
       ".StreamingOutputCallRequest\032).grpc.testi" +
-      "ng.StreamingOutputCallResponse(\0010\001\022=\n\021Un",
+      "ng.StreamingOutputCallResponse(\0010\001\022=\n\021Un" +
       "implementedCall\022\023.grpc.testing.Empty\032\023.g" +
       "rpc.testing.Empty2U\n\024UnimplementedServic" +
       "e\022=\n\021UnimplementedCall\022\023.grpc.testing.Em" +
diff --git a/repositories.bzl b/repositories.bzl
index 39d7017..c179855 100644
--- a/repositories.bzl
+++ b/repositories.bzl
@@ -139,8 +139,8 @@
   native.http_archive(
       name = "com_google_protobuf",
       sha256 = "542703acadc3f690d998f4641e1b988f15ba57ebca05fdfb1cd9095bec007948",
-      strip_prefix = "protobuf-3.4.0",
-      urls = ["https://github.com/google/protobuf/archive/v3.4.0.zip"],
+      strip_prefix = "protobuf-3.5.0",
+      urls = ["https://github.com/google/protobuf/archive/v3.5.0.zip"],
   )
 
 def com_google_protobuf_java():
@@ -149,8 +149,8 @@
   native.http_archive(
       name = "com_google_protobuf_java",
       sha256 = "542703acadc3f690d998f4641e1b988f15ba57ebca05fdfb1cd9095bec007948",
-      strip_prefix = "protobuf-3.4.0",
-      urls = ["https://github.com/google/protobuf/archive/v3.4.0.zip"],
+      strip_prefix = "protobuf-3.5.0",
+      urls = ["https://github.com/google/protobuf/archive/v3.5.0.zip"],
   )
 
 def com_google_protobuf_nano_protobuf_javanano():
diff --git a/services/src/generated/main/java/com/google/instrumentation/stats/proto/CensusProto.java b/services/src/generated/main/java/com/google/instrumentation/stats/proto/CensusProto.java
index 533aceb..89a110c 100644
--- a/services/src/generated/main/java/com/google/instrumentation/stats/proto/CensusProto.java
+++ b/services/src/generated/main/java/com/google/instrumentation/stats/proto/CensusProto.java
@@ -69,6 +69,9 @@
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       this();
+      if (extensionRegistry == null) {
+        throw new java.lang.NullPointerException();
+      }
       int mutable_bitField0_ = 0;
       com.google.protobuf.UnknownFieldSet.Builder unknownFields =
           com.google.protobuf.UnknownFieldSet.newBuilder();
@@ -577,7 +580,7 @@
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws com.google.protobuf.InvalidProtocolBufferException {
-          return new Duration(input, extensionRegistry);
+        return new Duration(input, extensionRegistry);
       }
     };
 
@@ -650,6 +653,9 @@
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       this();
+      if (extensionRegistry == null) {
+        throw new java.lang.NullPointerException();
+      }
       int mutable_bitField0_ = 0;
       com.google.protobuf.UnknownFieldSet.Builder unknownFields =
           com.google.protobuf.UnknownFieldSet.newBuilder();
@@ -1154,7 +1160,7 @@
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws com.google.protobuf.InvalidProtocolBufferException {
-          return new Timestamp(input, extensionRegistry);
+        return new Timestamp(input, extensionRegistry);
       }
     };
 
@@ -1269,6 +1275,9 @@
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       this();
+      if (extensionRegistry == null) {
+        throw new java.lang.NullPointerException();
+      }
       int mutable_bitField0_ = 0;
       com.google.protobuf.UnknownFieldSet.Builder unknownFields =
           com.google.protobuf.UnknownFieldSet.newBuilder();
@@ -1646,6 +1655,9 @@
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws com.google.protobuf.InvalidProtocolBufferException {
         this();
+        if (extensionRegistry == null) {
+          throw new java.lang.NullPointerException();
+        }
         int mutable_bitField0_ = 0;
         com.google.protobuf.UnknownFieldSet.Builder unknownFields =
             com.google.protobuf.UnknownFieldSet.newBuilder();
@@ -2531,7 +2543,7 @@
             com.google.protobuf.CodedInputStream input,
             com.google.protobuf.ExtensionRegistryLite extensionRegistry)
             throws com.google.protobuf.InvalidProtocolBufferException {
-            return new MeasurementUnit(input, extensionRegistry);
+          return new MeasurementUnit(input, extensionRegistry);
         }
       };
 
@@ -3361,7 +3373,7 @@
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws com.google.protobuf.InvalidProtocolBufferException {
-          return new MeasurementDescriptor(input, extensionRegistry);
+        return new MeasurementDescriptor(input, extensionRegistry);
       }
     };
 
@@ -3587,6 +3599,9 @@
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       this();
+      if (extensionRegistry == null) {
+        throw new java.lang.NullPointerException();
+      }
       int mutable_bitField0_ = 0;
       com.google.protobuf.UnknownFieldSet.Builder unknownFields =
           com.google.protobuf.UnknownFieldSet.newBuilder();
@@ -3746,6 +3761,9 @@
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws com.google.protobuf.InvalidProtocolBufferException {
         this();
+        if (extensionRegistry == null) {
+          throw new java.lang.NullPointerException();
+        }
         int mutable_bitField0_ = 0;
         com.google.protobuf.UnknownFieldSet.Builder unknownFields =
             com.google.protobuf.UnknownFieldSet.newBuilder();
@@ -4239,7 +4257,7 @@
             com.google.protobuf.CodedInputStream input,
             com.google.protobuf.ExtensionRegistryLite extensionRegistry)
             throws com.google.protobuf.InvalidProtocolBufferException {
-            return new Range(input, extensionRegistry);
+          return new Range(input, extensionRegistry);
         }
       };
 
@@ -5736,7 +5754,7 @@
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws com.google.protobuf.InvalidProtocolBufferException {
-          return new DistributionAggregation(input, extensionRegistry);
+        return new DistributionAggregation(input, extensionRegistry);
       }
     };
 
@@ -5852,6 +5870,9 @@
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       this();
+      if (extensionRegistry == null) {
+        throw new java.lang.NullPointerException();
+      }
       int mutable_bitField0_ = 0;
       com.google.protobuf.UnknownFieldSet.Builder unknownFields =
           com.google.protobuf.UnknownFieldSet.newBuilder();
@@ -6526,7 +6547,7 @@
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws com.google.protobuf.InvalidProtocolBufferException {
-          return new DistributionAggregationDescriptor(input, extensionRegistry);
+        return new DistributionAggregationDescriptor(input, extensionRegistry);
       }
     };
 
@@ -6676,6 +6697,9 @@
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       this();
+      if (extensionRegistry == null) {
+        throw new java.lang.NullPointerException();
+      }
       int mutable_bitField0_ = 0;
       com.google.protobuf.UnknownFieldSet.Builder unknownFields =
           com.google.protobuf.UnknownFieldSet.newBuilder();
@@ -6820,6 +6844,9 @@
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws com.google.protobuf.InvalidProtocolBufferException {
         this();
+        if (extensionRegistry == null) {
+          throw new java.lang.NullPointerException();
+        }
         int mutable_bitField0_ = 0;
         com.google.protobuf.UnknownFieldSet.Builder unknownFields =
             com.google.protobuf.UnknownFieldSet.newBuilder();
@@ -7542,7 +7569,7 @@
             com.google.protobuf.CodedInputStream input,
             com.google.protobuf.ExtensionRegistryLite extensionRegistry)
             throws com.google.protobuf.InvalidProtocolBufferException {
-            return new Interval(input, extensionRegistry);
+          return new Interval(input, extensionRegistry);
         }
       };
 
@@ -8732,7 +8759,7 @@
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws com.google.protobuf.InvalidProtocolBufferException {
-          return new IntervalAggregation(input, extensionRegistry);
+        return new IntervalAggregation(input, extensionRegistry);
       }
     };
 
@@ -8851,6 +8878,9 @@
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       this();
+      if (extensionRegistry == null) {
+        throw new java.lang.NullPointerException();
+      }
       int mutable_bitField0_ = 0;
       com.google.protobuf.UnknownFieldSet.Builder unknownFields =
           com.google.protobuf.UnknownFieldSet.newBuilder();
@@ -9752,7 +9782,7 @@
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws com.google.protobuf.InvalidProtocolBufferException {
-          return new IntervalAggregationDescriptor(input, extensionRegistry);
+        return new IntervalAggregationDescriptor(input, extensionRegistry);
       }
     };
 
@@ -9826,6 +9856,9 @@
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       this();
+      if (extensionRegistry == null) {
+        throw new java.lang.NullPointerException();
+      }
       int mutable_bitField0_ = 0;
       com.google.protobuf.UnknownFieldSet.Builder unknownFields =
           com.google.protobuf.UnknownFieldSet.newBuilder();
@@ -10419,7 +10452,7 @@
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws com.google.protobuf.InvalidProtocolBufferException {
-          return new Tag(input, extensionRegistry);
+        return new Tag(input, extensionRegistry);
       }
     };
 
@@ -10598,6 +10631,9 @@
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       this();
+      if (extensionRegistry == null) {
+        throw new java.lang.NullPointerException();
+      }
       int mutable_bitField0_ = 0;
       com.google.protobuf.UnknownFieldSet.Builder unknownFields =
           com.google.protobuf.UnknownFieldSet.newBuilder();
@@ -12118,7 +12154,7 @@
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws com.google.protobuf.InvalidProtocolBufferException {
-          return new ViewDescriptor(input, extensionRegistry);
+        return new ViewDescriptor(input, extensionRegistry);
       }
     };
 
@@ -12259,6 +12295,9 @@
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       this();
+      if (extensionRegistry == null) {
+        throw new java.lang.NullPointerException();
+      }
       int mutable_bitField0_ = 0;
       com.google.protobuf.UnknownFieldSet.Builder unknownFields =
           com.google.protobuf.UnknownFieldSet.newBuilder();
@@ -13473,7 +13512,7 @@
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws com.google.protobuf.InvalidProtocolBufferException {
-          return new DistributionView(input, extensionRegistry);
+        return new DistributionView(input, extensionRegistry);
       }
     };
 
@@ -13576,6 +13615,9 @@
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       this();
+      if (extensionRegistry == null) {
+        throw new java.lang.NullPointerException();
+      }
       int mutable_bitField0_ = 0;
       com.google.protobuf.UnknownFieldSet.Builder unknownFields =
           com.google.protobuf.UnknownFieldSet.newBuilder();
@@ -14377,7 +14419,7 @@
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws com.google.protobuf.InvalidProtocolBufferException {
-          return new IntervalView(input, extensionRegistry);
+        return new IntervalView(input, extensionRegistry);
       }
     };
 
@@ -14476,6 +14518,9 @@
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       this();
+      if (extensionRegistry == null) {
+        throw new java.lang.NullPointerException();
+      }
       int mutable_bitField0_ = 0;
       com.google.protobuf.UnknownFieldSet.Builder unknownFields =
           com.google.protobuf.UnknownFieldSet.newBuilder();
@@ -15447,7 +15492,7 @@
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws com.google.protobuf.InvalidProtocolBufferException {
-          return new View(input, extensionRegistry);
+        return new View(input, extensionRegistry);
       }
     };
 
@@ -15559,7 +15604,7 @@
       "umentation.MeasurementDescriptor.Measure" +
       "mentUnit\032\276\001\n\017MeasurementUnit\022\017\n\007power10\030" +
       "\001 \001(\005\022K\n\nnumerators\030\002 \003(\01627.google.instr" +
-      "umentation.MeasurementDescriptor.BasicUn",
+      "umentation.MeasurementDescriptor.BasicUn" +
       "it\022M\n\014denominators\030\003 \003(\01627.google.instru" +
       "mentation.MeasurementDescriptor.BasicUni" +
       "t\"`\n\tBasicUnit\022\013\n\007UNKNOWN\020\000\022\n\n\006SCALAR\020\001\022" +
@@ -15569,7 +15614,7 @@
       "sum\030\003 \001(\001\022D\n\005range\030\004 \001(\01325.google.instru" +
       "mentation.DistributionAggregation.Range\022" +
       "\025\n\rbucket_counts\030\005 \003(\003\022)\n\004tags\030\006 \003(\0132\033.g" +
-      "oogle.instrumentation.Tag\032!\n\005Range\022\013\n\003mi",
+      "oogle.instrumentation.Tag\032!\n\005Range\022\013\n\003mi" +
       "n\030\001 \001(\001\022\013\n\003max\030\002 \001(\001\":\n!DistributionAggr" +
       "egationDescriptor\022\025\n\rbucket_bounds\030\001 \003(\001" +
       "\"\352\001\n\023IntervalAggregation\022G\n\tintervals\030\001 " +
@@ -15579,7 +15624,7 @@
       "rval_size\030\001 \001(\0132 .google.instrumentation" +
       ".Duration\022\r\n\005count\030\002 \001(\001\022\013\n\003sum\030\003 \001(\001\"r\n" +
       "\035IntervalAggregationDescriptor\022\027\n\017n_sub_" +
-      "intervals\030\001 \001(\005\0228\n\016interval_sizes\030\002 \003(\0132",
+      "intervals\030\001 \001(\005\0228\n\016interval_sizes\030\002 \003(\0132" +
       " .google.instrumentation.Duration\"!\n\003Tag" +
       "\022\013\n\003key\030\001 \001(\t\022\r\n\005value\030\002 \001(\t\"\257\002\n\016ViewDes" +
       "criptor\022\014\n\004name\030\001 \001(\t\022\023\n\013description\030\002 \001" +
@@ -15589,7 +15634,7 @@
       "ptorH\000\022]\n\030distribution_aggregation\030\005 \001(\013" +
       "29.google.instrumentation.DistributionAg" +
       "gregationDescriptorH\000\022\020\n\010tag_keys\030\006 \003(\tB" +
-      "\r\n\013aggregation\"\273\001\n\020DistributionView\022E\n\014a",
+      "\r\n\013aggregation\"\273\001\n\020DistributionView\022E\n\014a" +
       "ggregations\030\001 \003(\0132/.google.instrumentati" +
       "on.DistributionAggregation\0220\n\005start\030\002 \001(" +
       "\0132!.google.instrumentation.Timestamp\022.\n\003" +
@@ -15599,7 +15644,7 @@
       "egation\"\247\001\n\004View\022\021\n\tview_name\030\001 \001(\t\022E\n\021d" +
       "istribution_view\030\002 \001(\0132(.google.instrume" +
       "ntation.DistributionViewH\000\022=\n\rinterval_v" +
-      "iew\030\003 \001(\0132$.google.instrumentation.Inter",
+      "iew\030\003 \001(\0132$.google.instrumentation.Inter" +
       "valViewH\000B\006\n\004viewB5\n&com.google.instrume" +
       "ntation.stats.protoB\013CensusProtob\006proto3"
     };
diff --git a/services/src/generated/main/java/io/grpc/health/v1/HealthCheckRequest.java b/services/src/generated/main/java/io/grpc/health/v1/HealthCheckRequest.java
index 3117f5b..4ae6372 100644
--- a/services/src/generated/main/java/io/grpc/health/v1/HealthCheckRequest.java
+++ b/services/src/generated/main/java/io/grpc/health/v1/HealthCheckRequest.java
@@ -29,6 +29,9 @@
       com.google.protobuf.ExtensionRegistryLite extensionRegistry)
       throws com.google.protobuf.InvalidProtocolBufferException {
     this();
+    if (extensionRegistry == null) {
+      throw new java.lang.NullPointerException();
+    }
     int mutable_bitField0_ = 0;
     com.google.protobuf.UnknownFieldSet.Builder unknownFields =
         com.google.protobuf.UnknownFieldSet.newBuilder();
@@ -492,7 +495,7 @@
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
-        return new HealthCheckRequest(input, extensionRegistry);
+      return new HealthCheckRequest(input, extensionRegistry);
     }
   };
 
diff --git a/services/src/generated/main/java/io/grpc/health/v1/HealthCheckResponse.java b/services/src/generated/main/java/io/grpc/health/v1/HealthCheckResponse.java
index ba65088..1d69211 100644
--- a/services/src/generated/main/java/io/grpc/health/v1/HealthCheckResponse.java
+++ b/services/src/generated/main/java/io/grpc/health/v1/HealthCheckResponse.java
@@ -29,6 +29,9 @@
       com.google.protobuf.ExtensionRegistryLite extensionRegistry)
       throws com.google.protobuf.InvalidProtocolBufferException {
     this();
+    if (extensionRegistry == null) {
+      throw new java.lang.NullPointerException();
+    }
     int mutable_bitField0_ = 0;
     com.google.protobuf.UnknownFieldSet.Builder unknownFields =
         com.google.protobuf.UnknownFieldSet.newBuilder();
@@ -555,7 +558,7 @@
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
-        return new HealthCheckResponse(input, extensionRegistry);
+      return new HealthCheckResponse(input, extensionRegistry);
     }
   };
 
diff --git a/services/src/generated/main/java/io/grpc/instrumentation/v1alpha/CanonicalRpcStats.java b/services/src/generated/main/java/io/grpc/instrumentation/v1alpha/CanonicalRpcStats.java
index b494ac2..7ef3711 100644
--- a/services/src/generated/main/java/io/grpc/instrumentation/v1alpha/CanonicalRpcStats.java
+++ b/services/src/generated/main/java/io/grpc/instrumentation/v1alpha/CanonicalRpcStats.java
@@ -32,6 +32,9 @@
       com.google.protobuf.ExtensionRegistryLite extensionRegistry)
       throws com.google.protobuf.InvalidProtocolBufferException {
     this();
+    if (extensionRegistry == null) {
+      throw new java.lang.NullPointerException();
+    }
     int mutable_bitField0_ = 0;
     com.google.protobuf.UnknownFieldSet.Builder unknownFields =
         com.google.protobuf.UnknownFieldSet.newBuilder();
@@ -3498,7 +3501,7 @@
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
-        return new CanonicalRpcStats(input, extensionRegistry);
+      return new CanonicalRpcStats(input, extensionRegistry);
     }
   };
 
diff --git a/services/src/generated/main/java/io/grpc/instrumentation/v1alpha/CustomMonitoringData.java b/services/src/generated/main/java/io/grpc/instrumentation/v1alpha/CustomMonitoringData.java
index 93bd286..4849a74 100644
--- a/services/src/generated/main/java/io/grpc/instrumentation/v1alpha/CustomMonitoringData.java
+++ b/services/src/generated/main/java/io/grpc/instrumentation/v1alpha/CustomMonitoringData.java
@@ -32,6 +32,9 @@
       com.google.protobuf.ExtensionRegistryLite extensionRegistry)
       throws com.google.protobuf.InvalidProtocolBufferException {
     this();
+    if (extensionRegistry == null) {
+      throw new java.lang.NullPointerException();
+    }
     int mutable_bitField0_ = 0;
     com.google.protobuf.UnknownFieldSet.Builder unknownFields =
         com.google.protobuf.UnknownFieldSet.newBuilder();
@@ -602,7 +605,7 @@
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
-        return new CustomMonitoringData(input, extensionRegistry);
+      return new CustomMonitoringData(input, extensionRegistry);
     }
   };
 
diff --git a/services/src/generated/main/java/io/grpc/instrumentation/v1alpha/MonitoringDataGroup.java b/services/src/generated/main/java/io/grpc/instrumentation/v1alpha/MonitoringDataGroup.java
index 5a73a29..e8cccfb 100644
--- a/services/src/generated/main/java/io/grpc/instrumentation/v1alpha/MonitoringDataGroup.java
+++ b/services/src/generated/main/java/io/grpc/instrumentation/v1alpha/MonitoringDataGroup.java
@@ -29,6 +29,9 @@
       com.google.protobuf.ExtensionRegistryLite extensionRegistry)
       throws com.google.protobuf.InvalidProtocolBufferException {
     this();
+    if (extensionRegistry == null) {
+      throw new java.lang.NullPointerException();
+    }
     int mutable_bitField0_ = 0;
     com.google.protobuf.UnknownFieldSet.Builder unknownFields =
         com.google.protobuf.UnknownFieldSet.newBuilder();
@@ -520,7 +523,7 @@
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
-        return new MonitoringDataGroup(input, extensionRegistry);
+      return new MonitoringDataGroup(input, extensionRegistry);
     }
   };
 
diff --git a/services/src/generated/main/java/io/grpc/instrumentation/v1alpha/MonitoringProto.java b/services/src/generated/main/java/io/grpc/instrumentation/v1alpha/MonitoringProto.java
index e0ffd03..26e34c7 100644
--- a/services/src/generated/main/java/io/grpc/instrumentation/v1alpha/MonitoringProto.java
+++ b/services/src/generated/main/java/io/grpc/instrumentation/v1alpha/MonitoringProto.java
@@ -67,7 +67,7 @@
       "on.v1alpha.StatsResponse\022N\n\031rpc_client_c" +
       "ompleted_rpcs\030\002 \001(\0132+.grpc.instrumentati" +
       "on.v1alpha.StatsResponse\022L\n\027rpc_client_s" +
-      "tarted_rpcs\030\003 \001(\0132+.grpc.instrumentation",
+      "tarted_rpcs\030\003 \001(\0132+.grpc.instrumentation" +
       ".v1alpha.StatsResponse\022L\n\027rpc_client_ela" +
       "psed_time\030\004 \001(\0132+.grpc.instrumentation.v" +
       "1alpha.StatsResponse\022S\n\036rpc_client_serve" +
@@ -77,7 +77,7 @@
       "on.v1alpha.StatsResponse\022N\n\031rpc_client_r" +
       "esponse_bytes\030\007 \001(\0132+.grpc.instrumentati" +
       "on.v1alpha.StatsResponse\022M\n\030rpc_client_r" +
-      "equest_count\030\010 \001(\0132+.grpc.instrumentatio",
+      "equest_count\030\010 \001(\0132+.grpc.instrumentatio" +
       "n.v1alpha.StatsResponse\022N\n\031rpc_client_re" +
       "sponse_count\030\t \001(\0132+.grpc.instrumentatio" +
       "n.v1alpha.StatsResponse\022F\n\021rpc_server_er" +
@@ -87,7 +87,7 @@
       "a.StatsResponse\022S\n\036rpc_server_server_ela" +
       "psed_time\030\014 \001(\0132+.grpc.instrumentation.v" +
       "1alpha.StatsResponse\022M\n\030rpc_server_reque" +
-      "st_bytes\030\r \001(\0132+.grpc.instrumentation.v1",
+      "st_bytes\030\r \001(\0132+.grpc.instrumentation.v1" +
       "alpha.StatsResponse\022N\n\031rpc_server_respon" +
       "se_bytes\030\016 \001(\0132+.grpc.instrumentation.v1" +
       "alpha.StatsResponse\022M\n\030rpc_server_reques" +
@@ -97,7 +97,7 @@
       "lpha.StatsResponse\022L\n\027rpc_server_elapsed" +
       "_time\030\021 \001(\0132+.grpc.instrumentation.v1alp" +
       "ha.StatsResponse\"q\n\014StatsRequest\022\022\n\nview" +
-      "_names\030\001 \003(\t\022\031\n\021measurement_names\030\002 \003(\t\022",
+      "_names\030\001 \003(\t\022\031\n\021measurement_names\030\002 \003(\t\022" +
       "2\n*dont_include_descriptors_in_first_res" +
       "ponse\030\003 \001(\010\"\313\001\n\rStatsResponse\022M\n\026measure" +
       "ment_descriptor\030\001 \001(\0132-.google.instrumen" +
@@ -107,7 +107,7 @@
       "trumentation.View\"\016\n\014TraceRequest\"\017\n\rTra" +
       "ceResponse\"#\n\023MonitoringDataGroup\022\014\n\004nam" +
       "e\030\001 \001(\t\">\n\024CustomMonitoringData\022&\n\010conte" +
-      "nts\030\001 \001(\0132\024.google.protobuf.Any2\265\004\n\nMoni",
+      "nts\030\001 \001(\0132\024.google.protobuf.Any2\265\004\n\nMoni" +
       "toring\022a\n\024GetCanonicalRpcStats\022\026.google." +
       "protobuf.Empty\032/.grpc.instrumentation.v1" +
       "alpha.CanonicalRpcStats\"\000\022e\n\010GetStats\022*." +
@@ -117,7 +117,7 @@
       "ation.v1alpha.StatsRequest\032+.grpc.instru" +
       "mentation.v1alpha.StatsResponse\"\0000\001\022m\n\020G" +
       "etRequestTraces\022*.grpc.instrumentation.v" +
-      "1alpha.TraceRequest\032+.grpc.instrumentati",
+      "1alpha.TraceRequest\032+.grpc.instrumentati" +
       "on.v1alpha.TraceResponse\"\000\022\202\001\n\027GetCustom" +
       "MonitoringData\0221.grpc.instrumentation.v1" +
       "alpha.MonitoringDataGroup\0322.grpc.instrum" +
diff --git a/services/src/generated/main/java/io/grpc/instrumentation/v1alpha/StatsRequest.java b/services/src/generated/main/java/io/grpc/instrumentation/v1alpha/StatsRequest.java
index 2a045e4..cd0ed58 100644
--- a/services/src/generated/main/java/io/grpc/instrumentation/v1alpha/StatsRequest.java
+++ b/services/src/generated/main/java/io/grpc/instrumentation/v1alpha/StatsRequest.java
@@ -36,6 +36,9 @@
       com.google.protobuf.ExtensionRegistryLite extensionRegistry)
       throws com.google.protobuf.InvalidProtocolBufferException {
     this();
+    if (extensionRegistry == null) {
+      throw new java.lang.NullPointerException();
+    }
     int mutable_bitField0_ = 0;
     com.google.protobuf.UnknownFieldSet.Builder unknownFields =
         com.google.protobuf.UnknownFieldSet.newBuilder();
@@ -1063,7 +1066,7 @@
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
-        return new StatsRequest(input, extensionRegistry);
+      return new StatsRequest(input, extensionRegistry);
     }
   };
 
diff --git a/services/src/generated/main/java/io/grpc/instrumentation/v1alpha/StatsResponse.java b/services/src/generated/main/java/io/grpc/instrumentation/v1alpha/StatsResponse.java
index f3e9f24..62a91a3 100644
--- a/services/src/generated/main/java/io/grpc/instrumentation/v1alpha/StatsResponse.java
+++ b/services/src/generated/main/java/io/grpc/instrumentation/v1alpha/StatsResponse.java
@@ -33,6 +33,9 @@
       com.google.protobuf.ExtensionRegistryLite extensionRegistry)
       throws com.google.protobuf.InvalidProtocolBufferException {
     this();
+    if (extensionRegistry == null) {
+      throw new java.lang.NullPointerException();
+    }
     int mutable_bitField0_ = 0;
     com.google.protobuf.UnknownFieldSet.Builder unknownFields =
         com.google.protobuf.UnknownFieldSet.newBuilder();
@@ -1074,7 +1077,7 @@
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
-        return new StatsResponse(input, extensionRegistry);
+      return new StatsResponse(input, extensionRegistry);
     }
   };
 
diff --git a/services/src/generated/main/java/io/grpc/instrumentation/v1alpha/TraceRequest.java b/services/src/generated/main/java/io/grpc/instrumentation/v1alpha/TraceRequest.java
index 4b27ce8..8d72f48 100644
--- a/services/src/generated/main/java/io/grpc/instrumentation/v1alpha/TraceRequest.java
+++ b/services/src/generated/main/java/io/grpc/instrumentation/v1alpha/TraceRequest.java
@@ -32,6 +32,9 @@
       com.google.protobuf.ExtensionRegistryLite extensionRegistry)
       throws com.google.protobuf.InvalidProtocolBufferException {
     this();
+    if (extensionRegistry == null) {
+      throw new java.lang.NullPointerException();
+    }
     com.google.protobuf.UnknownFieldSet.Builder unknownFields =
         com.google.protobuf.UnknownFieldSet.newBuilder();
     try {
@@ -372,7 +375,7 @@
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
-        return new TraceRequest(input, extensionRegistry);
+      return new TraceRequest(input, extensionRegistry);
     }
   };
 
diff --git a/services/src/generated/main/java/io/grpc/instrumentation/v1alpha/TraceResponse.java b/services/src/generated/main/java/io/grpc/instrumentation/v1alpha/TraceResponse.java
index 69488a1..1b51cdc 100644
--- a/services/src/generated/main/java/io/grpc/instrumentation/v1alpha/TraceResponse.java
+++ b/services/src/generated/main/java/io/grpc/instrumentation/v1alpha/TraceResponse.java
@@ -32,6 +32,9 @@
       com.google.protobuf.ExtensionRegistryLite extensionRegistry)
       throws com.google.protobuf.InvalidProtocolBufferException {
     this();
+    if (extensionRegistry == null) {
+      throw new java.lang.NullPointerException();
+    }
     com.google.protobuf.UnknownFieldSet.Builder unknownFields =
         com.google.protobuf.UnknownFieldSet.newBuilder();
     try {
@@ -372,7 +375,7 @@
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
-        return new TraceResponse(input, extensionRegistry);
+      return new TraceResponse(input, extensionRegistry);
     }
   };
 
diff --git a/services/src/generated/main/java/io/grpc/reflection/v1alpha/ErrorResponse.java b/services/src/generated/main/java/io/grpc/reflection/v1alpha/ErrorResponse.java
index c95cea7..5bfe392 100644
--- a/services/src/generated/main/java/io/grpc/reflection/v1alpha/ErrorResponse.java
+++ b/services/src/generated/main/java/io/grpc/reflection/v1alpha/ErrorResponse.java
@@ -34,6 +34,9 @@
       com.google.protobuf.ExtensionRegistryLite extensionRegistry)
       throws com.google.protobuf.InvalidProtocolBufferException {
     this();
+    if (extensionRegistry == null) {
+      throw new java.lang.NullPointerException();
+    }
     int mutable_bitField0_ = 0;
     com.google.protobuf.UnknownFieldSet.Builder unknownFields =
         com.google.protobuf.UnknownFieldSet.newBuilder();
@@ -574,7 +577,7 @@
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
-        return new ErrorResponse(input, extensionRegistry);
+      return new ErrorResponse(input, extensionRegistry);
     }
   };
 
diff --git a/services/src/generated/main/java/io/grpc/reflection/v1alpha/ExtensionNumberResponse.java b/services/src/generated/main/java/io/grpc/reflection/v1alpha/ExtensionNumberResponse.java
index bcf1f63..8d982e5 100644
--- a/services/src/generated/main/java/io/grpc/reflection/v1alpha/ExtensionNumberResponse.java
+++ b/services/src/generated/main/java/io/grpc/reflection/v1alpha/ExtensionNumberResponse.java
@@ -35,6 +35,9 @@
       com.google.protobuf.ExtensionRegistryLite extensionRegistry)
       throws com.google.protobuf.InvalidProtocolBufferException {
     this();
+    if (extensionRegistry == null) {
+      throw new java.lang.NullPointerException();
+    }
     int mutable_bitField0_ = 0;
     com.google.protobuf.UnknownFieldSet.Builder unknownFields =
         com.google.protobuf.UnknownFieldSet.newBuilder();
@@ -701,7 +704,7 @@
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
-        return new ExtensionNumberResponse(input, extensionRegistry);
+      return new ExtensionNumberResponse(input, extensionRegistry);
     }
   };
 
diff --git a/services/src/generated/main/java/io/grpc/reflection/v1alpha/ExtensionRequest.java b/services/src/generated/main/java/io/grpc/reflection/v1alpha/ExtensionRequest.java
index 55b63f3..4f49b8e 100644
--- a/services/src/generated/main/java/io/grpc/reflection/v1alpha/ExtensionRequest.java
+++ b/services/src/generated/main/java/io/grpc/reflection/v1alpha/ExtensionRequest.java
@@ -35,6 +35,9 @@
       com.google.protobuf.ExtensionRegistryLite extensionRegistry)
       throws com.google.protobuf.InvalidProtocolBufferException {
     this();
+    if (extensionRegistry == null) {
+      throw new java.lang.NullPointerException();
+    }
     int mutable_bitField0_ = 0;
     com.google.protobuf.UnknownFieldSet.Builder unknownFields =
         com.google.protobuf.UnknownFieldSet.newBuilder();
@@ -588,7 +591,7 @@
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
-        return new ExtensionRequest(input, extensionRegistry);
+      return new ExtensionRequest(input, extensionRegistry);
     }
   };
 
diff --git a/services/src/generated/main/java/io/grpc/reflection/v1alpha/FileDescriptorResponse.java b/services/src/generated/main/java/io/grpc/reflection/v1alpha/FileDescriptorResponse.java
index 435722d..ea66a2b 100644
--- a/services/src/generated/main/java/io/grpc/reflection/v1alpha/FileDescriptorResponse.java
+++ b/services/src/generated/main/java/io/grpc/reflection/v1alpha/FileDescriptorResponse.java
@@ -35,6 +35,9 @@
       com.google.protobuf.ExtensionRegistryLite extensionRegistry)
       throws com.google.protobuf.InvalidProtocolBufferException {
     this();
+    if (extensionRegistry == null) {
+      throw new java.lang.NullPointerException();
+    }
     int mutable_bitField0_ = 0;
     com.google.protobuf.UnknownFieldSet.Builder unknownFields =
         com.google.protobuf.UnknownFieldSet.newBuilder();
@@ -580,7 +583,7 @@
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
-        return new FileDescriptorResponse(input, extensionRegistry);
+      return new FileDescriptorResponse(input, extensionRegistry);
     }
   };
 
diff --git a/services/src/generated/main/java/io/grpc/reflection/v1alpha/ListServiceResponse.java b/services/src/generated/main/java/io/grpc/reflection/v1alpha/ListServiceResponse.java
index b314a31..0692e88 100644
--- a/services/src/generated/main/java/io/grpc/reflection/v1alpha/ListServiceResponse.java
+++ b/services/src/generated/main/java/io/grpc/reflection/v1alpha/ListServiceResponse.java
@@ -33,6 +33,9 @@
       com.google.protobuf.ExtensionRegistryLite extensionRegistry)
       throws com.google.protobuf.InvalidProtocolBufferException {
     this();
+    if (extensionRegistry == null) {
+      throw new java.lang.NullPointerException();
+    }
     int mutable_bitField0_ = 0;
     com.google.protobuf.UnknownFieldSet.Builder unknownFields =
         com.google.protobuf.UnknownFieldSet.newBuilder();
@@ -833,7 +836,7 @@
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
-        return new ListServiceResponse(input, extensionRegistry);
+      return new ListServiceResponse(input, extensionRegistry);
     }
   };
 
diff --git a/services/src/generated/main/java/io/grpc/reflection/v1alpha/ServerReflectionProto.java b/services/src/generated/main/java/io/grpc/reflection/v1alpha/ServerReflectionProto.java
index e79cdb2..b18131c 100644
--- a/services/src/generated/main/java/io/grpc/reflection/v1alpha/ServerReflectionProto.java
+++ b/services/src/generated/main/java/io/grpc/reflection/v1alpha/ServerReflectionProto.java
@@ -72,7 +72,7 @@
       "nsionRequestH\000\022\'\n\035all_extension_numbers_" +
       "of_type\030\006 \001(\tH\000\022\027\n\rlist_services\030\007 \001(\tH\000" +
       "B\021\n\017message_request\"E\n\020ExtensionRequest\022" +
-      "\027\n\017containing_type\030\001 \001(\t\022\030\n\020extension_nu",
+      "\027\n\017containing_type\030\001 \001(\t\022\030\n\020extension_nu" +
       "mber\030\002 \001(\005\"\321\003\n\030ServerReflectionResponse\022" +
       "\022\n\nvalid_host\030\001 \001(\t\022J\n\020original_request\030" +
       "\002 \001(\01320.grpc.reflection.v1alpha.ServerRe" +
@@ -82,7 +82,7 @@
       "mbers_response\030\005 \001(\01320.grpc.reflection.v" +
       "1alpha.ExtensionNumberResponseH\000\022N\n\026list" +
       "_services_response\030\006 \001(\0132,.grpc.reflecti" +
-      "on.v1alpha.ListServiceResponseH\000\022@\n\016erro",
+      "on.v1alpha.ListServiceResponseH\000\022@\n\016erro" +
       "r_response\030\007 \001(\0132&.grpc.reflection.v1alp" +
       "ha.ErrorResponseH\000B\022\n\020message_response\"7" +
       "\n\026FileDescriptorResponse\022\035\n\025file_descrip" +
@@ -92,7 +92,7 @@
       "ervice\030\001 \003(\0132(.grpc.reflection.v1alpha.S" +
       "erviceResponse\"\037\n\017ServiceResponse\022\014\n\004nam" +
       "e\030\001 \001(\t\":\n\rErrorResponse\022\022\n\nerror_code\030\001" +
-      " \001(\005\022\025\n\rerror_message\030\002 \001(\t2\223\001\n\020ServerRe",
+      " \001(\005\022\025\n\rerror_message\030\002 \001(\t2\223\001\n\020ServerRe" +
       "flection\022\177\n\024ServerReflectionInfo\0220.grpc." +
       "reflection.v1alpha.ServerReflectionReque" +
       "st\0321.grpc.reflection.v1alpha.ServerRefle" +
diff --git a/services/src/generated/main/java/io/grpc/reflection/v1alpha/ServerReflectionRequest.java b/services/src/generated/main/java/io/grpc/reflection/v1alpha/ServerReflectionRequest.java
index eab3c3e..e03a542 100644
--- a/services/src/generated/main/java/io/grpc/reflection/v1alpha/ServerReflectionRequest.java
+++ b/services/src/generated/main/java/io/grpc/reflection/v1alpha/ServerReflectionRequest.java
@@ -33,6 +33,9 @@
       com.google.protobuf.ExtensionRegistryLite extensionRegistry)
       throws com.google.protobuf.InvalidProtocolBufferException {
     this();
+    if (extensionRegistry == null) {
+      throw new java.lang.NullPointerException();
+    }
     int mutable_bitField0_ = 0;
     com.google.protobuf.UnknownFieldSet.Builder unknownFields =
         com.google.protobuf.UnknownFieldSet.newBuilder();
@@ -1630,7 +1633,7 @@
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
-        return new ServerReflectionRequest(input, extensionRegistry);
+      return new ServerReflectionRequest(input, extensionRegistry);
     }
   };
 
diff --git a/services/src/generated/main/java/io/grpc/reflection/v1alpha/ServerReflectionResponse.java b/services/src/generated/main/java/io/grpc/reflection/v1alpha/ServerReflectionResponse.java
index 868e1e3..09254b1 100644
--- a/services/src/generated/main/java/io/grpc/reflection/v1alpha/ServerReflectionResponse.java
+++ b/services/src/generated/main/java/io/grpc/reflection/v1alpha/ServerReflectionResponse.java
@@ -33,6 +33,9 @@
       com.google.protobuf.ExtensionRegistryLite extensionRegistry)
       throws com.google.protobuf.InvalidProtocolBufferException {
     this();
+    if (extensionRegistry == null) {
+      throw new java.lang.NullPointerException();
+    }
     int mutable_bitField0_ = 0;
     com.google.protobuf.UnknownFieldSet.Builder unknownFields =
         com.google.protobuf.UnknownFieldSet.newBuilder();
@@ -1817,7 +1820,7 @@
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
-        return new ServerReflectionResponse(input, extensionRegistry);
+      return new ServerReflectionResponse(input, extensionRegistry);
     }
   };
 
diff --git a/services/src/generated/main/java/io/grpc/reflection/v1alpha/ServiceResponse.java b/services/src/generated/main/java/io/grpc/reflection/v1alpha/ServiceResponse.java
index 4fa714b..031decc 100644
--- a/services/src/generated/main/java/io/grpc/reflection/v1alpha/ServiceResponse.java
+++ b/services/src/generated/main/java/io/grpc/reflection/v1alpha/ServiceResponse.java
@@ -34,6 +34,9 @@
       com.google.protobuf.ExtensionRegistryLite extensionRegistry)
       throws com.google.protobuf.InvalidProtocolBufferException {
     this();
+    if (extensionRegistry == null) {
+      throw new java.lang.NullPointerException();
+    }
     int mutable_bitField0_ = 0;
     com.google.protobuf.UnknownFieldSet.Builder unknownFields =
         com.google.protobuf.UnknownFieldSet.newBuilder();
@@ -537,7 +540,7 @@
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
-        return new ServiceResponse(input, extensionRegistry);
+      return new ServiceResponse(input, extensionRegistry);
     }
   };
 
diff --git a/services/src/generated/test/java/io/grpc/reflection/testing/DynamicReflectionTestProto.java b/services/src/generated/test/java/io/grpc/reflection/testing/DynamicReflectionTestProto.java
index 9a9fe21..7142bde 100644
--- a/services/src/generated/test/java/io/grpc/reflection/testing/DynamicReflectionTestProto.java
+++ b/services/src/generated/test/java/io/grpc/reflection/testing/DynamicReflectionTestProto.java
@@ -32,7 +32,7 @@
       "esting.DynamicReply\"\0002s\n\025AnotherDynamicS" +
       "ervice\022Z\n\006Method\022\'.grpc.reflection.testi" +
       "ng.DynamicRequest\032%.grpc.reflection.test" +
-      "ing.DynamicReply\"\000B:\n\032io.grpc.reflection",
+      "ing.DynamicReply\"\000B:\n\032io.grpc.reflection" +
       ".testingB\032DynamicReflectionTestProtoP\001"
     };
     com.google.protobuf.Descriptors.FileDescriptor.InternalDescriptorAssigner assigner =
diff --git a/services/src/generated/test/java/io/grpc/reflection/testing/DynamicReply.java b/services/src/generated/test/java/io/grpc/reflection/testing/DynamicReply.java
index ede0e79..d934af3 100644
--- a/services/src/generated/test/java/io/grpc/reflection/testing/DynamicReply.java
+++ b/services/src/generated/test/java/io/grpc/reflection/testing/DynamicReply.java
@@ -29,6 +29,9 @@
       com.google.protobuf.ExtensionRegistryLite extensionRegistry)
       throws com.google.protobuf.InvalidProtocolBufferException {
     this();
+    if (extensionRegistry == null) {
+      throw new java.lang.NullPointerException();
+    }
     int mutable_bitField0_ = 0;
     com.google.protobuf.UnknownFieldSet.Builder unknownFields =
         com.google.protobuf.UnknownFieldSet.newBuilder();
@@ -521,7 +524,7 @@
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
-        return new DynamicReply(input, extensionRegistry);
+      return new DynamicReply(input, extensionRegistry);
     }
   };
 
diff --git a/services/src/generated/test/java/io/grpc/reflection/testing/DynamicRequest.java b/services/src/generated/test/java/io/grpc/reflection/testing/DynamicRequest.java
index 63fe622..2ea9a14 100644
--- a/services/src/generated/test/java/io/grpc/reflection/testing/DynamicRequest.java
+++ b/services/src/generated/test/java/io/grpc/reflection/testing/DynamicRequest.java
@@ -29,6 +29,9 @@
       com.google.protobuf.ExtensionRegistryLite extensionRegistry)
       throws com.google.protobuf.InvalidProtocolBufferException {
     this();
+    if (extensionRegistry == null) {
+      throw new java.lang.NullPointerException();
+    }
     int mutable_bitField0_ = 0;
     com.google.protobuf.UnknownFieldSet.Builder unknownFields =
         com.google.protobuf.UnknownFieldSet.newBuilder();
@@ -521,7 +524,7 @@
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
-        return new DynamicRequest(input, extensionRegistry);
+      return new DynamicRequest(input, extensionRegistry);
     }
   };
 
diff --git a/services/src/generated/test/java/io/grpc/reflection/testing/EmptyMessage.java b/services/src/generated/test/java/io/grpc/reflection/testing/EmptyMessage.java
index 7d24bce..b7481c1 100644
--- a/services/src/generated/test/java/io/grpc/reflection/testing/EmptyMessage.java
+++ b/services/src/generated/test/java/io/grpc/reflection/testing/EmptyMessage.java
@@ -28,6 +28,9 @@
       com.google.protobuf.ExtensionRegistryLite extensionRegistry)
       throws com.google.protobuf.InvalidProtocolBufferException {
     this();
+    if (extensionRegistry == null) {
+      throw new java.lang.NullPointerException();
+    }
     com.google.protobuf.UnknownFieldSet.Builder unknownFields =
         com.google.protobuf.UnknownFieldSet.newBuilder();
     try {
@@ -364,7 +367,7 @@
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
-        return new EmptyMessage(input, extensionRegistry);
+      return new EmptyMessage(input, extensionRegistry);
     }
   };
 
diff --git a/services/src/generated/test/java/io/grpc/reflection/testing/NestedTypeOuter.java b/services/src/generated/test/java/io/grpc/reflection/testing/NestedTypeOuter.java
index 25b0d4c..0c733a5 100644
--- a/services/src/generated/test/java/io/grpc/reflection/testing/NestedTypeOuter.java
+++ b/services/src/generated/test/java/io/grpc/reflection/testing/NestedTypeOuter.java
@@ -28,6 +28,9 @@
       com.google.protobuf.ExtensionRegistryLite extensionRegistry)
       throws com.google.protobuf.InvalidProtocolBufferException {
     this();
+    if (extensionRegistry == null) {
+      throw new java.lang.NullPointerException();
+    }
     com.google.protobuf.UnknownFieldSet.Builder unknownFields =
         com.google.protobuf.UnknownFieldSet.newBuilder();
     try {
@@ -98,6 +101,9 @@
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       this();
+      if (extensionRegistry == null) {
+        throw new java.lang.NullPointerException();
+      }
       com.google.protobuf.UnknownFieldSet.Builder unknownFields =
           com.google.protobuf.UnknownFieldSet.newBuilder();
       try {
@@ -178,6 +184,9 @@
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws com.google.protobuf.InvalidProtocolBufferException {
         this();
+        if (extensionRegistry == null) {
+          throw new java.lang.NullPointerException();
+        }
         int mutable_bitField0_ = 0;
         com.google.protobuf.UnknownFieldSet.Builder unknownFields =
             com.google.protobuf.UnknownFieldSet.newBuilder();
@@ -597,7 +606,7 @@
             com.google.protobuf.CodedInputStream input,
             com.google.protobuf.ExtensionRegistryLite extensionRegistry)
             throws com.google.protobuf.InvalidProtocolBufferException {
-            return new Inner(input, extensionRegistry);
+          return new Inner(input, extensionRegistry);
         }
       };
 
@@ -911,7 +920,7 @@
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws com.google.protobuf.InvalidProtocolBufferException {
-          return new Middle(input, extensionRegistry);
+        return new Middle(input, extensionRegistry);
       }
     };
 
@@ -1225,7 +1234,7 @@
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
-        return new NestedTypeOuter(input, extensionRegistry);
+      return new NestedTypeOuter(input, extensionRegistry);
     }
   };
 
diff --git a/services/src/generated/test/java/io/grpc/reflection/testing/ReflectionTestProto.java b/services/src/generated/test/java/io/grpc/reflection/testing/ReflectionTestProto.java
index 0463ffb..e8e93f3 100644
--- a/services/src/generated/test/java/io/grpc/reflection/testing/ReflectionTestProto.java
+++ b/services/src/generated/test/java/io/grpc/reflection/testing/ReflectionTestProto.java
@@ -44,7 +44,7 @@
       "grpc.reflection.testing.Request\032\036.grpc.r" +
       "eflection.testing.Reply\"\000:4\n\003bar\022\'.grpc." +
       "reflection.testing.ThirdLevelType\030d \001(\005B" +
-      "3\n\032io.grpc.reflection.testingB\023Reflectio",
+      "3\n\032io.grpc.reflection.testingB\023Reflectio" +
       "nTestProtoP\001"
     };
     com.google.protobuf.Descriptors.FileDescriptor.InternalDescriptorAssigner assigner =
diff --git a/services/src/generated/test/java/io/grpc/reflection/testing/Reply.java b/services/src/generated/test/java/io/grpc/reflection/testing/Reply.java
index 6c44225..508e940 100644
--- a/services/src/generated/test/java/io/grpc/reflection/testing/Reply.java
+++ b/services/src/generated/test/java/io/grpc/reflection/testing/Reply.java
@@ -29,6 +29,9 @@
       com.google.protobuf.ExtensionRegistryLite extensionRegistry)
       throws com.google.protobuf.InvalidProtocolBufferException {
     this();
+    if (extensionRegistry == null) {
+      throw new java.lang.NullPointerException();
+    }
     int mutable_bitField0_ = 0;
     com.google.protobuf.UnknownFieldSet.Builder unknownFields =
         com.google.protobuf.UnknownFieldSet.newBuilder();
@@ -521,7 +524,7 @@
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
-        return new Reply(input, extensionRegistry);
+      return new Reply(input, extensionRegistry);
     }
   };
 
diff --git a/services/src/generated/test/java/io/grpc/reflection/testing/Request.java b/services/src/generated/test/java/io/grpc/reflection/testing/Request.java
index cac5906..9d657af 100644
--- a/services/src/generated/test/java/io/grpc/reflection/testing/Request.java
+++ b/services/src/generated/test/java/io/grpc/reflection/testing/Request.java
@@ -29,6 +29,9 @@
       com.google.protobuf.ExtensionRegistryLite extensionRegistry)
       throws com.google.protobuf.InvalidProtocolBufferException {
     this();
+    if (extensionRegistry == null) {
+      throw new java.lang.NullPointerException();
+    }
     int mutable_bitField0_ = 0;
     com.google.protobuf.UnknownFieldSet.Builder unknownFields =
         com.google.protobuf.UnknownFieldSet.newBuilder();
@@ -521,7 +524,7 @@
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
-        return new Request(input, extensionRegistry);
+      return new Request(input, extensionRegistry);
     }
   };
 
diff --git a/services/src/generated/test/java/io/grpc/reflection/testing/ThirdLevelType.java b/services/src/generated/test/java/io/grpc/reflection/testing/ThirdLevelType.java
index 8467e0c..7b82b1a 100644
--- a/services/src/generated/test/java/io/grpc/reflection/testing/ThirdLevelType.java
+++ b/services/src/generated/test/java/io/grpc/reflection/testing/ThirdLevelType.java
@@ -30,6 +30,9 @@
       com.google.protobuf.ExtensionRegistryLite extensionRegistry)
       throws com.google.protobuf.InvalidProtocolBufferException {
     this();
+    if (extensionRegistry == null) {
+      throw new java.lang.NullPointerException();
+    }
     int mutable_bitField0_ = 0;
     com.google.protobuf.UnknownFieldSet.Builder unknownFields =
         com.google.protobuf.UnknownFieldSet.newBuilder();
@@ -562,7 +565,7 @@
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
-        return new ThirdLevelType(input, extensionRegistry);
+      return new ThirdLevelType(input, extensionRegistry);
     }
   };
 
diff --git a/services/src/generated/test/java/io/grpc/reflection/testing/TypeWithExtensions.java b/services/src/generated/test/java/io/grpc/reflection/testing/TypeWithExtensions.java
index cdad5bd..3f430ff 100644
--- a/services/src/generated/test/java/io/grpc/reflection/testing/TypeWithExtensions.java
+++ b/services/src/generated/test/java/io/grpc/reflection/testing/TypeWithExtensions.java
@@ -30,6 +30,9 @@
       com.google.protobuf.ExtensionRegistryLite extensionRegistry)
       throws com.google.protobuf.InvalidProtocolBufferException {
     this();
+    if (extensionRegistry == null) {
+      throw new java.lang.NullPointerException();
+    }
     int mutable_bitField0_ = 0;
     com.google.protobuf.UnknownFieldSet.Builder unknownFields =
         com.google.protobuf.UnknownFieldSet.newBuilder();
@@ -562,7 +565,7 @@
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
-        return new TypeWithExtensions(input, extensionRegistry);
+      return new TypeWithExtensions(input, extensionRegistry);
     }
   };
 
diff --git a/testing-proto/src/generated/main/java/io/grpc/testing/protobuf/SimpleRequest.java b/testing-proto/src/generated/main/java/io/grpc/testing/protobuf/SimpleRequest.java
index 1da90ed..f39c33c 100644
--- a/testing-proto/src/generated/main/java/io/grpc/testing/protobuf/SimpleRequest.java
+++ b/testing-proto/src/generated/main/java/io/grpc/testing/protobuf/SimpleRequest.java
@@ -33,6 +33,9 @@
       com.google.protobuf.ExtensionRegistryLite extensionRegistry)
       throws com.google.protobuf.InvalidProtocolBufferException {
     this();
+    if (extensionRegistry == null) {
+      throw new java.lang.NullPointerException();
+    }
     int mutable_bitField0_ = 0;
     com.google.protobuf.UnknownFieldSet.Builder unknownFields =
         com.google.protobuf.UnknownFieldSet.newBuilder();
@@ -528,7 +531,7 @@
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
-        return new SimpleRequest(input, extensionRegistry);
+      return new SimpleRequest(input, extensionRegistry);
     }
   };
 
diff --git a/testing-proto/src/generated/main/java/io/grpc/testing/protobuf/SimpleResponse.java b/testing-proto/src/generated/main/java/io/grpc/testing/protobuf/SimpleResponse.java
index d2725fa..b93f6b7 100644
--- a/testing-proto/src/generated/main/java/io/grpc/testing/protobuf/SimpleResponse.java
+++ b/testing-proto/src/generated/main/java/io/grpc/testing/protobuf/SimpleResponse.java
@@ -33,6 +33,9 @@
       com.google.protobuf.ExtensionRegistryLite extensionRegistry)
       throws com.google.protobuf.InvalidProtocolBufferException {
     this();
+    if (extensionRegistry == null) {
+      throw new java.lang.NullPointerException();
+    }
     int mutable_bitField0_ = 0;
     com.google.protobuf.UnknownFieldSet.Builder unknownFields =
         com.google.protobuf.UnknownFieldSet.newBuilder();
@@ -528,7 +531,7 @@
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
-        return new SimpleResponse(input, extensionRegistry);
+      return new SimpleResponse(input, extensionRegistry);
     }
   };
 
diff --git a/testing-proto/src/generated/main/java/io/grpc/testing/protobuf/SimpleServiceProto.java b/testing-proto/src/generated/main/java/io/grpc/testing/protobuf/SimpleServiceProto.java
index 4f09838..b042763 100644
--- a/testing-proto/src/generated/main/java/io/grpc/testing/protobuf/SimpleServiceProto.java
+++ b/testing-proto/src/generated/main/java/io/grpc/testing/protobuf/SimpleServiceProto.java
@@ -42,7 +42,7 @@
       "lientStreamingRpc\022\033.grpc.testing.SimpleR" +
       "equest\032\034.grpc.testing.SimpleResponse\"\000(\001" +
       "\022S\n\022ServerStreamingRpc\022\033.grpc.testing.Si" +
-      "mpleRequest\032\034.grpc.testing.SimpleRespons",
+      "mpleRequest\032\034.grpc.testing.SimpleRespons" +
       "e\"\0000\001\022S\n\020BidiStreamingRpc\022\033.grpc.testing" +
       ".SimpleRequest\032\034.grpc.testing.SimpleResp" +
       "onse\"\000(\0010\001B0\n\030io.grpc.testing.protobufB\022" +
