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

Side by Side Diff: lib/src/runner/parse_metadata.dart

Issue 1960503002: Fix all strong-mode errors and warnings. (Closed) Base URL: git@github.com:dart-lang/test@master
Patch Set: .analysis_options Created 4 years, 7 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 | « lib/src/runner/loader.dart ('k') | lib/src/runner/plugin/platform_helpers.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 import 'dart:io'; 5 import 'dart:io';
6 6
7 import 'package:analyzer/analyzer.dart'; 7 import 'package:analyzer/analyzer.dart';
8 import 'package:analyzer/src/generated/ast.dart'; 8 import 'package:analyzer/src/generated/ast.dart';
9 import 'package:path/path.dart' as p; 9 import 'package:path/path.dart' as p;
10 import 'package:source_span/source_span.dart'; 10 import 'package:source_span/source_span.dart';
(...skipping 23 matching lines...) Expand all
34 34
35 _Parser(String path) 35 _Parser(String path)
36 : _path = path { 36 : _path = path {
37 var contents = new File(path).readAsStringSync(); 37 var contents = new File(path).readAsStringSync();
38 var directives = parseDirectives(contents, name: path).directives; 38 var directives = parseDirectives(contents, name: path).directives;
39 _annotations = directives.isEmpty ? [] : directives.first.metadata; 39 _annotations = directives.isEmpty ? [] : directives.first.metadata;
40 40
41 // We explicitly *don't* just look for "package:test" imports here, 41 // We explicitly *don't* just look for "package:test" imports here,
42 // because it could be re-exported from another library. 42 // because it could be re-exported from another library.
43 _prefixes = directives.map((directive) { 43 _prefixes = directives.map((directive) {
44 if (directive is! ImportDirective) return null; 44 if (directive is ImportDirective) {
45 if (directive.prefix == null) return null; 45 if (directive.prefix == null) return null;
46 return directive.prefix.name; 46 return directive.prefix.name;
47 } else {
48 return null;
49 }
47 }).where((prefix) => prefix != null).toSet(); 50 }).where((prefix) => prefix != null).toSet();
48 } 51 }
49 52
50 /// Parses the metadata. 53 /// Parses the metadata.
51 Metadata parse() { 54 Metadata parse() {
52 var timeout; 55 Timeout timeout;
53 var testOn; 56 PlatformSelector testOn;
54 var skip; 57 var skip;
55 var onPlatform; 58 Map<PlatformSelector, Metadata> onPlatform;
56 var tags; 59 Set<String> tags;
57 60
58 for (var annotation in _annotations) { 61 for (var annotation in _annotations) {
59 var pair = _resolveConstructor( 62 var pair = _resolveConstructor(
60 annotation.name, annotation.constructorName); 63 annotation.name, annotation.constructorName);
61 var name = pair.first; 64 var name = pair.first;
62 var constructorName = pair.last; 65 var constructorName = pair.last;
63 66
64 if (name == 'TestOn') { 67 if (name == 'TestOn') {
65 _assertSingle(testOn, 'TestOn', annotation); 68 _assertSingle(testOn, 'TestOn', annotation);
66 testOn = _parseTestOn(annotation, constructorName); 69 testOn = _parseTestOn(annotation, constructorName);
(...skipping 181 matching lines...) Expand 10 before | Expand all | Expand 10 after
248 251
249 return new Metadata.parse(timeout: timeout, skip: skip); 252 return new Metadata.parse(timeout: timeout, skip: skip);
250 }); 253 });
251 } 254 }
252 255
253 /// Parses a `const Duration` expression. 256 /// Parses a `const Duration` expression.
254 Duration _parseDuration(Expression expression) { 257 Duration _parseDuration(Expression expression) {
255 _parseConstructor(expression, 'Duration'); 258 _parseConstructor(expression, 'Duration');
256 259
257 var constructor = expression as InstanceCreationExpression; 260 var constructor = expression as InstanceCreationExpression;
258 var values = _assertArguments( 261 var valueExpressions = _assertArguments(
259 constructor.argumentList, 'Duration', constructor, named: [ 262 constructor.argumentList, 'Duration', constructor, named: [
260 'days', 'hours', 'minutes', 'seconds', 'milliseconds', 'microseconds' 263 'days', 'hours', 'minutes', 'seconds', 'milliseconds', 'microseconds'
261 ]); 264 ]);
262 265
263 for (var key in values.keys.toList()) { 266 var values = mapMap(valueExpressions,
264 if (values.containsKey(key)) values[key] = _parseInt(values[key]); 267 value: (_, value) => _parseInt(value));
265 }
266 268
267 return new Duration( 269 return new Duration(
268 days: values["days"] == null ? 0 : values["days"], 270 days: values["days"] == null ? 0 : values["days"],
269 hours: values["hours"] == null ? 0 : values["hours"], 271 hours: values["hours"] == null ? 0 : values["hours"],
270 minutes: values["minutes"] == null ? 0 : values["minutes"], 272 minutes: values["minutes"] == null ? 0 : values["minutes"],
271 seconds: values["seconds"] == null ? 0 : values["seconds"], 273 seconds: values["seconds"] == null ? 0 : values["seconds"],
272 milliseconds: values["milliseconds"] == null ? 0 : values["milliseconds" ], 274 milliseconds: values["milliseconds"] == null ? 0 : values["milliseconds" ],
273 microseconds: 275 microseconds:
274 values["microseconds"] == null ? 0 : values["microseconds"]); 276 values["microseconds"] == null ? 0 : values["microseconds"]);
275 } 277 }
(...skipping 110 matching lines...) Expand 10 before | Expand all | Expand 10 after
386 if (positional == null) positional = 0; 388 if (positional == null) positional = 0;
387 if (optional == null) optional = 0; 389 if (optional == null) optional = 0;
388 if (named == null) named = new Set(); 390 if (named == null) named = new Set();
389 391
390 if (arguments == null) { 392 if (arguments == null) {
391 throw new SourceSpanFormatException( 393 throw new SourceSpanFormatException(
392 '$name takes arguments.', _spanFor(node)); 394 '$name takes arguments.', _spanFor(node));
393 } 395 }
394 396
395 var actualNamed = arguments.arguments 397 var actualNamed = arguments.arguments
396 .where((arg) => arg is NamedExpression).toList(); 398 .where((arg) => arg is NamedExpression)
399 .map((arg) => arg as NamedExpression)
400 .toList();
397 if (!actualNamed.isEmpty && named.isEmpty) { 401 if (!actualNamed.isEmpty && named.isEmpty) {
398 throw new SourceSpanFormatException( 402 throw new SourceSpanFormatException(
399 "$name doesn't take named arguments.", _spanFor(actualNamed.first)); 403 "$name doesn't take named arguments.", _spanFor(actualNamed.first));
400 } 404 }
401 405
402 var namedValues = {}; 406 var namedValues = <String, Expression>{};
403 for (var argument in actualNamed) { 407 for (var argument in actualNamed) {
404 var argumentName = argument.name.label.name; 408 var argumentName = argument.name.label.name;
405 if (!named.contains(argumentName)) { 409 if (!named.contains(argumentName)) {
406 throw new SourceSpanFormatException( 410 throw new SourceSpanFormatException(
407 '$name doesn\'t take an argument named "$argumentName".', 411 '$name doesn\'t take an argument named "$argumentName".',
408 _spanFor(argument)); 412 _spanFor(argument));
409 } else if (namedValues.containsKey(argumentName)) { 413 } else if (namedValues.containsKey(argumentName)) {
410 throw new SourceSpanFormatException( 414 throw new SourceSpanFormatException(
411 'An argument named "$argumentName" was already passed.', 415 'An argument named "$argumentName" was already passed.',
412 _spanFor(argument)); 416 _spanFor(argument));
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after
451 void _assertNoArguments(Annotation annotation, String name) { 455 void _assertNoArguments(Annotation annotation, String name) {
452 if (annotation.arguments == null) return; 456 if (annotation.arguments == null) return;
453 throw new SourceSpanFormatException( 457 throw new SourceSpanFormatException(
454 "$name doesn't take arguments.", _spanFor(annotation)); 458 "$name doesn't take arguments.", _spanFor(annotation));
455 } 459 }
456 460
457 /// Parses a Map literal. 461 /// Parses a Map literal.
458 /// 462 ///
459 /// By default, returns [Expression] keys and values. These can be overridden 463 /// By default, returns [Expression] keys and values. These can be overridden
460 /// with the [key] and [value] parameters. 464 /// with the [key] and [value] parameters.
461 Map _parseMap(Expression expression, {key(Expression expression), 465 Map/*<K, V>*/ _parseMap/*<K, V>*/(Expression expression,
462 value(Expression expression)}) { 466 {/*=K*/ key(Expression expression),
463 if (key == null) key = (expression) => expression; 467 /*=V*/ value(Expression expression)}) {
464 if (value == null) value = (expression) => expression; 468 if (key == null) key = (expression) => expression as dynamic/*=K*/;
469 if (value == null) value = (expression) => expression as dynamic/*=V*/;
465 470
466 if (expression is! MapLiteral) { 471 if (expression is! MapLiteral) {
467 throw new SourceSpanFormatException( 472 throw new SourceSpanFormatException(
468 "Expected a Map.", _spanFor(expression)); 473 "Expected a Map.", _spanFor(expression));
469 } 474 }
470 475
471 var map = expression as MapLiteral; 476 var map = expression as MapLiteral;
472 if (map.constKeyword == null) { 477 if (map.constKeyword == null) {
473 throw new SourceSpanFormatException( 478 throw new SourceSpanFormatException(
474 "Map literals must be const.", _spanFor(map)); 479 "Map literals must be const.", _spanFor(map));
(...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after
533 return fn(); 538 return fn();
534 } on SourceSpanFormatException catch (error) { 539 } on SourceSpanFormatException catch (error) {
535 var file = new SourceFile(new File(_path).readAsStringSync(), 540 var file = new SourceFile(new File(_path).readAsStringSync(),
536 url: p.toUri(_path)); 541 url: p.toUri(_path));
537 var span = contextualizeSpan(error.span, literal, file); 542 var span = contextualizeSpan(error.span, literal, file);
538 if (span == null) rethrow; 543 if (span == null) rethrow;
539 throw new SourceSpanFormatException(error.message, span); 544 throw new SourceSpanFormatException(error.message, span);
540 } 545 }
541 } 546 }
542 } 547 }
OLDNEW
« no previous file with comments | « lib/src/runner/loader.dart ('k') | lib/src/runner/plugin/platform_helpers.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698