in lib/src/builder.dart [541:587]
void _checkClassesToMockAreValid() {
final classesInEntryLib =
_entryLib.topLevelElements.whereType<ClassElement>();
final classNamesToMock = <String, _MockTarget>{};
final uniqueNameSuggestion =
"use the 'customMocks' argument in @GenerateMocks to specify a unique "
'name';
for (final mockTarget in _mockTargets) {
final name = mockTarget.mockName;
if (classNamesToMock.containsKey(name)) {
final firstClass = classNamesToMock[name]!.classElement;
final firstSource = firstClass.source.fullName;
final secondSource = mockTarget.classElement.source.fullName;
throw InvalidMockitoAnnotationException(
'Mockito cannot generate two mocks with the same name: $name (for '
'${firstClass.name} declared in $firstSource, and for '
'${mockTarget.classElement.name} declared in $secondSource); '
'$uniqueNameSuggestion.');
}
classNamesToMock[name] = mockTarget;
}
classNamesToMock.forEach((name, mockTarget) {
var conflictingClass =
classesInEntryLib.firstWhereOrNull((c) => c.name == name);
if (conflictingClass != null) {
throw InvalidMockitoAnnotationException(
'Mockito cannot generate a mock with a name which conflicts with '
'another class declared in this library: ${conflictingClass.name}; '
'$uniqueNameSuggestion.');
}
var preexistingMock = classesInEntryLib.firstWhereOrNull((c) =>
c.interfaces
.map((type) => type.element)
.contains(mockTarget.classElement) &&
_isMockClass(c.supertype!));
if (preexistingMock != null) {
throw InvalidMockitoAnnotationException(
'The GenerateMocks annotation contains a class which appears to '
'already be mocked inline: ${preexistingMock.name}; '
'$uniqueNameSuggestion.');
}
_checkMethodsToStubAreValid(mockTarget);
});
}