OLD | NEW |
1 // Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2014, 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 engine.resolver; | 5 library engine.resolver; |
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 'java_core.dart'; | 10 import 'java_core.dart'; |
(...skipping 5738 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
5749 if (superclassElement != null) { | 5749 if (superclassElement != null) { |
5750 List<ConstructorElement> constructors = superclassElement.constructors; | 5750 List<ConstructorElement> constructors = superclassElement.constructors; |
5751 int count = constructors.length; | 5751 int count = constructors.length; |
5752 if (count > 0) { | 5752 if (count > 0) { |
5753 List<DartType> parameterTypes = TypeParameterTypeImpl.getTypes(supercl
assType.typeParameters); | 5753 List<DartType> parameterTypes = TypeParameterTypeImpl.getTypes(supercl
assType.typeParameters); |
5754 List<DartType> argumentTypes = _getArgumentTypes(node.superclass.typeA
rguments, parameterTypes); | 5754 List<DartType> argumentTypes = _getArgumentTypes(node.superclass.typeA
rguments, parameterTypes); |
5755 InterfaceType classType = classElement.type; | 5755 InterfaceType classType = classElement.type; |
5756 List<ConstructorElement> implicitConstructors = new List<ConstructorEl
ement>(); | 5756 List<ConstructorElement> implicitConstructors = new List<ConstructorEl
ement>(); |
5757 for (int i = 0; i < count; i++) { | 5757 for (int i = 0; i < count; i++) { |
5758 ConstructorElement explicitConstructor = constructors[i]; | 5758 ConstructorElement explicitConstructor = constructors[i]; |
5759 if (!explicitConstructor.isFactory) { | 5759 if (!explicitConstructor.isFactory && |
| 5760 classElement.isSuperConstructorAccessible(explicitConstructor))
{ |
5760 implicitConstructors.add(_createImplicitContructor(classType, expl
icitConstructor, parameterTypes, argumentTypes)); | 5761 implicitConstructors.add(_createImplicitContructor(classType, expl
icitConstructor, parameterTypes, argumentTypes)); |
5761 } | 5762 } |
5762 } | 5763 } |
| 5764 if (implicitConstructors.isEmpty) { |
| 5765 reportErrorForNode(CompileTimeErrorCode.MIXIN_HAS_NO_CONSTRUCTORS, |
| 5766 node, [superclassElement.name]); |
| 5767 } |
5763 classElement.constructors = implicitConstructors; | 5768 classElement.constructors = implicitConstructors; |
5764 } | 5769 } |
5765 } | 5770 } |
5766 } | 5771 } |
5767 return null; | 5772 return null; |
5768 } | 5773 } |
5769 | 5774 |
5770 @override | 5775 @override |
5771 Object visitEnumDeclaration(EnumDeclaration node) => null; | 5776 Object visitEnumDeclaration(EnumDeclaration node) => null; |
5772 | 5777 |
(...skipping 9783 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
15556 /** | 15561 /** |
15557 * Return the tag that has the given identifier, or {@code null} if there is n
o such tag (the | 15562 * Return the tag that has the given identifier, or {@code null} if there is n
o such tag (the |
15558 * identifier is not defined). | 15563 * identifier is not defined). |
15559 * | 15564 * |
15560 * @return the tag that has the given identifier | 15565 * @return the tag that has the given identifier |
15561 */ | 15566 */ |
15562 String getTagWithId(String identifier) { | 15567 String getTagWithId(String identifier) { |
15563 return idToTagMap[identifier]; | 15568 return idToTagMap[identifier]; |
15564 } | 15569 } |
15565 } | 15570 } |
OLD | NEW |