Don't report duplicate errors when CFE already reports them.

R=brianwilkerson@google.com, paulberry@google.com

Bug: https://github.com/dart-lang/sdk/issues/33674
Change-Id: Ia8e0ef74e333fbd99f615aa87629ca20de08af07
Reviewed-on: https://dart-review.googlesource.com/63362
Commit-Queue: Konstantin Shcheglov <scheglov@google.com>
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
diff --git a/pkg/analyzer/lib/src/dart/analysis/library_analyzer.dart b/pkg/analyzer/lib/src/dart/analysis/library_analyzer.dart
index 2c9323b..c486315 100644
--- a/pkg/analyzer/lib/src/dart/analysis/library_analyzer.dart
+++ b/pkg/analyzer/lib/src/dart/analysis/library_analyzer.dart
@@ -549,6 +549,14 @@
     }
 
     ErrorReporter libraryErrorReporter = _getErrorReporter(_library);
+
+    void reportErrorReportedByFrontEnd(
+        ErrorCode errorCode, AstNode node, List<Object> arguments) {
+      if (!_enableKernelDriver) {
+        libraryErrorReporter.reportErrorForNode(errorCode, node, arguments);
+      }
+    }
+
     LibraryIdentifier libraryNameNode = null;
     var seenPartSources = new Set<Source>();
     var directivesToResolve = <Directive>[];
