[analyzer] Refine type of `InterfaceTypeImpl.element`
The type of `InterfaceTypeImpl.element` is changed from
`InterfaceElement` to `InterfaceElementImpl`.
This allows eliminating casts from a number of call sites, at the
expense of adding a single cast to the `InterfaceTypeImpl`
constructor. This cast is safe because all concrete implementations of
`InterfaceElement` are subtypes of `InterfaceElementImpl`.
This is part of a larger arc of work to change the analyzer's use of
the shared code so that the type parameters it supplies are not part
of the analyzer public API. See
https://github.com/dart-lang/sdk/issues/59763.
Change-Id: I5d0ffa3b14788965589a57a3c061acac2f3c6930
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/403942
Reviewed-by: Konstantin Shcheglov <scheglov@google.com>
Commit-Queue: Paul Berry <paulberry@google.com>
diff --git a/pkg/analyzer/lib/src/dart/element/least_upper_bound.dart b/pkg/analyzer/lib/src/dart/element/least_upper_bound.dart
index e3d48e4..d43cb0c 100644
--- a/pkg/analyzer/lib/src/dart/element/least_upper_bound.dart
+++ b/pkg/analyzer/lib/src/dart/element/least_upper_bound.dart
@@ -11,7 +11,6 @@
import 'package:analyzer/dart/element/element.dart';
import 'package:analyzer/dart/element/nullability_suffix.dart';
import 'package:analyzer/dart/element/type.dart';
-import 'package:analyzer/src/dart/element/element.dart';
import 'package:analyzer/src/dart/element/extensions.dart';
import 'package:analyzer/src/dart/element/type.dart';
import 'package:analyzer/src/dart/element/type_schema.dart';
@@ -73,8 +72,7 @@
for (int i = 0; i < args1.length; i++) {
// TODO(kallentu): : Clean up TypeParameterElementImpl casting once
// variance is added to the interface.
- Variance parameterVariance =
- (params[i] as TypeParameterElementImpl).variance;
+ Variance parameterVariance = params[i].variance;
if (parameterVariance.isCovariant) {
args.add(typeSystem.leastUpperBound(args1[i], args2[i]));
} else if (parameterVariance.isContravariant) {
diff --git a/pkg/analyzer/lib/src/dart/element/type.dart b/pkg/analyzer/lib/src/dart/element/type.dart
index c6f68c8..10989f5 100644
--- a/pkg/analyzer/lib/src/dart/element/type.dart
+++ b/pkg/analyzer/lib/src/dart/element/type.dart
@@ -11,7 +11,6 @@
import 'package:analyzer/dart/element/nullability_suffix.dart';
import 'package:analyzer/dart/element/type.dart';
import 'package:analyzer/dart/element/type_visitor.dart';
-import 'package:analyzer/src/dart/analysis/session.dart';
import 'package:analyzer/src/dart/element/display_string_builder.dart';
import 'package:analyzer/src/dart/element/element.dart';
import 'package:analyzer/src/dart/element/inheritance_manager3.dart';
@@ -574,7 +573,7 @@
/// A concrete implementation of an [InterfaceType].
class InterfaceTypeImpl extends TypeImpl implements InterfaceType {
@override
- final InterfaceElement element;
+ final InterfaceElementImpl element;
@override
final List<DartType> typeArguments;
@@ -596,6 +595,8 @@
required List<DartType> typeArguments,
required NullabilitySuffix nullabilitySuffix,
InstantiatedTypeAliasElement? alias}) {
+ // TODO(paulberry): avoid this cast by changing the type of `element`
+ element as InterfaceElementImpl;
if (element.name == 'FutureOr' && element.library.isDartAsync) {
return FutureOrTypeImpl(
element: element,
@@ -696,8 +697,7 @@
.toList();
@override
- InterfaceElementImpl2 get element3 =>
- (element as InterfaceElementImpl).element;
+ InterfaceElementImpl2 get element3 => element.element;
@override
List<GetterElement> get getters => accessors
@@ -744,7 +744,7 @@
@override
bool get isDartCoreEnum {
var element = this.element;
- return element is ClassElement && element.isDartCoreEnum;
+ return element is ClassElementImpl && element.isDartCoreEnum;
}
@override
@@ -881,7 +881,7 @@
}
InheritanceManager3 get _inheritanceManager =>
- (element.library.session as AnalysisSessionImpl).inheritanceManager;
+ element.library.session.inheritanceManager;
@override
bool operator ==(Object other) {
@@ -1021,7 +1021,6 @@
}
if (recoveryStatic) {
- var element = this.element as InterfaceElementImpl;
return element.lookupStaticGetter(name, library);
}
@@ -1077,7 +1076,6 @@
}
if (recoveryStatic) {
- var element = this.element as InterfaceElementImpl;
return element.lookupStaticMethod(name, library);
}
@@ -1133,7 +1131,6 @@
}
if (recoveryStatic) {
- var element = this.element as InterfaceElementImpl;
return element.lookupStaticSetter(name, library);
}