blob: f32e68801ca24f2157c0706e58cd3940ccc03cdd [file] [edit]
// Copyright (c) 2025, the Dart project authors. Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
import 'dart:typed_data';
import 'package:analyzer/src/fine/lookup_name.dart';
import 'package:analyzer/src/fine/manifest_id.dart';
import 'package:analyzer/src/fine/manifest_item.dart';
import 'package:analyzer/src/fine/requirements.dart';
final class ExportCountMismatch extends ExportFailure {
final Uri fragmentUri;
final Uri exportedUri;
final int expectedCount;
final int actualCount;
ExportCountMismatch({
required this.fragmentUri,
required this.exportedUri,
required this.expectedCount,
required this.actualCount,
});
@override
RequirementFailureKindId get kindId {
return RequirementFailureKindId.exportCountMismatch;
}
@override
String toString() {
return 'ExportCountMismatch(fragmentUri: $fragmentUri, '
'exportedUri: $exportedUri, '
'expectedCount: $expectedCount, '
'actualCount: $actualCount)';
}
}
class ExportedExtensionsMismatch extends RequirementFailure {
final Uri libraryUri;
final ManifestItemIdList expectedIds;
final ManifestItemIdList actualIds;
ExportedExtensionsMismatch({
required this.libraryUri,
required this.expectedIds,
required this.actualIds,
});
@override
RequirementFailureKindId get kindId {
return RequirementFailureKindId.exportedExtensionsMismatch;
}
@override
String toString() {
return 'ExportedExtensionsMismatch(libraryUri: $libraryUri, '
'expectedIds: $expectedIds, actualIds: $actualIds)';
}
}
sealed class ExportFailure extends RequirementFailure {}
final class ExportIdMismatch extends ExportFailure {
final Uri fragmentUri;
final Uri exportedUri;
final LookupName name;
final ManifestItemId? expectedId;
final ManifestItemId actualId;
ExportIdMismatch({
required this.fragmentUri,
required this.exportedUri,
required this.name,
required this.expectedId,
required this.actualId,
});
@override
RequirementFailureKindId get kindId {
return RequirementFailureKindId.exportIdMismatch;
}
@override
String toString() {
return 'ExportIdMismatch(fragmentUri: $fragmentUri, '
'exportedUri: $exportedUri, '
'name: ${name.asString}, '
'expectedId: $expectedId, '
'actualId: $actualId)';
}
}
final class ExportLibraryMissing extends ExportFailure {
final Uri uri;
ExportLibraryMissing({required this.uri});
@override
RequirementFailureKindId get kindId {
return RequirementFailureKindId.exportLibraryMissing;
}
@override
String toString() {
return 'ExportLibraryMissing(uri: $uri)';
}
}
class ImplementedMethodIdMismatch extends RequirementFailure {
final Uri libraryUri;
final LookupName interfaceName;
final LookupName methodName;
final ManifestItemId? expectedId;
final ManifestItemId? actualId;
ImplementedMethodIdMismatch({
required this.libraryUri,
required this.interfaceName,
required this.methodName,
required this.expectedId,
required this.actualId,
});
@override
RequirementFailureKindId get kindId {
return RequirementFailureKindId.implementedMethodIdMismatch;
}
@override
String toString() {
return 'ImplementedMethodIdMismatch(libraryUri: $libraryUri, '
'interfaceName: ${interfaceName.asString}, '
'methodName: ${methodName.asString}, '
'expectedId: $expectedId, actualId: $actualId)';
}
}
class InstanceChildrenIdsMismatch extends RequirementFailure {
final Uri libraryUri;
final LookupName instanceName;
final String childrenPropertyName;
final ManifestItemIdList expectedIds;
final ManifestItemIdList actualIds;
InstanceChildrenIdsMismatch({
required this.libraryUri,
required this.instanceName,
required this.childrenPropertyName,
required this.expectedIds,
required this.actualIds,
});
@override
RequirementFailureKindId get kindId {
return RequirementFailureKindId.instanceChildrenIdsMismatch;
}
@override
String get statisticKey => '$runtimeType.$childrenPropertyName';
@override
String toString() {
return 'InstanceChildrenIdsMismatch(libraryUri: $libraryUri, '
'instanceName: ${instanceName.asString}, '
'childrenPropertyName: $childrenPropertyName, '
'expectedIds: $expectedIds, actualIds: $actualIds)';
}
}
class InstanceFieldIdMismatch extends RequirementFailure {
final Uri libraryUri;
final LookupName interfaceName;
final LookupName fieldName;
final ManifestItemId? expectedId;
final ManifestItemId? actualId;
InstanceFieldIdMismatch({
required this.libraryUri,
required this.interfaceName,
required this.fieldName,
required this.expectedId,
required this.actualId,
});
@override
RequirementFailureKindId get kindId {
return RequirementFailureKindId.instanceFieldIdMismatch;
}
@override
String toString() {
return 'InstanceFieldIdMismatch(libraryUri: $libraryUri, '
'interfaceName: ${interfaceName.asString}, '
'fieldName: ${fieldName.asString}, '
'expectedId: $expectedId, '
'actualId: $actualId)';
}
}
class InstanceMethodIdMismatch extends RequirementFailure {
final Uri libraryUri;
final LookupName interfaceName;
final LookupName methodName;
final ManifestItemId? expectedId;
final ManifestItemId? actualId;
InstanceMethodIdMismatch({
required this.libraryUri,
required this.interfaceName,
required this.methodName,
required this.expectedId,
required this.actualId,
});
@override
RequirementFailureKindId get kindId {
return RequirementFailureKindId.instanceMethodIdMismatch;
}
@override
String toString() {
return 'InstanceMethodIdMismatch(libraryUri: $libraryUri, '
'interfaceName: ${interfaceName.asString}, '
'methodName: ${methodName.asString}, '
'expectedId: $expectedId, actualId: $actualId)';
}
}
class InterfaceChildrenIdsMismatch extends RequirementFailure {
final Uri libraryUri;
final LookupName interfaceName;
final String childrenPropertyName;
final ManifestItemIdList? expectedIds;
final ManifestItemIdList? actualIds;
InterfaceChildrenIdsMismatch({
required this.libraryUri,
required this.interfaceName,
required this.childrenPropertyName,
required this.expectedIds,
required this.actualIds,
});
@override
RequirementFailureKindId get kindId {
return RequirementFailureKindId.interfaceChildrenIdsMismatch;
}
@override
String get statisticKey => '$runtimeType.$childrenPropertyName';
@override
String toString() {
return 'InterfaceChildrenIdsMismatch(libraryUri: $libraryUri, '
'interfaceName: ${interfaceName.asString}, '
'childrenPropertyName: $childrenPropertyName, '
'expectedIds: $expectedIds, actualIds: $actualIds)';
}
}
class InterfaceConstructorIdMismatch extends RequirementFailure {
final Uri libraryUri;
final LookupName interfaceName;
final LookupName constructorName;
final ManifestItemId? expectedId;
final ManifestItemId? actualId;
InterfaceConstructorIdMismatch({
required this.libraryUri,
required this.interfaceName,
required this.constructorName,
required this.expectedId,
required this.actualId,
});
@override
RequirementFailureKindId get kindId {
return RequirementFailureKindId.interfaceConstructorIdMismatch;
}
@override
String toString() {
return 'InterfaceConstructorIdMismatch(libraryUri: $libraryUri, '
'interfaceName: ${interfaceName.asString}, '
'constructorName: ${constructorName.asString}, '
'expectedId: $expectedId, '
'actualId: $actualId)';
}
}
class InterfaceHasNonFinalFieldMismatch extends RequirementFailure {
final Uri libraryUri;
final LookupName interfaceName;
final bool expected;
final bool actual;
InterfaceHasNonFinalFieldMismatch({
required this.libraryUri,
required this.interfaceName,
required this.expected,
required this.actual,
});
@override
RequirementFailureKindId get kindId {
return RequirementFailureKindId.interfaceHasNonFinalFieldMismatch;
}
@override
String toString() {
return 'InterfaceHasNonFinalFieldMismatch(libraryUri: $libraryUri, '
'interfaceName: ${interfaceName.asString}, '
'expected: $expected, '
'actual: $actual)';
}
}
class InterfaceIdMismatch extends RequirementFailure {
final Uri libraryUri;
final LookupName interfaceName;
final ManifestItemId expectedId;
final ManifestItemId actualId;
InterfaceIdMismatch({
required this.libraryUri,
required this.interfaceName,
required this.expectedId,
required this.actualId,
});
@override
RequirementFailureKindId get kindId {
return RequirementFailureKindId.interfaceIdMismatch;
}
@override
String toString() {
return 'InterfaceIdMismatch(libraryUri: $libraryUri, '
'interfaceName: ${interfaceName.asString}, '
'expectedId: $expectedId, '
'actualId: $actualId)';
}
}
class LibraryChildrenIdsMismatch extends RequirementFailure {
final Uri libraryUri;
final String childrenPropertyName;
final ManifestItemIdList expectedIds;
final ManifestItemIdList actualIds;
LibraryChildrenIdsMismatch({
required this.libraryUri,
required this.childrenPropertyName,
required this.expectedIds,
required this.actualIds,
});
@override
RequirementFailureKindId get kindId {
return RequirementFailureKindId.libraryChildrenIdsMismatch;
}
@override
String get statisticKey => '$runtimeType.$childrenPropertyName';
@override
String toString() {
return 'LibraryChildrenIdsMismatch(libraryUri: $libraryUri, '
'childrenPropertyName: $childrenPropertyName, '
'expectedIds: $expectedIds, actualIds: $actualIds)';
}
}
class LibraryExportedUrisMismatch extends RequirementFailure {
final Uri libraryUri;
final List<Uri> expected;
final List<Uri> actual;
LibraryExportedUrisMismatch({
required this.libraryUri,
required this.expected,
required this.actual,
});
@override
RequirementFailureKindId get kindId {
return RequirementFailureKindId.libraryExportedUrisMismatch;
}
@override
String toString() {
return 'LibraryExportedUrisMismatch(libraryUri: $libraryUri, '
'expected: $expected, actual: $actual)';
}
}
class LibraryFeatureSetMismatch extends RequirementFailure {
final Uri libraryUri;
final Uint8List? expected;
final Uint8List? actual;
LibraryFeatureSetMismatch({
required this.libraryUri,
required this.expected,
required this.actual,
});
@override
RequirementFailureKindId get kindId {
return RequirementFailureKindId.libraryFeatureSetMismatch;
}
@override
String toString() {
return 'LibraryFeatureSetMismatch(libraryUri: $libraryUri, '
'expected: $expected, actual: $actual)';
}
}
class LibraryIsOriginNotExistingFileMismatch extends RequirementFailure {
final Uri libraryUri;
final bool expected;
final bool actual;
LibraryIsOriginNotExistingFileMismatch({
required this.libraryUri,
required this.expected,
required this.actual,
});
@override
RequirementFailureKindId get kindId {
return RequirementFailureKindId.libraryIsOriginNotExistingFileMismatch;
}
@override
String toString() {
return 'LibraryIsOriginNotExistingFileMismatch(libraryUri: $libraryUri, '
'expected: $expected, actual: $actual)';
}
}
class LibraryIsSyntheticMismatch extends RequirementFailure {
final Uri libraryUri;
final bool expected;
final bool actual;
LibraryIsSyntheticMismatch({
required this.libraryUri,
required this.expected,
required this.actual,
});
@override
RequirementFailureKindId get kindId {
return RequirementFailureKindId.libraryIsSyntheticMismatch;
}
@override
String toString() {
return 'LibraryIsSyntheticMismatch(libraryUri: $libraryUri, '
'expected: $expected, actual: $actual)';
}
}
class LibraryLanguageVersionMismatch extends RequirementFailure {
final Uri libraryUri;
final ManifestLibraryLanguageVersion expected;
final ManifestLibraryLanguageVersion actual;
LibraryLanguageVersionMismatch({
required this.libraryUri,
required this.expected,
required this.actual,
});
@override
RequirementFailureKindId get kindId {
return RequirementFailureKindId.libraryLanguageVersionMismatch;
}
@override
String toString() {
return 'LibraryLanguageVersionMismatch(libraryUri: $libraryUri, '
'expected: $expected, actual: $actual)';
}
}
class LibraryMetadataMismatch extends RequirementFailure {
final Uri libraryUri;
LibraryMetadataMismatch({required this.libraryUri});
@override
RequirementFailureKindId get kindId {
return RequirementFailureKindId.libraryMetadataMismatch;
}
@override
String toString() => 'LibraryMetadataMismatch(libraryUri: $libraryUri)';
}
class LibraryMissing extends RequirementFailure {
final Uri uri;
LibraryMissing({required this.uri});
@override
RequirementFailureKindId get kindId {
return RequirementFailureKindId.libraryMissing;
}
@override
String toString() {
return 'LibraryMissing(uri: $uri)';
}
}
class LibraryNameMismatch extends RequirementFailure {
final Uri libraryUri;
final String? expected;
final String? actual;
LibraryNameMismatch({
required this.libraryUri,
required this.expected,
required this.actual,
});
@override
RequirementFailureKindId get kindId {
return RequirementFailureKindId.libraryNameMismatch;
}
@override
String toString() {
return 'LibraryNameMismatch(libraryUri: $libraryUri, '
'expected: $expected, actual: $actual)';
}
}
final class OpaqueApiUseFailure extends RequirementFailure {
@override
final RequirementFailureKindId kindId;
final List<OpaqueApiUse> uses;
OpaqueApiUseFailure({required this.kindId, required this.uses});
@override
String get statisticKey {
var use = uses.first;
return '$runtimeType.${use.targetRuntimeType}.${use.methodName}';
}
@override
String toString() {
return 'OpaqueApiUseFailure(kindId: $kindId, uses: $uses)';
}
}
class ReExportDeprecatedOnlyMismatch extends RequirementFailure {
final Uri libraryUri;
final LookupName name;
final bool expected;
final bool actual;
ReExportDeprecatedOnlyMismatch({
required this.libraryUri,
required this.name,
required this.expected,
required this.actual,
});
@override
RequirementFailureKindId get kindId {
return RequirementFailureKindId.reExportDeprecatedOnlyMismatch;
}
@override
String toString() {
return 'ReExportDeprecatedOnlyMismatch(libraryUri: $libraryUri, '
'name: ${name.asString}, expected: $expected, actual: $actual)';
}
}
sealed class RequirementFailure {
RequirementFailureKindId get kindId;
String get statisticKey => '$runtimeType';
}
enum RequirementFailureKindId {
exportCountMismatch(0),
exportIdMismatch(1),
exportLibraryMissing(2),
exportedExtensionsMismatch(3),
implementedMethodIdMismatch(4),
instanceChildrenIdsMismatch(5),
instanceFieldIdMismatch(6),
instanceGetterIdMismatch(7),
instanceMethodIdMismatch(8),
interfaceChildrenIdsMismatch(9),
interfaceConstructorIdMismatch(10),
interfaceHasNonFinalFieldMismatch(11),
interfaceIdMismatch(12),
libraryChildrenIdsMismatch(13),
libraryExportedUrisMismatch(14),
libraryFeatureSetMismatch(15),
libraryIsSyntheticMismatch(16),
libraryLanguageVersionMismatch(17),
libraryMetadataMismatch(18),
libraryMissing(19),
libraryNameMismatch(20),
opaqueAccept(21),
opaqueContext(22),
opaqueDocumentationComment(23),
opaqueFieldNameNonPromotabilityInfo(24),
opaqueFirstFragment(25),
opaqueFragments(26),
opaqueGetInheritedMember(27),
opaqueGetOverridden(28),
opaqueInheritedConcreteMembers(29),
opaqueInheritedMembers(30),
opaqueInterfaceMembers(31),
opaqueLastFragment(32),
opaqueLookUpGetter(33),
opaqueLookUpInheritedMethod(34),
opaqueLookUpMethod(35),
opaqueLookUpSetter(36),
opaqueNameLength(37),
opaqueNameOffset(38),
opaquePublicNamespace(39),
opaqueSession(40),
opaqueVisitChildren(41),
reExportDeprecatedOnlyMismatch(42),
superImplementedMethodIdMismatch(43),
topLevelIdMismatch(44),
topLevelNotInstance(45),
topLevelNotInterface(46),
libraryIsOriginNotExistingFileMismatch(47);
final int id;
const RequirementFailureKindId(this.id);
}
class SuperImplementedMethodIdMismatch extends RequirementFailure {
final Uri libraryUri;
final LookupName interfaceName;
final int superIndex;
final LookupName methodName;
final ManifestItemId? expectedId;
final ManifestItemId? actualId;
SuperImplementedMethodIdMismatch({
required this.libraryUri,
required this.interfaceName,
required this.superIndex,
required this.methodName,
required this.expectedId,
required this.actualId,
});
@override
RequirementFailureKindId get kindId {
return RequirementFailureKindId.superImplementedMethodIdMismatch;
}
@override
String toString() {
return 'SuperImplementedMethodIdMismatch(libraryUri: $libraryUri, '
'interfaceName: ${interfaceName.asString}, '
'superIndex: $superIndex, '
'methodName: ${methodName.asString}, '
'expectedId: $expectedId, actualId: $actualId)';
}
}
sealed class TopLevelFailure extends RequirementFailure {
final Uri libraryUri;
final LookupName name;
TopLevelFailure({required this.libraryUri, required this.name});
}
class TopLevelIdMismatch extends TopLevelFailure {
final ManifestItemId? expectedId;
final ManifestItemId? actualId;
TopLevelIdMismatch({
required super.libraryUri,
required super.name,
required this.expectedId,
required this.actualId,
});
@override
RequirementFailureKindId get kindId {
return RequirementFailureKindId.topLevelIdMismatch;
}
@override
String toString() {
return 'TopLevelIdMismatch(libraryUri: $libraryUri, '
'name: ${name.asString}, '
'expectedId: $expectedId, '
'actualId: $actualId)';
}
}
class TopLevelNotInstance extends TopLevelFailure {
final Object? actualItem;
TopLevelNotInstance({
required super.libraryUri,
required super.name,
required this.actualItem,
});
@override
RequirementFailureKindId get kindId {
return RequirementFailureKindId.topLevelNotInstance;
}
@override
String toString() {
return 'TopLevelNotInstance(libraryUri: $libraryUri, '
'name: ${name.asString})';
}
}
class TopLevelNotInterface extends TopLevelFailure {
TopLevelNotInterface({required super.libraryUri, required super.name});
@override
RequirementFailureKindId get kindId {
return RequirementFailureKindId.topLevelNotInterface;
}
@override
String toString() {
return 'TopLevelNotInterface(libraryUri: $libraryUri, '
'name: ${name.asString})';
}
}