Avoid duplicate generation of enum code when the enum is inside a nested message.
        Fixes #2.

R=r
CC=golang-dev
http://codereview.appspot.com/1744041
diff --git a/compiler/generator/generator.go b/compiler/generator/generator.go
index d68d299..5e103d2 100644
--- a/compiler/generator/generator.go
+++ b/compiler/generator/generator.go
@@ -480,22 +480,15 @@
 // Return a slice of all the EnumDescriptors defined within this file
 func wrapEnumDescriptors(file *descriptor.FileDescriptorProto, descs []*Descriptor) []*EnumDescriptor {
 	sl := make([]*EnumDescriptor, 0, len(file.EnumType)+10)
+	// Top-level enums.
 	for _, enum := range file.EnumType {
 		sl = addEnumDescriptor(sl, enum, nil, file)
 	}
+	// Enums within messages. Enums within embedded messages appear in the outer-most message.
 	for _, nested := range descs {
-		sl = wrapEnumDescriptorsInMessage(sl, nested, file)
-	}
-	return sl
-}
-
-// Wrap this EnumDescriptor, recursively
-func wrapEnumDescriptorsInMessage(sl []*EnumDescriptor, desc *Descriptor, file *descriptor.FileDescriptorProto) []*EnumDescriptor {
-	for _, enum := range desc.EnumType {
-		sl = addEnumDescriptor(sl, enum, desc, file)
-	}
-	for _, nested := range desc.nested {
-		sl = wrapEnumDescriptorsInMessage(sl, nested, file)
+		for _, enum := range nested.EnumType {
+			sl = addEnumDescriptor(sl, enum, nested, file)
+		}
 	}
 	return sl
 }
diff --git a/compiler/testdata/test.pb.go.golden b/compiler/testdata/test.pb.go.golden
index 8a87b16..397bea4 100644
--- a/compiler/testdata/test.pb.go.golden
+++ b/compiler/testdata/test.pb.go.golden
@@ -69,6 +69,24 @@
 	return &e
 }
 
+type Reply_Entry_Game int32
+const (
+	Reply_Entry_FOOTBALL = 1
+	Reply_Entry_TENNIS = 2
+)
+var Reply_Entry_Game_name = map[int32] string {
+	1: "FOOTBALL",
+	2: "TENNIS",
+}
+var Reply_Entry_Game_value = map[string] int32 {
+	"FOOTBALL": 1,
+	"TENNIS": 2,
+}
+func NewReply_Entry_Game(x int32) *Reply_Entry_Game {
+	e := Reply_Entry_Game(x)
+	return &e
+}
+
 type Request struct {
 	Key	[]int64	"PB(varint,1,rep,name=key)"
 	ImportedMessage	*imp.ImportedMessage	"PB(bytes,2,opt,name=imported_message)"
@@ -152,4 +170,5 @@
 	proto.RegisterEnum("my_test.HatType", HatType_name, HatType_value)
 	proto.RegisterEnum("my_test.Days", Days_name, Days_value)
 	proto.RegisterEnum("my_test.Request_Color", Request_Color_name, Request_Color_value)
+	proto.RegisterEnum("my_test.Reply_Entry_Game", Reply_Entry_Game_name, Reply_Entry_Game_value)
 }
diff --git a/compiler/testdata/test.proto b/compiler/testdata/test.proto
index 2f64132..9f3c75f 100644
--- a/compiler/testdata/test.proto
+++ b/compiler/testdata/test.proto
@@ -64,6 +64,10 @@
     required int64 key_that_needs_1234camel_CasIng = 1;
     optional int64 value = 2 [default=7];
     optional int64 _my_field_name_2 = 3;
+    enum Game {
+      FOOTBALL = 1;
+      TENNIS = 2;
+    }
   }
   repeated Entry found = 1;
   extensions 100 to max;