| Index: pkg/compiler/lib/src/compiler.dart
|
| diff --git a/pkg/compiler/lib/src/compiler.dart b/pkg/compiler/lib/src/compiler.dart
|
| index 2cfadd34dbf8b06c5b2de1efd17b8dd034783d3d..48a3b537d7aef10773d20b7b96ff982dd504b168 100644
|
| --- a/pkg/compiler/lib/src/compiler.dart
|
| +++ b/pkg/compiler/lib/src/compiler.dart
|
| @@ -4,159 +4,92 @@
|
|
|
| library dart2js.compiler_base;
|
|
|
| -import 'dart:async' show
|
| - EventSink,
|
| - Future;
|
| +import 'dart:async' show EventSink, Future;
|
|
|
| import '../compiler_new.dart' as api;
|
| -import 'cache_strategy.dart' show
|
| - CacheStrategy;
|
| -import 'closure.dart' as closureMapping show
|
| - ClosureTask;
|
| +import 'cache_strategy.dart' show CacheStrategy;
|
| +import 'closure.dart' as closureMapping show ClosureTask;
|
| import 'common.dart';
|
| -import 'common/backend_api.dart' show
|
| - Backend;
|
| -import 'common/codegen.dart' show
|
| - CodegenImpact,
|
| - CodegenWorkItem;
|
| -import 'common/names.dart' show
|
| - Identifiers,
|
| - Uris;
|
| -import 'common/registry.dart' show
|
| - EagerRegistry,
|
| - Registry;
|
| -import 'common/resolution.dart' show
|
| - Parsing,
|
| - Resolution,
|
| - ResolutionWorkItem,
|
| - ResolutionImpact;
|
| -import 'common/tasks.dart' show
|
| - CompilerTask,
|
| - GenericTask;
|
| -import 'common/work.dart' show
|
| - ItemCompilationContext,
|
| - WorkItem;
|
| +import 'common/backend_api.dart' show Backend;
|
| +import 'common/codegen.dart' show CodegenImpact, CodegenWorkItem;
|
| +import 'common/names.dart' show Identifiers, Uris;
|
| +import 'common/registry.dart' show EagerRegistry, Registry;
|
| +import 'common/resolution.dart'
|
| + show Parsing, Resolution, ResolutionWorkItem, ResolutionImpact;
|
| +import 'common/tasks.dart' show CompilerTask, GenericTask;
|
| +import 'common/work.dart' show ItemCompilationContext, WorkItem;
|
| import 'compile_time_constants.dart';
|
| import 'constants/values.dart';
|
| -import 'core_types.dart' show
|
| - CoreClasses,
|
| - CoreTypes;
|
| +import 'core_types.dart' show CoreClasses, CoreTypes;
|
| import 'dart_backend/dart_backend.dart' as dart_backend;
|
| -import 'dart_types.dart' show
|
| - DartType,
|
| - DynamicType,
|
| - InterfaceType,
|
| - Types;
|
| +import 'dart_types.dart' show DartType, DynamicType, InterfaceType, Types;
|
| import 'deferred_load.dart' show DeferredLoadTask, OutputUnit;
|
| import 'diagnostics/code_location.dart';
|
| -import 'diagnostics/diagnostic_listener.dart' show
|
| - DiagnosticReporter;
|
| -import 'diagnostics/invariant.dart' show
|
| - REPORT_EXCESS_RESOLUTION;
|
| -import 'diagnostics/messages.dart' show
|
| - Message,
|
| - MessageTemplate;
|
| -import 'dump_info.dart' show
|
| - DumpInfoTask;
|
| +import 'diagnostics/diagnostic_listener.dart' show DiagnosticReporter;
|
| +import 'diagnostics/invariant.dart' show REPORT_EXCESS_RESOLUTION;
|
| +import 'diagnostics/messages.dart' show Message, MessageTemplate;
|
| +import 'dump_info.dart' show DumpInfoTask;
|
| import 'elements/elements.dart';
|
| -import 'elements/modelx.dart' show
|
| - ErroneousElementX,
|
| - ClassElementX,
|
| - CompilationUnitElementX,
|
| - DeferredLoaderGetterElementX,
|
| - MethodElementX,
|
| - LibraryElementX,
|
| - PrefixElementX;
|
| -import 'enqueue.dart' show
|
| - CodegenEnqueuer,
|
| - Enqueuer,
|
| - EnqueueTask,
|
| - ResolutionEnqueuer,
|
| - QueueFilter;
|
| +import 'elements/modelx.dart'
|
| + show
|
| + ErroneousElementX,
|
| + ClassElementX,
|
| + CompilationUnitElementX,
|
| + DeferredLoaderGetterElementX,
|
| + MethodElementX,
|
| + LibraryElementX,
|
| + PrefixElementX;
|
| +import 'enqueue.dart'
|
| + show
|
| + CodegenEnqueuer,
|
| + Enqueuer,
|
| + EnqueueTask,
|
| + ResolutionEnqueuer,
|
| + QueueFilter;
|
| import 'environment.dart';
|
| -import 'io/source_information.dart' show
|
| - SourceInformation;
|
| -import 'js_backend/backend_helpers.dart' as js_backend show
|
| - BackendHelpers;
|
| -import 'js_backend/js_backend.dart' as js_backend show
|
| - JavaScriptBackend;
|
| -import 'library_loader.dart' show
|
| - ElementScanner,
|
| - LibraryLoader,
|
| - LibraryLoaderTask,
|
| - LoadedLibraries,
|
| - LibraryLoaderListener,
|
| - ResolvedUriTranslator,
|
| - ScriptLoader;
|
| -import 'mirrors_used.dart' show
|
| - MirrorUsageAnalyzerTask;
|
| -import 'common/names.dart' show
|
| - Selectors;
|
| -import 'null_compiler_output.dart' show
|
| - NullCompilerOutput,
|
| - NullSink;
|
| -import 'options.dart' show
|
| - CompilerOptions,
|
| - DiagnosticOptions,
|
| - ParserOptions;
|
| -import 'parser/diet_parser_task.dart' show
|
| - DietParserTask;
|
| -import 'parser/element_listener.dart' show
|
| - ScannerOptions;
|
| -import 'parser/parser_task.dart' show
|
| - ParserTask;
|
| -import 'patch_parser.dart' show
|
| - PatchParserTask;
|
| -import 'resolution/registry.dart' show
|
| - ResolutionRegistry;
|
| -import 'resolution/resolution.dart' show
|
| - ResolverTask;
|
| -import 'resolution/tree_elements.dart' show
|
| - TreeElementMapping;
|
| -import 'scanner/scanner_task.dart' show
|
| - ScannerTask;
|
| -import 'serialization/task.dart' show
|
| - SerializationTask;
|
| -import 'script.dart' show
|
| - Script;
|
| -import 'ssa/nodes.dart' show
|
| - HInstruction;
|
| -import 'tracer.dart' show
|
| - Tracer;
|
| -import 'tokens/token.dart' show
|
| - StringToken,
|
| - Token,
|
| - TokenPair;
|
| -import 'tokens/token_constants.dart' as Tokens show
|
| - COMMENT_TOKEN,
|
| - EOF_TOKEN;
|
| -import 'tokens/token_map.dart' show
|
| - TokenMap;
|
| -import 'tree/tree.dart' show
|
| - Node,
|
| - TypeAnnotation;
|
| -import 'typechecker.dart' show
|
| - TypeCheckerTask;
|
| +import 'io/source_information.dart' show SourceInformation;
|
| +import 'js_backend/backend_helpers.dart' as js_backend show BackendHelpers;
|
| +import 'js_backend/js_backend.dart' as js_backend show JavaScriptBackend;
|
| +import 'library_loader.dart'
|
| + show
|
| + ElementScanner,
|
| + LibraryLoader,
|
| + LibraryLoaderTask,
|
| + LoadedLibraries,
|
| + LibraryLoaderListener,
|
| + ResolvedUriTranslator,
|
| + ScriptLoader;
|
| +import 'mirrors_used.dart' show MirrorUsageAnalyzerTask;
|
| +import 'common/names.dart' show Selectors;
|
| +import 'null_compiler_output.dart' show NullCompilerOutput, NullSink;
|
| +import 'options.dart' show CompilerOptions, DiagnosticOptions, ParserOptions;
|
| +import 'parser/diet_parser_task.dart' show DietParserTask;
|
| +import 'parser/element_listener.dart' show ScannerOptions;
|
| +import 'parser/parser_task.dart' show ParserTask;
|
| +import 'patch_parser.dart' show PatchParserTask;
|
| +import 'resolution/registry.dart' show ResolutionRegistry;
|
| +import 'resolution/resolution.dart' show ResolverTask;
|
| +import 'resolution/tree_elements.dart' show TreeElementMapping;
|
| +import 'scanner/scanner_task.dart' show ScannerTask;
|
| +import 'serialization/task.dart' show SerializationTask;
|
| +import 'script.dart' show Script;
|
| +import 'ssa/nodes.dart' show HInstruction;
|
| +import 'tracer.dart' show Tracer;
|
| +import 'tokens/token.dart' show StringToken, Token, TokenPair;
|
| +import 'tokens/token_constants.dart' as Tokens show COMMENT_TOKEN, EOF_TOKEN;
|
| +import 'tokens/token_map.dart' show TokenMap;
|
| +import 'tree/tree.dart' show Node, TypeAnnotation;
|
| +import 'typechecker.dart' show TypeCheckerTask;
|
| import 'types/types.dart' as ti;
|
| -import 'universe/call_structure.dart' show
|
| - CallStructure;
|
| -import 'universe/selector.dart' show
|
| - Selector;
|
| -import 'universe/universe.dart' show
|
| - Universe;
|
| -import 'universe/use.dart' show
|
| - StaticUse;
|
| -import 'universe/world_impact.dart' show
|
| - ImpactStrategy,
|
| - WorldImpact;
|
| -import 'util/util.dart' show
|
| - Link,
|
| - Setlet;
|
| -import 'world.dart' show
|
| - World;
|
| +import 'universe/call_structure.dart' show CallStructure;
|
| +import 'universe/selector.dart' show Selector;
|
| +import 'universe/universe.dart' show Universe;
|
| +import 'universe/use.dart' show StaticUse;
|
| +import 'universe/world_impact.dart' show ImpactStrategy, WorldImpact;
|
| +import 'util/util.dart' show Link, Setlet;
|
| +import 'world.dart' show World;
|
|
|
| abstract class Compiler implements LibraryLoaderListener {
|
| -
|
| final Stopwatch totalCompileTime = new Stopwatch();
|
| int nextFreeClassId = 0;
|
| World world;
|
| @@ -324,11 +257,10 @@ abstract class Compiler implements LibraryLoaderListener {
|
| /// A customizable filter that is applied to enqueued work items.
|
| QueueFilter enqueuerFilter = new QueueFilter();
|
|
|
| - final Selector symbolValidatedConstructorSelector = new Selector.call(
|
| - const PublicName('validated'), CallStructure.ONE_ARG);
|
| + final Selector symbolValidatedConstructorSelector =
|
| + new Selector.call(const PublicName('validated'), CallStructure.ONE_ARG);
|
|
|
| - static const String CREATE_INVOCATION_MIRROR =
|
| - 'createInvocationMirror';
|
| + static const String CREATE_INVOCATION_MIRROR = 'createInvocationMirror';
|
|
|
| bool enabledRuntimeType = false;
|
| bool enabledFunctionApply = false;
|
| @@ -360,13 +292,15 @@ abstract class Compiler implements LibraryLoaderListener {
|
| compilationFailedInternal = value;
|
| }
|
|
|
| - Compiler({CompilerOptions options,
|
| - api.CompilerOutput outputProvider,
|
| - this.environment: const _EmptyEnvironment()})
|
| + Compiler(
|
| + {CompilerOptions options,
|
| + api.CompilerOutput outputProvider,
|
| + this.environment: const _EmptyEnvironment()})
|
| : this.options = options,
|
| this.cacheStrategy = new CacheStrategy(options.hasIncrementalSupport),
|
| this.userOutputProvider = outputProvider == null
|
| - ? const NullCompilerOutput() : outputProvider {
|
| + ? const NullCompilerOutput()
|
| + : outputProvider {
|
| world = new World(this);
|
| // TODO(johnniwinther): Initialize core types in [initializeCoreClasses] and
|
| // make its field final.
|
| @@ -386,11 +320,11 @@ abstract class Compiler implements LibraryLoaderListener {
|
| globalDependencies = new GlobalDependencyRegistry(this);
|
|
|
| if (options.emitJavaScript) {
|
| - js_backend.JavaScriptBackend jsBackend =
|
| - new js_backend.JavaScriptBackend(
|
| - this, generateSourceMap: options.generateSourceMap,
|
| - useStartupEmitter: options.useStartupEmitter,
|
| - useNewSourceInfo: options.useNewSourceInfo);
|
| + js_backend.JavaScriptBackend jsBackend = new js_backend.JavaScriptBackend(
|
| + this,
|
| + generateSourceMap: options.generateSourceMap,
|
| + useStartupEmitter: options.useStartupEmitter,
|
| + useNewSourceInfo: options.useNewSourceInfo);
|
| backend = jsBackend;
|
| } else {
|
| backend = new dart_backend.DartBackend(this, options.strips,
|
| @@ -404,7 +338,8 @@ abstract class Compiler implements LibraryLoaderListener {
|
| dietParser = new DietParserTask(this, parsing.parserOptions),
|
| scanner = createScannerTask(),
|
| serialization = new SerializationTask(this),
|
| - libraryLoader = new LibraryLoaderTask(this,
|
| + libraryLoader = new LibraryLoaderTask(
|
| + this,
|
| new _ResolvedUriTranslator(this),
|
| new _ScriptLoader(this),
|
| new _ElementScanner(scanner),
|
| @@ -548,20 +483,18 @@ abstract class Compiler implements LibraryLoaderListener {
|
| new UriLocation(importChainReversed.head);
|
| compactImportChain = compactImportChain.prepend(currentCodeLocation);
|
| for (Link<Uri> link = importChainReversed.tail;
|
| - !link.isEmpty;
|
| - link = link.tail) {
|
| + !link.isEmpty;
|
| + link = link.tail) {
|
| Uri uri = link.head;
|
| if (!currentCodeLocation.inSameLocation(uri)) {
|
| currentCodeLocation =
|
| options.verbose ? new UriLocation(uri) : new CodeLocation(uri);
|
| - compactImportChain =
|
| - compactImportChain.prepend(currentCodeLocation);
|
| + compactImportChain = compactImportChain.prepend(currentCodeLocation);
|
| }
|
| }
|
| - String importChain =
|
| - compactImportChain.map((CodeLocation codeLocation) {
|
| - return codeLocation.relativize(rootUri);
|
| - }).join(' => ');
|
| + String importChain = compactImportChain.map((CodeLocation codeLocation) {
|
| + return codeLocation.relativize(rootUri);
|
| + }).join(' => ');
|
|
|
| if (!importChains.contains(importChain)) {
|
| if (importChains.length > compactChainLimit) {
|
| @@ -604,11 +537,12 @@ abstract class Compiler implements LibraryLoaderListener {
|
| if (loadedLibraries.containsLibrary(uri)) {
|
| Set<String> importChains =
|
| computeImportChainsFor(loadedLibraries, uri);
|
| - reporter.reportInfo(NO_LOCATION_SPANNABLE,
|
| - MessageKind.DISALLOWED_LIBRARY_IMPORT,
|
| - {'uri': uri,
|
| - 'importChain': importChains.join(
|
| - MessageTemplate.DISALLOWED_LIBRARY_IMPORT_PADDING)});
|
| + reporter.reportInfo(
|
| + NO_LOCATION_SPANNABLE, MessageKind.DISALLOWED_LIBRARY_IMPORT, {
|
| + 'uri': uri,
|
| + 'importChain': importChains
|
| + .join(MessageTemplate.DISALLOWED_LIBRARY_IMPORT_PADDING)
|
| + });
|
| }
|
| }
|
|
|
| @@ -621,19 +555,19 @@ abstract class Compiler implements LibraryLoaderListener {
|
| if (importsMirrorsLibrary && !backend.supportsReflection) {
|
| Set<String> importChains =
|
| computeImportChainsFor(loadedLibraries, Uris.dart_mirrors);
|
| - reporter.reportErrorMessage(
|
| - NO_LOCATION_SPANNABLE,
|
| - MessageKind.MIRRORS_LIBRARY_NOT_SUPPORT_BY_BACKEND,
|
| - {'importChain': importChains.join(
|
| - MessageTemplate.MIRRORS_NOT_SUPPORTED_BY_BACKEND_PADDING)});
|
| + reporter.reportErrorMessage(NO_LOCATION_SPANNABLE,
|
| + MessageKind.MIRRORS_LIBRARY_NOT_SUPPORT_BY_BACKEND, {
|
| + 'importChain': importChains
|
| + .join(MessageTemplate.MIRRORS_NOT_SUPPORTED_BY_BACKEND_PADDING)
|
| + });
|
| } else if (importsMirrorsLibrary && !options.enableExperimentalMirrors) {
|
| Set<String> importChains =
|
| computeImportChainsFor(loadedLibraries, Uris.dart_mirrors);
|
| reporter.reportWarningMessage(
|
| - NO_LOCATION_SPANNABLE,
|
| - MessageKind.IMPORT_EXPERIMENTAL_MIRRORS,
|
| - {'importChain': importChains.join(
|
| - MessageTemplate.IMPORT_EXPERIMENTAL_MIRRORS_PADDING)});
|
| + NO_LOCATION_SPANNABLE, MessageKind.IMPORT_EXPERIMENTAL_MIRRORS, {
|
| + 'importChain': importChains
|
| + .join(MessageTemplate.IMPORT_EXPERIMENTAL_MIRRORS_PADDING)
|
| + });
|
| }
|
|
|
| coreClasses.functionClass.ensureResolved(resolution);
|
| @@ -641,7 +575,8 @@ abstract class Compiler implements LibraryLoaderListener {
|
| coreClasses.functionClass.lookupLocalMember('apply');
|
|
|
| if (options.preserveComments) {
|
| - return libraryLoader.loadLibrary(Uris.dart_mirrors)
|
| + return libraryLoader
|
| + .loadLibrary(Uris.dart_mirrors)
|
| .then((LibraryElement libraryElement) {
|
| documentClass = libraryElement.find('Comment');
|
| });
|
| @@ -654,9 +589,8 @@ abstract class Compiler implements LibraryLoaderListener {
|
| if (field == null) return false;
|
| if (!resolution.hasBeenResolved(field)) return false;
|
| if (proxyConstant == null) {
|
| - proxyConstant =
|
| - constants.getConstantValue(
|
| - resolver.constantCompiler.compileConstant(field));
|
| + proxyConstant = constants
|
| + .getConstantValue(resolver.constantCompiler.compileConstant(field));
|
| }
|
| return proxyConstant == value;
|
| }
|
| @@ -664,7 +598,8 @@ abstract class Compiler implements LibraryLoaderListener {
|
| Element findRequiredElement(LibraryElement library, String name) {
|
| var element = library.find(name);
|
| if (element == null) {
|
| - reporter.internalError(library,
|
| + reporter.internalError(
|
| + library,
|
| "The library '${library.canonicalUri}' does not contain required "
|
| "element: '$name'.");
|
| }
|
| @@ -681,8 +616,8 @@ abstract class Compiler implements LibraryLoaderListener {
|
| } else if (coreClasses.symbolClass == cls) {
|
| symbolConstructor = cls.constructors.head;
|
| } else if (symbolImplementationClass == cls) {
|
| - symbolValidatedConstructor = cls.lookupConstructor(
|
| - symbolValidatedConstructorSelector.name);
|
| + symbolValidatedConstructor =
|
| + cls.lookupConstructor(symbolValidatedConstructorSelector.name);
|
| } else if (mirrorsUsedClass == cls) {
|
| mirrorsUsedConstructor = cls.constructors.head;
|
| } else if (coreClasses.intClass == cls) {
|
| @@ -757,8 +692,8 @@ abstract class Compiler implements LibraryLoaderListener {
|
| // The selector objects held in static fields must remain canonical.
|
| for (Selector selector in Selectors.ALL) {
|
| Selector.canonicalizedValues
|
| - .putIfAbsent(selector.hashCode, () => <Selector>[])
|
| - .add(selector);
|
| + .putIfAbsent(selector.hashCode, () => <Selector>[])
|
| + .add(selector);
|
| }
|
|
|
| assert(uri != null || options.analyzeOnly || options.hasIncrementalSupport);
|
| @@ -793,15 +728,13 @@ abstract class Compiler implements LibraryLoaderListener {
|
| if (main == null) {
|
| if (options.analyzeOnly) {
|
| if (!analyzeAll) {
|
| - errorElement = new ErroneousElementX(
|
| - MessageKind.CONSIDER_ANALYZE_ALL, {'main': Identifiers.main},
|
| - Identifiers.main, mainApp);
|
| + errorElement = new ErroneousElementX(MessageKind.CONSIDER_ANALYZE_ALL,
|
| + {'main': Identifiers.main}, Identifiers.main, mainApp);
|
| }
|
| } else {
|
| // Compilation requires a main method.
|
| - errorElement = new ErroneousElementX(
|
| - MessageKind.MISSING_MAIN, {'main': Identifiers.main},
|
| - Identifiers.main, mainApp);
|
| + errorElement = new ErroneousElementX(MessageKind.MISSING_MAIN,
|
| + {'main': Identifiers.main}, Identifiers.main, mainApp);
|
| }
|
| mainFunction = backend.helperForMissingMain();
|
| } else if (main.isError && main.isSynthesized) {
|
| @@ -812,9 +745,8 @@ abstract class Compiler implements LibraryLoaderListener {
|
| }
|
| mainFunction = backend.helperForBadMain();
|
| } else if (!main.isFunction) {
|
| - errorElement = new ErroneousElementX(
|
| - MessageKind.MAIN_NOT_A_FUNCTION, {'main': Identifiers.main},
|
| - Identifiers.main, main);
|
| + errorElement = new ErroneousElementX(MessageKind.MAIN_NOT_A_FUNCTION,
|
| + {'main': Identifiers.main}, Identifiers.main, main);
|
| mainFunction = backend.helperForBadMain();
|
| } else {
|
| mainFunction = main;
|
| @@ -825,7 +757,8 @@ abstract class Compiler implements LibraryLoaderListener {
|
| parameters.orderedForEachParameter((Element parameter) {
|
| if (index++ < 2) return;
|
| errorElement = new ErroneousElementX(
|
| - MessageKind.MAIN_WITH_EXTRA_PARAMETER, {'main': Identifiers.main},
|
| + MessageKind.MAIN_WITH_EXTRA_PARAMETER,
|
| + {'main': Identifiers.main},
|
| Identifiers.main,
|
| parameter);
|
| mainFunction = backend.helperForMainArity();
|
| @@ -844,8 +777,7 @@ abstract class Compiler implements LibraryLoaderListener {
|
| if (errorElement != null &&
|
| errorElement.isSynthesized &&
|
| !mainApp.isSynthesized) {
|
| - reporter.reportWarningMessage(
|
| - errorElement, errorElement.messageKind,
|
| + reporter.reportWarningMessage(errorElement, errorElement.messageKind,
|
| errorElement.messageArguments);
|
| }
|
| }
|
| @@ -857,14 +789,13 @@ abstract class Compiler implements LibraryLoaderListener {
|
| ///
|
| /// This operation assumes an unclosed resolution queue and is only supported
|
| /// when the '--analyze-main' option is used.
|
| - Future<LibraryElement> analyzeUri(
|
| - Uri libraryUri,
|
| + Future<LibraryElement> analyzeUri(Uri libraryUri,
|
| {bool skipLibraryWithPartOfTag: true}) {
|
| assert(options.analyzeMain);
|
| reporter.log('Analyzing $libraryUri (${options.buildId})');
|
| - return libraryLoader.loadLibrary(
|
| - libraryUri, skipFileWithPartOfTag: true).then(
|
| - (LibraryElement library) {
|
| + return libraryLoader
|
| + .loadLibrary(libraryUri, skipFileWithPartOfTag: true)
|
| + .then((LibraryElement library) {
|
| if (library == null) return null;
|
| fullyEnqueueLibrary(library, enqueuer.resolution);
|
| emptyQueue(enqueuer.resolution);
|
| @@ -892,7 +823,7 @@ abstract class Compiler implements LibraryLoaderListener {
|
| phase = PHASE_RESOLVING;
|
| if (analyzeAll) {
|
| libraryLoader.libraries.forEach((LibraryElement library) {
|
| - reporter.log('Enqueuing ${library.canonicalUri}');
|
| + reporter.log('Enqueuing ${library.canonicalUri}');
|
| fullyEnqueueLibrary(library, enqueuer.resolution);
|
| });
|
| } else if (options.analyzeMain) {
|
| @@ -901,8 +832,8 @@ abstract class Compiler implements LibraryLoaderListener {
|
| }
|
| if (librariesToAnalyzeWhenRun != null) {
|
| for (Uri libraryUri in librariesToAnalyzeWhenRun) {
|
| - fullyEnqueueLibrary(libraryLoader.lookupLibrary(libraryUri),
|
| - enqueuer.resolution);
|
| + fullyEnqueueLibrary(
|
| + libraryLoader.lookupLibrary(libraryUri), enqueuer.resolution);
|
| }
|
| }
|
| }
|
| @@ -916,7 +847,7 @@ abstract class Compiler implements LibraryLoaderListener {
|
|
|
| _reporter.reportSuppressedMessagesSummary();
|
|
|
| - if (compilationFailed){
|
| + if (compilationFailed) {
|
| if (!options.generateCodeWithCompileTimeErrors) return;
|
| if (!backend.enableCodegenWithErrorsIfSupported(NO_LOCATION_SPANNABLE)) {
|
| return;
|
| @@ -991,8 +922,7 @@ abstract class Compiler implements LibraryLoaderListener {
|
| ClassElement cls = element;
|
| cls.ensureResolved(resolution);
|
| cls.forEachLocalMember(enqueuer.resolution.addToWorkList);
|
| - backend.registerInstantiatedType(
|
| - cls.rawType, world, globalDependencies);
|
| + backend.registerInstantiatedType(cls.rawType, world, globalDependencies);
|
| } else {
|
| world.addToWorkList(element);
|
| }
|
| @@ -1016,7 +946,7 @@ abstract class Compiler implements LibraryLoaderListener {
|
| */
|
| void emptyQueue(Enqueuer world) {
|
| world.forEach((WorkItem work) {
|
| - reporter.withCurrentElement(work.element, () {
|
| + reporter.withCurrentElement(work.element, () {
|
| world.applyImpact(work.element, work.run(this, world));
|
| });
|
| });
|
| @@ -1086,29 +1016,28 @@ abstract class Compiler implements LibraryLoaderListener {
|
| }
|
| reporter.log('Excess resolution work: ${resolved.length}.');
|
| for (Element e in resolved) {
|
| - reporter.reportWarningMessage(e,
|
| - MessageKind.GENERIC,
|
| + reporter.reportWarningMessage(e, MessageKind.GENERIC,
|
| {'text': 'Warning: $e resolved but not compiled.'});
|
| }
|
| }
|
|
|
| WorldImpact analyzeElement(Element element) {
|
| - assert(invariant(element,
|
| - element.impliesType ||
|
| - element.isField ||
|
| - element.isFunction ||
|
| - element.isConstructor ||
|
| - element.isGetter ||
|
| - element.isSetter,
|
| - message: 'Unexpected element kind: ${element.kind}'));
|
| + assert(invariant(
|
| + element,
|
| + element.impliesType ||
|
| + element.isField ||
|
| + element.isFunction ||
|
| + element.isConstructor ||
|
| + element.isGetter ||
|
| + element.isSetter,
|
| + message: 'Unexpected element kind: ${element.kind}'));
|
| assert(invariant(element, element is AnalyzableElement,
|
| message: 'Element $element is not analyzable.'));
|
| assert(invariant(element, element.isDeclaration));
|
| return resolution.computeWorldImpact(element);
|
| }
|
|
|
| - WorldImpact analyze(ResolutionWorkItem work,
|
| - ResolutionEnqueuer world) {
|
| + WorldImpact analyze(ResolutionWorkItem work, ResolutionEnqueuer world) {
|
| assert(invariant(work.element, identical(world, enqueuer.resolution)));
|
| assert(invariant(work.element, !work.isAnalyzed,
|
| message: 'Element ${work.element} has already been analyzed'));
|
| @@ -1116,8 +1045,7 @@ abstract class Compiler implements LibraryLoaderListener {
|
| // TODO(ahe): Add structured diagnostics to the compiler API and
|
| // use it to separate this from the --verbose option.
|
| if (phase == PHASE_RESOLVING) {
|
| - reporter.log(
|
| - 'Resolved ${enqueuer.resolution.processedElements.length} '
|
| + reporter.log('Resolved ${enqueuer.resolution.processedElements.length} '
|
| 'elements.');
|
| progress.reset();
|
| }
|
| @@ -1137,16 +1065,15 @@ abstract class Compiler implements LibraryLoaderListener {
|
| if (shouldPrintProgress) {
|
| // TODO(ahe): Add structured diagnostics to the compiler API and
|
| // use it to separate this from the --verbose option.
|
| - reporter.log(
|
| - 'Compiled ${enqueuer.codegen.generatedCode.length} methods.');
|
| + reporter
|
| + .log('Compiled ${enqueuer.codegen.generatedCode.length} methods.');
|
| progress.reset();
|
| }
|
| return backend.codegen(work);
|
| }
|
|
|
| void reportDiagnostic(DiagnosticMessage message,
|
| - List<DiagnosticMessage> infos,
|
| - api.Diagnostic kind);
|
| + List<DiagnosticMessage> infos, api.Diagnostic kind);
|
|
|
| void reportCrashInUserCode(String message, exception, stackTrace) {
|
| _reporter.onCrashInUserCode(message, exception, stackTrace);
|
| @@ -1155,8 +1082,8 @@ abstract class Compiler implements LibraryLoaderListener {
|
| /// Messages for which compile-time errors are reported but compilation
|
| /// continues regardless.
|
| static const List<MessageKind> BENIGN_ERRORS = const <MessageKind>[
|
| - MessageKind.INVALID_METADATA,
|
| - MessageKind.INVALID_METADATA_GENERIC,
|
| + MessageKind.INVALID_METADATA,
|
| + MessageKind.INVALID_METADATA_GENERIC,
|
| ];
|
|
|
| bool markCompilationAsFailed(DiagnosticMessage message, api.Diagnostic kind) {
|
| @@ -1171,8 +1098,7 @@ abstract class Compiler implements LibraryLoaderListener {
|
| }
|
|
|
| void fatalDiagnosticReported(DiagnosticMessage message,
|
| - List<DiagnosticMessage> infos,
|
| - api.Diagnostic kind) {
|
| + List<DiagnosticMessage> infos, api.Diagnostic kind) {
|
| if (markCompilationAsFailed(message, kind)) {
|
| compilationFailed = true;
|
| }
|
| @@ -1192,8 +1118,8 @@ abstract class Compiler implements LibraryLoaderListener {
|
| *
|
| * See [LibraryLoader] for terminology on URIs.
|
| */
|
| - Uri translateResolvedUri(LibraryElement importingLibrary,
|
| - Uri resolvedUri, Spannable spannable) {
|
| + Uri translateResolvedUri(
|
| + LibraryElement importingLibrary, Uri resolvedUri, Spannable spannable) {
|
| unimplemented(importingLibrary, 'Compiler.translateResolvedUri');
|
| return null;
|
| }
|
| @@ -1314,8 +1240,8 @@ abstract class Compiler implements LibraryLoaderListener {
|
| userCodeLocations.add(new CodeLocation(mainApp.canonicalUri));
|
| }
|
| if (librariesToAnalyzeWhenRun != null) {
|
| - userCodeLocations.addAll(librariesToAnalyzeWhenRun.map(
|
| - (Uri uri) => new CodeLocation(uri)));
|
| + userCodeLocations.addAll(
|
| + librariesToAnalyzeWhenRun.map((Uri uri) => new CodeLocation(uri)));
|
| }
|
| if (userCodeLocations.isEmpty && assumeInUserCode) {
|
| // Assume in user code since [mainApp] has not been set yet.
|
| @@ -1446,8 +1372,7 @@ class _CompilerCoreTypes implements CoreTypes, CoreClasses {
|
| }
|
|
|
| @override
|
| - InterfaceType mapType([DartType keyType,
|
| - DartType valueType]) {
|
| + InterfaceType mapType([DartType keyType, DartType valueType]) {
|
| mapClass.ensureResolved(resolution);
|
| InterfaceType type = mapClass.rawType;
|
| if (keyType == null && valueType == null) {
|
| @@ -1546,9 +1471,7 @@ class _CompilerDiagnosticReporter extends DiagnosticReporter {
|
|
|
| Element get currentElement => _currentElement;
|
|
|
| - DiagnosticMessage createMessage(
|
| - Spannable spannable,
|
| - MessageKind messageKind,
|
| + DiagnosticMessage createMessage(Spannable spannable, MessageKind messageKind,
|
| [Map arguments = const {}]) {
|
| SourceSpan span = spanFromSpannable(spannable);
|
| MessageTemplate template = MessageTemplate.TEMPLATES[messageKind];
|
| @@ -1556,64 +1479,58 @@ class _CompilerDiagnosticReporter extends DiagnosticReporter {
|
| return new DiagnosticMessage(span, spannable, message);
|
| }
|
|
|
| - void reportError(
|
| - DiagnosticMessage message,
|
| + void reportError(DiagnosticMessage message,
|
| [List<DiagnosticMessage> infos = const <DiagnosticMessage>[]]) {
|
| reportDiagnosticInternal(message, infos, api.Diagnostic.ERROR);
|
| }
|
|
|
| - void reportWarning(
|
| - DiagnosticMessage message,
|
| + void reportWarning(DiagnosticMessage message,
|
| [List<DiagnosticMessage> infos = const <DiagnosticMessage>[]]) {
|
| reportDiagnosticInternal(message, infos, api.Diagnostic.WARNING);
|
| }
|
|
|
| - void reportHint(
|
| - DiagnosticMessage message,
|
| + void reportHint(DiagnosticMessage message,
|
| [List<DiagnosticMessage> infos = const <DiagnosticMessage>[]]) {
|
| reportDiagnosticInternal(message, infos, api.Diagnostic.HINT);
|
| }
|
|
|
| @deprecated
|
| void reportInfo(Spannable node, MessageKind messageKind,
|
| - [Map arguments = const {}]) {
|
| - reportDiagnosticInternal(
|
| - createMessage(node, messageKind, arguments),
|
| - const <DiagnosticMessage>[],
|
| - api.Diagnostic.INFO);
|
| + [Map arguments = const {}]) {
|
| + reportDiagnosticInternal(createMessage(node, messageKind, arguments),
|
| + const <DiagnosticMessage>[], api.Diagnostic.INFO);
|
| }
|
|
|
| void reportDiagnosticInternal(DiagnosticMessage message,
|
| - List<DiagnosticMessage> infos,
|
| - api.Diagnostic kind) {
|
| + List<DiagnosticMessage> infos, api.Diagnostic kind) {
|
| if (!options.showAllPackageWarnings &&
|
| message.spannable != NO_LOCATION_SPANNABLE) {
|
| switch (kind) {
|
| - case api.Diagnostic.WARNING:
|
| - case api.Diagnostic.HINT:
|
| - Element element = elementFromSpannable(message.spannable);
|
| - if (!compiler.inUserCode(element, assumeInUserCode: true)) {
|
| - Uri uri = compiler.getCanonicalUri(element);
|
| - if (options.showPackageWarningsFor(uri)) {
|
| - reportDiagnostic(message, infos, kind);
|
| + case api.Diagnostic.WARNING:
|
| + case api.Diagnostic.HINT:
|
| + Element element = elementFromSpannable(message.spannable);
|
| + if (!compiler.inUserCode(element, assumeInUserCode: true)) {
|
| + Uri uri = compiler.getCanonicalUri(element);
|
| + if (options.showPackageWarningsFor(uri)) {
|
| + reportDiagnostic(message, infos, kind);
|
| + return;
|
| + }
|
| + SuppressionInfo info = suppressedWarnings.putIfAbsent(
|
| + uri, () => new SuppressionInfo());
|
| + if (kind == api.Diagnostic.WARNING) {
|
| + info.warnings++;
|
| + } else {
|
| + info.hints++;
|
| + }
|
| + lastDiagnosticWasFiltered = true;
|
| return;
|
| }
|
| - SuppressionInfo info =
|
| - suppressedWarnings.putIfAbsent(uri, () => new SuppressionInfo());
|
| - if (kind == api.Diagnostic.WARNING) {
|
| - info.warnings++;
|
| - } else {
|
| - info.hints++;
|
| + break;
|
| + case api.Diagnostic.INFO:
|
| + if (lastDiagnosticWasFiltered) {
|
| + return;
|
| }
|
| - lastDiagnosticWasFiltered = true;
|
| - return;
|
| - }
|
| - break;
|
| - case api.Diagnostic.INFO:
|
| - if (lastDiagnosticWasFiltered) {
|
| - return;
|
| - }
|
| - break;
|
| + break;
|
| }
|
| }
|
| lastDiagnosticWasFiltered = false;
|
| @@ -1621,13 +1538,11 @@ class _CompilerDiagnosticReporter extends DiagnosticReporter {
|
| }
|
|
|
| void reportDiagnostic(DiagnosticMessage message,
|
| - List<DiagnosticMessage> infos,
|
| - api.Diagnostic kind) {
|
| + List<DiagnosticMessage> infos, api.Diagnostic kind) {
|
| compiler.reportDiagnostic(message, infos, kind);
|
| if (kind == api.Diagnostic.ERROR ||
|
| kind == api.Diagnostic.CRASH ||
|
| - (options.fatalWarnings &&
|
| - kind == api.Diagnostic.WARNING)) {
|
| + (options.fatalWarnings && kind == api.Diagnostic.WARNING)) {
|
| compiler.fatalDiagnosticReported(message, infos, kind);
|
| }
|
| }
|
| @@ -1667,8 +1582,8 @@ class _CompilerDiagnosticReporter extends DiagnosticReporter {
|
| }
|
|
|
| void reportAssertionFailure(SpannableAssertionFailure ex) {
|
| - String message = (ex.message != null) ? tryToString(ex.message)
|
| - : tryToString(ex);
|
| + String message =
|
| + (ex.message != null) ? tryToString(ex.message) : tryToString(ex);
|
| reportDiagnosticInternal(
|
| createMessage(ex.node, MessageKind.GENERIC, {'text': message}),
|
| const <DiagnosticMessage>[],
|
| @@ -1685,7 +1600,6 @@ class _CompilerDiagnosticReporter extends DiagnosticReporter {
|
| if (uri == null && currentElement != null) {
|
| uri = currentElement.compilationUnit.script.resourceUri;
|
| assert(invariant(currentElement, () {
|
| -
|
| bool sameToken(Token token, Token sought) {
|
| if (token == sought) return true;
|
| if (token.stringValue == '>>') {
|
| @@ -1842,7 +1756,8 @@ class _CompilerDiagnosticReporter extends DiagnosticReporter {
|
|
|
| Element _elementFromHInstruction(HInstruction instruction) {
|
| return instruction.sourceElement is Element
|
| - ? instruction.sourceElement : null;
|
| + ? instruction.sourceElement
|
| + : null;
|
| }
|
|
|
| internalError(Spannable node, reason) {
|
| @@ -1857,17 +1772,14 @@ class _CompilerDiagnosticReporter extends DiagnosticReporter {
|
| void unhandledExceptionOnElement(Element element) {
|
| if (hasCrashed) return;
|
| hasCrashed = true;
|
| - reportDiagnostic(
|
| - createMessage(element, MessageKind.COMPILER_CRASHED),
|
| - const <DiagnosticMessage>[],
|
| - api.Diagnostic.CRASH);
|
| + reportDiagnostic(createMessage(element, MessageKind.COMPILER_CRASHED),
|
| + const <DiagnosticMessage>[], api.Diagnostic.CRASH);
|
| pleaseReportCrash();
|
| }
|
|
|
| void pleaseReportCrash() {
|
| - print(
|
| - MessageTemplate.TEMPLATES[MessageKind.PLEASE_REPORT_THE_CRASH]
|
| - .message({'buildId': compiler.options.buildId}));
|
| + print(MessageTemplate.TEMPLATES[MessageKind.PLEASE_REPORT_THE_CRASH]
|
| + .message({'buildId': compiler.options.buildId}));
|
| }
|
|
|
| /// Finds the approximate [Element] for [node]. [currentElement] is used as
|
| @@ -1887,10 +1799,8 @@ class _CompilerDiagnosticReporter extends DiagnosticReporter {
|
| void log(message) {
|
| Message msg = MessageTemplate.TEMPLATES[MessageKind.GENERIC]
|
| .message({'text': '$message'});
|
| - reportDiagnostic(
|
| - new DiagnosticMessage(null, null, msg),
|
| - const <DiagnosticMessage>[],
|
| - api.Diagnostic.VERBOSE_INFO);
|
| + reportDiagnostic(new DiagnosticMessage(null, null, msg),
|
| + const <DiagnosticMessage>[], api.Diagnostic.VERBOSE_INFO);
|
| }
|
|
|
| String tryToString(object) {
|
| @@ -1910,8 +1820,7 @@ class _CompilerDiagnosticReporter extends DiagnosticReporter {
|
| } else {
|
| reportDiagnostic(
|
| createMessage(
|
| - new SourceSpan(uri, 0, 0),
|
| - MessageKind.COMPILER_CRASHED),
|
| + new SourceSpan(uri, 0, 0), MessageKind.COMPILER_CRASHED),
|
| const <DiagnosticMessage>[],
|
| api.Diagnostic.CRASH);
|
| }
|
| @@ -1940,14 +1849,10 @@ class _CompilerDiagnosticReporter extends DiagnosticReporter {
|
| }
|
| MessageTemplate template = MessageTemplate.TEMPLATES[kind];
|
| Message message = template.message(
|
| - {'warnings': info.warnings,
|
| - 'hints': info.hints,
|
| - 'uri': uri},
|
| - options.terseDiagnostics);
|
| - reportDiagnostic(
|
| - new DiagnosticMessage(null, null, message),
|
| - const <DiagnosticMessage>[],
|
| - api.Diagnostic.HINT);
|
| + {'warnings': info.warnings, 'hints': info.hints, 'uri': uri},
|
| + options.terseDiagnostics);
|
| + reportDiagnostic(new DiagnosticMessage(null, null, message),
|
| + const <DiagnosticMessage>[], api.Diagnostic.HINT);
|
| });
|
| }
|
| }
|
| @@ -2029,9 +1934,9 @@ class _CompilerResolution implements Resolution {
|
| assert(compiler.parser != null);
|
| Node tree = compiler.parser.parse(element);
|
| assert(invariant(element, !element.isSynthesized || tree == null));
|
| - ResolutionImpact resolutionImpact =
|
| - compiler.resolver.resolve(element);
|
| - if (compiler.serialization.supportSerialization || retainCachesForTesting) {
|
| + ResolutionImpact resolutionImpact = compiler.resolver.resolve(element);
|
| + if (compiler.serialization.supportSerialization ||
|
| + retainCachesForTesting) {
|
| // [ResolutionImpact] is currently only used by serialization. The
|
| // enqueuer uses the [WorldImpact] which is always cached.
|
| // TODO(johnniwinther): Align these use cases better; maybe only
|
| @@ -2045,9 +1950,8 @@ class _CompilerResolution implements Resolution {
|
| // Only analyze nodes with a corresponding [TreeElements].
|
| compiler.checker.check(element);
|
| }
|
| - WorldImpact worldImpact =
|
| - compiler.backend.impactTransformer.transformResolutionImpact(
|
| - resolutionImpact);
|
| + WorldImpact worldImpact = compiler.backend.impactTransformer
|
| + .transformResolutionImpact(resolutionImpact);
|
| return worldImpact;
|
| });
|
| }
|
| @@ -2080,8 +1984,8 @@ class _CompilerResolution implements Resolution {
|
| ResolutionWorkItem createWorkItem(
|
| Element element, ItemCompilationContext compilationContext) {
|
| if (compiler.serialization.isDeserialized(element)) {
|
| - return compiler.serialization.createResolutionWorkItem(
|
| - element, compilationContext);
|
| + return compiler.serialization
|
| + .createResolutionWorkItem(element, compilationContext);
|
| } else {
|
| return new ResolutionWorkItem(element, compilationContext);
|
| }
|
| @@ -2147,8 +2051,8 @@ class _ResolvedUriTranslator implements ResolvedUriTranslator {
|
| _ResolvedUriTranslator(this.compiler);
|
|
|
| Uri translate(LibraryElement importingLibrary, Uri resolvedUri,
|
| - [Spannable spannable]) =>
|
| - compiler.translateResolvedUri(importingLibrary, resolvedUri, spannable);
|
| + [Spannable spannable]) =>
|
| + compiler.translateResolvedUri(importingLibrary, resolvedUri, spannable);
|
| }
|
|
|
| class _ScriptLoader implements ScriptLoader {
|
|
|