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

Side by Side Diff: pkg/compiler/lib/src/resolution/constructors.dart

Issue 1508383002: Make new of an ambiguous a warning. (Closed) Base URL: https://github.com/dart-lang/sdk.git@master
Patch Set: Created 5 years 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 | « no previous file | tests/co19/co19-dart2js.status » ('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 dart2js.resolution.constructors; 5 library dart2js.resolution.constructors;
6 6
7 import '../common.dart'; 7 import '../common.dart';
8 import '../common/resolution.dart' show 8 import '../common/resolution.dart' show
9 Feature; 9 Feature;
10 import '../compiler.dart' show 10 import '../compiler.dart' show
(...skipping 467 matching lines...) Expand 10 before | Expand all | Expand 10 after
478 478
479 ConstructorResult reportAndCreateErroneousConstructorElement( 479 ConstructorResult reportAndCreateErroneousConstructorElement(
480 Spannable diagnosticNode, 480 Spannable diagnosticNode,
481 ConstructorResultKind resultKind, 481 ConstructorResultKind resultKind,
482 DartType type, 482 DartType type,
483 Element enclosing, 483 Element enclosing,
484 String name, 484 String name,
485 MessageKind kind, 485 MessageKind kind,
486 Map arguments, 486 Map arguments,
487 {bool isError: false, 487 {bool isError: false,
488 bool missingConstructor: false}) { 488 bool missingConstructor: false,
489 List<DiagnosticMessage> infos: const <DiagnosticMessage>[]}) {
489 if (missingConstructor) { 490 if (missingConstructor) {
490 registry.registerFeature(Feature.THROW_NO_SUCH_METHOD); 491 registry.registerFeature(Feature.THROW_NO_SUCH_METHOD);
491 } else { 492 } else {
492 registry.registerFeature(Feature.THROW_RUNTIME_ERROR); 493 registry.registerFeature(Feature.THROW_RUNTIME_ERROR);
493 } 494 }
495 DiagnosticMessage message =
496 reporter.createMessage(diagnosticNode, kind, arguments);
494 if (isError || inConstContext) { 497 if (isError || inConstContext) {
495 reporter.reportErrorMessage( 498 reporter.reportError(message, infos);
496 diagnosticNode, kind, arguments);
497 } else { 499 } else {
498 reporter.reportWarningMessage( 500 reporter.reportWarning(message, infos);
499 diagnosticNode, kind, arguments);
500 } 501 }
501 ErroneousElement error = new ErroneousConstructorElementX( 502 ErroneousElement error = new ErroneousConstructorElementX(
502 kind, arguments, name, enclosing); 503 kind, arguments, name, enclosing);
503 if (type == null) { 504 if (type == null) {
504 type = new MalformedType(error, null); 505 type = new MalformedType(error, null);
505 } 506 }
506 return new ConstructorResult.forError(resultKind, error, type); 507 return new ConstructorResult.forError(resultKind, error, type);
507 } 508 }
508 509
509 ConstructorResult resolveConstructor( 510 ConstructorResult resolveConstructor(
(...skipping 99 matching lines...) Expand 10 before | Expand all | Expand 10 after
609 // constructor. Therefore we allow deferred types. 610 // constructor. Therefore we allow deferred types.
610 DartType type = resolver.resolveTypeAnnotation( 611 DartType type = resolver.resolveTypeAnnotation(
611 node, 612 node,
612 malformedIsError: inConstContext, 613 malformedIsError: inConstContext,
613 deferredIsMalformed: false); 614 deferredIsMalformed: false);
614 Send send = node.typeName.asSend(); 615 Send send = node.typeName.asSend();
615 PrefixElement prefix; 616 PrefixElement prefix;
616 if (send != null) { 617 if (send != null) {
617 // The type name is of the form [: prefix . identifier :]. 618 // The type name is of the form [: prefix . identifier :].
618 String name = send.receiver.asIdentifier().source; 619 String name = send.receiver.asIdentifier().source;
619 Element element = resolver.reportLookupErrorIfAny( 620 Element element = lookupInScope(reporter, send, resolver.scope, name);
620 lookupInScope(reporter, send, resolver.scope, name), node, name);
621 if (element != null && element.isPrefix) { 621 if (element != null && element.isPrefix) {
622 prefix = element; 622 prefix = element;
623 } 623 }
624 } 624 }
625 return constructorResultForType(node, type, prefix: prefix); 625 return constructorResultForType(node, type, prefix: prefix);
626 } 626 }
627 627
628 ConstructorResult visitSend(Send node) { 628 ConstructorResult visitSend(Send node) {
629 ConstructorResult receiver = visit(node.receiver); 629 ConstructorResult receiver = visit(node.receiver);
630 assert(invariant(node.receiver, receiver != null, 630 assert(invariant(node.receiver, receiver != null,
(...skipping 28 matching lines...) Expand all
659 return constructorResultForElement( 659 return constructorResultForElement(
660 node, name.source, member, prefix: prefix); 660 node, name.source, member, prefix: prefix);
661 } else { 661 } else {
662 return reporter.internalError( 662 return reporter.internalError(
663 node.receiver, 'unexpected receiver $receiver'); 663 node.receiver, 'unexpected receiver $receiver');
664 } 664 }
665 } 665 }
666 666
667 ConstructorResult visitIdentifier(Identifier node) { 667 ConstructorResult visitIdentifier(Identifier node) {
668 String name = node.source; 668 String name = node.source;
669 Element element = resolver.reportLookupErrorIfAny( 669 Element element = lookupInScope(reporter, node, resolver.scope, name);
670 lookupInScope(reporter, node, resolver.scope, name), node, name);
671 registry.useElement(node, element); 670 registry.useElement(node, element);
672 // TODO(johnniwinther): Change errors to warnings, cf. 11.11.1.
673 return constructorResultForElement(node, name, element); 671 return constructorResultForElement(node, name, element);
674 } 672 }
675 673
676 /// Assumed to be called by [resolveRedirectingFactory]. 674 /// Assumed to be called by [resolveRedirectingFactory].
677 ConstructorResult visitRedirectingFactoryBody(RedirectingFactoryBody node) { 675 ConstructorResult visitRedirectingFactoryBody(RedirectingFactoryBody node) {
678 Node constructorReference = node.constructorReference; 676 Node constructorReference = node.constructorReference;
679 return finishConstructorReference(visit(constructorReference), 677 return finishConstructorReference(visit(constructorReference),
680 constructorReference, node); 678 constructorReference, node);
681 } 679 }
682 680
683 ConstructorResult constructorResultForElement( 681 ConstructorResult constructorResultForElement(
684 Node node, String name, Element element, 682 Node node, String name, Element element,
685 {PrefixElement prefix}) { 683 {PrefixElement prefix}) {
686 element = Elements.unwrap(element, reporter, node); 684 element = Elements.unwrap(element, reporter, node);
687 if (element == null) { 685 if (element == null) {
688 return reportAndCreateErroneousConstructorElement( 686 return reportAndCreateErroneousConstructorElement(
689 node, 687 node,
690 ConstructorResultKind.INVALID_TYPE, null, 688 ConstructorResultKind.INVALID_TYPE, null,
691 resolver.enclosingElement, name, 689 resolver.enclosingElement, name,
692 MessageKind.CANNOT_RESOLVE, 690 MessageKind.CANNOT_RESOLVE,
693 {'name': name}); 691 {'name': name});
692 } else if (element.isAmbiguous) {
693 AmbiguousElement ambiguous = element;
694 return reportAndCreateErroneousConstructorElement(
695 node,
696 ConstructorResultKind.INVALID_TYPE, null,
697 resolver.enclosingElement, name,
698 ambiguous.messageKind,
699 ambiguous.messageArguments,
700 infos: ambiguous.computeInfos(resolver.enclosingElement, reporter));
694 } else if (element.isMalformed) { 701 } else if (element.isMalformed) {
695 return constructorResultForErroneous(node, element); 702 return constructorResultForErroneous(node, element);
696 } else if (element.isClass) { 703 } else if (element.isClass) {
697 ClassElement cls = element; 704 ClassElement cls = element;
698 cls.computeType(resolution); 705 cls.computeType(resolution);
699 return constructorResultForType(node, cls.rawType, prefix: prefix); 706 return constructorResultForType(node, cls.rawType, prefix: prefix);
700 } else if (element.isPrefix) { 707 } else if (element.isPrefix) {
701 return new ConstructorResult.forPrefix(element); 708 return new ConstructorResult.forPrefix(element);
702 } else if (element.isTypedef) { 709 } else if (element.isTypedef) {
703 TypedefElement typdef = element; 710 TypedefElement typdef = element;
(...skipping 156 matching lines...) Expand 10 before | Expand all | Expand 10 after
860 // constructors. 867 // constructors.
861 return null; 868 return null;
862 } 869 }
863 // TODO(johnniwinther): Use [Name] for lookup. 870 // TODO(johnniwinther): Use [Name] for lookup.
864 ConstructorElement constructor = cls.lookupConstructor(constructorName); 871 ConstructorElement constructor = cls.lookupConstructor(constructorName);
865 if (constructor != null) { 872 if (constructor != null) {
866 constructor = constructor.declaration; 873 constructor = constructor.declaration;
867 } 874 }
868 return constructor; 875 return constructor;
869 } 876 }
OLDNEW
« no previous file with comments | « no previous file | tests/co19/co19-dart2js.status » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698