diff --git a/pkg/analysis_server/lib/src/services/completion/dart/declaration_helper.dart b/pkg/analysis_server/lib/src/services/completion/dart/declaration_helper.dart index c74d6427eba..52899f6b515 100644 --- a/pkg/analysis_server/lib/src/services/completion/dart/declaration_helper.dart +++ b/pkg/analysis_server/lib/src/services/completion/dart/declaration_helper.dart @@ -549,12 +549,9 @@ class DeclarationHelper { .applicableTo( targetLibrary: libraryElement, // Ignore nullability, consistent with non-extension members. - targetType: - (type.isDartCoreNull - ? type - : library.typeSystem.promoteToNonNull(type)) - as TypeImpl, - strictCasts: false, + targetType: type.isDartCoreNull + ? type + : library.typeSystem.promoteToNonNull(type), ); var importData = ImportData( libraryUri: library.uri, @@ -835,12 +832,9 @@ class DeclarationHelper { var applicableExtensions = accessibleExtensions.applicableTo( targetLibrary: libraryElement, // Ignore nullability, consistent with non-extension members. - targetType: - (type.isDartCoreNull - ? type - : libraryElement.typeSystem.promoteToNonNull(type)) - as TypeImpl, - strictCasts: false, + targetType: type.isDartCoreNull + ? type + : libraryElement.typeSystem.promoteToNonNull(type), ); for (var instantiatedExtension in applicableExtensions) { var extension = instantiatedExtension.extension; diff --git a/pkg/analysis_server/lib/src/services/correction/dart/add_extension_override.dart b/pkg/analysis_server/lib/src/services/correction/dart/add_extension_override.dart index f0075c9e7f0..6e3824ebb31 100644 --- a/pkg/analysis_server/lib/src/services/correction/dart/add_extension_override.dart +++ b/pkg/analysis_server/lib/src/services/correction/dart/add_extension_override.dart @@ -7,7 +7,6 @@ import 'package:analysis_server_plugin/edit/dart/correction_producer.dart'; import 'package:analyzer/dart/ast/ast.dart'; import 'package:analyzer/dart/element/element.dart'; import 'package:analyzer/dart/element/type.dart'; -import 'package:analyzer/src/dart/element/type.dart'; import 'package:analyzer/src/dart/resolver/applicable_extensions.dart'; import 'package:analyzer/src/utilities/extensions/ast.dart'; import 'package:analyzer_plugin/utilities/change_builder/change_builder_core.dart'; @@ -45,10 +44,7 @@ class AddExtensionOverride extends MultiCorrectionProducer { var nodeName = Name(libraryElement.uri, node.name); var extensions = libraryFragment.accessibleExtensions .havingMemberWithBaseName(nodeName) - .applicableTo( - targetLibrary: libraryElement, - targetType: targetType as TypeImpl, - ); + .applicableTo(targetLibrary: libraryElement, targetType: targetType); var producers = []; for (var extension in extensions) { var name = extension.extension.name; diff --git a/pkg/analysis_server/lib/src/services/correction/dart/create_extension_member.dart b/pkg/analysis_server/lib/src/services/correction/dart/create_extension_member.dart index 94e7fb974a5..2925f481fe2 100644 --- a/pkg/analysis_server/lib/src/services/correction/dart/create_extension_member.dart +++ b/pkg/analysis_server/lib/src/services/correction/dart/create_extension_member.dart @@ -730,8 +730,7 @@ abstract class _CreateExtensionMember extends ResolvedCorrectionProducer { } var instantiated = [extension].applicableTo( targetLibrary: libraryElement2, - targetType: extension.thisType as TypeImpl, - strictCasts: true, + targetType: extension.thisType, ); if (instantiated.isNotEmpty) { return (unit.path, existingExtension); diff --git a/pkg/analysis_server/lib/src/services/correction/dart/import_library.dart b/pkg/analysis_server/lib/src/services/correction/dart/import_library.dart index 901712a628c..dec2d4db993 100644 --- a/pkg/analysis_server/lib/src/services/correction/dart/import_library.dart +++ b/pkg/analysis_server/lib/src/services/correction/dart/import_library.dart @@ -19,7 +19,6 @@ import 'package:analyzer/diagnostic/diagnostic.dart'; import 'package:analyzer/error/error.dart'; import 'package:analyzer/source/source_range.dart'; import 'package:analyzer/src/dart/ast/extensions.dart'; -import 'package:analyzer/src/dart/element/type.dart'; import 'package:analyzer/src/dart/resolver/applicable_extensions.dart'; import 'package:analyzer/utilities/extensions/element.dart'; import 'package:analyzer/utilities/extensions/uri.dart'; @@ -393,10 +392,7 @@ class ImportLibrary extends MultiCorrectionProducer { foundImport = true; extensionsInLibrary[import] = importedLibrary.exportedExtensions .havingMemberWithBaseName(memberName) - .applicableTo( - targetLibrary: libraryElement2, - targetType: targetType as TypeImpl, - ); + .applicableTo(targetLibrary: libraryElement2, targetType: targetType); } // If the library at the URI is not already imported, we return a correction @@ -405,10 +401,7 @@ class ImportLibrary extends MultiCorrectionProducer { if (!foundImport) { extensionsInLibrary[null] = libraryToImport.exportedExtensions .havingMemberWithBaseName(memberName) - .applicableTo( - targetLibrary: libraryElement2, - targetType: targetType as TypeImpl, - ); + .applicableTo(targetLibrary: libraryElement2, targetType: targetType); } for (var entry in extensionsInLibrary.entries) { var extensionsInLibrary = entry.value; diff --git a/pkg/analysis_server/lib/src/services/correction/dart/use_different_division_operator.dart b/pkg/analysis_server/lib/src/services/correction/dart/use_different_division_operator.dart index 3d9cc2d9c83..624bef8f40e 100644 --- a/pkg/analysis_server/lib/src/services/correction/dart/use_different_division_operator.dart +++ b/pkg/analysis_server/lib/src/services/correction/dart/use_different_division_operator.dart @@ -8,7 +8,6 @@ import 'package:analyzer/dart/ast/ast.dart'; import 'package:analyzer/dart/ast/token.dart'; import 'package:analyzer/dart/element/element.dart'; import 'package:analyzer/dart/element/type.dart'; -import 'package:analyzer/src/dart/element/type.dart'; import 'package:analyzer/src/dart/resolver/applicable_extensions.dart'; import 'package:analyzer/utilities/extensions/element.dart'; import 'package:analyzer_plugin/utilities/change_builder/change_builder_core.dart'; @@ -110,7 +109,7 @@ class _UseDifferentDivisionOperator extends ResolvedCorrectionProducer { .havingMemberWithBaseName(name) .applicableTo( targetLibrary: libraryElement2, - targetType: leftType! as TypeImpl, + targetType: leftType!, ) .isNotEmpty; }).isEmpty; diff --git a/pkg/analyzer/lib/src/dart/resolver/applicable_extensions.dart b/pkg/analyzer/lib/src/dart/resolver/applicable_extensions.dart index 6c8369db2ac..edc5346c500 100644 --- a/pkg/analyzer/lib/src/dart/resolver/applicable_extensions.dart +++ b/pkg/analyzer/lib/src/dart/resolver/applicable_extensions.dart @@ -80,8 +80,8 @@ abstract class _NotInstantiatedExtension { class _NotInstantiatedExtensionWithMember extends _NotInstantiatedExtension { - final ExecutableElement? getter; - final ExecutableElement? setter; + final InternalExecutableElement? getter; + final InternalExecutableElement? setter; _NotInstantiatedExtensionWithMember( super.extension, { @@ -120,17 +120,12 @@ extension ExtensionsExtensions on Iterable { /// Extensions that can be applied, within [targetLibrary], to [targetType]. List applicableTo({ required LibraryElement targetLibrary, - required TypeImpl targetType, - required bool strictCasts, + required DartType targetType, }) { targetLibrary as LibraryElementImpl; - return map( - (e) => _NotInstantiatedExtensionWithoutMember( - // TODO(paulberry): eliminate this cast by changing the extension to - // apply only to `Iterable`. - e as ExtensionElementImpl, - ), - ).applicableTo(targetLibrary: targetLibrary, targetType: targetType); + return cast() + .map((e) => _NotInstantiatedExtensionWithoutMember(e)) + .applicableTo(targetLibrary: targetLibrary, targetType: targetType); } /// Returns the sublist of [ExtensionElement]s that have an instance member @@ -139,7 +134,7 @@ extension ExtensionsExtensions on Iterable { Name baseName, ) { var result = <_NotInstantiatedExtensionWithMember>[]; - for (var extension in this) { + for (var extension in cast()) { if (!baseName.isAccessibleFor(extension.library.uri)) { continue; } @@ -150,9 +145,7 @@ extension ExtensionsExtensions on Iterable { if (getter != null || setter != null) { result.add( _NotInstantiatedExtensionWithMember( - // TODO(paulberry): eliminate this cast by changing the extension - // to apply only to `Iterable`. - extension as ExtensionElementImpl, + extension, getter: getter, setter: setter, ), @@ -163,9 +156,7 @@ extension ExtensionsExtensions on Iterable { if (field != null && !field.isStatic) { result.add( _NotInstantiatedExtensionWithMember( - // TODO(paulberry): eliminate this cast by changing the - // extension to apply only to `Iterable`. - extension as ExtensionElementImpl, + extension, getter: field.getter, setter: field.setter, ), @@ -175,12 +166,7 @@ extension ExtensionsExtensions on Iterable { var method = extension.getMethod(baseName.name); if (method != null && !method.isStatic) { result.add( - _NotInstantiatedExtensionWithMember( - // TODO(paulberry): eliminate this cast by changing the - // extension to apply only to `Iterable`. - extension as ExtensionElementImpl, - getter: method, - ), + _NotInstantiatedExtensionWithMember(extension, getter: method), ); } } @@ -192,7 +178,7 @@ extension ExtensionsExtensions on Iterable { /// with name [name]. List<_ExtensionWithMemberWithName> havingStaticMemberWithName(Name name) { var result = <_ExtensionWithMemberWithName>[]; - for (var extension in this) { + for (var extension in cast()) { if (!name.isAccessibleFor(extension.library.uri)) { continue; } @@ -200,36 +186,21 @@ extension ExtensionsExtensions on Iterable { var getter = extension.getGetter(name.name); if (getter != null && getter.isStatic) { result.add( - _ExtensionWithMemberWithName( - // TODO(paulberry): eliminate this cast by changing the - // extension to apply only to `Iterable`. - extension: extension as ExtensionElementImpl, - member: getter as GetterElementImpl, - ), + _ExtensionWithMemberWithName(extension: extension, member: getter), ); } var setter = extension.getSetter(name.name); if (setter != null && setter.isStatic) { result.add( - _ExtensionWithMemberWithName( - // TODO(paulberry): eliminate this cast by changing the - // extension to apply only to `Iterable`. - extension: extension as ExtensionElementImpl, - member: setter as SetterElementImpl, - ), + _ExtensionWithMemberWithName(extension: extension, member: setter), ); } var method = extension.getMethod(name.name); if (method != null && method.isStatic) { result.add( - _ExtensionWithMemberWithName( - // TODO(paulberry): eliminate this cast by changing the - // extension to apply only to `Iterable`. - extension: extension as ExtensionElementImpl, - member: method as MethodElementImpl, - ), + _ExtensionWithMemberWithName(extension: extension, member: method), ); } } @@ -242,13 +213,15 @@ extension NotInstantiatedExtensionsExtensions /// Extensions that can be applied, within [targetLibrary], to [targetType]. List applicableTo({ required LibraryElement targetLibrary, - required TypeImpl targetType, + required DartType targetType, }) { + targetLibrary as LibraryElementImpl; + targetType as TypeImpl; + if (identical(targetType, NeverTypeImpl.instance)) { return []; } - targetLibrary as LibraryElementImpl; var typeSystem = targetLibrary.typeSystem; var genericMetadataIsEnabled = targetLibrary.featureSet.isEnabled( Feature.generic_metadata,