@@ -604,7 +612,7 @@
         // Validate that the part source is unique in the library.
         //
         if (!seenPartSources.add(partSource)) {
-          libraryErrorReporter.reportErrorForNode(
+          reportErrorReportedByFrontEnd(
               CompileTimeErrorCode.DUPLICATE_PART, partUri, [partSource.uri]);
         }
 
@@ -616,18 +624,16 @@
           _NameOrSource nameOrSource = _getPartLibraryNameOrUri(
               partSource, partUnit, directivesToResolve);
           if (nameOrSource == null) {
-            libraryErrorReporter.reportErrorForNode(
-                CompileTimeErrorCode.PART_OF_NON_PART,
-                partUri,
-                [partUri.toSource()]);
+            reportErrorReportedByFrontEnd(CompileTimeErrorCode.PART_OF_NON_PART,
+                partUri, [partUri.toSource()]);
           } else {
             String name = nameOrSource.name;
             if (name != null) {
               if (libraryNameNode == null) {
-                libraryErrorReporter.reportErrorForNode(
+                reportErrorReportedByFrontEnd(
                     ResolverErrorCode.PART_OF_UNNAMED_LIBRARY, partUri, [name]);
               } else if (libraryNameNode.name != name) {
-                libraryErrorReporter.reportErrorForNode(
+                reportErrorReportedByFrontEnd(
                     StaticWarningCode.PART_OF_DIFFERENT_LIBRARY,
                     partUri,
                     [libraryNameNode.name, name]);
@@ -635,7 +641,7 @@
             } else {
               Source source = nameOrSource.source;
               if (source != _library.source) {
-                libraryErrorReporter.reportErrorForNode(
+                reportErrorReportedByFrontEnd(
                     StaticWarningCode.PART_OF_DIFFERENT_LIBRARY,
                     partUri,
                     [_library.uriStr, source.uri]);
@@ -1112,6 +1118,23 @@
     context = contextStack.removeLast();
   }
 
+  @override
+  DartType translateType(kernel.DartType kernelType) {
+    if (kernelType == null) {
+      return null;
+    } else if (kernelType is kernel.TypeArgumentsDartType) {
+      // TODO(paulberry): get rid of this case
+      List<kernel.DartType> kernelTypes = kernelType.types;
+      var types = new List<DartType>(kernelTypes.length);
+      for (var i = 0; i < kernelTypes.length; i++) {
+        types[i] = translateType(kernelTypes[i]);
+      }
+      return new TypeArgumentsDartType(types);
+    } else {
+      return resynthesizer.getType(context, kernelType);
+    }
+  }
+
   Element _translateDeclaration(int declarationOffset) {
     if (declarationOffset == null) return null;
     var declaration = localDeclarations[declarationOffset];
@@ -1167,23 +1190,6 @@
       return element;
     }
   }
-
-  @override
-  DartType translateType(kernel.DartType kernelType) {
-    if (kernelType == null) {
-      return null;
-    } else if (kernelType is kernel.TypeArgumentsDartType) {
-      // TODO(paulberry): get rid of this case
-      List<kernel.DartType> kernelTypes = kernelType.types;
-      var types = new List<DartType>(kernelTypes.length);
-      for (var i = 0; i < kernelTypes.length; i++) {
-        types[i] = translateType(kernelTypes[i]);
-      }
-      return new TypeArgumentsDartType(types);
-    } else {
-      return resynthesizer.getType(context, kernelType);
-    }
-  }
 }
 
 /// [Iterator] like object that provides [CollectedResolution]s.
diff --git a/pkg/analyzer/test/generated/compile_time_error_code_kernel_test.dart b/pkg/analyzer/test/generated/compile_time_error_code_kernel_test.dart
index 6c1ab27..85ff725 100644
--- a/pkg/analyzer/test/generated/compile_time_error_code_kernel_test.dart
+++ b/pkg/analyzer/test/generated/compile_time_error_code_kernel_test.dart
@@ -810,20 +810,6 @@
 
   @override
   @failingTest
-  test_duplicatePart_sameSource() async {
-    // Expected 1 errors of type CompileTimeErrorCode.DUPLICATE_PART, found 2
-    await super.test_duplicatePart_sameSource();
-  }
-
-  @override
-  @failingTest
-  test_duplicatePart_sameUri() async {
-    // Expected 1 errors of type CompileTimeErrorCode.DUPLICATE_PART, found 2
-    await super.test_duplicatePart_sameUri();
-  }
-
-  @override
-  @failingTest
   test_exportInternalLibrary() async {
     // Expected 1 errors of type CompileTimeErrorCode.EXPORT_INTERNAL_LIBRARY, found 0
     await super.test_exportInternalLibrary();
@@ -831,7 +817,7 @@
 
   @override
   @failingTest
-  @FastaProblem('https://github.com/dart-lang/sdk/issues/30960')
+  @FastaProblem('https://github.com/dart-lang/sdk/issues/30959')
   test_exportOfNonLibrary() async {
     return super.test_exportOfNonLibrary();
   }
@@ -2319,20 +2305,6 @@
 
   @override
   @failingTest
-  test_partOfNonPart() async {
-    // Expected 1 errors of type CompileTimeErrorCode.PART_OF_NON_PART, found 2
-    await super.test_partOfNonPart();
-  }
-
-  @override
-  @failingTest
-  test_partOfNonPart_self() async {
-    // Expected 1 errors of type CompileTimeErrorCode.PART_OF_NON_PART, found 2
-    await super.test_partOfNonPart_self();
-  }
-
-  @override
-  @failingTest
   test_prefix_conditionalPropertyAccess_call() async {
     // Bad state: Expected element reference for analyzer offset 32; got one for kernel offset 35
     await super.test_prefix_conditionalPropertyAccess_call();
diff --git a/pkg/analyzer/test/generated/static_warning_code_kernel_test.dart b/pkg/analyzer/test/generated/static_warning_code_kernel_test.dart
index ed469b4..019a9b5 100644
--- a/pkg/analyzer/test/generated/static_warning_code_kernel_test.dart
+++ b/pkg/analyzer/test/generated/static_warning_code_kernel_test.dart
@@ -1561,13 +1561,6 @@
 
   @override
   @failingTest
-  @AnalyzerProblem('https://github.com/dart-lang/sdk/issues/33674')
-  test_partOfDifferentLibrary() async {
-    return super.test_partOfDifferentLibrary();
-  }
-
-  @override
-  @failingTest
   @potentialAnalyzerProblem
   test_redirectToInvalidFunctionType() async {
     return super.test_redirectToInvalidFunctionType();
diff --git a/pkg/analyzer/test/src/dart/analysis/driver_kernel_test.dart b/pkg/analyzer/test/src/dart/analysis/driver_kernel_test.dart
index 5131ce0..a78089a 100644
--- a/pkg/analyzer/test/src/dart/analysis/driver_kernel_test.dart
+++ b/pkg/analyzer/test/src/dart/analysis/driver_kernel_test.dart
@@ -32,40 +32,6 @@
   bool get useCFE => true;
 
   @override
-  @failingTest
-  @potentialAnalyzerProblem
-  @AnalyzerProblem('https://github.com/dart-lang/sdk/issues/33674')
-  test_analyze_resolveDirectives_error_missingLibraryDirective() async {
-    await super.test_analyze_resolveDirectives_error_missingLibraryDirective();
-  }
-
-  @override
-  @failingTest
-  @potentialAnalyzerProblem
-  @AnalyzerProblem('https://github.com/dart-lang/sdk/issues/33674')
-  test_analyze_resolveDirectives_error_partOfDifferentLibrary_byName() async {
-    await super
-        .test_analyze_resolveDirectives_error_partOfDifferentLibrary_byName();
-  }
-
-  @override
-  @failingTest
-  @potentialAnalyzerProblem
-  @AnalyzerProblem('https://github.com/dart-lang/sdk/issues/33674')
-  test_analyze_resolveDirectives_error_partOfDifferentLibrary_byUri() async {
-    await super
-        .test_analyze_resolveDirectives_error_partOfDifferentLibrary_byUri();
-  }
-
-  @override
-  @failingTest
-  @potentialAnalyzerProblem
-  @AnalyzerProblem('https://github.com/dart-lang/sdk/issues/33674')
-  test_analyze_resolveDirectives_error_partOfNonPart() async {
-    await super.test_analyze_resolveDirectives_error_partOfNonPart();
-  }
-
-  @override
   test_asyncChangesDuringAnalysis_getErrors() async {
     // TODO(brianwilkerson) Re-enable this test. It was disabled because it
     // appears to be flaky (possibly OS specific).
diff --git a/pkg/front_end/lib/src/fasta/fasta_codes_generated.dart b/pkg/front_end/lib/src/fasta/fasta_codes_generated.dart
index 175791d..12d35f9 100644
--- a/pkg/front_end/lib/src/fasta/fasta_codes_generated.dart
+++ b/pkg/front_end/lib/src/fasta/fasta_codes_generated.dart
@@ -5221,6 +5221,7 @@
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const MessageCode messagePartOfSelf = const MessageCode("PartOfSelf",
+    analyzerCode: "PART_OF_NON_PART",
     message: r"""A file can't be a part of itself.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
diff --git a/pkg/front_end/messages.status b/pkg/front_end/messages.status
index 772abe1..15ced9e 100644
--- a/pkg/front_end/messages.status
+++ b/pkg/front_end/messages.status
@@ -296,7 +296,7 @@
 PackageNotFound/example: Fail
 PartOfLibraryNameMismatch/dart2jsCode: Fail
 PartOfLibraryNameMismatch/example: Fail
-PartOfSelf/analyzerCode: Fail
+PartOfSelf/dart2jsCode: Fail
 PartOfTwoLibraries/analyzerCode: Fail # Issue 33227
 PartOfUriMismatch/dart2jsCode: Fail
 PartOfUriMismatch/example: Fail
diff --git a/pkg/front_end/messages.yaml b/pkg/front_end/messages.yaml
index 4a022c8..a6b4507 100644
--- a/pkg/front_end/messages.yaml
+++ b/pkg/front_end/messages.yaml
@@ -1637,6 +1637,7 @@
 
 PartOfSelf:
   template: "A file can't be a part of itself."
+  analyzerCode: PART_OF_NON_PART
   script:
     main.dart: "part 'main.dart';"