Skip to content

Commit 1363d90

Browse files
committed
Stop using deprecated declarations, prepare for analyzer breaking changes.
PiperOrigin-RevId: 469803713
1 parent d168308 commit 1363d90

File tree

1 file changed

+36
-20
lines changed

1 file changed

+36
-20
lines changed

lib/src/builder.dart

Lines changed: 36 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -250,6 +250,12 @@ class _TypeVisitor extends RecursiveElementVisitor<void> {
250250
super.visitClassElement(element);
251251
}
252252

253+
@override
254+
void visitEnumElement(EnumElement element) {
255+
_elements.add(element);
256+
super.visitEnumElement(element);
257+
}
258+
253259
@override
254260
void visitFieldElement(FieldElement element) {
255261
_addType(element.type);
@@ -262,6 +268,12 @@ class _TypeVisitor extends RecursiveElementVisitor<void> {
262268
super.visitMethodElement(element);
263269
}
264270

271+
@override
272+
void visitMixinElement(MixinElement element) {
273+
_elements.add(element);
274+
super.visitMixinElement(element);
275+
}
276+
265277
@override
266278
void visitParameterElement(ParameterElement element) {
267279
_addType(element.type);
@@ -391,7 +403,7 @@ class _MockTarget {
391403
this.hasExplicitTypeArguments = false,
392404
});
393405

394-
InterfaceElement get classElement => classType.element2;
406+
InterfaceElement get interfaceElement => classType.element2;
395407
}
396408

