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

Side by Side Diff: pkg/front_end/lib/src/fasta/source/source_library_builder.dart

Issue 2970273004: Deprecate all diagnostics methods that use strings. (Closed)
Patch Set: Merged with 4df146dd9a465d63344330bf3e45524b927c92ec Created 3 years, 5 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
OLDNEW
1 // Copyright (c) 2016, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2016, 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 fasta.source_library_builder; 5 library fasta.source_library_builder;
6 6
7 import 'package:front_end/src/scanner/token.dart' show Token; 7 import 'package:front_end/src/scanner/token.dart' show Token;
8 8
9 import 'package:kernel/ast.dart' show ProcedureKind; 9 import 'package:kernel/ast.dart' show ProcedureKind;
10 10
11 import '../../base/resolve_relative_uri.dart' show resolveRelativeUri; 11 import '../../base/resolve_relative_uri.dart' show resolveRelativeUri;
12 12
13 import '../combinator.dart' show Combinator; 13 import '../combinator.dart' show Combinator;
14 14
15 import '../errors.dart' show inputError, internalError; 15 import '../deprecated_problems.dart'
16 show deprecated_inputError, deprecated_internalProblem;
16 17
17 import '../export.dart' show Export; 18 import '../export.dart' show Export;
18 19
19 import '../import.dart' show Import; 20 import '../import.dart' show Import;
20 21
21 import 'source_loader.dart' show SourceLoader; 22 import 'source_loader.dart' show SourceLoader;
22 23
23 import '../builder/builder.dart' 24 import '../builder/builder.dart'
24 show 25 show
25 Builder, 26 Builder,
(...skipping 249 matching lines...) Expand 10 before | Expand all | Expand 10 after
275 // implementation of MemberBuilder.isTopLevel to test explicitly for a 276 // implementation of MemberBuilder.isTopLevel to test explicitly for a
276 // LibraryBuilder. 277 // LibraryBuilder.
277 if (currentDeclaration == libraryDeclaration) { 278 if (currentDeclaration == libraryDeclaration) {
278 if (builder is MemberBuilder) { 279 if (builder is MemberBuilder) {
279 builder.parent = this; 280 builder.parent = this;
280 } else if (builder is TypeDeclarationBuilder) { 281 } else if (builder is TypeDeclarationBuilder) {
281 builder.parent = this; 282 builder.parent = this;
282 } else if (builder is PrefixBuilder) { 283 } else if (builder is PrefixBuilder) {
283 assert(builder.parent == this); 284 assert(builder.parent == this);
284 } else { 285 } else {
285 return internalError("Unhandled: ${builder.runtimeType}"); 286 return deprecated_internalProblem("Unhandled: ${builder.runtimeType}");
286 } 287 }
287 } else { 288 } else {
288 assert(currentDeclaration.parent == libraryDeclaration); 289 assert(currentDeclaration.parent == libraryDeclaration);
289 } 290 }
290 bool isConstructor = builder is ProcedureBuilder && 291 bool isConstructor = builder is ProcedureBuilder &&
291 (builder.isConstructor || builder.isFactory); 292 (builder.isConstructor || builder.isFactory);
292 Map<String, Builder> members = isConstructor 293 Map<String, Builder> members = isConstructor
293 ? currentDeclaration.constructors 294 ? currentDeclaration.constructors
294 : (builder.isSetter 295 : (builder.isSetter
295 ? currentDeclaration.setters 296 ? currentDeclaration.setters
296 : currentDeclaration.members); 297 : currentDeclaration.members);
297 Builder existing = members[name]; 298 Builder existing = members[name];
298 builder.next = existing; 299 builder.next = existing;
299 if (builder is PrefixBuilder && existing is PrefixBuilder) { 300 if (builder is PrefixBuilder && existing is PrefixBuilder) {
300 assert(existing.next == null); 301 assert(existing.next == null);
301 Builder deferred; 302 Builder deferred;
302 Builder other; 303 Builder other;
303 if (builder.deferred) { 304 if (builder.deferred) {
304 deferred = builder; 305 deferred = builder;
305 other = existing; 306 other = existing;
306 } else if (existing.deferred) { 307 } else if (existing.deferred) {
307 deferred = existing; 308 deferred = existing;
308 other = builder; 309 other = builder;
309 } 310 }
310 if (deferred != null) { 311 if (deferred != null) {
311 addCompileTimeError( 312 deprecated_addCompileTimeError(
312 deferred.charOffset, 313 deferred.charOffset,
313 "Can't use the name '$name' for a deferred library, " 314 "Can't use the name '$name' for a deferred library, "
314 "as the name is used elsewhere."); 315 "as the name is used elsewhere.");
315 addCompileTimeError(other.charOffset, "'$name' is used here."); 316 deprecated_addCompileTimeError(
317 other.charOffset, "'$name' is used here.");
316 } 318 }
317 return existing 319 return existing
318 ..exports.merge(builder.exports, 320 ..exports.merge(builder.exports,
319 (String name, Builder existing, Builder member) { 321 (String name, Builder existing, Builder member) {
320 return buildAmbiguousBuilder(name, existing, member, charOffset); 322 return buildAmbiguousBuilder(name, existing, member, charOffset);
321 }); 323 });
322 } else if (isDuplicatedDefinition(existing, builder)) { 324 } else if (isDuplicatedDefinition(existing, builder)) {
323 addCompileTimeError(charOffset, "Duplicated definition of '$name'."); 325 deprecated_addCompileTimeError(
326 charOffset, "Duplicated definition of '$name'.");
324 } 327 }
325 return members[name] = builder; 328 return members[name] = builder;
326 } 329 }
327 330
328 bool isDuplicatedDefinition(Builder existing, Builder other) { 331 bool isDuplicatedDefinition(Builder existing, Builder other) {
329 if (existing == null) return false; 332 if (existing == null) return false;
330 Builder next = existing.next; 333 Builder next = existing.next;
331 if (next == null) { 334 if (next == null) {
332 if (existing.isGetter && other.isSetter) return false; 335 if (existing.isGetter && other.isSetter) return false;
333 if (existing.isSetter && other.isGetter) return false; 336 if (existing.isSetter && other.isGetter) return false;
(...skipping 27 matching lines...) Expand all
361 int charOffset = list[2]; 364 int charOffset = list[2];
362 addBuilder(name, builder, charOffset); 365 addBuilder(name, builder, charOffset);
363 buildBuilder(builder, coreLibrary); 366 buildBuilder(builder, coreLibrary);
364 } 367 }
365 canAddImplementationBuilders = false; 368 canAddImplementationBuilders = false;
366 369
367 scope.setters.forEach((String name, Builder setter) { 370 scope.setters.forEach((String name, Builder setter) {
368 Builder member = scopeBuilder[name]; 371 Builder member = scopeBuilder[name];
369 if (member == null || !member.isField || member.isFinal) return; 372 if (member == null || !member.isField || member.isFinal) return;
370 // TODO(ahe): charOffset is missing. 373 // TODO(ahe): charOffset is missing.
371 addCompileTimeError( 374 deprecated_addCompileTimeError(
372 setter.charOffset, "Conflicts with member '${name}'."); 375 setter.charOffset, "Conflicts with member '${name}'.");
373 addCompileTimeError( 376 deprecated_addCompileTimeError(
374 member.charOffset, "Conflicts with setter '${name}'."); 377 member.charOffset, "Conflicts with setter '${name}'.");
375 }); 378 });
376 379
377 return null; 380 return null;
378 } 381 }
379 382
380 /// Used to add implementation builder during the call to [build] above. 383 /// Used to add implementation builder during the call to [build] above.
381 /// Currently, only anonymous mixins are using implementation builders (see 384 /// Currently, only anonymous mixins are using implementation builders (see
382 /// [KernelMixinApplicationBuilder] 385 /// [KernelMixinApplicationBuilder]
383 /// (../kernel/kernel_mixin_application_builder.dart)). 386 /// (../kernel/kernel_mixin_application_builder.dart)).
384 void addImplementationBuilder(String name, Builder builder, int charOffset) { 387 void addImplementationBuilder(String name, Builder builder, int charOffset) {
385 assert(canAddImplementationBuilders, "$uri"); 388 assert(canAddImplementationBuilders, "$uri");
386 implementationBuilders.add([name, builder, charOffset]); 389 implementationBuilders.add([name, builder, charOffset]);
387 } 390 }
388 391
389 void validatePart() { 392 void validatePart() {
390 if (parts.isNotEmpty) { 393 if (parts.isNotEmpty) {
391 inputError(fileUri, -1, 394 deprecated_inputError(fileUri, -1,
392 "A file that's a part of a library can't have parts itself."); 395 "A file that's a part of a library can't have parts itself.");
393 } 396 }
394 if (exporters.isNotEmpty) { 397 if (exporters.isNotEmpty) {
395 Export export = exporters.first; 398 Export export = exporters.first;
396 inputError( 399 deprecated_inputError(
397 export.fileUri, export.charOffset, "A part can't be exported."); 400 export.fileUri, export.charOffset, "A part can't be exported.");
398 } 401 }
399 } 402 }
400 403
401 void includeParts() { 404 void includeParts() {
402 Set<Uri> seenParts = new Set<Uri>(); 405 Set<Uri> seenParts = new Set<Uri>();
403 for (SourceLibraryBuilder<T, R> part in parts.toList()) { 406 for (SourceLibraryBuilder<T, R> part in parts.toList()) {
404 if (part == this) { 407 if (part == this) {
405 addCompileTimeError(-1, "A file can't be a part of itself."); 408 deprecated_addCompileTimeError(-1, "A file can't be a part of itself.");
406 } else if (seenParts.add(part.fileUri)) { 409 } else if (seenParts.add(part.fileUri)) {
407 includePart(part); 410 includePart(part);
408 } else { 411 } else {
409 addCompileTimeError( 412 deprecated_addCompileTimeError(
410 -1, "Can't use '${part.fileUri}' as a part more than once."); 413 -1, "Can't use '${part.fileUri}' as a part more than once.");
411 } 414 }
412 } 415 }
413 } 416 }
414 417
415 void includePart(SourceLibraryBuilder<T, R> part) { 418 void includePart(SourceLibraryBuilder<T, R> part) {
416 if (part.partOfUri != null) { 419 if (part.partOfUri != null) {
417 if (uri.resolve(part.partOfUri) != uri) { 420 if (uri.resolve(part.partOfUri) != uri) {
418 // This is a warning, but the part is still included. 421 // This is a warning, but the part is still included.
419 addWarning( 422 deprecated_addWarning(
420 -1, 423 -1,
421 "Using '${part.relativeFileUri}' as part of '$uri' but its " 424 "Using '${part.relativeFileUri}' as part of '$uri' but its "
422 "'part of' declaration says '${part.partOfUri}'."); 425 "'part of' declaration says '${part.partOfUri}'.");
423 if (uri.scheme == "dart" && relativeFileUri.endsWith(part.partOfUri)) { 426 if (uri.scheme == "dart" && relativeFileUri.endsWith(part.partOfUri)) {
424 addWarning(-1, "See https://github.com/dart-lang/sdk/issues/30072."); 427 deprecated_addWarning(
428 -1, "See https://github.com/dart-lang/sdk/issues/30072.");
425 } 429 }
426 } 430 }
427 } else if (part.partOfName != null) { 431 } else if (part.partOfName != null) {
428 if (name != null) { 432 if (name != null) {
429 if (part.partOfName != name) { 433 if (part.partOfName != name) {
430 // This is a warning, but the part is still included. 434 // This is a warning, but the part is still included.
431 addWarning( 435 deprecated_addWarning(
432 -1, 436 -1,
433 "Using '${part.relativeFileUri}' as part of '$name' but its " 437 "Using '${part.relativeFileUri}' as part of '$name' but its "
434 "'part of' declaration says '${part.partOfName}'."); 438 "'part of' declaration says '${part.partOfName}'.");
435 } 439 }
436 } else { 440 } else {
437 // This is a warning, but the part is still included. 441 // This is a warning, but the part is still included.
438 addWarning( 442 deprecated_addWarning(
439 -1, 443 -1,
440 "Using '${part.relativeFileUri}' as part of '${relativeFileUri}' " 444 "Using '${part.relativeFileUri}' as part of '${relativeFileUri}' "
441 "but its 'part of' declaration says '${part.partOfName}'.\n" 445 "but its 'part of' declaration says '${part.partOfName}'.\n"
442 "Try changing the 'part of' declaration to use a relative " 446 "Try changing the 'part of' declaration to use a relative "
443 "file name."); 447 "file name.");
444 } 448 }
445 } else if (name != null) { 449 } else if (name != null) {
446 // This is an error, and the part isn't included. 450 // This is an error, and the part isn't included.
447 assert(!part.isPart); 451 assert(!part.isPart);
448 addCompileTimeError( 452 deprecated_addCompileTimeError(
449 -1, 453 -1,
450 "Can't use ${part.fileUri} as a part, because it has no 'part of'" 454 "Can't use ${part.fileUri} as a part, because it has no 'part of'"
451 " declaration."); 455 " declaration.");
452 parts.remove(part); 456 parts.remove(part);
453 return; 457 return;
454 } 458 }
455 part.forEach((String name, Builder builder) { 459 part.forEach((String name, Builder builder) {
456 if (builder.next != null) { 460 if (builder.next != null) {
457 assert(builder.next.next == null); 461 assert(builder.next.next == null);
458 addBuilder(name, builder.next, builder.next.charOffset); 462 addBuilder(name, builder.next, builder.next.charOffset);
(...skipping 169 matching lines...) Expand 10 before | Expand all | Expand 10 after
628 /// synthesize type variables on the factory matching the class'. 632 /// synthesize type variables on the factory matching the class'.
629 void addFactoryDeclaration( 633 void addFactoryDeclaration(
630 ProcedureBuilder procedure, DeclarationBuilder<T> factoryDeclaration) { 634 ProcedureBuilder procedure, DeclarationBuilder<T> factoryDeclaration) {
631 factoryDeclarations[procedure] = factoryDeclaration; 635 factoryDeclarations[procedure] = factoryDeclaration;
632 } 636 }
633 637
634 Scope toScope(Scope parent) { 638 Scope toScope(Scope parent) {
635 return new Scope(members, setters, parent, isModifiable: false); 639 return new Scope(members, setters, parent, isModifiable: false);
636 } 640 }
637 } 641 }
OLDNEW
« no previous file with comments | « pkg/front_end/lib/src/fasta/source/source_class_builder.dart ('k') | pkg/front_end/lib/src/fasta/source/source_loader.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698