| Index: pkg/analyzer/lib/src/dart/resolver/inheritance_manager.dart
|
| diff --git a/pkg/analyzer/lib/src/dart/resolver/inheritance_manager.dart b/pkg/analyzer/lib/src/dart/resolver/inheritance_manager.dart
|
| index 1773241bea4829f122e5c7672ce161a01678713c..2d32994deeca0a3b82ec951eaa456e9414f70756 100644
|
| --- a/pkg/analyzer/lib/src/dart/resolver/inheritance_manager.dart
|
| +++ b/pkg/analyzer/lib/src/dart/resolver/inheritance_manager.dart
|
| @@ -817,6 +817,11 @@ class InheritanceManager {
|
| // Tests: test_getMapOfMembersInheritedFromInterfaces_
|
| // union_multipleSubtypes_*
|
| //
|
| + // TODO(leafp): this produces (dynamic) -> dynamic even if
|
| + // the types are equal which gives bad error messages. If
|
| + // types are equal, we should consider using them. Even
|
| + // better, consider using the GLB of the parameter types
|
| + // and the LUB of the return types
|
| List<ExecutableElement> elementArrayToMerge =
|
| new List<ExecutableElement>(
|
| subtypesOfAllOtherTypesIndexes.length);
|
| @@ -920,7 +925,7 @@ class InheritanceManager {
|
| * <i>s</i> of type <b>dynamic</b> and return type <b>dynamic</b>.
|
| *
|
| */
|
| - static ExecutableElement _computeMergedExecutableElement(
|
| + ExecutableElement _computeMergedExecutableElement(
|
| List<ExecutableElement> elementArrayToMerge) {
|
| int h = _getNumOfPositionalParameters(elementArrayToMerge[0]);
|
| int r = _getNumOfRequiredParameters(elementArrayToMerge[0]);
|
| @@ -956,13 +961,16 @@ class InheritanceManager {
|
| * @param namedParameters the list of [String]s that are the named parameters
|
| * @return the created synthetic element
|
| */
|
| - static ExecutableElement _createSyntheticExecutableElement(
|
| + ExecutableElement _createSyntheticExecutableElement(
|
| List<ExecutableElement> elementArrayToMerge,
|
| String name,
|
| int numOfRequiredParameters,
|
| int numOfPositionalParameters,
|
| List<String> namedParameters) {
|
| DynamicTypeImpl dynamicType = DynamicTypeImpl.instance;
|
| + DartType bottomType = _library.context.analysisOptions.strongMode
|
| + ? BottomTypeImpl.instance
|
| + : dynamicType;
|
| SimpleIdentifier nameIdentifier = astFactory
|
| .simpleIdentifier(new StringToken(TokenType.IDENTIFIER, name, 0));
|
| ExecutableElementImpl executable;
|
| @@ -991,20 +999,20 @@ class InheritanceManager {
|
| int i = 0;
|
| for (int j = 0; j < numOfRequiredParameters; j++, i++) {
|
| ParameterElementImpl parameter = new ParameterElementImpl("", 0);
|
| - parameter.type = dynamicType;
|
| + parameter.type = bottomType;
|
| parameter.parameterKind = ParameterKind.REQUIRED;
|
| parameters[i] = parameter;
|
| }
|
| for (int k = 0; k < numOfPositionalParameters; k++, i++) {
|
| ParameterElementImpl parameter = new ParameterElementImpl("", 0);
|
| - parameter.type = dynamicType;
|
| + parameter.type = bottomType;
|
| parameter.parameterKind = ParameterKind.POSITIONAL;
|
| parameters[i] = parameter;
|
| }
|
| for (int m = 0; m < namedParameters.length; m++, i++) {
|
| ParameterElementImpl parameter =
|
| new ParameterElementImpl(namedParameters[m], 0);
|
| - parameter.type = dynamicType;
|
| + parameter.type = bottomType;
|
| parameter.parameterKind = ParameterKind.NAMED;
|
| parameters[i] = parameter;
|
| }
|
|
|