server: add grpc.Method function for extracting method from context (#1961)

diff --git a/server.go b/server.go
index 0063906..c6b413b 100644
--- a/server.go
+++ b/server.go
@@ -1359,3 +1359,13 @@
 	}
 	return stream.SetTrailer(md)
 }
+
+// Method returns the method string for the server context.  The returned
+// string is in the format of "/service/method".
+func Method(ctx context.Context) (string, bool) {
+	s := serverTransportStreamFromContext(ctx)
+	if s == nil {
+		return "", false
+	}
+	return s.Method(), true
+}
diff --git a/stream.go b/stream.go
index a79f385..75a4e8d 100644
--- a/stream.go
+++ b/stream.go
@@ -732,9 +732,5 @@
 // MethodFromServerStream returns the method string for the input stream.
 // The returned string is in the format of "/service/method".
 func MethodFromServerStream(stream ServerStream) (string, bool) {
-	s := serverTransportStreamFromContext(stream.Context())
-	if s == nil {
-		return "", false
-	}
-	return s.Method(), true
+	return Method(stream.Context())
 }
diff --git a/test/end2end_test.go b/test/end2end_test.go
index 4a76352..3df8bff 100644
--- a/test/end2end_test.go
+++ b/test/end2end_test.go
@@ -4868,6 +4868,34 @@
 	}
 }
 
+func TestGRPCMethod(t *testing.T) {
+	defer leakcheck.Check(t)
+	var method string
+	var ok bool
+
+	ss := &stubServer{
+		emptyCall: func(ctx context.Context, in *testpb.Empty) (*testpb.Empty, error) {
+			method, ok = grpc.Method(ctx)
+			return &testpb.Empty{}, nil
+		},
+	}
+	if err := ss.Start(nil); err != nil {
+		t.Fatalf("Error starting endpoint server: %v", err)
+	}
+	defer ss.Stop()
+
+	ctx, cancel := context.WithTimeout(context.Background(), 2*time.Second)
+	defer cancel()
+
+	if _, err := ss.client.EmptyCall(ctx, &testpb.Empty{}); err != nil {
+		t.Fatalf("ss.client.EmptyCall(_, _) = _, %v; want _, nil", err)
+	}
+
+	if want := "/grpc.testing.TestService/EmptyCall"; !ok || method != want {
+		t.Fatalf("grpc.Method(_) = %q, %v; want %q, true", method, ok, want)
+	}
+}
+
 func TestUnaryProxyDoesNotForwardMetadata(t *testing.T) {
 	const mdkey = "somedata"