diff --git a/pkg/analysis_server/lib/src/analysis_server_abstract.dart b/pkg/analysis_server/lib/src/analysis_server_abstract.dart
index 276e872..41cb540 100644
--- a/pkg/analysis_server/lib/src/analysis_server_abstract.dart
+++ b/pkg/analysis_server/lib/src/analysis_server_abstract.dart
@@ -418,7 +418,6 @@
         .then((value) => value is ResolvedUnitResult ? value : null)
         .catchError((e, st) {
       instrumentationService.logException(e, st);
-      // ignore: invalid_return_type_for_catch_error
       return null;
     });
   }
diff --git a/pkg/analysis_server/lib/src/provisional/completion/dart/completion_dart.dart b/pkg/analysis_server/lib/src/provisional/completion/dart/completion_dart.dart
index cf8cad0..a1b1989 100644
--- a/pkg/analysis_server/lib/src/provisional/completion/dart/completion_dart.dart
+++ b/pkg/analysis_server/lib/src/provisional/completion/dart/completion_dart.dart
@@ -57,9 +57,8 @@
   bool get inConstantContext;
 
   /// Return the library element which contains the unit in which the completion
-  /// is occurring. This may return `null` if the library cannot be determined
-  /// (e.g. unlinked part file).
-  LibraryElement? get libraryElement;
+  /// is occurring.
+  LibraryElement get libraryElement;
 
   /// The source for the library containing the completion request.
   /// This may be different from the source in which the completion is requested
diff --git a/pkg/analysis_server/lib/src/services/completion/dart/extension_member_contributor.dart b/pkg/analysis_server/lib/src/services/completion/dart/extension_member_contributor.dart
index d635651..476125a 100644
--- a/pkg/analysis_server/lib/src/services/completion/dart/extension_member_contributor.dart
+++ b/pkg/analysis_server/lib/src/services/completion/dart/extension_member_contributor.dart
@@ -20,12 +20,6 @@
   Future<void> computeSuggestions(
       DartCompletionRequest request, SuggestionBuilder builder) async {
     var containingLibrary = request.libraryElement;
-    // Gracefully degrade if the library could not be determined, such as with a
-    // detached part file or source change.
-    if (containingLibrary == null) {
-      return;
-    }
-
     memberBuilder = MemberSuggestionBuilder(request, builder);
 
     var defaultKind = request.target.isFunctionalArgument()
diff --git a/pkg/analysis_server/lib/src/services/completion/dart/imported_reference_contributor.dart b/pkg/analysis_server/lib/src/services/completion/dart/imported_reference_contributor.dart
index 4f7d07c..e2a6c60 100644
--- a/pkg/analysis_server/lib/src/services/completion/dart/imported_reference_contributor.dart
+++ b/pkg/analysis_server/lib/src/services/completion/dart/imported_reference_contributor.dart
@@ -17,12 +17,8 @@
       return;
     }
 
-    var imports = request.libraryElement?.imports;
-    if (imports == null) {
-      return;
-    }
-
     // Traverse imports including dart:core
+    var imports = request.libraryElement.imports;
     for (var importElement in imports) {
       var libraryElement = importElement.importedLibrary;
       if (libraryElement != null) {
diff --git a/pkg/analysis_server/lib/src/services/completion/dart/library_member_contributor.dart b/pkg/analysis_server/lib/src/services/completion/dart/library_member_contributor.dart
index 975d96c..75ae6b50 100644
--- a/pkg/analysis_server/lib/src/services/completion/dart/library_member_contributor.dart
+++ b/pkg/analysis_server/lib/src/services/completion/dart/library_member_contributor.dart
@@ -22,13 +22,8 @@
     if (targetId is SimpleIdentifier && !request.target.isCascade) {
       var elem = targetId.staticElement;
       if (elem is PrefixElement && !elem.isSynthetic) {
-        var containingLibrary = request.libraryElement;
-        // Gracefully degrade if the library or directives could not be
-        // determined (e.g. detached part file or source change).
-        if (containingLibrary != null) {
-          var imports = containingLibrary.imports;
-          _buildSuggestions(request, builder, elem, imports);
-        }
+        var imports = request.libraryElement.imports;
+        _buildSuggestions(request, builder, elem, imports);
       }
     }
   }
diff --git a/pkg/analysis_server/lib/src/services/completion/dart/library_prefix_contributor.dart b/pkg/analysis_server/lib/src/services/completion/dart/library_prefix_contributor.dart
index d8a09fb..0e0a8a4 100644
--- a/pkg/analysis_server/lib/src/services/completion/dart/library_prefix_contributor.dart
+++ b/pkg/analysis_server/lib/src/services/completion/dart/library_prefix_contributor.dart
@@ -15,11 +15,7 @@
       return;
     }
 
