no longer generate empty enum or server files (#1006)

diff --git a/protoc_plugin/CHANGELOG.md b/protoc_plugin/CHANGELOG.md
index fd486a6..c3b2a1d 100644
--- a/protoc_plugin/CHANGELOG.md
+++ b/protoc_plugin/CHANGELOG.md
@@ -1,3 +1,9 @@
+## 22.3.0-wip
+
+* No longer generate empty enum (`*.pbenum.dart`) files.
+* No longer generate empty server (`*.pbserver.dart`) files.
+* Ignore `implementation_imports` for some generated files.
+
 ## 22.2.0
 
 * Bump `protobuf` constraint to `^4.1.0`
diff --git a/protoc_plugin/Makefile b/protoc_plugin/Makefile
index c7379fb..6747ca1 100644
--- a/protoc_plugin/Makefile
+++ b/protoc_plugin/Makefile
@@ -70,8 +70,6 @@
 TEST_PROTO_DIR=$(OUTPUT_DIR)/protos
 TEST_PROTO_LIBS=$(foreach f, $(TEST_PROTO_LIST), \
   $(TEST_PROTO_DIR)/$(f).pb.dart \
-	$(TEST_PROTO_DIR)/$(f).pbenum.dart \
-	$(TEST_PROTO_DIR)/$(f).pbserver.dart \
 	$(TEST_PROTO_DIR)/$(f).pbjson.dart)
 TEST_PROTO_SRC_DIR=test/protos
 TEST_PROTO_SRCS=$(foreach proto, $(TEST_PROTO_LIST), \
@@ -105,7 +103,6 @@
 	  -Iprotos \
 		--plugin=protoc-gen-dart=$(realpath $(PLUGIN_PATH)) $(PREGENERATED_SRCS)
 	find lib/src/gen -name '*.pbjson.dart' -delete
-	find lib/src/gen -name '*.pbserver.dart' -delete
 	dart format lib/src/gen
 
 protos: $(PLUGIN_PATH) $(TEST_PROTO_LIBS)
diff --git a/protoc_plugin/lib/src/file_generator.dart b/protoc_plugin/lib/src/file_generator.dart
index 40306aa..ddca41c 100644
--- a/protoc_plugin/lib/src/file_generator.dart
+++ b/protoc_plugin/lib/src/file_generator.dart
@@ -232,11 +232,11 @@
     }
 
     final mainWriter = generateMainFile(config);
-    final enumWriter = generateEnumFile(config);
+    final enumWriter = hasEnums ? generateEnumFile(config) : null;
 
     final files = [
       makeFile('.pb.dart', mainWriter.toString()),
-      makeFile('.pbenum.dart', enumWriter.toString()),
+      if (enumWriter != null) makeFile('.pbenum.dart', enumWriter.toString()),
       makeFile('.pbjson.dart', generateJsonFile(config)),
     ];
 
@@ -244,8 +244,9 @@
       files.addAll([
         makeFile('.pb.dart.meta',
             mainWriter.sourceLocationInfo.writeToJson().toString()),
-        makeFile('.pbenum.dart.meta',
-            enumWriter.sourceLocationInfo.writeToJson().toString())
+        if (enumWriter != null)
+          makeFile('.pbenum.dart.meta',
+              enumWriter.sourceLocationInfo.writeToJson().toString())
       ]);
     }
     if (options.useGrpc) {
@@ -253,7 +254,9 @@
         files.add(makeFile('.pbgrpc.dart', generateGrpcFile(config)));
       }
     } else {
-      files.add(makeFile('.pbserver.dart', generateServerFile(config)));
+      if (serviceGenerators.isNotEmpty) {
+        files.add(makeFile('.pbserver.dart', generateServerFile(config)));
+      }
     }
     return files;
   }
@@ -457,10 +460,15 @@
     return count;
   }
 
+  /// Returns whether this proto file defines any enums (either top level or
+  /// nested within messages).
+  bool get hasEnums => enumCount > 0;
+
   /// Returns the contents of the .pbserver.dart file for this .proto file.
   String generateServerFile(
       [OutputConfiguration config = const DefaultOutputConfiguration()]) {
     if (!_linked) throw StateError('not linked');
+
     final out = makeWriter();
     _writeHeading(out,
         extraIgnores: {'deprecated_member_use_from_same_package'});
diff --git a/protoc_plugin/lib/src/gen/dart_options.pbenum.dart b/protoc_plugin/lib/src/gen/dart_options.pbenum.dart
deleted file mode 100644
index ab0e780..0000000
--- a/protoc_plugin/lib/src/gen/dart_options.pbenum.dart
+++ /dev/null
@@ -1,10 +0,0 @@
-//
-//  Generated code. Do not modify.
-//  source: dart_options.proto
-//
-// @dart = 3.3
-
-// ignore_for_file: annotate_overrides, camel_case_types, comment_references
-// ignore_for_file: constant_identifier_names, library_prefixes
-// ignore_for_file: non_constant_identifier_names, prefer_final_fields
-// ignore_for_file: unnecessary_import, unnecessary_this, unused_import
diff --git a/protoc_plugin/lib/src/gen/google/api/http.pbenum.dart b/protoc_plugin/lib/src/gen/google/api/http.pbenum.dart
deleted file mode 100644
index 4824393..0000000
--- a/protoc_plugin/lib/src/gen/google/api/http.pbenum.dart
+++ /dev/null
@@ -1,10 +0,0 @@
-//
-//  Generated code. Do not modify.
-//  source: google/api/http.proto
-//
-// @dart = 3.3
-
-// ignore_for_file: annotate_overrides, camel_case_types, comment_references
-// ignore_for_file: constant_identifier_names, library_prefixes
-// ignore_for_file: non_constant_identifier_names, prefer_final_fields
-// ignore_for_file: unnecessary_import, unnecessary_this, unused_import
diff --git a/protoc_plugin/lib/src/gen/google/protobuf/duration.pbenum.dart b/protoc_plugin/lib/src/gen/google/protobuf/duration.pbenum.dart
deleted file mode 100644
index 431da01..0000000
--- a/protoc_plugin/lib/src/gen/google/protobuf/duration.pbenum.dart
+++ /dev/null
@@ -1,10 +0,0 @@
-//
-//  Generated code. Do not modify.
-//  source: google/protobuf/duration.proto
-//
-// @dart = 3.3
-
-// ignore_for_file: annotate_overrides, camel_case_types, comment_references
-// ignore_for_file: constant_identifier_names, library_prefixes
-// ignore_for_file: non_constant_identifier_names, prefer_final_fields
-// ignore_for_file: unnecessary_import, unnecessary_this, unused_import
diff --git a/protoc_plugin/pubspec.yaml b/protoc_plugin/pubspec.yaml
index b652478..88c1b9c 100644
--- a/protoc_plugin/pubspec.yaml
+++ b/protoc_plugin/pubspec.yaml
@@ -1,5 +1,5 @@
 name: protoc_plugin
-version: 22.2.0
+version: 22.3.0-wip
 description: A protobuf protoc compiler plugin used to generate Dart code.
 repository: https://github.com/google/protobuf.dart/tree/master/protoc_plugin