message/pipeline: don't panic if message not imported

Change-Id: I7a2aa7e263aeafa7703f989b78e1333bf5dd8330
Reviewed-on: https://go-review.googlesource.com/133935
Run-TryBot: Sam Whited <sam@samwhited.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Nigel Tao <nigeltao@golang.org>
diff --git a/message/pipeline/extract.go b/message/pipeline/extract.go
index 3db4172..f5043cd 100644
--- a/message/pipeline/extract.go
+++ b/message/pipeline/extract.go
@@ -6,6 +6,7 @@
 
 import (
 	"bytes"
+	"errors"
 	"fmt"
 	"go/ast"
 	"go/constant"
@@ -42,7 +43,9 @@
 		return nil, wrap(err, "")
 	}
 
-	x.seedEndpoints()
+	if err := x.seedEndpoints(); err != nil {
+		return nil, err
+	}
 	x.extractMessages()
 
 	return &State{
@@ -96,8 +99,12 @@
 	return cd
 }
 
-func (x *extracter) seedEndpoints() {
-	pkg := x.prog.Package(x.iprog.Package("golang.org/x/text/message").Pkg)
+func (x *extracter) seedEndpoints() error {
+	pkgInfo := x.iprog.Package("golang.org/x/text/message")
+	if pkgInfo == nil {
+		return errors.New("pipeline: golang.org/x/text/message is not imported")
+	}
+	pkg := x.prog.Package(pkgInfo.Pkg)
 	typ := types.NewPointer(pkg.Type("Printer").Type())
 
 	x.processGlobalVars()
@@ -117,6 +124,7 @@
 		argPos:    3,
 		isMethod:  true,
 	})
+	return nil
 }
 
 // processGlobalVars finds string constants that are assigned to global