-    var imports = request.libraryElement?.imports;
-    if (imports == null) {
-      return;
-    }
-
+    var imports = request.libraryElement.imports;
     for (var element in imports) {
       var prefix = element.prefix?.name;
       if (prefix != null && prefix.isNotEmpty) {
diff --git a/pkg/analysis_server/lib/src/services/completion/dart/named_constructor_contributor.dart b/pkg/analysis_server/lib/src/services/completion/dart/named_constructor_contributor.dart
index e00de9c..0632487 100644
--- a/pkg/analysis_server/lib/src/services/completion/dart/named_constructor_contributor.dart
+++ b/pkg/analysis_server/lib/src/services/completion/dart/named_constructor_contributor.dart
@@ -18,9 +18,6 @@
     var node = request.target.containingNode;
     if (node is ConstructorName) {
       var libraryElement = request.libraryElement;
-      if (libraryElement == null) {
-        return;
-      }
       var namedType = node.type2;
       var type = namedType.type;
       if (type != null) {
diff --git a/pkg/analysis_server/lib/src/services/completion/dart/redirecting_contributor.dart b/pkg/analysis_server/lib/src/services/completion/dart/redirecting_contributor.dart
index 8934ed9..3db1549 100644
--- a/pkg/analysis_server/lib/src/services/completion/dart/redirecting_contributor.dart
+++ b/pkg/analysis_server/lib/src/services/completion/dart/redirecting_contributor.dart
@@ -59,7 +59,7 @@
             parent.thisOrAncestorOfType<ClassOrMixinDeclaration>();
         var classElement = containingClass?.declaredElement;
         var libraryElement = request.libraryElement;
-        if (classElement == null || libraryElement == null) {
+        if (classElement == null) {
           return;
         }
         var typeSystem = libraryElement.typeSystem;
diff --git a/pkg/analysis_server/lib/src/services/completion/dart/static_member_contributor.dart b/pkg/analysis_server/lib/src/services/completion/dart/static_member_contributor.dart
index 08bf0df..15b6c33 100644
--- a/pkg/analysis_server/lib/src/services/completion/dart/static_member_contributor.dart
+++ b/pkg/analysis_server/lib/src/services/completion/dart/static_member_contributor.dart
@@ -16,13 +16,6 @@
   Future<void> computeSuggestions(
       DartCompletionRequest request, SuggestionBuilder builder) async {
     var library = request.libraryElement;
-    if (library == null) {
-      // Gracefully degrade if the library could not be determined, such as a
-      // detached part file or source change.
-      // TODO(brianwilkerson) Consider testing for this before invoking _any_ of
-      //  the contributors.
-      return;
-    }
     bool isVisible(Element element) => element.isAccessibleIn(library);
     var targetId = request.dotTarget;
     if (targetId is Identifier && !request.target.isCascade) {
diff --git a/pkg/analysis_server/lib/src/services/completion/dart/suggestion_builder.dart b/pkg/analysis_server/lib/src/services/completion/dart/suggestion_builder.dart
index 979ab11..5d85616 100644
--- a/pkg/analysis_server/lib/src/services/completion/dart/suggestion_builder.dart
+++ b/pkg/analysis_server/lib/src/services/completion/dart/suggestion_builder.dart
@@ -214,7 +214,7 @@
   }
 
   bool get _isNonNullableByDefault =>
-      request.libraryElement?.isNonNullableByDefault ?? false;
+      request.libraryElement.isNonNullableByDefault;
 
   /// Add a suggestion for an [accessor] declared within a class or extension.
   /// If the accessor is being invoked with a target of `super`, then the
@@ -1135,7 +1135,7 @@
     var typeParameters = element.typeParameters;
     var typeArguments = const <DartType>[];
     if (typeParameters.isNotEmpty) {
-      var neverType = request.libraryElement!.typeProvider.neverType;
+      var neverType = request.libraryElement.typeProvider.neverType;
       typeArguments = List.filled(typeParameters.length, neverType);
     }
 
@@ -1153,7 +1153,7 @@
     var typeParameters = element.typeParameters;
     var typeArguments = const <DartType>[];
     if (typeParameters.isNotEmpty) {
-      var neverType = request.libraryElement!.typeProvider.neverType;
+      var neverType = request.libraryElement.typeProvider.neverType;
       typeArguments = List.filled(typeParameters.length, neverType);
     }
 
diff --git a/pkg/analysis_server/lib/src/services/correction/fix/pubspec/fix_generator.dart b/pkg/analysis_server/lib/src/services/correction/fix/pubspec/fix_generator.dart
index 179e35a..d0452f2 100644
--- a/pkg/analysis_server/lib/src/services/correction/fix/pubspec/fix_generator.dart
+++ b/pkg/analysis_server/lib/src/services/correction/fix/pubspec/fix_generator.dart
@@ -122,7 +122,6 @@
   /// Add a fix whose edits were built by the [builder] that has the given
   /// [kind]. If [args] are provided, they will be used to fill in the message
   /// for the fix.
-  // ignore: unused_element
   void _addFixFromBuilder(ChangeBuilder builder, FixKind kind, {List? args}) {
     var change = builder.sourceChange;
     if (change.edits.isEmpty) {
diff --git a/pkg/analysis_server/test/services/completion/dart/completion_manager_test.dart b/pkg/analysis_server/test/services/completion/dart/completion_manager_test.dart
index 257fb5b..8ebde10 100644
--- a/pkg/analysis_server/test/services/completion/dart/completion_manager_test.dart
+++ b/pkg/analysis_server/test/services/completion/dart/completion_manager_test.dart
@@ -65,7 +65,7 @@
 
     var directives = request.target.unit.directives;
 
-    var imports = request.libraryElement!.imports;
+    var imports = request.libraryElement.imports;
     expect(imports, hasLength(directives.length + 1));
 
     ImportElement importNamed(String expectedUri) {
diff --git a/pkg/analysis_server/test/src/utilities/extensions/range_factory_test.dart b/pkg/analysis_server/test/src/utilities/extensions/range_factory_test.dart
index 206d8fe..d4bf8fd 100644
--- a/pkg/analysis_server/test/src/utilities/extensions/range_factory_test.dart
+++ b/pkg/analysis_server/test/src/utilities/extensions/range_factory_test.dart
@@ -22,10 +22,7 @@
   /// Assuming that the test code starts with a function whose block body starts
   /// with a method invocation, return the list of arguments in that invocation.
   NodeList<Expression> get _argumentList {
-    var f = testUnit.declarations[0] as FunctionDeclaration;
-    var body = f.functionExpression.body as BlockFunctionBody;
-    var statement = body.block.statements[0] as ExpressionStatement;
-    var invocation = statement.expression as MethodInvocation;
+    var invocation = findNode.methodInvocations.single;
     return invocation.argumentList.arguments;
   }
 
diff --git a/pkg/analyzer/lib/src/test_utilities/find_node.dart b/pkg/analyzer/lib/src/test_utilities/find_node.dart
index 575fe79..f07b84c 100644
--- a/pkg/analyzer/lib/src/test_utilities/find_node.dart
+++ b/pkg/analyzer/lib/src/test_utilities/find_node.dart
@@ -4,6 +4,7 @@
 
 import 'package:analyzer/dart/ast/ast.dart';
 import 'package:analyzer/src/dart/ast/utilities.dart';
+import 'package:analyzer/src/test_utilities/function_ast_visitor.dart';
 
 class FindNode {
   final String content;
@@ -16,6 +17,16 @@
         as LibraryDirective;
   }
 
+  List<MethodInvocation> get methodInvocations {
+    var result = <MethodInvocation>[];
+    unit.accept(
+      FunctionAstVisitor(
+        methodInvocation: result.add,
+      ),
+    );
+    return result;
+  }
+
   Annotation annotation(String search) {
     return _node(search, (n) => n is Annotation);
   }
diff --git a/pkg/analyzer/lib/src/test_utilities/function_ast_visitor.dart b/pkg/analyzer/lib/src/test_utilities/function_ast_visitor.dart
index 126dd97..bb1476c 100644
--- a/pkg/analyzer/lib/src/test_utilities/function_ast_visitor.dart
+++ b/pkg/analyzer/lib/src/test_utilities/function_ast_visitor.dart
@@ -12,6 +12,7 @@
       functionDeclarationStatement;
   final void Function(FunctionExpression, bool)? functionExpression;
   final void Function(Label)? label;
+  final void Function(MethodInvocation)? methodInvocation;
   final void Function(SimpleIdentifier)? simpleIdentifier;
   final void Function(VariableDeclaration)? variableDeclaration;
 
@@ -20,6 +21,7 @@
     this.functionDeclarationStatement,
     this.functionExpression,
     this.label,
+    this.methodInvocation,
     this.simpleIdentifier,
     this.variableDeclaration,
   });
@@ -59,6 +61,14 @@
   }
 
   @override
+  void visitMethodInvocation(MethodInvocation node) {
+    if (methodInvocation != null) {
+      methodInvocation!(node);
+    }
+    super.visitMethodInvocation(node);
+  }
+
+  @override
   void visitSimpleIdentifier(SimpleIdentifier node) {
     if (simpleIdentifier != null) {
       simpleIdentifier!(node);
diff --git a/pkg/analyzer/test/src/summary/element_text.dart b/pkg/analyzer/test/src/summary/element_text.dart
index fb0093f..c8d4d0e 100644
--- a/pkg/analyzer/test/src/summary/element_text.dart
+++ b/pkg/analyzer/test/src/summary/element_text.dart
@@ -786,7 +786,6 @@
       // TODO(scheglov) https://github.com/dart-lang/sdk/issues/44629
       // TODO(scheglov) Remove it when we stop providing it everywhere.
       if (aliasedType is FunctionType) {
-        // ignore: deprecated_member_use_from_same_package
         expect(aliasedType.element, isNull);
       }
 
diff --git a/pkg/compiler/lib/compiler.dart b/pkg/compiler/lib/compiler.dart
index 63cad0a..b3e8552 100644
--- a/pkg/compiler/lib/compiler.dart
+++ b/pkg/compiler/lib/compiler.dart
@@ -97,7 +97,7 @@
     Uri packageConfig]) {
   CompilerOptions compilerOptions = CompilerOptions.parse(options,
       librariesSpecificationUri: librariesSpecificationUri)
-    ..entryPoint = script
+    ..entryUri = script
     ..packageConfig = packageConfig
     ..environment = environment;
 
diff --git a/pkg/compiler/lib/compiler_new.dart b/pkg/compiler/lib/compiler_new.dart
index 77e4a0c..4b1d89f 100644
--- a/pkg/compiler/lib/compiler_new.dart
+++ b/pkg/compiler/lib/compiler_new.dart
@@ -190,7 +190,7 @@
 
   CompilerImpl compiler = new CompilerImpl(
       compilerInput, compilerOutput, compilerDiagnostics, compilerOptions);
-  return compiler.run(compilerOptions.entryPoint).then((bool success) {
+  return compiler.run().then((bool success) {
     return new CompilationResult(compiler,
         isSuccess: success,
         kernelInitializedCompilerState:
diff --git a/pkg/compiler/lib/src/apiimpl.dart b/pkg/compiler/lib/src/apiimpl.dart
index e5dbb72..c8aba18 100644
--- a/pkg/compiler/lib/src/apiimpl.dart
+++ b/pkg/compiler/lib/src/apiimpl.dart
@@ -89,11 +89,11 @@
   }
 
   @override
-  Future<bool> run(Uri uri) {
+  Future<bool> run() {
     Duration setupDuration = measurer.elapsedWallClock;
     return selfTask.measureSubtask("impl.run", () {
       return setupSdk().then((_) {
-        return super.run(uri);
+        return super.run();
       }).then((bool success) {
         if (options.verbose) {
           StringBuffer timings = StringBuffer();
diff --git a/pkg/compiler/lib/src/commandline_options.dart b/pkg/compiler/lib/src/commandline_options.dart
index 09293fc..04ae01e 100644
--- a/pkg/compiler/lib/src/commandline_options.dart
+++ b/pkg/compiler/lib/src/commandline_options.dart
@@ -8,6 +8,12 @@
 
 /// Commandline flags used in `dart2js.dart` and/or `apiimpl.dart`.
 class Flags {
+  // The uri of the main script file.
+  static const String entryUri = '--entry-uri';
+
+  // The uri of the main input dill.
+  static const String inputDill = '--input-dill';
+
   static const String allowMockCompilation = '--allow-mock-compilation';
   static const String allowNativeExtensions = '--allow-native-extensions';
   static const String disableInlining = '--disable-inlining';
diff --git a/pkg/compiler/lib/src/compiler.dart b/pkg/compiler/lib/src/compiler.dart
index bc87f29..5a67b84 100644
--- a/pkg/compiler/lib/src/compiler.dart
+++ b/pkg/compiler/lib/src/compiler.dart
@@ -218,16 +218,16 @@
   bool get disableTypeInference =>
       options.disableTypeInference || compilationFailed;
 
-  // Compiles the dart script at [uri].
+  // Compiles the dart program as specified in [options].
   //
   // The resulting future will complete with true if the compilation
   // succeeded.
-  Future<bool> run(Uri uri) => selfTask.measureSubtask("run", () {
+  Future<bool> run() => selfTask.measureSubtask("run", () {
         measurer.startWallClock();
 
-        return Future.sync(() => runInternal(uri))
+        return Future.sync(() => runInternal())
             .catchError((error, StackTrace stackTrace) =>
-                _reporter.onError(uri, error, stackTrace))
+                _reporter.onError(options.compilationTarget, error, stackTrace))
             .whenComplete(() {
           measurer.stopWallClock();
         }).then((_) {
@@ -245,10 +245,11 @@
     return options.readClosedWorldUri != null && options.readDataUri != null;
   }
 
-  Future runInternal(Uri uri) async {
+  Future runInternal() async {
     clearState();
-    assert(uri != null);
-    reporter.log('Compiling $uri (${options.buildId})');
+    var compilationTarget = options.compilationTarget;
+    assert(compilationTarget != null);
+    reporter.log('Compiling $compilationTarget (${options.buildId})');
 
     if (options.readProgramSplit != null) {
       var constraintParser = psc.Parser();
@@ -302,7 +303,7 @@
               environment, abstractValueStrategy);
       await generateJavaScriptCode(globalTypeInferenceResults);
     } else {
-      KernelResult result = await kernelLoader.load(uri);
+      KernelResult result = await kernelLoader.load();
       reporter.log("Kernel load complete");
       if (result == null) return;
       if (compilationFailed) {
diff --git a/pkg/compiler/lib/src/dart2js.dart b/pkg/compiler/lib/src/dart2js.dart
index 139ebfe..bd60c69 100644
--- a/pkg/compiler/lib/src/dart2js.dart
+++ b/pkg/compiler/lib/src/dart2js.dart
@@ -101,6 +101,8 @@
     {fe.InitializedCompilerState kernelInitializedCompilerState}) {
   Stopwatch wallclock = Stopwatch()..start();
   stackTraceFilePrefix = '${Uri.base}';
+  Uri entryUri;
+  Uri inputDillUri;
   Uri librariesSpecificationUri = Uri.base.resolve('lib/libraries.json');
   bool outputSpecified = false;
   Uri out;
@@ -145,13 +147,24 @@
     passThrough("--build-id=$BUILD_ID");
   }
 
+  Uri extractResolvedFileUri(String argument) {
+    return Uri.base.resolve(extractPath(argument, isDirectory: false));
+  }
+
+  void setEntryUri(String argument) {
+    entryUri = extractResolvedFileUri(argument);
+  }
+
+  void setInputDillUri(String argument) {
+    inputDillUri = extractResolvedFileUri(argument);
+  }
+
   void setLibrarySpecificationUri(String argument) {
-    librariesSpecificationUri =
-        Uri.base.resolve(extractPath(argument, isDirectory: false));
+    librariesSpecificationUri = extractResolvedFileUri(argument);
   }
 
   void setPackageConfig(String argument) {
-    packageConfig = Uri.base.resolve(extractPath(argument, isDirectory: false));
+    packageConfig = extractResolvedFileUri(argument);
   }
 
   void setOutput(Iterator<String> arguments) {
@@ -501,6 +514,8 @@
 
   List<String> arguments = <String>[];
   List<OptionHandler> handlers = <OptionHandler>[
+    OptionHandler('${Flags.entryUri}=.+', setEntryUri),
+    OptionHandler('${Flags.inputDill}=.+', setInputDillUri),
     OptionHandler('-[chvm?]+', handleShortOptions),
     OptionHandler('--throw-on-error(?:=[0-9]+)?', handleThrowOnError),
     OptionHandler(Flags.suppressWarnings, (String argument) {
@@ -725,9 +740,10 @@
     helpAndExit(wantHelp, wantVersion, diagnosticHandler.verbose);
   }
 
-  if (arguments.isEmpty) {
+  if (arguments.isEmpty && entryUri == null && inputDillUri == null) {
     helpAndFail('No Dart file specified.');
   }
+
   if (arguments.length > 1) {
     var extra = arguments.sublist(1);
     helpAndFail('Extra arguments: ${extra.join(" ")}');
@@ -738,7 +754,20 @@
         "checked mode.");
   }
 
-  String scriptName = arguments[0];
+  if (arguments.isNotEmpty) {
+    String sourceOrDill = arguments[0];
+    Uri file = Uri.base.resolve(fe.nativeToUriPath(sourceOrDill));
+    if (sourceOrDill.endsWith('.dart')) {
+      entryUri = file;
+    } else {
+      assert(sourceOrDill.endsWith('.dill'));
+      inputDillUri = file;
+    }
+  }
+
+  // Make [scriptName] a relative path..
+  String scriptName =
+      fe.relativizeUri(Uri.base, inputDillUri ?? entryUri, Platform.isWindows);
 
   switch (writeStrategy) {
     case WriteStrategy.toJs:
@@ -888,7 +917,7 @@
     writeString(
         Uri.parse('$out.deps'), getDepsOutput(inputProvider.getSourceUris()));
 
-    String input = fe.uriPathToNative(scriptName);
+    String input = scriptName;
     int inputSize;
     String processName;
     String inputName;
@@ -1037,8 +1066,6 @@
     return result;
   }
 
-  Uri script = Uri.base.resolve(scriptName);
-
   diagnosticHandler.autoReadFileUri = true;
   CompilerOptions compilerOptions = CompilerOptions.parse(options,
       featureOptions: features,
@@ -1046,7 +1073,8 @@
       platformBinaries: platformBinaries,
       onError: (String message) => fail(message),
       onWarning: (String message) => print(message))
-    ..entryPoint = script
+    ..entryUri = entryUri
+    ..inputDillUri = inputDillUri
     ..packageConfig = packageConfig
     ..environment = environment
     ..kernelInitializedCompilerState = kernelInitializedCompilerState
diff --git a/pkg/compiler/lib/src/kernel/loader.dart b/pkg/compiler/lib/src/kernel/loader.dart
index 3278416..30e4d8e 100644
--- a/pkg/compiler/lib/src/kernel/loader.dart
+++ b/pkg/compiler/lib/src/kernel/loader.dart
@@ -55,8 +55,34 @@
   @override
   String get name => 'kernel loader';
 
+  ir.Reference findMainMethod(Component component, Uri entryUri) {
+    var entryLibrary = component.libraries
+        .firstWhere((l) => l.fileUri == entryUri, orElse: () => null);
+    if (entryLibrary == null) {
+      throw ArgumentError('Entry uri $entryUri not found in dill.');
+    }
+    var mainMethod = entryLibrary.procedures
+        .firstWhere((p) => p.name.text == 'main', orElse: () => null);
+
+    // In some cases, a main method is defined in another file, and then
+    // exported. In these cases, we search for the main method in
+    // [additionalExports].
+    ir.Reference mainMethodReference;
+    if (mainMethod == null) {
+      mainMethodReference = entryLibrary.additionalExports.firstWhere(
+          (p) => p.canonicalName.name == 'main',
+          orElse: () => null);
+    } else {
+      mainMethodReference = mainMethod.reference;
+    }
+    if (mainMethodReference == null) {
+      throw ArgumentError('Entry uri $entryUri has no main method.');
+    }
+    return mainMethodReference;
+  }
+
   /// Loads an entire Kernel [Component] from a file on disk.
-  Future<KernelResult> load(Uri resolvedUri) {
+  Future<KernelResult> load() {
     return measure(() async {
       String targetName =
           _options.compileForServer ? "dart2js_server" : "dart2js";
@@ -72,6 +98,7 @@
         return platform;
       }
 
+      var resolvedUri = _options.compilationTarget;
       ir.Component component;
       List<Uri> moduleLibraries = const [];
       var isDill = resolvedUri.path.endsWith('.dill') ||
@@ -98,6 +125,14 @@
         }
 
         await read(resolvedUri);
+
+        // If an entryUri is supplied, we use it to manually select the main
+        // method.
+        if (_options.entryUri != null) {
+          var mainMethod = findMainMethod(component, _options.entryUri);
+          component.setMainMethodAndMode(mainMethod, true, component.mode);
+        }
+
         if (_options.modularMode) {
           moduleLibraries =
               component.libraries.map((lib) => lib.importUri).toList();
@@ -129,11 +164,16 @@
           // brittle.
           if (platformUri != resolvedUri) await read(platformUri);
         }
+
+        // Concatenate dills and then reset main method.
+        var mainMethod = component.mainMethodName;
+        var mainMode = component.mode;
         if (_options.dillDependencies != null) {
           for (Uri dependency in _options.dillDependencies) {
             await read(dependency);
           }
         }
+        component.setMainMethodAndMode(mainMethod, true, mainMode);
 
         // This is not expected to be null when creating a whole-program .dill
         // file, but needs to be checked for modular inputs.
diff --git a/pkg/compiler/lib/src/options.dart b/pkg/compiler/lib/src/options.dart
index 5f7b288..38609ea 100644
--- a/pkg/compiler/lib/src/options.dart
+++ b/pkg/compiler/lib/src/options.dart
@@ -139,7 +139,13 @@
 /// as few as possible.
 class CompilerOptions implements DiagnosticOptions {
   /// The entry point of the application that is being compiled.
-  Uri? entryPoint;
+  Uri? entryUri;
+
+  /// The input dill to compile.
+  Uri? inputDillUri;
+
+  /// Returns the compilation target specified by these options.
+  Uri? get compilationTarget => inputDillUri ?? entryUri;
 
   /// Location of the package configuration file.
   ///
@@ -168,7 +174,7 @@
 
   /// Location from which serialized inference data is read.
   ///
-  /// If this is set, the [entryPoint] is expected to be a .dill file and the
+  /// If this is set, the [entryUri] is expected to be a .dill file and the
   /// frontend work is skipped.
   Uri? readDataUri;
 
@@ -184,7 +190,7 @@
 
   /// Location from which the serialized closed world is read.
   ///
-  /// If this is set, the [entryPoint] is expected to be a .dill file and the
+  /// If this is set, the [entryUri] is expected to be a .dill file and the
   /// frontend work is skipped.
   Uri? readClosedWorldUri;
 
@@ -559,6 +565,8 @@
     // sdk with the correct flags.
     platformBinaries ??= fe.computePlatformBinariesLocation();
     return CompilerOptions()
+      ..entryUri = _extractUriOption(options, '${Flags.entryUri}=')
+      ..inputDillUri = _extractUriOption(options, '${Flags.inputDill}=')
       ..librariesSpecificationUri = librariesSpecificationUri
       ..allowMockCompilation = _hasOption(options, Flags.allowMockCompilation)
       ..benchmarkingProduction =
diff --git a/pkg/compiler/lib/src/serialization/task.dart b/pkg/compiler/lib/src/serialization/task.dart
index 071727d..27d75ae 100644
--- a/pkg/compiler/lib/src/serialization/task.dart
+++ b/pkg/compiler/lib/src/serialization/task.dart
@@ -156,9 +156,9 @@
 
   Future<ir.Component> deserializeComponent() async {
     return measureIoSubtask('deserialize dill', () async {
-      _reporter.log('Reading dill from ${_options.entryPoint}');
+      _reporter.log('Reading dill from ${_options.inputDillUri}');
       api.Input<List<int>> dillInput = await _provider
-          .readFromUri(_options.entryPoint, inputKind: api.InputKind.binary);
+          .readFromUri(_options.inputDillUri, inputKind: api.InputKind.binary);
       ir.Component component = ir.Component();
       // Not using growable lists saves memory.
       ir.BinaryBuilder(dillInput.data,
@@ -177,8 +177,9 @@
       var dillMode = isStrongDill ? 'sound' : 'unsound';
       var option =
           isStrongDill ? Flags.noSoundNullSafety : Flags.soundNullSafety;
-      throw ArgumentError("${_options.entryPoint} was compiled with $dillMode "
-          "null safety and is incompatible with the '$option' option");
+      throw ArgumentError("${_options.inputDillUri} was compiled with "
+          "$dillMode null safety and is incompatible with the '$option' "
+          "option");
     }
 
     _options.nullSafetyMode =
diff --git a/pkg/compiler/test/analyses/analysis_helper.dart b/pkg/compiler/test/analyses/analysis_helper.dart
index 329a825..559d972 100644
--- a/pkg/compiler/test/analyses/analysis_helper.dart
+++ b/pkg/compiler/test/analyses/analysis_helper.dart
@@ -59,8 +59,9 @@
         memorySourceFiles: memorySourceFiles,
         librariesSpecificationUri: librariesSpecificationUri,
         packageConfig: packageConfig,
+        entryPoint: entryPoint,
         options: options);
-    KernelResult result = await compiler.kernelLoader.load(entryPoint);
+    KernelResult result = await compiler.kernelLoader.load();
     new DynamicVisitor(compiler.reporter, result.component, allowedListPath,
             analyzedUrisFilter)
         .run(verbose: verbose, generate: generate);
diff --git a/pkg/compiler/test/analyses/static_type_visitor_test.dart b/pkg/compiler/test/analyses/static_type_visitor_test.dart
index 72b7143..4ec5093 100644
--- a/pkg/compiler/test/analyses/static_type_visitor_test.dart
+++ b/pkg/compiler/test/analyses/static_type_visitor_test.dart
@@ -23,10 +23,10 @@
 
 main() {
   asyncTest(() async {
-    Compiler compiler =
-        await compilerFor(memorySourceFiles: {'main.dart': source});
-    KernelResult result =
-        await compiler.kernelLoader.load(Uri.parse('memory:main.dart'));
+    Compiler compiler = await compilerFor(
+        memorySourceFiles: {'main.dart': source},
+        entryPoint: Uri.parse('memory:main.dart'));
+    KernelResult result = await compiler.kernelLoader.load();
     ir.Component component = result.component;
     StaticTypeVisitor visitor = new Visitor(component);
     component.accept(visitor);
diff --git a/pkg/compiler/test/end_to_end/command_line_test.dart b/pkg/compiler/test/end_to_end/command_line_test.dart
index 5f0b7e9..ec0a78a 100644
--- a/pkg/compiler/test/end_to_end/command_line_test.dart
+++ b/pkg/compiler/test/end_to_end/command_line_test.dart
@@ -73,10 +73,10 @@
         out: 'out.js', readClosedWorld: 'foo.dill.world');
     await test([Flags.readClosedWorld, 'foo.dill', '--out=foo.js'],
         out: 'foo.js', readClosedWorld: 'foo.dill.world');
-    await test(['${Flags.readClosedWorld}=out.world', 'foo.world'],
+    await test(['${Flags.readClosedWorld}=out.world', 'foo.dill'],
         out: 'out.js', readClosedWorld: 'out.world');
     await test(
-        ['${Flags.readClosedWorld}=out.world', 'foo.world', '--out=foo.js'],
+        ['${Flags.readClosedWorld}=out.world', 'foo.dill', '--out=foo.js'],
         out: 'foo.js', readClosedWorld: 'out.world');
     await test(
       [Flags.readClosedWorld, Flags.writeData, 'foo.dill'],
diff --git a/pkg/compiler/test/end_to_end/dill_loader_test.dart b/pkg/compiler/test/end_to_end/dill_loader_test.dart
index 81cbfb7..f5529d55 100644
--- a/pkg/compiler/test/end_to_end/dill_loader_test.dart
+++ b/pkg/compiler/test/end_to_end/dill_loader_test.dart
@@ -27,7 +27,6 @@
     Uri uri = Uri.base.resolve(filename);
     DiagnosticCollector diagnostics = new DiagnosticCollector();
     OutputCollector output = new OutputCollector();
-    Uri entryPoint = Uri.parse('memory:main.dill');
 
     var options = new CompilerOptions()
       ..target = new Dart2jsTarget("dart2js", new TargetFlags())
@@ -41,12 +40,12 @@
     List<int> kernelBinary =
         serializeComponent((await kernelForProgram(uri, options)).component);
     CompilerImpl compiler = compilerFor(
-        entryPoint: entryPoint,
+        entryPoint: uri,
         memorySourceFiles: {'main.dill': kernelBinary},
         diagnosticHandler: diagnostics,
         outputProvider: output);
     await compiler.setupSdk();
-    KernelResult result = await compiler.kernelLoader.load(entryPoint);
+    KernelResult result = await compiler.kernelLoader.load();
     compiler.frontendStrategy.registerLoadedLibraries(result);
 
     Expect.equals(0, diagnostics.errors.length);
diff --git a/pkg/compiler/test/end_to_end/exit_code_test.dart b/pkg/compiler/test/end_to_end/exit_code_test.dart
index abe4757..b830f92 100644
--- a/pkg/compiler/test/end_to_end/exit_code_test.dart
+++ b/pkg/compiler/test/end_to_end/exit_code_test.dart
@@ -61,9 +61,9 @@
   }
 
   @override
-  Future<bool> run(Uri uri) {
+  Future<bool> run() {
     test('Compiler.run');
-    return super.run(uri);
+    return super.run();
   }
 
   test(String marker) {
@@ -161,7 +161,7 @@
       // handler = (uri, begin, end, message, kind) {};
       Compiler compiler = new TestCompiler(compilerInput, compilerOutput,
           compilerDiagnostics, compilerOptions, marker, type, onTest);
-      return compiler.run(compilerOptions.entryPoint).then((bool success) {
+      return compiler.run().then((bool success) {
         return new api.CompilationResult(compiler, isSuccess: success);
       });
     }
diff --git a/pkg/compiler/test/end_to_end/modular_loader_test.dart b/pkg/compiler/test/end_to_end/modular_loader_test.dart
index 3dccb70..ae9a5b8 100644
--- a/pkg/compiler/test/end_to_end/modular_loader_test.dart
+++ b/pkg/compiler/test/end_to_end/modular_loader_test.dart
@@ -37,15 +37,18 @@
 
     DiagnosticCollector diagnostics = new DiagnosticCollector();
     OutputCollector output = new OutputCollector();
-    Uri entryPoint = Uri.parse('memory:c.dill');
+    Uri entryPoint = Uri.parse('org-dartlang-test:///c2.dart');
     CompilerImpl compiler = compilerFor(
         entryPoint: entryPoint,
-        options: ['--dill-dependencies=memory:a.dill,memory:b.dill'],
+        options: [
+          '--input-dill=memory:c.dill',
+          '--dill-dependencies=memory:a.dill,memory:b.dill'
+        ],
         memorySourceFiles: {'a.dill': aDill, 'b.dill': bDill, 'c.dill': cDill},
         diagnosticHandler: diagnostics,
         outputProvider: output);
     await compiler.setupSdk();
-    KernelResult result = await compiler.kernelLoader.load(entryPoint);
+    KernelResult result = await compiler.kernelLoader.load();
     compiler.frontendStrategy.registerLoadedLibraries(result);
 
     Expect.equals(0, diagnostics.errors.length);
diff --git a/pkg/compiler/test/helpers/memory_compiler.dart b/pkg/compiler/test/helpers/memory_compiler.dart
index 3a19a1b..3b6ca9a 100644
--- a/pkg/compiler/test/helpers/memory_compiler.dart
+++ b/pkg/compiler/test/helpers/memory_compiler.dart
@@ -108,7 +108,7 @@
   if (beforeRun != null) {
     beforeRun(compiler);
   }
-  bool isSuccess = await compiler.run(entryPoint);
+  bool isSuccess = await compiler.run();
   fe.InitializedCompilerState compilerState = kernelInitializedCompilerState =
       compiler.kernelLoader.initializedCompilerState;
   return new CompilationResult(compiler,
@@ -169,7 +169,7 @@
 
   CompilerOptions compilerOptions = CompilerOptions.parse(options,
       librariesSpecificationUri: librariesSpecificationUri)
-    ..entryPoint = entryPoint
+    ..entryUri = entryPoint
     ..environment = {}
     ..packageConfig = packageConfig;
   compilerOptions.kernelInitializedCompilerState =
diff --git a/pkg/compiler/test/model/enqueuer_test.dart b/pkg/compiler/test/model/enqueuer_test.dart
index 797896c..9102ac5 100644
--- a/pkg/compiler/test/model/enqueuer_test.dart
+++ b/pkg/compiler/test/model/enqueuer_test.dart
@@ -159,7 +159,7 @@
 '''
   }, options: [
     Flags.disableInlining,
-  ]);
+  ], entryPoint: Uri.parse('memory:main.dart'));
 
   void checkInvariant(
       Enqueuer enqueuer, ElementEnvironment elementEnvironment) {
@@ -277,7 +277,7 @@
     }
   };
 
-  await compiler.run(Uri.parse('memory:main.dart'));
+  await compiler.run();
 
   checkLiveMembers(
       compiler.enqueuer.resolutionEnqueuerForTesting,
diff --git a/pkg/compiler/test/serialization/serialization_test_helper.dart b/pkg/compiler/test/serialization/serialization_test_helper.dart
index 2507434..0a7b306 100644
--- a/pkg/compiler/test/serialization/serialization_test_helper.dart
+++ b/pkg/compiler/test/serialization/serialization_test_helper.dart
@@ -152,12 +152,13 @@
   File(closedWorldFileUri.path).writeAsBytesSync(closedWorldBytes);
   OutputCollector collector3b = new OutputCollector();
   CompilationResult result3b = await runCompiler(
-      entryPoint: dillFileUri,
+      entryPoint: entryPoint,
       memorySourceFiles: memorySourceFiles,
       packageConfig: packageConfig,
       librariesSpecificationUri: librariesSpecificationUri,
       options: commonOptions +
           [
+            '${Flags.inputDill}=$dillFileUri',
             '${Flags.readClosedWorld}=$closedWorldFileUri',
             '${Flags.writeData}=global.data'
           ],
diff --git a/pkg/compiler/tool/modular_test_suite.dart b/pkg/compiler/tool/modular_test_suite.dart
index c045cc1..c2054cb 100644
--- a/pkg/compiler/tool/modular_test_suite.dart
+++ b/pkg/compiler/tool/modular_test_suite.dart
@@ -73,6 +73,7 @@
 const codeId1 = ShardDataId(codeId, 1);
 const jsId = DataId("js");
 const txtId = DataId("txt");
+const fakeRoot = 'dev-dart-app:/';
 
 String _packageConfigEntry(String name, Uri root,
     {Uri packageRoot, LanguageVersion version}) {
@@ -260,7 +261,7 @@
       '--packages=${sdkRoot.toFilePath()}/.packages',
       _dart2jsScript,
       if (_options.useSdk) '--libraries-spec=$_librarySpecForSnapshot',
-      '${toUri(module, dillId)}',
+      '${Flags.inputDill}=${toUri(module, dillId)}',
       if (dillDependencies.isNotEmpty)
         '--dill-dependencies=${dillDependencies.join(',')}',
       '--out=${toUri(module, modularUpdatedDillId)}',
@@ -330,7 +331,8 @@
       _dart2jsScript,
       // TODO(sigmund): remove this dependency on libraries.json
       if (_options.useSdk) '--libraries-spec=$_librarySpecForSnapshot',
-      '${toUri(module, dillId)}',
+      '${Flags.entryUri}=$fakeRoot${module.mainSource}',
+      '${Flags.inputDill}=${toUri(module, dillId)}',
       for (String flag in flags) '--enable-experiment=$flag',
       '${Flags.dillDependencies}=${dillDependencies.join(',')}',
       if (useModularAnalysis)
@@ -379,7 +381,8 @@
       _dart2jsScript,
       // TODO(sigmund): remove this dependency on libraries.json
       if (_options.useSdk) '--libraries-spec=$_librarySpecForSnapshot',
-      '${toUri(module, globalUpdatedDillId)}',
+      '${Flags.entryUri}=$fakeRoot${module.mainSource}',
+      '${Flags.inputDill}=${toUri(module, globalUpdatedDillId)}',
       for (String flag in flags) '--enable-experiment=$flag',
       '${Flags.readClosedWorld}=${toUri(module, closedWorldId)}',
       '${Flags.writeData}=${toUri(module, globalDataId)}',
@@ -431,7 +434,8 @@
       '--packages=${sdkRoot.toFilePath()}/.packages',
       _dart2jsScript,
       if (_options.useSdk) '--libraries-spec=$_librarySpecForSnapshot',
-      '${toUri(module, globalUpdatedDillId)}',
+      '${Flags.entryUri}=$fakeRoot${module.mainSource}',
+      '${Flags.inputDill}=${toUri(module, globalUpdatedDillId)}',
       for (String flag in flags) '--enable-experiment=$flag',
       '${Flags.readClosedWorld}=${toUri(module, closedWorldId)}',
       '${Flags.readData}=${toUri(module, globalDataId)}',
@@ -483,7 +487,8 @@
       '--packages=${sdkRoot.toFilePath()}/.packages',
       _dart2jsScript,
       if (_options.useSdk) '--libraries-spec=$_librarySpecForSnapshot',
-      '${toUri(module, globalUpdatedDillId)}',
+      '${Flags.entryUri}=$fakeRoot${module.mainSource}',
+      '${Flags.inputDill}=${toUri(module, globalUpdatedDillId)}',
       for (String flag in flags) '${Flags.enableLanguageExperiments}=$flag',
       '${Flags.readClosedWorld}=${toUri(module, closedWorldId)}',
       '${Flags.readData}=${toUri(module, globalDataId)}',
@@ -530,6 +535,7 @@
       _dart2jsScript,
       // TODO(sigmund): remove this dependency on libraries.json
       if (_options.useSdk) '--libraries-spec=$_librarySpecForSnapshot',
+      '${Flags.entryUri}=$fakeRoot${module.mainSource}',
       '${toUri(module, globalUpdatedDillId)}',
       for (String flag in flags) '--enable-experiment=$flag',
       '${Flags.readClosedWorld}=${toUri(module, closedWorldId)}',
@@ -581,6 +587,7 @@
       '--packages=${sdkRoot.toFilePath()}/.packages',
       _dart2jsScript,
       if (_options.useSdk) '--libraries-spec=$_librarySpecForSnapshot',
+      '${Flags.entryUri}=$fakeRoot${module.mainSource}',
       '${toUri(module, globalUpdatedDillId)}',
       for (String flag in flags) '--enable-experiment=$flag',
       '${Flags.readData}=${toUri(module, globalDataId)}',
@@ -628,6 +635,7 @@
       '--packages=${sdkRoot.toFilePath()}/.packages',
       _dart2jsScript,
       if (_options.useSdk) '--libraries-spec=$_librarySpecForSnapshot',
+      '${Flags.entryUri}=$fakeRoot${module.mainSource}',
       '${toUri(module, globalUpdatedDillId)}',
       for (String flag in flags) '${Flags.enableLanguageExperiments}=$flag',
       '${Flags.readData}=${toUri(module, globalDataId)}',
diff --git a/tools/VERSION b/tools/VERSION
index dc7ef35..caa0e82 100644
--- a/tools/VERSION
+++ b/tools/VERSION
@@ -27,5 +27,5 @@
 MAJOR 2
 MINOR 15
 PATCH 0
-PRERELEASE 226
+PRERELEASE 227
 PRERELEASE_PATCH 0
\ No newline at end of file
