Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(150)

Side by Side Diff: pkg/analyzer/lib/src/task/dart.dart

Issue 1176983002: Capture more errors and improve duplicate error removal (Closed) Base URL: https://github.com/dart-lang/sdk.git@master
Patch Set: Created 5 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « pkg/analyzer/lib/src/generated/error.dart ('k') | pkg/analyzer/test/src/task/dart_test.dart » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2015, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2015, the Dart project authors. Please see the AUTHORS file
2 // for details. All rights reserved. Use of this source code is governed by a 2 // for details. All rights reserved. Use of this source code is governed by a
3 // BSD-style license that can be found in the LICENSE file. 3 // BSD-style license that can be found in the LICENSE file.
4 4
5 library analyzer.src.task.dart; 5 library analyzer.src.task.dart;
6 6
7 import 'dart:collection'; 7 import 'dart:collection';
8 import 'dart:math' as math; 8 import 'dart:math' as math;
9 9
10 import 'package:analyzer/src/context/cache.dart'; 10 import 'package:analyzer/src/context/cache.dart';
(...skipping 387 matching lines...) Expand 10 before | Expand all | Expand 10 after
398 cachingPolicy: ELEMENT_CACHING_POLICY); 398 cachingPolicy: ELEMENT_CACHING_POLICY);
399 399
400 /** 400 /**
401 * The [UsedLocalElements] of a [LibrarySpecificUnit]. 401 * The [UsedLocalElements] of a [LibrarySpecificUnit].
402 */ 402 */
403 final ResultDescriptor<UsedLocalElements> USED_LOCAL_ELEMENTS = 403 final ResultDescriptor<UsedLocalElements> USED_LOCAL_ELEMENTS =
404 new ResultDescriptor<UsedLocalElements>('USED_LOCAL_ELEMENTS', null, 404 new ResultDescriptor<UsedLocalElements>('USED_LOCAL_ELEMENTS', null,
405 cachingPolicy: ELEMENT_CACHING_POLICY); 405 cachingPolicy: ELEMENT_CACHING_POLICY);
406 406
407 /** 407 /**
408 * The errors produced while resolving variable references in a compilation unit .
409 *
410 * The list will be empty if there were no errors, but will not be `null`.
411 *
412 * The result is only available for [LibrarySpecificUnit]s.
413 */
414 final ListResultDescriptor<AnalysisError> VARIABLE_REFERENCE_ERRORS =
415 new ListResultDescriptor<AnalysisError>(
416 'VARIABLE_REFERENCE_ERRORS', AnalysisError.NO_ERRORS);
417
418 /**
408 * The errors produced while verifying a compilation unit. 419 * The errors produced while verifying a compilation unit.
409 * 420 *
410 * The list will be empty if there were no errors, but will not be `null`. 421 * The list will be empty if there were no errors, but will not be `null`.
411 * 422 *
412 * The result is only available for [LibrarySpecificUnit]s. 423 * The result is only available for [LibrarySpecificUnit]s.
413 */ 424 */
414 final ListResultDescriptor<AnalysisError> VERIFY_ERRORS = 425 final ListResultDescriptor<AnalysisError> VERIFY_ERRORS =
415 new ListResultDescriptor<AnalysisError>( 426 new ListResultDescriptor<AnalysisError>(
416 'VERIFY_ERRORS', AnalysisError.NO_ERRORS); 427 'VERIFY_ERRORS', AnalysisError.NO_ERRORS);
417 428
418 /** 429 /**
419 * Remove [CompileTimeErrorCode.DUPLICATE_DEFINITION] errors from the given 430 * Return a list of errors containing the errors from the given [errors] list
420 * [errors] list. 431 * but with duplications removed.
421 */ 432 */
422 void removeDuplicateDefinitionErrors(List<AnalysisError> errors) { 433 List<AnalysisError> removeDuplicateErrors(List<AnalysisError> errors) {
423 if (errors.isNotEmpty) { 434 if (errors.isEmpty) {
424 errors.removeWhere((error) { 435 return errors;
425 ErrorCode errorCode = error.errorCode;
426 return errorCode == CompileTimeErrorCode.DUPLICATE_DEFINITION ||
427 errorCode == CompileTimeErrorCode.GETTER_AND_METHOD_WITH_SAME_NAME ||
428 errorCode == CompileTimeErrorCode.METHOD_AND_GETTER_WITH_SAME_NAME ||
429 errorCode ==
430 CompileTimeErrorCode.PREFIX_COLLIDES_WITH_TOP_LEVEL_MEMBER;
431 });
432 } 436 }
437 return errors.toSet().toList();
433 } 438 }
434 439
435 /** 440 /**
436 * A task that builds implicit constructors for a [ClassElement], or keeps 441 * A task that builds implicit constructors for a [ClassElement], or keeps
437 * the existing explicit constructors if the class has them. 442 * the existing explicit constructors if the class has them.
438 */ 443 */
439 class BuildClassConstructorsTask extends SourceBasedAnalysisTask { 444 class BuildClassConstructorsTask extends SourceBasedAnalysisTask {
440 /** 445 /**
441 * The name of the [CONSTRUCTORS] input for the superclass. 446 * The name of the [CONSTRUCTORS] input for the superclass.
442 */ 447 */
(...skipping 729 matching lines...) Expand 10 before | Expand all | Expand 10 after
1172 // Resolve FunctionTypeAlias declarations. 1177 // Resolve FunctionTypeAlias declarations.
1173 // 1178 //
1174 TypeResolverVisitor visitor = new TypeResolverVisitor.con2( 1179 TypeResolverVisitor visitor = new TypeResolverVisitor.con2(
1175 libraryElement, source, typeProvider, errorListener); 1180 libraryElement, source, typeProvider, errorListener);
1176 for (CompilationUnitMember member in unit.declarations) { 1181 for (CompilationUnitMember member in unit.declarations) {
1177 if (member is FunctionTypeAlias) { 1182 if (member is FunctionTypeAlias) {
1178 member.accept(visitor); 1183 member.accept(visitor);
1179 } 1184 }
1180 } 1185 }
1181 // 1186 //
1182 // Prepare errors.
1183 //
1184 List<AnalysisError> errors = errorListener.errors;
1185 removeDuplicateDefinitionErrors(errors);
1186 //
1187 // Record outputs. 1187 // Record outputs.
1188 // 1188 //
1189 outputs[BUILD_FUNCTION_TYPE_ALIASES_ERRORS] = errors; 1189 outputs[BUILD_FUNCTION_TYPE_ALIASES_ERRORS] =
1190 removeDuplicateErrors(errorListener.errors);
1190 outputs[RESOLVED_UNIT3] = unit; 1191 outputs[RESOLVED_UNIT3] = unit;
1191 } 1192 }
1192 1193
1193 /** 1194 /**
1194 * Return a map from the names of the inputs of this kind of task to the task 1195 * Return a map from the names of the inputs of this kind of task to the task
1195 * input descriptors describing those inputs for a task with the 1196 * input descriptors describing those inputs for a task with the
1196 * given [target]. 1197 * given [target].
1197 */ 1198 */
1198 static Map<String, TaskInput> buildInputs(LibrarySpecificUnit target) { 1199 static Map<String, TaskInput> buildInputs(LibrarySpecificUnit target) {
1199 return <String, TaskInput>{ 1200 return <String, TaskInput>{
(...skipping 1344 matching lines...) Expand 10 before | Expand all | Expand 10 after
2544 static const String RESOLVE_REFERENCES_ERRORS_INPUT = 2545 static const String RESOLVE_REFERENCES_ERRORS_INPUT =
2545 'RESOLVE_REFERENCES_ERRORS'; 2546 'RESOLVE_REFERENCES_ERRORS';
2546 2547
2547 /** 2548 /**
2548 * The name of the [RESOLVE_TYPE_NAMES_ERRORS] input. 2549 * The name of the [RESOLVE_TYPE_NAMES_ERRORS] input.
2549 */ 2550 */
2550 static const String RESOLVE_TYPE_NAMES_ERRORS_INPUT = 2551 static const String RESOLVE_TYPE_NAMES_ERRORS_INPUT =
2551 'RESOLVE_TYPE_NAMES_ERRORS'; 2552 'RESOLVE_TYPE_NAMES_ERRORS';
2552 2553
2553 /** 2554 /**
2555 * The name of the [VARIABLE_REFERENCE_ERRORS] input.
2556 */
2557 static const String VARIABLE_REFERENCE_ERRORS_INPUT =
2558 'VARIABLE_REFERENCE_ERRORS';
2559
2560 /**
2554 * The name of the [VERIFY_ERRORS] input. 2561 * The name of the [VERIFY_ERRORS] input.
2555 */ 2562 */
2556 static const String VERIFY_ERRORS_INPUT = 'VERIFY_ERRORS'; 2563 static const String VERIFY_ERRORS_INPUT = 'VERIFY_ERRORS';
2557 2564
2558 /** 2565 /**
2559 * The name of the [CONSTRUCTORS_ERRORS] input. 2566 * The name of the [CONSTRUCTORS_ERRORS] input.
2560 */ 2567 */
2561 static const String CONSTRUCTORS_ERRORS_INPUT = 'CONSTRUCTORS_ERRORS'; 2568 static const String CONSTRUCTORS_ERRORS_INPUT = 'CONSTRUCTORS_ERRORS';
2562 2569
2563 /** 2570 /**
(...skipping 13 matching lines...) Expand all
2577 void internalPerform() { 2584 void internalPerform() {
2578 // 2585 //
2579 // Prepare inputs. 2586 // Prepare inputs.
2580 // 2587 //
2581 List<List<AnalysisError>> errorLists = <List<AnalysisError>>[]; 2588 List<List<AnalysisError>> errorLists = <List<AnalysisError>>[];
2582 errorLists.add(getRequiredInput(BUILD_FUNCTION_TYPE_ALIASES_ERRORS_INPUT)); 2589 errorLists.add(getRequiredInput(BUILD_FUNCTION_TYPE_ALIASES_ERRORS_INPUT));
2583 errorLists.addAll(getRequiredInput(CONSTRUCTORS_ERRORS_INPUT)); 2590 errorLists.addAll(getRequiredInput(CONSTRUCTORS_ERRORS_INPUT));
2584 errorLists.add(getRequiredInput(HINTS_INPUT)); 2591 errorLists.add(getRequiredInput(HINTS_INPUT));
2585 errorLists.add(getRequiredInput(RESOLVE_REFERENCES_ERRORS_INPUT)); 2592 errorLists.add(getRequiredInput(RESOLVE_REFERENCES_ERRORS_INPUT));
2586 errorLists.add(getRequiredInput(RESOLVE_TYPE_NAMES_ERRORS_INPUT)); 2593 errorLists.add(getRequiredInput(RESOLVE_TYPE_NAMES_ERRORS_INPUT));
2594 errorLists.add(getRequiredInput(VARIABLE_REFERENCE_ERRORS_INPUT));
2587 errorLists.add(getRequiredInput(VERIFY_ERRORS_INPUT)); 2595 errorLists.add(getRequiredInput(VERIFY_ERRORS_INPUT));
2588 // 2596 //
2589 // Record outputs. 2597 // Record outputs.
2590 // 2598 //
2591 outputs[LIBRARY_UNIT_ERRORS] = AnalysisError.mergeLists(errorLists); 2599 outputs[LIBRARY_UNIT_ERRORS] = AnalysisError.mergeLists(errorLists);
2592 } 2600 }
2593 2601
2594 /** 2602 /**
2595 * Return a map from the names of the inputs of this kind of task to the task 2603 * Return a map from the names of the inputs of this kind of task to the task
2596 * input descriptors describing those inputs for a task with the 2604 * input descriptors describing those inputs for a task with the
2597 * given [unit]. 2605 * given [unit].
2598 */ 2606 */
2599 static Map<String, TaskInput> buildInputs(LibrarySpecificUnit unit) { 2607 static Map<String, TaskInput> buildInputs(LibrarySpecificUnit unit) {
2600 return <String, TaskInput>{ 2608 return <String, TaskInput>{
2601 BUILD_FUNCTION_TYPE_ALIASES_ERRORS_INPUT: 2609 BUILD_FUNCTION_TYPE_ALIASES_ERRORS_INPUT:
2602 BUILD_FUNCTION_TYPE_ALIASES_ERRORS.of(unit), 2610 BUILD_FUNCTION_TYPE_ALIASES_ERRORS.of(unit),
2603 CONSTRUCTORS_ERRORS_INPUT: COMPILATION_UNIT_ELEMENT 2611 CONSTRUCTORS_ERRORS_INPUT: COMPILATION_UNIT_ELEMENT
2604 .of(unit) 2612 .of(unit)
2605 .mappedToList((CompilationUnitElement element) => element.types) 2613 .mappedToList((CompilationUnitElement element) => element.types)
2606 .toListOf(CONSTRUCTORS_ERRORS), 2614 .toListOf(CONSTRUCTORS_ERRORS),
2607 HINTS_INPUT: HINTS.of(unit), 2615 HINTS_INPUT: HINTS.of(unit),
2608 RESOLVE_REFERENCES_ERRORS_INPUT: RESOLVE_REFERENCES_ERRORS.of(unit), 2616 RESOLVE_REFERENCES_ERRORS_INPUT: RESOLVE_REFERENCES_ERRORS.of(unit),
2609 RESOLVE_TYPE_NAMES_ERRORS_INPUT: RESOLVE_TYPE_NAMES_ERRORS.of(unit), 2617 RESOLVE_TYPE_NAMES_ERRORS_INPUT: RESOLVE_TYPE_NAMES_ERRORS.of(unit),
2618 VARIABLE_REFERENCE_ERRORS_INPUT: VARIABLE_REFERENCE_ERRORS.of(unit),
2610 VERIFY_ERRORS_INPUT: VERIFY_ERRORS.of(unit) 2619 VERIFY_ERRORS_INPUT: VERIFY_ERRORS.of(unit)
2611 }; 2620 };
2612 } 2621 }
2613 2622
2614 /** 2623 /**
2615 * Create a [LibraryUnitErrorsTask] based on the given [target] in the given 2624 * Create a [LibraryUnitErrorsTask] based on the given [target] in the given
2616 * [context]. 2625 * [context].
2617 */ 2626 */
2618 static LibraryUnitErrorsTask createTask( 2627 static LibraryUnitErrorsTask createTask(
2619 AnalysisContext context, AnalysisTarget target) { 2628 AnalysisContext context, AnalysisTarget target) {
(...skipping 108 matching lines...) Expand 10 before | Expand all | Expand 10 after
2728 sourceKind = SourceKind.PART; 2737 sourceKind = SourceKind.PART;
2729 } 2738 }
2730 // 2739 //
2731 // Record outputs. 2740 // Record outputs.
2732 // 2741 //
2733 List<Source> explicitlyImportedSources = 2742 List<Source> explicitlyImportedSources =
2734 explicitlyImportedSourceSet.toList(); 2743 explicitlyImportedSourceSet.toList();
2735 List<Source> exportedSources = exportedSourceSet.toList(); 2744 List<Source> exportedSources = exportedSourceSet.toList();
2736 List<Source> importedSources = importedSourceSet.toList(); 2745 List<Source> importedSources = importedSourceSet.toList();
2737 List<Source> includedSources = includedSourceSet.toList(); 2746 List<Source> includedSources = includedSourceSet.toList();
2738 List<AnalysisError> parseErrors = errorListener.errors; 2747 List<AnalysisError> parseErrors =
2748 removeDuplicateErrors(errorListener.errors);
2739 List<Source> unitSources = <Source>[source]..addAll(includedSourceSet); 2749 List<Source> unitSources = <Source>[source]..addAll(includedSourceSet);
2740 outputs[EXPLICITLY_IMPORTED_LIBRARIES] = explicitlyImportedSources; 2750 outputs[EXPLICITLY_IMPORTED_LIBRARIES] = explicitlyImportedSources;
2741 outputs[EXPORTED_LIBRARIES] = exportedSources; 2751 outputs[EXPORTED_LIBRARIES] = exportedSources;
2742 outputs[IMPORTED_LIBRARIES] = importedSources; 2752 outputs[IMPORTED_LIBRARIES] = importedSources;
2743 outputs[INCLUDED_PARTS] = includedSources; 2753 outputs[INCLUDED_PARTS] = includedSources;
2744 outputs[PARSE_ERRORS] = parseErrors; 2754 outputs[PARSE_ERRORS] = parseErrors;
2745 outputs[PARSED_UNIT] = unit; 2755 outputs[PARSED_UNIT] = unit;
2746 outputs[SOURCE_KIND] = sourceKind; 2756 outputs[SOURCE_KIND] = sourceKind;
2747 outputs[UNITS] = unitSources; 2757 outputs[UNITS] = unitSources;
2748 } 2758 }
(...skipping 203 matching lines...) Expand 10 before | Expand all | Expand 10 after
2952 // Resolve references. 2962 // Resolve references.
2953 // 2963 //
2954 InheritanceManager inheritanceManager = 2964 InheritanceManager inheritanceManager =
2955 new InheritanceManager(libraryElement); 2965 new InheritanceManager(libraryElement);
2956 AstVisitor visitor = new ResolverVisitor.con2(libraryElement, 2966 AstVisitor visitor = new ResolverVisitor.con2(libraryElement,
2957 unitElement.source, typeProvider, inheritanceManager, errorListener); 2967 unitElement.source, typeProvider, inheritanceManager, errorListener);
2958 unit.accept(visitor); 2968 unit.accept(visitor);
2959 // 2969 //
2960 // Record outputs. 2970 // Record outputs.
2961 // 2971 //
2962 outputs[RESOLVE_REFERENCES_ERRORS] = errorListener.errors; 2972 outputs[RESOLVE_REFERENCES_ERRORS] =
2973 removeDuplicateErrors(errorListener.errors);
2963 outputs[RESOLVED_UNIT6] = unit; 2974 outputs[RESOLVED_UNIT6] = unit;
2964 } 2975 }
2965 2976
2966 /** 2977 /**
2967 * Return a map from the names of the inputs of this kind of task to the task 2978 * Return a map from the names of the inputs of this kind of task to the task
2968 * input descriptors describing those inputs for a task with the 2979 * input descriptors describing those inputs for a task with the
2969 * given [target]. 2980 * given [target].
2970 */ 2981 */
2971 static Map<String, TaskInput> buildInputs(LibrarySpecificUnit target) { 2982 static Map<String, TaskInput> buildInputs(LibrarySpecificUnit target) {
2972 return <String, TaskInput>{ 2983 return <String, TaskInput>{
(...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after
3031 CompilationUnit unit = getRequiredInput(UNIT_INPUT); 3042 CompilationUnit unit = getRequiredInput(UNIT_INPUT);
3032 CompilationUnitElement unitElement = unit.element; 3043 CompilationUnitElement unitElement = unit.element;
3033 TypeProvider typeProvider = getRequiredInput(TYPE_PROVIDER_INPUT); 3044 TypeProvider typeProvider = getRequiredInput(TYPE_PROVIDER_INPUT);
3034 // 3045 //
3035 // Resolve TypeName nodes. 3046 // Resolve TypeName nodes.
3036 // 3047 //
3037 TypeResolverVisitor visitor = new TypeResolverVisitor.con2( 3048 TypeResolverVisitor visitor = new TypeResolverVisitor.con2(
3038 library, unitElement.source, typeProvider, errorListener); 3049 library, unitElement.source, typeProvider, errorListener);
3039 unit.accept(visitor); 3050 unit.accept(visitor);
3040 // 3051 //
3041 // Prepare errors.
3042 //
3043 List<AnalysisError> errors = errorListener.errors;
3044 removeDuplicateDefinitionErrors(errors);
3045 //
3046 // Record outputs. 3052 // Record outputs.
3047 // 3053 //
3048 outputs[RESOLVE_TYPE_NAMES_ERRORS] = errors; 3054 outputs[RESOLVE_TYPE_NAMES_ERRORS] =
3055 removeDuplicateErrors(errorListener.errors);
3049 outputs[RESOLVED_UNIT4] = unit; 3056 outputs[RESOLVED_UNIT4] = unit;
3050 } 3057 }
3051 3058
3052 /** 3059 /**
3053 * Return a map from the names of the inputs of this kind of task to the task 3060 * Return a map from the names of the inputs of this kind of task to the task
3054 * input descriptors describing those inputs for a task with the 3061 * input descriptors describing those inputs for a task with the
3055 * given [target]. 3062 * given [target].
3056 */ 3063 */
3057 static Map<String, TaskInput> buildInputs(LibrarySpecificUnit target) { 3064 static Map<String, TaskInput> buildInputs(LibrarySpecificUnit target) {
3058 return <String, TaskInput>{ 3065 return <String, TaskInput>{
(...skipping 30 matching lines...) Expand all
3089 /** 3096 /**
3090 * The name of the [TYPE_PROVIDER] input. 3097 * The name of the [TYPE_PROVIDER] input.
3091 */ 3098 */
3092 static const String TYPE_PROVIDER_INPUT = 'TYPE_PROVIDER_INPUT'; 3099 static const String TYPE_PROVIDER_INPUT = 'TYPE_PROVIDER_INPUT';
3093 3100
3094 /** 3101 /**
3095 * The task descriptor describing this kind of task. 3102 * The task descriptor describing this kind of task.
3096 */ 3103 */
3097 static final TaskDescriptor DESCRIPTOR = new TaskDescriptor( 3104 static final TaskDescriptor DESCRIPTOR = new TaskDescriptor(
3098 'ResolveVariableReferencesTask', createTask, buildInputs, 3105 'ResolveVariableReferencesTask', createTask, buildInputs,
3099 <ResultDescriptor>[RESOLVED_UNIT5]); 3106 <ResultDescriptor>[RESOLVED_UNIT5, VARIABLE_REFERENCE_ERRORS]);
3100 3107
3101 ResolveVariableReferencesTask( 3108 ResolveVariableReferencesTask(
3102 InternalAnalysisContext context, AnalysisTarget target) 3109 InternalAnalysisContext context, AnalysisTarget target)
3103 : super(context, target); 3110 : super(context, target);
3104 3111
3105 @override 3112 @override
3106 TaskDescriptor get descriptor => DESCRIPTOR; 3113 TaskDescriptor get descriptor => DESCRIPTOR;
3107 3114
3108 @override 3115 @override
3109 void internalPerform() { 3116 void internalPerform() {
3110 RecordingErrorListener errorListener = new RecordingErrorListener(); 3117 RecordingErrorListener errorListener = new RecordingErrorListener();
3111 // 3118 //
3112 // Prepare inputs. 3119 // Prepare inputs.
3113 // 3120 //
3114 LibraryElement libraryElement = getRequiredInput(LIBRARY_INPUT); 3121 LibraryElement libraryElement = getRequiredInput(LIBRARY_INPUT);
3115 CompilationUnit unit = getRequiredInput(UNIT_INPUT); 3122 CompilationUnit unit = getRequiredInput(UNIT_INPUT);
3116 CompilationUnitElement unitElement = unit.element; 3123 CompilationUnitElement unitElement = unit.element;
3117 // 3124 //
3118 // Resolve local variables. 3125 // Resolve local variables.
3119 // 3126 //
3120 TypeProvider typeProvider = getRequiredInput(TYPE_PROVIDER_INPUT); 3127 TypeProvider typeProvider = getRequiredInput(TYPE_PROVIDER_INPUT);
3121 Scope nameScope = new LibraryScope(libraryElement, errorListener); 3128 Scope nameScope = new LibraryScope(libraryElement, errorListener);
3122 AstVisitor visitor = new VariableResolverVisitor.con2(libraryElement, 3129 AstVisitor visitor = new VariableResolverVisitor.con2(libraryElement,
3123 unitElement.source, typeProvider, nameScope, errorListener); 3130 unitElement.source, typeProvider, nameScope, errorListener);
3124 unit.accept(visitor); 3131 unit.accept(visitor);
3125 // 3132 //
3126 // Record outputs. 3133 // Record outputs.
3127 // 3134 //
3128 outputs[RESOLVED_UNIT5] = unit; 3135 outputs[RESOLVED_UNIT5] = unit;
3136 outputs[VARIABLE_REFERENCE_ERRORS] =
3137 removeDuplicateErrors(errorListener.errors);
3129 } 3138 }
3130 3139
3131 /** 3140 /**
3132 * Return a map from the names of the inputs of this kind of task to the task 3141 * Return a map from the names of the inputs of this kind of task to the task
3133 * input descriptors describing those inputs for a task with the 3142 * input descriptors describing those inputs for a task with the
3134 * given [target]. 3143 * given [target].
3135 */ 3144 */
3136 static Map<String, TaskInput> buildInputs(LibrarySpecificUnit target) { 3145 static Map<String, TaskInput> buildInputs(LibrarySpecificUnit target) {
3137 return <String, TaskInput>{ 3146 return <String, TaskInput>{
3138 'fullyBuiltLibraryElements': IMPORT_EXPORT_SOURCE_CLOSURE 3147 'fullyBuiltLibraryElements': IMPORT_EXPORT_SOURCE_CLOSURE
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after
3188 Source source = getRequiredSource(); 3197 Source source = getRequiredSource();
3189 String content = getRequiredInput(CONTENT_INPUT_NAME); 3198 String content = getRequiredInput(CONTENT_INPUT_NAME);
3190 3199
3191 RecordingErrorListener errorListener = new RecordingErrorListener(); 3200 RecordingErrorListener errorListener = new RecordingErrorListener();
3192 Scanner scanner = 3201 Scanner scanner =
3193 new Scanner(source, new CharSequenceReader(content), errorListener); 3202 new Scanner(source, new CharSequenceReader(content), errorListener);
3194 scanner.preserveComments = context.analysisOptions.preserveComments; 3203 scanner.preserveComments = context.analysisOptions.preserveComments;
3195 scanner.enableNullAwareOperators = 3204 scanner.enableNullAwareOperators =
3196 context.analysisOptions.enableNullAwareOperators; 3205 context.analysisOptions.enableNullAwareOperators;
3197 3206
3198 Token tokenStream = scanner.tokenize(); 3207 outputs[TOKEN_STREAM] = scanner.tokenize();
3199 LineInfo lineInfo = new LineInfo(scanner.lineStarts); 3208 outputs[LINE_INFO] = new LineInfo(scanner.lineStarts);
3200 List<AnalysisError> errors = errorListener.errors; 3209 outputs[SCAN_ERRORS] = removeDuplicateErrors(errorListener.errors);
3201 outputs[TOKEN_STREAM] = tokenStream;
3202 outputs[LINE_INFO] = lineInfo;
3203 outputs[SCAN_ERRORS] = errors;
3204 } 3210 }
3205 3211
3206 /** 3212 /**
3207 * Return a map from the names of the inputs of this kind of task to the task 3213 * Return a map from the names of the inputs of this kind of task to the task
3208 * input descriptors describing those inputs for a task with the given 3214 * input descriptors describing those inputs for a task with the given
3209 * [source]. 3215 * [source].
3210 */ 3216 */
3211 static Map<String, TaskInput> buildInputs(Source source) { 3217 static Map<String, TaskInput> buildInputs(Source source) {
3212 return <String, TaskInput>{CONTENT_INPUT_NAME: CONTENT.of(source)}; 3218 return <String, TaskInput>{CONTENT_INPUT_NAME: CONTENT.of(source)};
3213 } 3219 }
(...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after
3276 unit.accept(errorVerifier); 3282 unit.accept(errorVerifier);
3277 // 3283 //
3278 // Use the ConstantVerifier to compute errors. 3284 // Use the ConstantVerifier to compute errors.
3279 // 3285 //
3280 ConstantVerifier constantVerifier = new ConstantVerifier( 3286 ConstantVerifier constantVerifier = new ConstantVerifier(
3281 errorReporter, libraryElement, typeProvider, context.declaredVariables); 3287 errorReporter, libraryElement, typeProvider, context.declaredVariables);
3282 unit.accept(constantVerifier); 3288 unit.accept(constantVerifier);
3283 // 3289 //
3284 // Record outputs. 3290 // Record outputs.
3285 // 3291 //
3286 outputs[VERIFY_ERRORS] = errorListener.errors; 3292 outputs[VERIFY_ERRORS] = removeDuplicateErrors(errorListener.errors);
3287 } 3293 }
3288 3294
3289 /** 3295 /**
3290 * Check each directive in the given [unit] to see if the referenced source 3296 * Check each directive in the given [unit] to see if the referenced source
3291 * exists and report an error if it does not. 3297 * exists and report an error if it does not.
3292 */ 3298 */
3293 void validateDirectives(CompilationUnit unit) { 3299 void validateDirectives(CompilationUnit unit) {
3294 for (Directive directive in unit.directives) { 3300 for (Directive directive in unit.directives) {
3295 if (directive is UriBasedDirective) { 3301 if (directive is UriBasedDirective) {
3296 validateReferencedSource(directive); 3302 validateReferencedSource(directive);
(...skipping 144 matching lines...) Expand 10 before | Expand all | Expand 10 after
3441 @override 3447 @override
3442 bool moveNext() { 3448 bool moveNext() {
3443 if (_newSources.isEmpty) { 3449 if (_newSources.isEmpty) {
3444 return false; 3450 return false;
3445 } 3451 }
3446 currentTarget = _newSources.first; 3452 currentTarget = _newSources.first;
3447 _newSources.remove(currentTarget); 3453 _newSources.remove(currentTarget);
3448 return true; 3454 return true;
3449 } 3455 }
3450 } 3456 }
OLDNEW
« no previous file with comments | « pkg/analyzer/lib/src/generated/error.dart ('k') | pkg/analyzer/test/src/task/dart_test.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698