397409
/// This class gathers and verifies mock targets referenced in `GenerateMocks`
@@ -491,7 +503,7 @@ class _MockTargetGatherer {
491503
// `type` have been instantiated to bounds here. Switch to the
492504
// declaration, which will be an uninstantiated type.
493505
final declarationType =
494-
(type.element2.declaration as ClassElement).thisType;
506+
(type.element2.declaration as InterfaceElement).thisType;
495507
final mockName = 'Mock${declarationType.element2.name}';
496508
mockTargets.add(_MockTarget(
497509
declarationType,
@@ -545,7 +557,7 @@ class _MockTargetGatherer {
545557
// this case the type argument(s) on `type` have been instantiated to
546558
// bounds. Switch to the declaration, which will be an uninstantiated
547559
// type.
548-
type = (type.element2.declaration as ClassElement).thisType;
560+
type = (type.element2.declaration as InterfaceElement).thisType;
549561
} else {
550562
// Check explicit type arguments for unknown types that were
551563
// turned into `dynamic` by the analyzer.
@@ -731,21 +743,21 @@ class _MockTargetGatherer {
731743

732744
void _checkClassesToMockAreValid() {
733745
final classesInEntryLib =
734-
_entryLib.topLevelElements.whereType<ClassElement>();
746+
_entryLib.topLevelElements.whereType<InterfaceElement>();
735747
final classNamesToMock = <String, _MockTarget>{};
736748
final uniqueNameSuggestion =
737749
"use the 'customMocks' argument in @GenerateMocks to specify a unique "
738750
'name';
739751
for (final mockTarget in _mockTargets) {
740752
final name = mockTarget.mockName;
741753
if (classNamesToMock.containsKey(name)) {
742-
final firstClass = classNamesToMock[name]!.classElement;
754+
final firstClass = classNamesToMock[name]!.interfaceElement;
743755
final firstSource = firstClass.source.fullName;
744-
final secondSource = mockTarget.classElement.source.fullName;
756+
final secondSource = mockTarget.interfaceElement.source.fullName;
745757
throw InvalidMockitoAnnotationException(
746758
'Mockito cannot generate two mocks with the same name: $name (for '
747759
'${firstClass.name} declared in $firstSource, and for '
748-
'${mockTarget.classElement.name} declared in $secondSource); '
760+
'${mockTarget.interfaceElement.name} declared in $secondSource); '
749761
'$uniqueNameSuggestion.');
750762
}
751763
classNamesToMock[name] = mockTarget;
@@ -764,7 +776,7 @@ class _MockTargetGatherer {
764776
var preexistingMock = classesInEntryLib.firstWhereOrNull((c) =>
765777
c.interfaces
766778
.map((type) => type.element2)
767-
.contains(mockTarget.classElement) &&
779+
.contains(mockTarget.interfaceElement) &&
768780
_isMockClass(c.supertype!));
769781
if (preexistingMock != null) {
770782
throw InvalidMockitoAnnotationException(
@@ -787,11 +799,11 @@ class _MockTargetGatherer {
787799
/// and no corresponding dummy generator. Mockito cannot generate its own
788800
/// dummy return values for unknown types.
789801
void _checkMethodsToStubAreValid(_MockTarget mockTarget) {
790-
final classElement = mockTarget.classElement;
791-
final className = classElement.name;
802+
final interfaceElement = mockTarget.interfaceElement;
803+
final className = interfaceElement.name;
792804
final substitution = Substitution.fromInterfaceType(mockTarget.classType);
793805
final relevantMembers = _inheritanceManager
794-
.getInterface(classElement)
806+
.getInterface(interfaceElement)
795807
.map
796808
.values
797809
.where((m) => !m.isPrivate && !m.isStatic)
@@ -968,9 +980,9 @@ class _MockLibraryInfo {
968980
/// values.
969981
final fakeClasses = <Class>[];
970982

971-
/// [ClassElement]s which are used in non-nullable return types, for which
983+
/// [InterfaceElement]s which are used in non-nullable return types, for which
972984
/// fake classes are added to the generated library.
973-
final fakedClassElements = <InterfaceElement>[];
985+
final fakedInterfaceElements = <InterfaceElement>[];
974986

975987
/// A mapping of each necessary [Element] to a URI from which it can be
976988
/// imported.
@@ -1051,7 +1063,7 @@ class _MockClassInfo {
10511063

10521064
Class _buildMockClass() {
10531065
final typeToMock = mockTarget.classType;
1054-
final classToMock = mockTarget.classElement;
1066+
final classToMock = mockTarget.interfaceElement;
10551067
final classIsImmutable = classToMock.metadata.any((it) => it.isImmutable);
10561068
final className = classToMock.name;
10571069

@@ -1101,7 +1113,7 @@ class _MockClassInfo {
11011113
cBuilder.implements.add(TypeReference((b) {
11021114
b
11031115
..symbol = classToMock.name
1104-
..url = _typeImport(mockTarget.classElement)
1116+
..url = _typeImport(mockTarget.interfaceElement)
11051117
..types.addAll(typeArguments);
11061118
}));
11071119
if (mockTarget.onMissingStub == OnMissingStub.throwException) {
@@ -1471,7 +1483,7 @@ class _MockClassInfo {
14711483
} else {
14721484
final fakeName = mockLibraryInfo._fakeNameFor(elementToFake);
14731485
// Only make one fake class for each class that needs to be faked.
1474-
if (!mockLibraryInfo.fakedClassElements.contains(elementToFake)) {
1486+
if (!mockLibraryInfo.fakedInterfaceElements.contains(elementToFake)) {
14751487
_addFakeClass(fakeName, elementToFake);
14761488
}
14771489
final typeArguments = dartType.typeArguments;
@@ -1524,7 +1536,7 @@ class _MockClassInfo {
15241536
(mBuilder) => _buildOverridingMethod(mBuilder, toStringMethod)));
15251537
}
15261538
}));
1527-
mockLibraryInfo.fakedClassElements.add(elementToFake);
1539+
mockLibraryInfo.fakedInterfaceElements.add(elementToFake);
15281540
}
15291541

15301542
/// Returns a [Parameter] which matches [parameter].
@@ -1559,7 +1571,7 @@ class _MockClassInfo {
15591571
final method = parameter.enclosingElement3!;
15601572
throw InvalidMockitoAnnotationException(
15611573
'Mockito cannot generate a valid override for method '
1562-
"'${mockTarget.classElement.displayName}.${method.displayName}'; "
1574+
"'${mockTarget.interfaceElement.displayName}.${method.displayName}'; "
15631575
"parameter '${parameter.displayName}' causes a problem: "
15641576
'${e.message}');
15651577
}
@@ -1588,7 +1600,7 @@ class _MockClassInfo {
15881600
return type;
15891601
}
15901602
final method = parameter.enclosingElement3 as MethodElement;
1591-
final class_ = method.enclosingElement3 as ClassElement;
1603+
final class_ = method.enclosingElement3 as InterfaceElement;
15921604
final name = Name(method.librarySource.uri, method.name);
15931605
final overriddenMethods = inheritanceManager.getOverridden2(class_, name);
15941606
if (overriddenMethods == null) {
@@ -1598,7 +1610,7 @@ class _MockClassInfo {
15981610
while (allOverriddenMethods.isNotEmpty) {
15991611
final overriddenMethod = allOverriddenMethods.removeFirst();
16001612
final secondaryOverrides = inheritanceManager.getOverridden2(
1601-
overriddenMethod.enclosingElement3 as ClassElement, name);
1613+
overriddenMethod.enclosingElement3 as InterfaceElement, name);
16021614
if (secondaryOverrides != null) {
16031615
allOverriddenMethods.addAll(secondaryOverrides);
16041616
}
@@ -1996,9 +2008,13 @@ extension on Element {
19962008
String get fullName {
19972009
if (this is ClassElement) {
19982010
return "The class '$name'";
2011+
} else if (this is EnumElement) {
2012+
return "The enum '$name'";
19992013
} else if (this is MethodElement) {
20002014
var className = enclosingElement3!.name;
20012015
return "The method '$className.$name'";
2016+
} else if (this is MixinElement) {
2017+
return "The mixin '$name'";
20022018
} else if (this is PropertyAccessorElement) {
20032019
var className = enclosingElement3!.name;
20042020
return "The property accessor '$className.$name'";

0 commit comments

Comments
 (0)