| // Copyright (c) 2017, the Dart project authors. Please see the AUTHORS file |
| // for details. All rights reserved. Use of this source code is governed by a |
| // BSD-style license that can be found in the LICENSE file. |
| |
| library dart2js.frontend_strategy; |
| |
| import 'common.dart'; |
| import 'common/elements.dart'; |
| import 'common/tasks.dart'; |
| import 'compiler.dart' show Compiler; |
| import 'deferred_load/deferred_load.dart' show DeferredLoadTask; |
| import 'elements/entities.dart'; |
| import 'enqueue.dart'; |
| import 'ir/modular.dart'; |
| import 'js_backend/native_data.dart'; |
| import 'js_backend/no_such_method_registry.dart'; |
| import 'kernel/loader.dart'; |
| import 'universe/world_impact.dart'; |
| |
| /// Strategy pattern that defines the connection between the input format and |
| /// the resolved element model. |
| abstract class FrontendStrategy { |
| /// Registers a set of loaded libraries with this strategy. |
| void registerLoadedLibraries(KernelResult result); |
| |
| void registerModuleData(List<ModuleData> data); |
| |
| /// Returns the [ElementEnvironment] for the element model used in this |
| /// strategy. |
| ElementEnvironment get elementEnvironment; |
| |
| /// Returns the [CommonElements] for the element model used in this |
| /// strategy. |
| CommonElements get commonElements; |
| |
| NativeBasicData get nativeBasicData; |
| |
| /// Creates a [DeferredLoadTask] for the element model used in this strategy. |
| DeferredLoadTask createDeferredLoadTask(Compiler compiler); |
| |
| /// Support for classifying `noSuchMethod` implementations. |
| NoSuchMethodRegistry get noSuchMethodRegistry; |
| |
| /// Called before processing of the resolution queue is started. |
| void onResolutionStart(); |
| |
| ResolutionEnqueuer createResolutionEnqueuer( |
| CompilerTask task, Compiler compiler); |
| |
| /// Called when the resolution queue has been closed. |
| void onResolutionEnd(); |
| |
| /// Computes the main function from [mainLibrary] adding additional world |
| /// impact to [impactBuilder]. |
| FunctionEntity computeMain(WorldImpactBuilder impactBuilder); |
| |
| /// Creates a [SourceSpan] from [spannable] in context of [currentElement]. |
| SourceSpan spanFromSpannable(Spannable spannable, Entity currentElement); |
| } |
| |
| /// Class that performs the mechanics to investigate annotations in the code. |
| abstract class AnnotationProcessor { |
| void extractNativeAnnotations(LibraryEntity library); |
| |
| void extractJsInteropAnnotations(LibraryEntity library); |
| } |