Skip to content

Commit 7d8c34c

Browse files
stereotype441Commit Queue
authored andcommitted
[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 #59763. Change-Id: I5d0ffa3b14788965589a57a3c061acac2f3c6930 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/403942 Reviewed-by: Konstantin Shcheglov <[email protected]> Commit-Queue: Paul Berry <[email protected]>
1 parent bdf8c21 commit 7d8c34c

File tree

2 files changed

+7
-12
lines changed

2 files changed

+7
-12
lines changed

pkg/analyzer/lib/src/dart/element/least_upper_bound.dart

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,6 @@ import 'package:_fe_analyzer_shared/src/type_inference/type_analyzer_operations.
1111
import 'package:analyzer/dart/element/element.dart';
1212
import 'package:analyzer/dart/element/nullability_suffix.dart';
1313
import 'package:analyzer/dart/element/type.dart';
14-
import 'package:analyzer/src/dart/element/element.dart';
1514
import 'package:analyzer/src/dart/element/extensions.dart';
1615
import 'package:analyzer/src/dart/element/type.dart';
1716
import 'package:analyzer/src/dart/element/type_schema.dart';
@@ -73,8 +72,7 @@ class InterfaceLeastUpperBoundHelper {
7372
for (int i = 0; i < args1.length; i++) {
7473
// TODO(kallentu): : Clean up TypeParameterElementImpl casting once
7574
// variance is added to the interface.
76-
Variance parameterVariance =
77-
(params[i] as TypeParameterElementImpl).variance;
75+
Variance parameterVariance = params[i].variance;
7876
if (parameterVariance.isCovariant) {
7977
args.add(typeSystem.leastUpperBound(args1[i], args2[i]));
8078
} else if (parameterVariance.isContravariant) {

pkg/analyzer/lib/src/dart/element/type.dart

Lines changed: 6 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,6 @@ import 'package:analyzer/dart/element/element2.dart';
1111
import 'package:analyzer/dart/element/nullability_suffix.dart';
1212
import 'package:analyzer/dart/element/type.dart';
1313
import 'package:analyzer/dart/element/type_visitor.dart';
14-
import 'package:analyzer/src/dart/analysis/session.dart';
1514
import 'package:analyzer/src/dart/element/display_string_builder.dart';
1615
import 'package:analyzer/src/dart/element/element.dart';
1716
import 'package:analyzer/src/dart/element/inheritance_manager3.dart';
@@ -574,7 +573,7 @@ class InstantiatedTypeAliasElementImpl implements InstantiatedTypeAliasElement {
574573
/// A concrete implementation of an [InterfaceType].
575574
class InterfaceTypeImpl extends TypeImpl implements InterfaceType {
576575
@override
577-
final InterfaceElement element;
576+
final InterfaceElementImpl element;
578577

579578
@override
580579
final List<DartType> typeArguments;
@@ -596,6 +595,8 @@ class InterfaceTypeImpl extends TypeImpl implements InterfaceType {
596595
required List<DartType> typeArguments,
597596
required NullabilitySuffix nullabilitySuffix,
598597
InstantiatedTypeAliasElement? alias}) {
598+
// TODO(paulberry): avoid this cast by changing the type of `element`
599+
element as InterfaceElementImpl;
599600
if (element.name == 'FutureOr' && element.library.isDartAsync) {
600601
return FutureOrTypeImpl(
601602
element: element,
@@ -696,8 +697,7 @@ class InterfaceTypeImpl extends TypeImpl implements InterfaceType {
696697
.toList();
697698

698699
@override
699-
InterfaceElementImpl2 get element3 =>
700-
(element as InterfaceElementImpl).element;
700+
InterfaceElementImpl2 get element3 => element.element;
701701

702702
@override
703703
List<GetterElement> get getters => accessors
@@ -744,7 +744,7 @@ class InterfaceTypeImpl extends TypeImpl implements InterfaceType {
744744
@override
745745
bool get isDartCoreEnum {
746746
var element = this.element;
747-
return element is ClassElement && element.isDartCoreEnum;
747+
return element is ClassElementImpl && element.isDartCoreEnum;
748748
}
749749

750750
@override
@@ -881,7 +881,7 @@ class InterfaceTypeImpl extends TypeImpl implements InterfaceType {
881881
}
882882

883883
InheritanceManager3 get _inheritanceManager =>
884-
(element.library.session as AnalysisSessionImpl).inheritanceManager;
884+
element.library.session.inheritanceManager;
885885

886886
@override
887887
bool operator ==(Object other) {
@@ -1021,7 +1021,6 @@ class InterfaceTypeImpl extends TypeImpl implements InterfaceType {
10211021
}
10221022

10231023
if (recoveryStatic) {
1024-
var element = this.element as InterfaceElementImpl;
10251024
return element.lookupStaticGetter(name, library);
10261025
}
10271026

@@ -1077,7 +1076,6 @@ class InterfaceTypeImpl extends TypeImpl implements InterfaceType {
10771076
}
10781077

10791078
if (recoveryStatic) {
1080-
var element = this.element as InterfaceElementImpl;
10811079
return element.lookupStaticMethod(name, library);
10821080
}
10831081

@@ -1133,7 +1131,6 @@ class InterfaceTypeImpl extends TypeImpl implements InterfaceType {
11331131
}
11341132

11351133
if (recoveryStatic) {
1136-
var element = this.element as InterfaceElementImpl;
11371134
return element.lookupStaticSetter(name, library);
11381135
}
11391136

0 commit comments

Comments
 (0)