Resolve loadLibrary() arguments (which should not exist).

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

Bug: https://github.com/dart-lang/sdk/issues/33689
Change-Id: I0c35aafd4a1112190c6ecbd1af6f34190a7f1081
Reviewed-on: https://dart-review.googlesource.com/64827
Commit-Queue: Konstantin Shcheglov <scheglov@google.com>
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
Reviewed-by: Paul Berry <paulberry@google.com>
diff --git a/pkg/analyzer/lib/error/error.dart b/pkg/analyzer/lib/error/error.dart
index 9975d1f..9169f94 100644
--- a/pkg/analyzer/lib/error/error.dart
+++ b/pkg/analyzer/lib/error/error.dart
@@ -175,6 +175,7 @@
   CompileTimeErrorCode.INVALID_USE_OF_COVARIANT,
   CompileTimeErrorCode.LABEL_IN_OUTER_SCOPE,
   CompileTimeErrorCode.LABEL_UNDEFINED,
+  CompileTimeErrorCode.LOAD_LIBRARY_TAKES_NO_ARGUMENTS,
   CompileTimeErrorCode.MEMBER_WITH_CLASS_NAME,
   CompileTimeErrorCode.METHOD_AND_GETTER_WITH_SAME_NAME,
   CompileTimeErrorCode.MISSING_CONST_IN_LIST_LITERAL,
diff --git a/pkg/analyzer/lib/src/error/codes.dart b/pkg/analyzer/lib/src/error/codes.dart
index af873a8..ae112f2 100644
--- a/pkg/analyzer/lib/src/error/codes.dart
+++ b/pkg/analyzer/lib/src/error/codes.dart
@@ -1598,6 +1598,9 @@
           correction: "Try defining the label, or "
               "correcting the name to match an existing label.");
 
+  static const CompileTimeErrorCode LOAD_LIBRARY_TAKES_NO_ARGUMENTS =
+      const CompileTimeErrorCode.fromFasta('LOAD_LIBRARY_TAKES_NO_ARGUMENTS');
+
   /**
    * 7 Classes: It is a compile time error if a class <i>C</i> declares a member
    * with the same name as <i>C</i>.
diff --git a/pkg/analyzer/test/src/dart/analysis/driver_resolution_test.dart b/pkg/analyzer/test/src/dart/analysis/driver_resolution_test.dart
index 8586d1c..bf1e233 100644
--- a/pkg/analyzer/test/src/dart/analysis/driver_resolution_test.dart
+++ b/pkg/analyzer/test/src/dart/analysis/driver_resolution_test.dart
@@ -2278,6 +2278,42 @@
     assertType(name, useCFE ? '() → Future<dynamic>' : null);
   }
 
+  test_deferredImport_loadLibrary_invocation_argument() async {
+    var a = _p('/test/lib/a.dart');
+    provider.newFile(a, '');
+    addTestFile(r'''
+import 'a.dart' deferred as a;
+var b = 1;
+var c = 2;
+main() {
+  a.loadLibrary(b, c);
+}
+
+''');
+    await resolveTestFile();
+    var import = findElement.import('package:test/a.dart');
+
+    var invocation = findNode.methodInvocation('loadLibrary');
+    assertType(invocation, 'Future<dynamic>');
+    assertInvokeType(invocation, '() → Future<dynamic>');
+
+    SimpleIdentifier target = invocation.target;
+    assertElement(target, import.prefix);
+    assertType(target, null);
+
+    var name = invocation.methodName;
+    assertElement(name, import.importedLibrary.loadLibraryFunction);
+    assertType(name, useCFE ? '() → Future<dynamic>' : null);
+
+    var bRef = invocation.argumentList.arguments[0];
+    assertElement(bRef, findElement.topGet('b'));
+    assertType(bRef, 'int');
+
+    var cRef = invocation.argumentList.arguments[1];
+    assertElement(cRef, findElement.topGet('c'));
+    assertType(cRef, 'int');
+  }
+
   test_deferredImport_loadLibrary_tearOff() async {
     var a = _p('/test/lib/a.dart');
     provider.newFile(a, '');
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 d97c8f6..f4419ea 100644
--- a/pkg/front_end/lib/src/fasta/fasta_codes_generated.dart
+++ b/pkg/front_end/lib/src/fasta/fasta_codes_generated.dart
@@ -4260,6 +4260,8 @@
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const MessageCode messageLoadLibraryTakesNoArguments = const MessageCode(
     "LoadLibraryTakesNoArguments",
+    analyzerCode: "LOAD_LIBRARY_TAKES_NO_ARGUMENTS",
+    dart2jsCode: "*fatal*",
     severity: Severity.errorLegacyWarning,
     message: r"""'loadLibrary' takes no arguments.""");
 
diff --git a/pkg/front_end/lib/src/fasta/kernel/kernel_shadow_ast.dart b/pkg/front_end/lib/src/fasta/kernel/kernel_shadow_ast.dart
index 75b3b44..31f9b75 100644
--- a/pkg/front_end/lib/src/fasta/kernel/kernel_shadow_ast.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/kernel_shadow_ast.dart
@@ -3752,6 +3752,8 @@
 
   LoadLibraryJudgment(LibraryDependency import, this.arguments) : super(import);
 
+  ArgumentsJudgment get argumentJudgments => arguments;
+
   @override
   Expression infer<Expression, Statement, Initializer, Type>(
       ShadowTypeInferrer inferrer,
@@ -3760,12 +3762,11 @@
     inferredType =
         inferrer.typeSchemaEnvironment.futureType(const DynamicType());
     if (arguments != null) {
-      inferrer.listener.loadLibrary(
-          this,
-          arguments.fileOffset,
-          import.targetLibrary,
-          new FunctionType([], inferredType),
-          inferredType);
+      var calleeType = new FunctionType([], inferredType);
+      inferrer.inferInvocation(factory, typeContext, fileOffset, calleeType,
+          calleeType.returnType, argumentJudgments);
+      inferrer.listener.loadLibrary(this, arguments.fileOffset,
+          import.targetLibrary, calleeType, inferredType);
     }
     return null;
   }
diff --git a/pkg/front_end/messages.status b/pkg/front_end/messages.status
index 9ea8d23..5c65c75 100644
--- a/pkg/front_end/messages.status
+++ b/pkg/front_end/messages.status
@@ -216,7 +216,6 @@
 ListLiteralTooManyTypeArguments/example: Fail
 ListLiteralTypeArgumentMismatch/analyzerCode: Fail
 ListLiteralTypeArgumentMismatch/example: Fail
-LoadLibraryTakesNoArguments/analyzerCode: Fail
 LoadLibraryTakesNoArguments/example: Fail
 MemberWithSameNameAsClass/analyzerCode: Fail
 MemberWithSameNameAsClass/example: Fail
diff --git a/pkg/front_end/messages.yaml b/pkg/front_end/messages.yaml
index b2e60aa..e868c75 100644
--- a/pkg/front_end/messages.yaml
+++ b/pkg/front_end/messages.yaml
@@ -1228,6 +1228,8 @@
 LoadLibraryTakesNoArguments:
   template: "'loadLibrary' takes no arguments."
   severity: ERROR_LEGACY_WARNING
+  analyzerCode: LOAD_LIBRARY_TAKES_NO_ARGUMENTS
+  dart2jsCode: "*fatal*"
 
 LoadLibraryHidesMember:
   template: "The library '#uri' defines a top-level member named 'loadLibrary'. This member is hidden by the special member 'loadLibrary' that the language adds to support deferred loading."