From 57eb749ae4dc79475348ca9eba0633f637f9b328 Mon Sep 17 00:00:00 2001 From: Simon Binder Date: Mon, 29 Sep 2025 23:55:57 +0200 Subject: [PATCH] Migrate off of analyzer 7.x APIs --- docs/pubspec.yaml | 2 + drift_dev/analysis_options.yaml | 4 - drift_dev/lib/src/analysis/backend.dart | 12 +-- drift_dev/lib/src/analysis/driver/cache.dart | 4 +- drift_dev/lib/src/analysis/driver/driver.dart | 4 +- drift_dev/lib/src/analysis/driver/error.dart | 8 +- drift_dev/lib/src/analysis/driver/state.dart | 4 +- .../src/analysis/resolver/dart/accessor.dart | 22 ++--- .../src/analysis/resolver/dart/column.dart | 26 +++--- .../src/analysis/resolver/dart/helper.dart | 81 +++++++++---------- .../lib/src/analysis/resolver/dart/table.dart | 72 ++++++++--------- .../lib/src/analysis/resolver/dart/view.dart | 30 +++---- .../lib/src/analysis/resolver/discover.dart | 52 ++++++------ .../resolver/drift/element_resolver.dart | 22 ++--- .../resolver/drift/sqlparser/drift_lints.dart | 14 ++-- .../analysis/resolver/intermediate_state.dart | 14 ++-- .../resolver/queries/existing_row_class.dart | 14 ++-- .../lib/src/analysis/resolver/resolver.dart | 12 +-- .../analysis/resolver/shared/dart_types.dart | 50 ++++++------ .../analysis/resolver/shared/data_class.dart | 14 ++-- drift_dev/lib/src/analysis/results/dart.dart | 50 ++++++------ .../lib/src/analysis/results/element.dart | 8 +- drift_dev/lib/src/analysis/serializer.dart | 6 +- .../backends/analyzer_context_backend.dart | 16 ++-- drift_dev/lib/src/backends/build/backend.dart | 20 ++--- drift_dev/lib/src/cli/commands/migrate.dart | 18 ++--- .../src/services/schema/sqlite_to_drift.dart | 8 +- drift_dev/lib/src/utils/type_utils.dart | 4 +- drift_dev/lib/src/writer/import_manager.dart | 18 ++--- drift_dev/pubspec.yaml | 2 +- .../test/analysis/resolver/discover_test.dart | 2 +- .../analysis/resolver/drift/table_test.dart | 4 +- drift_dev/test/analysis/test_utils.dart | 18 ++--- 33 files changed, 312 insertions(+), 323 deletions(-) diff --git a/docs/pubspec.yaml b/docs/pubspec.yaml index bb90e5b09..93d770cee 100644 --- a/docs/pubspec.yaml +++ b/docs/pubspec.yaml @@ -60,6 +60,8 @@ dependency_overrides: path: ../drift_flutter drift_postgres: path: ../extras/drift_postgres + # This is required for resolving to analyzer 8, flutter_test is the only blocker. + test_api: ^0.7.7 flutter: uses-material-design: true diff --git a/drift_dev/analysis_options.yaml b/drift_dev/analysis_options.yaml index 7104fd2ce..990f7b54f 100644 --- a/drift_dev/analysis_options.yaml +++ b/drift_dev/analysis_options.yaml @@ -5,7 +5,3 @@ analyzer: strict-casts: true exclude: - "**/*.g.dart" - errors: - # We temporarily want to ignore analyzer deprecation warnings because we need to support both - # analyzer 7.3+ (element2) and 8.x (back to element). - deprecated_member_use: ignore diff --git a/drift_dev/lib/src/analysis/backend.dart b/drift_dev/lib/src/analysis/backend.dart index f0587129d..5e7d756af 100644 --- a/drift_dev/lib/src/analysis/backend.dart +++ b/drift_dev/lib/src/analysis/backend.dart @@ -1,5 +1,5 @@ import 'package:analyzer/dart/ast/ast.dart'; -import 'package:analyzer/dart/element/element2.dart'; +import 'package:analyzer/dart/element/element.dart'; import 'package:logging/logging.dart'; /// The backend used by drift's analysis implementation to read files and access @@ -15,8 +15,8 @@ abstract class DriftBackend { /// Reads a file as string. Future readAsString(Uri uri); - Future uriOfDart(Element2 element) async { - return element.library2!.uri; + Future uriOfDart(Element element) async { + return element.library!.uri; } bool get canReadDart; @@ -26,7 +26,7 @@ abstract class DriftBackend { /// This should also be able to resolve SDK libraries. /// If no Dart library can be found under that uri, throws a /// [NotALibraryException]. - Future readDart(Uri uri); + Future readDart(Uri uri); /// Loads the resolved AST node defining the given [element]. /// @@ -34,7 +34,7 @@ abstract class DriftBackend { /// the resolved AST is not available. /// When the [element] does not have a syntactic representation in the AST, /// null is returned. - Future loadElementDeclaration(Element2 element); + Future loadElementDeclaration(Element element); /// Resolves a Dart expression from a string. /// @@ -48,7 +48,7 @@ abstract class DriftBackend { Uri context, String dartExpression, Iterable imports); /// Resolves the Dart element named [reference] in the [imports] of [context]. - Future resolveTopLevelElement( + Future resolveTopLevelElement( Uri context, String reference, Iterable imports); } diff --git a/drift_dev/lib/src/analysis/driver/cache.dart b/drift_dev/lib/src/analysis/driver/cache.dart index 917ffadc3..3203100ed 100644 --- a/drift_dev/lib/src/analysis/driver/cache.dart +++ b/drift_dev/lib/src/analysis/driver/cache.dart @@ -1,4 +1,4 @@ -import 'package:analyzer/dart/element/element2.dart'; +import 'package:analyzer/dart/element/element.dart'; import '../results/element.dart'; import 'state.dart'; @@ -11,7 +11,7 @@ class DriftAnalysisCache { final Map knownFiles = {}; final Map discoveredElements = {}; - final Map typeHelperLibraries = {}; + final Map typeHelperLibraries = {}; FileState stateForUri(Uri uri) { return knownFiles[uri] ?? notifyFileChanged(uri); diff --git a/drift_dev/lib/src/analysis/driver/driver.dart b/drift_dev/lib/src/analysis/driver/driver.dart index 2ff592d9d..005cc2c7e 100644 --- a/drift_dev/lib/src/analysis/driver/driver.dart +++ b/drift_dev/lib/src/analysis/driver/driver.dart @@ -1,6 +1,6 @@ import 'dart:convert'; -import 'package:analyzer/dart/element/element2.dart'; +import 'package:analyzer/dart/element/element.dart'; import 'package:sqlparser/sqlparser.dart'; import '../backend.dart'; @@ -377,7 +377,7 @@ abstract class AnalysisResultCacheReader { Future readDiscovery(Uri uri); - Future readTypeHelperFor(Uri uri); + Future readTypeHelperFor(Uri uri); Future readElementCacheFor(Uri uri); } diff --git a/drift_dev/lib/src/analysis/driver/error.dart b/drift_dev/lib/src/analysis/driver/error.dart index e17ba26c5..9a1026d96 100644 --- a/drift_dev/lib/src/analysis/driver/error.dart +++ b/drift_dev/lib/src/analysis/driver/error.dart @@ -1,5 +1,5 @@ import 'package:analyzer/dart/ast/syntactic_entity.dart' as dart; -import 'package:analyzer/dart/element/element2.dart' as dart; +import 'package:analyzer/dart/element/element.dart' as dart; import 'package:source_gen/source_gen.dart'; import 'package:source_span/source_span.dart'; import 'package:sqlparser/sqlparser.dart' as sql; @@ -11,7 +11,7 @@ class DriftAnalysisError { DriftAnalysisError(this.span, this.message); factory DriftAnalysisError.forDartElement( - dart.Element2 element, String message) { + dart.Element element, String message) { return DriftAnalysisError( spanForElement(element), message, @@ -19,7 +19,7 @@ class DriftAnalysisError { } factory DriftAnalysisError.inDartAst( - dart.Element2 element, dart.SyntacticEntity entity, String message) { + dart.Element element, dart.SyntacticEntity entity, String message) { return DriftAnalysisError(dartAstSpan(element, entity), message); } @@ -51,7 +51,7 @@ class DriftAnalysisError { } static FileSpan dartAstSpan( - dart.Element2 element, dart.SyntacticEntity entity) { + dart.Element element, dart.SyntacticEntity entity) { final span = spanForElement(element) as FileSpan; return span.file.span(entity.offset, entity.end); } diff --git a/drift_dev/lib/src/analysis/driver/state.dart b/drift_dev/lib/src/analysis/driver/state.dart index 99b750b16..8e0919e35 100644 --- a/drift_dev/lib/src/analysis/driver/state.dart +++ b/drift_dev/lib/src/analysis/driver/state.dart @@ -1,4 +1,4 @@ -import 'package:analyzer/dart/element/element2.dart'; +import 'package:analyzer/dart/element/element.dart'; import 'package:meta/meta.dart'; import 'package:path/path.dart' show url; import 'package:sqlparser/sqlparser.dart' hide AnalysisError; @@ -168,7 +168,7 @@ class DriftFileImport { } class DiscoveredDartLibrary extends DiscoveredFileState { - final LibraryElement2 library; + final LibraryElement library; @override final List importDependencies; diff --git a/drift_dev/lib/src/analysis/resolver/dart/accessor.dart b/drift_dev/lib/src/analysis/resolver/dart/accessor.dart index 3f1864a99..e47908e4f 100644 --- a/drift_dev/lib/src/analysis/resolver/dart/accessor.dart +++ b/drift_dev/lib/src/analysis/resolver/dart/accessor.dart @@ -1,6 +1,6 @@ import 'package:analyzer/dart/ast/ast.dart'; import 'package:analyzer/dart/constant/value.dart'; -import 'package:analyzer/dart/element/element2.dart'; +import 'package:analyzer/dart/element/element.dart'; import 'package:analyzer/dart/element/type.dart'; import 'package:collection/collection.dart'; @@ -59,7 +59,7 @@ class DartAccessorResolver } final table = await resolveDartReferenceOrReportError( - dartType.element3, + dartType.element, (msg) => DriftAnalysisError.forDartElement(element, msg)); if (table != null) { tables.add(table); @@ -82,7 +82,7 @@ class DartAccessorResolver } final view = await resolveDartReferenceOrReportError( - dartType.element3, + dartType.element, (msg) => DriftAnalysisError.forDartElement(element, msg)); if (view != null) { views.add(view); @@ -140,7 +140,7 @@ class DartAccessorResolver } final dao = await resolveDartReferenceOrReportError( - type.element3, + type.element, (msg) => DriftAnalysisError.forDartElement(element, msg)); if (dao != null) accessors.add(dao); } @@ -159,12 +159,12 @@ class DartAccessorResolver ); } else { final dbType = element.allSupertypes - .firstWhereOrNull((i) => i.element3.name3 == 'DatabaseAccessor'); + .firstWhereOrNull((i) => i.element.name == 'DatabaseAccessor'); // inherits from DatabaseAccessor, we want to know which T final dbImpl = dbType?.typeArguments.single ?? - element.library2.typeProvider.dynamicType; + element.library.typeProvider.dynamicType; if (dbImpl is DynamicType) { reportError(DriftAnalysisError.forDartElement( element, @@ -188,14 +188,14 @@ class DartAccessorResolver Future _readSchemaVersion() async { final element = - discovered.dartElement.thisType.getGetter2('schemaVersion')?.variable3; + discovered.dartElement.thisType.getGetter('schemaVersion')?.variable; if (element == null) return null; try { if (element.isSynthetic) { // Getter, read from `=>` body if possible. final expr = returnExpressionOfMethod(await resolver.driver.backend - .loadElementDeclaration(element.getter2!) as MethodDeclaration); + .loadElementDeclaration(element.getter!) as MethodDeclaration); return _parseSchemaVersion(expr); } else { final astField = await resolver.driver.backend @@ -218,8 +218,8 @@ class DartAccessorResolver }; } - int? _parseSchemaVersionFromConstant(Element2? element) { - if (element?.nonSynthetic2 case final FieldElement2 field) { + int? _parseSchemaVersionFromConstant(Element? element) { + if (element?.nonSynthetic case final FieldElement field) { final value = field.computeConstantValue(); if (value?.toIntValue() case final value?) { return value; @@ -229,7 +229,7 @@ class DartAccessorResolver } bool _hasConstructorWithDatabaseConnection() { - final constructor = discovered.dartElement.unnamedConstructor2; + final constructor = discovered.dartElement.unnamedConstructor; if (constructor == null) { return false; } diff --git a/drift_dev/lib/src/analysis/resolver/dart/column.dart b/drift_dev/lib/src/analysis/resolver/dart/column.dart index 2546d3f93..2f82961dc 100644 --- a/drift_dev/lib/src/analysis/resolver/dart/column.dart +++ b/drift_dev/lib/src/analysis/resolver/dart/column.dart @@ -1,5 +1,5 @@ import 'package:analyzer/dart/ast/ast.dart'; -import 'package:analyzer/dart/element/element2.dart'; +import 'package:analyzer/dart/element/element.dart'; import 'package:analyzer/dart/element/type.dart'; import 'package:collection/collection.dart'; import 'package:drift/drift.dart' show DriftSqlType; @@ -97,7 +97,7 @@ class ColumnParser { /// migrations), there might not be a `creationTime` in scope for the check /// constraint. So, we annotate these references in [AnnotatedDartCode] and /// use that information when generating code to transform the code. - final Map _columnsInSameTable; + final Map _columnsInSameTable; ColumnParser(this._resolver, this._columnsInSameTable); @@ -111,7 +111,7 @@ class ColumnParser { } Future parse( - ColumnDeclaration columnDeclaration, Element2 element) async { + ColumnDeclaration columnDeclaration, Element element) async { final expr = columnDeclaration.expression; if (expr is! FunctionExpressionInvocation) { @@ -184,7 +184,7 @@ class ColumnParser { } final staticElement = first.element; - if (staticElement is! ClassElement2) { + if (staticElement is! ClassElement) { _resolver.reportError(DriftAnalysisError.inDartAst( element, first, @@ -393,7 +393,7 @@ class ColumnParser { final expression = remainingExpr.argumentList.arguments.single; final custom = readCustomType( - element.library2!, + element.library!, expression, helper, (message) => _resolver.reportError( @@ -413,7 +413,7 @@ class ColumnParser { AppliedTypeConverter? converter; if (mappedAs != null) { converter = readTypeConverter( - element.library2!, + element.library!, mappedAs, columnType, nullable, @@ -507,7 +507,7 @@ class ColumnParser { sqlType: columnType, nullable: nullable, nameInSql: sqlName, - nameInDart: element.name3!, + nameInDart: element.name!, declaration: DriftDeclaration.dartElement(element), typeConverter: converter, clientDefaultCode: clientDefaultExpression, @@ -537,15 +537,15 @@ class ColumnParser { }[name]!; } - String? _readJsonKey(Element2 getter) { - final annotations = getter.metadataIfAnnotatable; + String? _readJsonKey(Element getter) { + final annotations = getter.metadata.annotations; final object = annotations.firstWhereOrNull((e) { final value = e.computeConstantValue(); final valueType = value?.type; return valueType is InterfaceType && isFromDrift(valueType) && - valueType.element3.name3 == 'JsonKey'; + valueType.element.name == 'JsonKey'; }); if (object == null) return null; @@ -553,15 +553,15 @@ class ColumnParser { return object.computeConstantValue()!.getField('key')!.toStringValue(); } - String? _readReferenceName(Element2 getter) { - final annotations = getter.metadataIfAnnotatable; + String? _readReferenceName(Element getter) { + final annotations = getter.metadata.annotations; final object = annotations.firstWhereOrNull((e) { final value = e.computeConstantValue(); final valueType = value?.type; return valueType is InterfaceType && isFromDrift(valueType) && - valueType.element3.name3 == 'ReferenceName'; + valueType.element.name == 'ReferenceName'; }); if (object == null) return null; diff --git a/drift_dev/lib/src/analysis/resolver/dart/helper.dart b/drift_dev/lib/src/analysis/resolver/dart/helper.dart index 552e49e15..bc4c54d38 100644 --- a/drift_dev/lib/src/analysis/resolver/dart/helper.dart +++ b/drift_dev/lib/src/analysis/resolver/dart/helper.dart @@ -1,7 +1,7 @@ import 'package:analyzer/dart/analysis/session.dart'; import 'package:analyzer/dart/ast/ast.dart'; import 'package:analyzer/dart/constant/value.dart'; -import 'package:analyzer/dart/element/element2.dart'; +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/dart/element/type_provider.dart'; @@ -20,17 +20,17 @@ import '../shared/data_class.dart'; /// These types are used to determine whether a given Dart class has drift- /// specific annotations or whether it defines a table. class KnownDriftTypes { - final LibraryElement2 helperLibrary; - final ClassElement2 tableElement; + final LibraryElement helperLibrary; + final ClassElement tableElement; final InterfaceType tableType; final InterfaceType tableIndexType; final InterfaceType viewType; final InterfaceType tableInfoType; final InterfaceType driftDatabase; final InterfaceType driftAccessor; - final InterfaceElement2 userDefinedSqlType; - final InterfaceElement2 typeConverter; - final InterfaceElement2 jsonTypeConverter; + final InterfaceElement userDefinedSqlType; + final InterfaceElement typeConverter; + final InterfaceElement jsonTypeConverter; final InterfaceType driftAny; final InterfaceType uint8List; final InterfaceType geopolyPolygon; @@ -54,29 +54,29 @@ class KnownDriftTypes { /// Constructs the set of known drift types from a helper library, which is /// resolved from `package:drift/src/drift_dev_helper.dart`. - factory KnownDriftTypes._fromLibrary(LibraryElement2 helper) { + factory KnownDriftTypes._fromLibrary(LibraryElement helper) { final exportNamespace = helper.exportNamespace; - final tableElement = exportNamespace.get2('Table') as ClassElement2; - final dbElement = exportNamespace.get2('DriftDatabase') as ClassElement2; - final daoElement = exportNamespace.get2('DriftAccessor') as ClassElement2; + final tableElement = exportNamespace.get2('Table') as ClassElement; + final dbElement = exportNamespace.get2('DriftDatabase') as ClassElement; + final daoElement = exportNamespace.get2('DriftAccessor') as ClassElement; return KnownDriftTypes._( helper, tableElement, tableElement.defaultInstantiation, - (exportNamespace.get2('TableIndex') as InterfaceElement2).thisType, - (exportNamespace.get2('View') as InterfaceElement2).thisType, - (exportNamespace.get2('TableInfo') as InterfaceElement2).thisType, - exportNamespace.get2('UserDefinedSqlType') as InterfaceElement2, - exportNamespace.get2('TypeConverter') as InterfaceElement2, - exportNamespace.get2('JsonTypeConverter2') as InterfaceElement2, + (exportNamespace.get2('TableIndex') as InterfaceElement).thisType, + (exportNamespace.get2('View') as InterfaceElement).thisType, + (exportNamespace.get2('TableInfo') as InterfaceElement).thisType, + exportNamespace.get2('UserDefinedSqlType') as InterfaceElement, + exportNamespace.get2('TypeConverter') as InterfaceElement, + exportNamespace.get2('JsonTypeConverter2') as InterfaceElement, dbElement.defaultInstantiation, daoElement.defaultInstantiation, - (exportNamespace.get2('DriftAny') as InterfaceElement2) + (exportNamespace.get2('DriftAny') as InterfaceElement) .defaultInstantiation, - (exportNamespace.get2('Uint8List') as InterfaceElement2) + (exportNamespace.get2('Uint8List') as InterfaceElement) .defaultInstantiation, - (exportNamespace.get2('GeopolyPolygon') as InterfaceElement2) + (exportNamespace.get2('GeopolyPolygon') as InterfaceElement) .defaultInstantiation, ); } @@ -86,11 +86,11 @@ class KnownDriftTypes { /// /// Returns `null` if [type] is not a subtype of `TypeConverter`. InterfaceType? asTypeConverter(DartType type) { - return type.asInstanceOf2(typeConverter); + return type.asInstanceOf(typeConverter); } InterfaceType? asUserDefinedType(DartType type) { - return type.asInstanceOf2(userDefinedSqlType); + return type.asInstanceOf(userDefinedSqlType); } /// Converts the given Dart [type] into an instantiation of the @@ -99,13 +99,13 @@ class KnownDriftTypes { /// Returns `null` if [type] is not a subtype of `TypeConverter`. InterfaceType? asJsonTypeConverter(DartType? type) { final converter = helperLibrary.exportNamespace.get2('JsonTypeConverter2') - as InterfaceElement2; - return type?.asInstanceOf2(converter); + as InterfaceElement; + return type?.asInstanceOf(converter); } bool get isStillConsistent { try { - helperLibrary.session.getParsedLibraryByElement2(helperLibrary); + helperLibrary.session.getParsedLibraryByElement(helperLibrary); return true; } on InconsistentAnalysisException { return false; @@ -183,28 +183,21 @@ bool isColumnBuilder(DartType type) { bool isFromDrift(DartType type) { if (type is! InterfaceType) return false; - final uri = type.element3.library2.uri; + final uri = type.element.library.uri; return uri.scheme == 'package' && uri.pathSegments[0] == 'drift'; } -extension IsFromDrift on Element2 { - List get metadataIfAnnotatable { - return switch (this) { - final Annotatable a => a.metadata2.annotations, - _ => const [], - }; - } - +extension IsFromDrift on Element { bool get isFromDefaultTable { - final parent = enclosingElement2; + final parent = enclosingElement; - return parent is ClassElement2 && - parent.name3 == 'Table' && + return parent is ClassElement && + parent.name == 'Table' && isFromDrift(parent.thisType); } } -extension on InterfaceElement2 { +extension on InterfaceElement { InterfaceType get defaultInstantiation => instantiate( typeArguments: const [], nullabilitySuffix: NullabilitySuffix.none); } @@ -212,7 +205,7 @@ extension on InterfaceElement2 { extension TypeUtils on DartType { String? get nameIfInterfaceType { final $this = this; - return $this is InterfaceType ? $this.element3.name3 : null; + return $this is InterfaceType ? $this.element.name : null; } String get userVisibleName => getDisplayString(); @@ -245,12 +238,12 @@ class DataClassInformation { static Future resolve( LocalElementResolver resolver, List columns, - ClassElement2 element, + ClassElement element, ) async { DartObject? dataClassName; DartObject? useRowClass; - for (final annotation in element.metadata2.annotations) { + for (final annotation in element.metadata.annotations) { final computed = annotation.computeConstantValue(); final annotationClass = computed?.type?.nameIfInterfaceType; @@ -289,8 +282,8 @@ class DataClassInformation { } if (useRowClass != null) { - final typeProvider = element.library2.typeProvider; - final typeSystem = element.library2.typeSystem; + final typeProvider = element.library.typeProvider; + final typeSystem = element.library.typeSystem; final type = useRowClass.getField('type')!.extractType(typeProvider, typeSystem); @@ -301,13 +294,13 @@ class DataClassInformation { final helper = await resolver.resolver.driver.knownTypes; if (type is InterfaceType) { - final found = FoundDartClass(type.element3, type.typeArguments); + final found = FoundDartClass(type.element, type.typeArguments); existingClass = validateExistingClass(columns, found, constructorInExistingClass, generateInsertable, resolver, helper); if (existingClass?.isRecord != true) { - name = type.element3.name3!; + name = type.element.name!; } } else if (type is RecordType) { existingClass = validateRowClassFromRecordType( diff --git a/drift_dev/lib/src/analysis/resolver/dart/table.dart b/drift_dev/lib/src/analysis/resolver/dart/table.dart index deb06fd1c..9aaa66f46 100644 --- a/drift_dev/lib/src/analysis/resolver/dart/table.dart +++ b/drift_dev/lib/src/analysis/resolver/dart/table.dart @@ -1,6 +1,6 @@ import 'package:analyzer/dart/ast/ast.dart'; import 'package:analyzer/dart/ast/syntactic_entity.dart'; -import 'package:analyzer/dart/element/element2.dart'; +import 'package:analyzer/dart/element/element.dart'; import 'package:collection/collection.dart'; import 'package:drift/drift.dart' show DriftSqlType; import 'package:drift_dev/src/analysis/resolver/shared/data_class.dart'; @@ -57,12 +57,12 @@ class DartTableResolver extends LocalElementResolver { columns: columns, references: references.toList(), nameOfRowClass: dataClassInfo.enforcedName ?? - dataClassNameForClassName(element.name3!), + dataClassNameForClassName(element.name!), interfacesForRowClass: dataClassInfo.interfaces, nameOfCompanionClass: dataClassInfo.companionName, existingRowClass: dataClassInfo.existingClass, customParentClass: dataClassInfo.extending, - baseDartName: element.name3!, + baseDartName: element.name!, tableConstraints: [ if (primaryKey != null) PrimaryKeyColumns(primaryKey), for (final uniqueKey in uniqueKeys ?? const >[]) @@ -141,12 +141,12 @@ class DartTableResolver extends LocalElementResolver { } Future?> _readPrimaryKey( - ClassElement2 element, + ClassElement element, List columns, ) async { - final primaryKeyGetter = element.lookUpGetter2( + final primaryKeyGetter = element.lookUpGetter( name: 'primaryKey', - library: element.library2, + library: element.library, ); if (primaryKeyGetter == null || primaryKeyGetter.isFromDefaultTable) { @@ -194,12 +194,12 @@ class DartTableResolver extends LocalElementResolver { } Future>?> _readUniqueKeys( - ClassElement2 element, + ClassElement element, List columns, ) async { - final uniqueKeyGetter = element.lookUpGetter2( + final uniqueKeyGetter = element.lookUpGetter( name: 'uniqueKeys', - library: element.library2, + library: element.library, ); if (uniqueKeyGetter == null || uniqueKeyGetter.isFromDefaultTable) { @@ -260,10 +260,10 @@ class DartTableResolver extends LocalElementResolver { return parsedUniqueKeys; } - Future _booleanGetter(ClassElement2 element, String name) async { - final getter = element.lookUpGetter2( + Future _booleanGetter(ClassElement element, String name) async { + final getter = element.lookUpGetter( name: name, - library: element.library2, + library: element.library, ); // Was the getter overridden at all? @@ -287,24 +287,24 @@ class DartTableResolver extends LocalElementResolver { return null; } - Future _overrideWithoutRowId(ClassElement2 element) async { + Future _overrideWithoutRowId(ClassElement element) async { return await _booleanGetter(element, 'withoutRowId'); } - Future _isStrict(ClassElement2 element) async { + Future _isStrict(ClassElement element) async { return await _booleanGetter(element, 'isStrict'); } Future> _parseColumns( - ClassElement2 element) async { + ClassElement element) async { // Returns true if the given field is a column defined as a getter - bool isGetterColumn(FieldElement2 e) { - return isColumn(e.type) && e.getter2 != null && !e.getter2!.isSynthetic; + bool isGetterColumn(FieldElement e) { + return isColumn(e.type) && e.getter != null && !e.getter!.isSynthetic; } // Returns true if the given field is a column defined as a late final variable declaration - Future isLateFinalColumn(FieldElement2 e) async { - final isLateFinalField = e.isLate && e.isFinal && e.getter2 != null; + Future isLateFinalColumn(FieldElement e) async { + final isLateFinalField = e.isLate && e.isFinal && e.getter != null; if (!isLateFinalField) return false; if (isColumn(e.type)) { @@ -319,9 +319,9 @@ class DartTableResolver extends LocalElementResolver { final declaration = (await resolver.driver.backend .loadElementDeclaration(e.baseElement) as VariableDeclaration); reportError(DriftAnalysisError.inDartAst( - declaration.declaredElement2!, + declaration.declaredElement!, declaration.endToken, - '\nIt seems that you forgot to initialize the `${e.getter2?.name3}` column on the `${element.name3}` table.\n' + '\nIt seems that you forgot to initialize the `${e.getter?.name}` column on the `${element.name}` table.\n' 'Solution: Add an extra pair of parentheses at the end of the column: `$declaration()`.', )); } @@ -331,30 +331,30 @@ class DartTableResolver extends LocalElementResolver { final Set columnNames = {}; for (final element in element.allSupertypes - .map((t) => t.element3) - .followedBy([element]).expand((e) => e.fields2)) { + .map((t) => t.element) + .followedBy([element]).expand((e) => e.fields)) { if (isGetterColumn(element) || await isLateFinalColumn(element)) { - columnNames.add(element.name3!); + columnNames.add(element.name!); } } final fields = columnNames .map((name) { final getter = - element.lookUpGetter2(name: name, library: element.library2); - return getter!.variable3; + element.lookUpGetter(name: name, library: element.library); + return getter!.variable; }) .nonNulls .toList(); - final all = { - for (final entry in fields) entry.getter2 ?? entry: entry.name3! + final all = { + for (final entry in fields) entry.getter ?? entry: entry.name! }; final results = []; for (final field in fields) { final ColumnDeclaration node; final PendingColumnInformation? column; - if (field.getter2!.isSynthetic) { + if (field.getter!.isSynthetic) { node = ColumnDeclaration( await resolver.driver.backend .loadElementDeclaration(field.baseElement) @@ -364,10 +364,10 @@ class DartTableResolver extends LocalElementResolver { } else { node = ColumnDeclaration( null, - await resolver.driver.backend.loadElementDeclaration(field.getter2!) + await resolver.driver.backend.loadElementDeclaration(field.getter!) as MethodDeclaration); - column = await _parseColumn(node, field.getter2!, all); + column = await _parseColumn(node, field.getter!, all); } if (column != null) { @@ -380,8 +380,8 @@ class DartTableResolver extends LocalElementResolver { Future _parseColumn( ColumnDeclaration declaration, - Element2 element, - Map allColumns, + Element element, + Map allColumns, ) async { return ColumnParser(this, allColumns).parse(declaration, element); } @@ -389,11 +389,11 @@ class DartTableResolver extends LocalElementResolver { Future> _readCustomConstraints( Set references, List localColumns, - ClassElement2 element, + ClassElement element, ) async { - final customConstraints = element.lookUpGetter2( + final customConstraints = element.lookUpGetter( name: 'customConstraints', - library: element.library2, + library: element.library, ); if (customConstraints == null || customConstraints.isFromDefaultTable) { diff --git a/drift_dev/lib/src/analysis/resolver/dart/view.dart b/drift_dev/lib/src/analysis/resolver/dart/view.dart index 17ffd48db..73c6b803f 100644 --- a/drift_dev/lib/src/analysis/resolver/dart/view.dart +++ b/drift_dev/lib/src/analysis/resolver/dart/view.dart @@ -1,5 +1,5 @@ import 'package:analyzer/dart/ast/ast.dart'; -import 'package:analyzer/dart/element/element2.dart'; +import 'package:analyzer/dart/element/element.dart'; import 'package:analyzer/dart/element/type.dart'; import 'package:collection/collection.dart'; import 'package:drift/drift.dart' show DriftSqlType; @@ -28,11 +28,11 @@ class DartViewResolver extends LocalElementResolver { DriftDeclaration.dartElement(discovered.dartElement), columns: columns, nameOfRowClass: dataClassInfo.enforcedName ?? - dataClassNameForClassName(discovered.dartElement.name3!), + dataClassNameForClassName(discovered.dartElement.name!), existingRowClass: dataClassInfo.existingClass, customParentClass: dataClassInfo.extending, interfacesForRowClass: dataClassInfo.interfaces, - entityInfoName: '\$${discovered.dartElement.name3}View', + entityInfoName: '\$${discovered.dartElement.name}View', source: DartViewSource(structure.dartQuerySource, structure.primarySource, staticReferences, structure.staticSource), references: [ @@ -43,8 +43,8 @@ class DartViewResolver extends LocalElementResolver { Future> _parseStaticReferences() async { return await Stream.fromIterable(discovered.dartElement.allSupertypes - .map((t) => t.element3) - .followedBy([discovered.dartElement]).expand((e) => e.fields2)) + .map((t) => t.element) + .followedBy([discovered.dartElement]).expand((e) => e.fields)) .asyncMap((field) => _getStaticReference(field)) .where((ref) => ref != null) .cast() @@ -52,23 +52,23 @@ class DartViewResolver extends LocalElementResolver { } Future _getStaticReference( - FieldElement2 field) async { + FieldElement field) async { final type = field.type; final knownTypes = await resolver.driver.knownTypes; - final typeSystem = field.library2.typeSystem; + final typeSystem = field.library.typeSystem; if (type is! InterfaceType || !typeSystem.isAssignableTo(type, knownTypes.tableType)) { return null; } - if (field.getter2 case final getter?) { + if (field.getter case final getter?) { try { final node = await resolver.driver.backend.loadElementDeclaration(getter); if (node is MethodDeclaration && node.body is EmptyFunctionBody) { final table = await resolveDartReferenceOrReportError( - type.element3, (msg) { + type.element, (msg) { return DriftAnalysisError.inDartAst( field, node.returnType ?? node.name, msg); }); @@ -86,7 +86,7 @@ class DartViewResolver extends LocalElementResolver { Future<_ParsedDartViewSelect> _parseSelectStructure( List references, ) async { - MethodElement2? as; + MethodElement? as; _ParsedDartViewSelect error(String message) { reportError(DriftAnalysisError.forDartElement( @@ -106,8 +106,8 @@ class DartViewResolver extends LocalElementResolver { ); } - as = discovered.dartElement.methods2 - .where((method) => method.name3 == 'as') + as = discovered.dartElement.methods + .where((method) => method.name == 'as') .firstOrNull; if (as == null) { @@ -250,7 +250,7 @@ class DartViewResolver extends LocalElementResolver { )); } else { // Locally-defined column, defined as a getter on this view class. - final getter = discovered.dartElement.thisType.getGetter2(parts[0]); + final getter = discovered.dartElement.thisType.getGetter(parts[0]); if (getter == null) { reportError(DriftAnalysisError.inDartAst( @@ -287,8 +287,8 @@ class DartViewResolver extends LocalElementResolver { columns.add(DriftColumn( declaration: DriftDeclaration.dartElement(getter), sqlType: ColumnType.drift(sqlType), - nameInDart: getter.name3!, - nameInSql: ReCase(getter.name3!).snakeCase, + nameInDart: getter.name!, + nameInSql: ReCase(getter.name!).snakeCase, nullable: true, constraints: [ resolver.driver.options.assumeCorrectReference diff --git a/drift_dev/lib/src/analysis/resolver/discover.dart b/drift_dev/lib/src/analysis/resolver/discover.dart index e35dc5a37..65290cb37 100644 --- a/drift_dev/lib/src/analysis/resolver/discover.dart +++ b/drift_dev/lib/src/analysis/resolver/discover.dart @@ -1,6 +1,6 @@ import 'package:analyzer/dart/ast/ast.dart' as dart; import 'package:analyzer/dart/constant/value.dart'; -import 'package:analyzer/dart/element/element2.dart'; +import 'package:analyzer/dart/element/element.dart'; import 'package:analyzer/dart/element/type.dart'; import 'package:analyzer/dart/element/visitor2.dart'; import 'package:drift/drift.dart' show TableIndex; @@ -59,7 +59,7 @@ class DiscoverStep { switch (extension) { case '.dart': - LibraryElement2 library; + LibraryElement library; try { library = await _driver.backend.readDart(_file.ownUri); } catch (e) { @@ -157,7 +157,7 @@ class DiscoverStep { class _FindDartElements extends RecursiveElementVisitor2 { final DiscoverStep _discoverStep; - final LibraryElement2 _library; + final LibraryElement _library; final List imports = []; @@ -185,8 +185,8 @@ class _FindDartElements extends RecursiveElementVisitor2 { static TypeChecker _checker(InterfaceType type) { // Workaround for https://github.com/dart-lang/build/issues/3796, the // analysis sessions for _knownTypes and this type might be different. - final uri = type.element3.library2.uri; - return TypeChecker.fromUrl(uri.replace(fragment: type.element3.name3)); + final uri = type.element.library.uri; + return TypeChecker.fromUrl(uri.replace(fragment: type.element.name)); } Future find() async { @@ -194,7 +194,7 @@ class _FindDartElements extends RecursiveElementVisitor2 { await Future.wait(_pendingWork); } - bool _isDslTable(ClassElement2 element) { + bool _isDslTable(ClassElement element) { // check if the table inherits from the drift table class. The !isExactly // check is here because we run this generator on drift itself and we get // weird errors for the Table class itself. In weird cases where we iterate @@ -208,17 +208,17 @@ class _FindDartElements extends RecursiveElementVisitor2 { !element.mixins.any((e) => e.nameIfInterfaceType == 'TableInfo'); } - bool _isDslView(ClassElement2 element) { + bool _isDslView(ClassElement element) { return _isView.isAssignableFrom(element) && !_isView.isExactly(element); } @override - void visitClassElement(ClassElement2 element) { + void visitClassElement(ClassElement element) { if (_isDslTable(element)) { // Ignore "abstract tables" (i.e. table classes with abstract methods) - final declaresAbstractMethod = element.methods2 - .cast() - .followedBy(element.getters2) + final declaresAbstractMethod = element.methods + .cast() + .followedBy(element.getters) .any((e) => e.isAbstract); if (!declaresAbstractMethod) { _pendingWork.add(Future.sync(() async { @@ -246,7 +246,7 @@ class _FindDartElements extends RecursiveElementVisitor2 { final firstDb = _isDatabase.firstAnnotationOf(element); final firstDao = _isDao.firstAnnotationOf(element); - final id = _discoverStep._id(element.name3!); + final id = _discoverStep._id(element.name!); if (firstDb != null) { found.add(DiscoveredBaseAccessor(id, element, firstDb, true)); @@ -258,7 +258,7 @@ class _FindDartElements extends RecursiveElementVisitor2 { super.visitClassElement(element); } - void _handleImportOrExport(LibraryElement2? imported, bool isExported) { + void _handleImportOrExport(LibraryElement? imported, bool isExported) { if (imported != null && !imported.isInSdk) { _pendingWork.add(Future(() async { final uri = await _discoverStep._driver.backend.uriOfDart(imported); @@ -268,29 +268,29 @@ class _FindDartElements extends RecursiveElementVisitor2 { } @override - void visitLibraryElement(LibraryElement2 element) { + void visitLibraryElement(LibraryElement element) { for (final fragment in element.fragments) { - for (final export in fragment.libraryExports2) { - _handleImportOrExport(export.exportedLibrary2, true); + for (final export in fragment.libraryExports) { + _handleImportOrExport(export.exportedLibrary, true); } - for (final import in fragment.libraryImports2) { - _handleImportOrExport(import.importedLibrary2, false); + for (final import in fragment.libraryImports) { + _handleImportOrExport(import.importedLibrary, false); } } super.visitLibraryElement(element); } - String _defaultNameForTableOrView(ClassElement2 definingElement) { + String _defaultNameForTableOrView(ClassElement definingElement) { return _discoverStep._driver.options.caseFromDartToSql - .apply(definingElement.name3!); + .apply(definingElement.name!); } /// Finds a [TableIndex] annotations on the [table]. Iterable<(ElementAnnotation, DriftElementId)> _tableIndexAnnotation( - ClassElement2 table) sync* { - for (final annotation in table.metadata2.annotations) { + ClassElement table) sync* { + for (final annotation in table.metadata.annotations) { final computed = annotation.computeConstantValue(); final type = computed?.type; @@ -316,8 +316,8 @@ class _FindDartElements extends RecursiveElementVisitor2 { } } - DartObject? _driftViewAnnotation(ClassElement2 view) { - for (final annotation in view.metadata2.annotations) { + DartObject? _driftViewAnnotation(ClassElement view) { + for (final annotation in view.metadata.annotations) { final computed = annotation.computeConstantValue(); final annotationClass = computed!.type!.nameIfInterfaceType; @@ -336,10 +336,10 @@ class _FindDartElements extends RecursiveElementVisitor2 { /// named `tracked_user`. /// The default behavior can be overridden by declaring a getter named /// `tableName` returning a direct string literal. - Future _sqlNameOfTable(ClassElement2 table) async { + Future _sqlNameOfTable(ClassElement table) async { final defaultName = _defaultNameForTableOrView(table); - final tableNameGetter = table.lookUpGetter2( + final tableNameGetter = table.lookUpGetter( name: 'tableName', library: _library, ); diff --git a/drift_dev/lib/src/analysis/resolver/drift/element_resolver.dart b/drift_dev/lib/src/analysis/resolver/drift/element_resolver.dart index e23ba238f..8f5ee425f 100644 --- a/drift_dev/lib/src/analysis/resolver/drift/element_resolver.dart +++ b/drift_dev/lib/src/analysis/resolver/drift/element_resolver.dart @@ -1,5 +1,5 @@ import 'package:analyzer/dart/ast/ast.dart' as dart; -import 'package:analyzer/dart/element/element2.dart'; +import 'package:analyzer/dart/element/element.dart'; import 'package:analyzer/dart/element/nullability_suffix.dart'; import 'package:collection/collection.dart'; import 'package:analyzer/dart/element/type.dart'; @@ -84,7 +84,7 @@ abstract class DriftElementResolver linter.sqlParserErrors.forEach(reportLint); } - Future _findInDart(String identifier) async { + Future _findInDart(String identifier) async { final dartImports = file.discovery!.importDependencies .map((e) => e.uri) .where((importUri) => importUri.path.endsWith('.dart')) @@ -110,13 +110,13 @@ abstract class DriftElementResolver 'Could not find `$identifier`, are you missing an import?'), ); return null; - } else if (element is InterfaceElement2) { - final library = element.library2; - return library.typeSystem.instantiateInterfaceToBounds2( + } else if (element is InterfaceElement) { + final library = element.library; + return library.typeSystem.instantiateInterfaceToBounds( element: element, nullabilitySuffix: NullabilitySuffix.none); - } else if (element is TypeAliasElement2) { - final library = element.library2; - return library.typeSystem.instantiateTypeAliasToBounds2( + } else if (element is TypeAliasElement) { + final library = element.library; + return library.typeSystem.instantiateTypeAliasToBounds( element: element, nullabilitySuffix: NullabilitySuffix.none); } else { reportError(DriftAnalysisError.inDriftFile( @@ -140,14 +140,14 @@ abstract class DriftElementResolver FoundDartClass? foundDartClass; - if (element is InterfaceElement2) { + if (element is InterfaceElement) { foundDartClass = FoundDartClass(element, null); - } else if (element is TypeAliasElement2) { + } else if (element is TypeAliasElement) { // Resolve type alias to a class, or use record if we have one. final innerType = element.aliasedType; if (innerType is InterfaceType) { foundDartClass = - FoundDartClass(innerType.element3, innerType.typeArguments); + FoundDartClass(innerType.element, innerType.typeArguments); } else if (innerType is RecordType) { return validateRowClassFromRecordType( element, diff --git a/drift_dev/lib/src/analysis/resolver/drift/sqlparser/drift_lints.dart b/drift_dev/lib/src/analysis/resolver/drift/sqlparser/drift_lints.dart index 7c77a2392..ac2275d89 100644 --- a/drift_dev/lib/src/analysis/resolver/drift/sqlparser/drift_lints.dart +++ b/drift_dev/lib/src/analysis/resolver/drift/sqlparser/drift_lints.dart @@ -1,4 +1,4 @@ -import 'package:analyzer/dart/element/element2.dart'; +import 'package:analyzer/dart/element/element.dart'; import 'package:analyzer/dart/element/type.dart'; import 'package:collection/collection.dart'; import 'package:sqlparser/sqlparser.dart'; @@ -128,9 +128,9 @@ class _LintingVisitor extends RecursiveVisitor { if (hint != null && hint.converter.isDriftEnumTypeConverter) { final enumElement = - (hint.converter.dartType as InterfaceType).element3 as EnumElement2; + (hint.converter.dartType as InterfaceType).element as EnumElement; final entryCount = - enumElement.fields2.where((e) => e.isEnumConstant).length; + enumElement.fields.where((e) => e.isEnumConstant).length; var value = e.value; final parent = e.parent; @@ -155,7 +155,7 @@ class _LintingVisitor extends RecursiveVisitor { linter.sqlParserErrors.add(AnalysisError( type: AnalysisErrorType.other, message: 'From context, it seems like this int literal is written ' - 'into a column with an enum type `${enumElement.name3}`. However, ' + 'into a column with an enum type `${enumElement.name}`. However, ' 'that enum only has $entryCount values, the constant index is ' 'too large.', relevantNode: span, @@ -307,14 +307,14 @@ class _LintingVisitor extends RecursiveVisitor { if (hint != null && hint.converter.isDriftEnumTypeConverter) { final enumElement = - (hint.converter.dartType as InterfaceType).element3 as EnumElement2; - final field = enumElement.getField2(e.value); + (hint.converter.dartType as InterfaceType).element as EnumElement; + final field = enumElement.getField(e.value); if (field == null || !field.isEnumConstant) { linter.sqlParserErrors.add(AnalysisError( type: AnalysisErrorType.other, message: 'From context, it seems like this text literal is written ' - 'into a column with an enum type `${enumElement.name3}`. However, ' + 'into a column with an enum type `${enumElement.name}`. However, ' 'that enum declares no member with this name.', relevantNode: e, )); diff --git a/drift_dev/lib/src/analysis/resolver/intermediate_state.dart b/drift_dev/lib/src/analysis/resolver/intermediate_state.dart index 8d3028954..d6900856b 100644 --- a/drift_dev/lib/src/analysis/resolver/intermediate_state.dart +++ b/drift_dev/lib/src/analysis/resolver/intermediate_state.dart @@ -1,5 +1,5 @@ import 'package:analyzer/dart/constant/value.dart'; -import 'package:analyzer/dart/element/element2.dart'; +import 'package:analyzer/dart/element/element.dart'; import 'package:drift/drift.dart' show DriftView; import 'package:sqlparser/sqlparser.dart'; @@ -24,17 +24,17 @@ typedef DiscoveredDriftIndex = DiscoveredDriftElement; typedef DiscoveredDriftTrigger = DiscoveredDriftElement; typedef DiscoveredDriftStatement = DiscoveredDriftElement; -abstract class DiscoveredDartElement +abstract class DiscoveredDartElement extends DiscoveredElement { final DE dartElement; @override - String? get dartElementName => dartElement.name3; + String? get dartElementName => dartElement.name; DiscoveredDartElement(super.ownId, this.dartElement); } -class DiscoveredDartTable extends DiscoveredDartElement { +class DiscoveredDartTable extends DiscoveredDartElement { @override DriftElementKind get kind => DriftElementKind.table; @@ -49,7 +49,7 @@ class DiscoveredDartTable extends DiscoveredDartElement { ); } -class DiscoveredDartView extends DiscoveredDartElement { +class DiscoveredDartView extends DiscoveredDartElement { /// The [DriftView] annotation on this class, if there is any. DartObject? viewAnnotation; @@ -59,7 +59,7 @@ class DiscoveredDartView extends DiscoveredDartElement { DiscoveredDartView(super.ownId, super.dartElement, this.viewAnnotation); } -class DiscoveredDartIndex extends DiscoveredDartElement { +class DiscoveredDartIndex extends DiscoveredDartElement { final DriftElementId onTable; ElementAnnotation annotation; @@ -74,7 +74,7 @@ class DiscoveredDartIndex extends DiscoveredDartElement { super.ownId, super.dartElement, this.onTable, this.annotation); } -class DiscoveredBaseAccessor extends DiscoveredDartElement { +class DiscoveredBaseAccessor extends DiscoveredDartElement { final bool isDatabase; final DartObject annotation; diff --git a/drift_dev/lib/src/analysis/resolver/queries/existing_row_class.dart b/drift_dev/lib/src/analysis/resolver/queries/existing_row_class.dart index ce42b35cd..6eed1bd90 100644 --- a/drift_dev/lib/src/analysis/resolver/queries/existing_row_class.dart +++ b/drift_dev/lib/src/analysis/resolver/queries/existing_row_class.dart @@ -197,10 +197,10 @@ class MatchExistingTypeForQuery { if (desiredType is InterfaceType) { // For interface types (we assume classes), see if we can fit the query // into the classes' default constructor. - final element = desiredType.element3; + final element = desiredType.element; final constructor = - desiredType.lookUpConstructor2(constructorName, element.library2); + desiredType.lookUpConstructor(constructorName, element.library); if (constructor == null) { if (constructorName == null) { reportError( @@ -216,21 +216,21 @@ class MatchExistingTypeForQuery { // Match parameters to columns by name for (final parameter in constructor.formalParameters) { - final column = unmatchedColumnsByName.remove(parameter.name3); + final column = unmatchedColumnsByName.remove(parameter.name); if (column != null) { final verified = _verifyArgument(column, parameter.type, - 'Parameter ${parameter.name3}', reportError); + 'Parameter ${parameter.name}', reportError); if (verified == null) continue; if (parameter.isPositional) { positionalColumns.add(verified); } else { - namedColumns[parameter.name3!] = verified; + namedColumns[parameter.name!] = verified; } } else if (!parameter.isOptional) { reportError( - 'Unexpected parameter ${parameter.name3} has no matching column.'); + 'Unexpected parameter ${parameter.name} has no matching column.'); } } } @@ -360,7 +360,7 @@ class MatchExistingTypeForQuery { // A nested query has its own type, which we can recursively try to // structure in the existing type. final asList = - existingTypeForColumn.asInstanceOf2(typeProvider.listElement2); + existingTypeForColumn.asInstanceOf(typeProvider.listElement); if (asList == null) { reportError('$name must be a List'); return null; diff --git a/drift_dev/lib/src/analysis/resolver/resolver.dart b/drift_dev/lib/src/analysis/resolver/resolver.dart index fa7a068f2..fda8a1563 100644 --- a/drift_dev/lib/src/analysis/resolver/resolver.dart +++ b/drift_dev/lib/src/analysis/resolver/resolver.dart @@ -1,4 +1,4 @@ -import 'package:analyzer/dart/element/element2.dart'; +import 'package:analyzer/dart/element/element.dart'; import 'package:collection/collection.dart'; import 'package:sqlparser/sqlparser.dart'; import 'package:sqlparser/utils/find_referenced_tables.dart'; @@ -171,19 +171,19 @@ class DriftResolver { /// Resolves a Dart element reference, if the referenced Dart [element] /// defines an element understood by drift. Future resolveDartReference( - DriftElementId owner, Element2 element) async { - final uri = await driver.backend.uriOfDart(element.library2!); + DriftElementId owner, Element element) async { + final uri = await driver.backend.uriOfDart(element.library!); final state = driver.cache.stateForUri(uri); final existing = state.definedElements.firstWhereOrNull( - (existing) => existing.dartElementName == element.name3); + (existing) => existing.dartElementName == element.name); if (existing != null) { return resolveReferencedElement(owner, existing.ownId); } else { return InvalidReferenceResult( InvalidReferenceError.noElementWichSuchName, - 'The referenced element, ${element.name3}, is not understood by drift.', + 'The referenced element, ${element.name}, is not understood by drift.', ); } } @@ -252,7 +252,7 @@ abstract class LocalElementResolver { } Future resolveDartReferenceOrReportError( - Element2 reference, + Element reference, DriftAnalysisError Function(String msg) createError, ) async { final result = diff --git a/drift_dev/lib/src/analysis/resolver/shared/dart_types.dart b/drift_dev/lib/src/analysis/resolver/shared/dart_types.dart index b2a3478f0..209e65191 100644 --- a/drift_dev/lib/src/analysis/resolver/shared/dart_types.dart +++ b/drift_dev/lib/src/analysis/resolver/shared/dart_types.dart @@ -1,5 +1,5 @@ import 'package:analyzer/dart/ast/ast.dart'; -import 'package:analyzer/dart/element/element2.dart'; +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/dart/element/type_provider.dart'; @@ -18,7 +18,7 @@ import '../dart/helper.dart'; import '../resolver.dart'; class FoundDartClass { - final InterfaceElement2 classElement; + final InterfaceElement classElement; /// The instantiation of the [classElement], if the found type was a generic /// typedef. @@ -40,7 +40,7 @@ ExistingRowClass? validateExistingClass( } final desiredClass = dartClass.classElement; - final library = desiredClass.library2; + final library = desiredClass.library; var isAsyncFactory = false; if (desiredClass.thisType.isDartCoreRecord) { @@ -55,7 +55,7 @@ ExistingRowClass? validateExistingClass( ); } - ExecutableElement2? ctor; + ExecutableElement? ctor; final InterfaceType instantiation; if (dartClass.instantiation != null) { @@ -66,15 +66,15 @@ ExistingRowClass? validateExistingClass( // If we have an instantation, search the constructor on the type because it // will report the right parameter types if they're generic. - ctor = instantiation.lookUpConstructor2(constructor, desiredClass.library2); + ctor = instantiation.lookUpConstructor(constructor, desiredClass.library); } else { - ctor = desiredClass.getNamedConstructor2(constructor); - instantiation = library.typeSystem.instantiateInterfaceToBounds2( + ctor = desiredClass.getNamedConstructor(constructor); + instantiation = library.typeSystem.instantiateInterfaceToBounds( element: desiredClass, nullabilitySuffix: NullabilitySuffix.none); } if (ctor == null) { - final fallback = desiredClass.getMethod2(constructor); + final fallback = desiredClass.getMethod(constructor); if (fallback != null) { if (!fallback.isStatic) { @@ -126,7 +126,7 @@ ExistingRowClass? validateExistingClass( final namedColumns = {}; for (final parameter in ctor.formalParameters) { - final column = unmatchedColumnsByName.remove(parameter.name3); + final column = unmatchedColumnsByName.remove(parameter.name); if (column != null) { if (parameter.isPositional) { positionalColumns.add(column); @@ -138,7 +138,7 @@ ExistingRowClass? validateExistingClass( } else if (!parameter.isOptional) { step.reportError(DriftAnalysisError.forDartElement( parameter, - 'Unexpected parameter ${parameter.name3} which has no matching column.', + 'Unexpected parameter ${parameter.name} which has no matching column.', )); } } @@ -146,13 +146,13 @@ ExistingRowClass? validateExistingClass( final getters = {}; final missingGetters = []; for (final column in columns) { - final matchingField = dartClass.classElement.lookUpGetter2( + final matchingField = dartClass.classElement.lookUpGetter( name: column.nameInDart, - library: dartClass.classElement.library2, + library: dartClass.classElement.library, ); if (matchingField case final field?) { - getters[column.nameInSql] = field.name3!; + getters[column.nameInSql] = field.name!; } else { missingGetters.add(column.nameInDart); } @@ -178,7 +178,7 @@ ExistingRowClass? validateExistingClass( ], namedColumns: { for (final named in namedColumns.entries) - named.key.name3!: named.value.nameInSql, + named.key.name!: named.value.nameInSql, }, columnGetters: getters, generateInsertable: generateInsertable, @@ -187,14 +187,14 @@ ExistingRowClass? validateExistingClass( } ExistingRowClass validateRowClassFromRecordType( - Element2 element, + Element element, Iterable columns, RecordType dartType, bool generateInsertable, LocalElementResolver step, KnownDriftTypes knownTypes, ) { - final library = element.library2!; + final library = element.library!; final unmatchedColumnsByName = { for (final column in columns) column.nameInDart: column @@ -282,7 +282,7 @@ enum EnumType { } CustomColumnType? readCustomType( - LibraryElement2 library, + LibraryElement library, Expression dartExpression, KnownDriftTypes helper, void Function(String) reportError, @@ -302,7 +302,7 @@ CustomColumnType? readCustomType( } AppliedTypeConverter? readTypeConverter( - LibraryElement2 library, + LibraryElement library, Expression dartExpression, ColumnType columnType, bool columnIsNullable, @@ -377,8 +377,8 @@ AppliedTypeConverter readEnumConverter( reportError('Not a class: `$dartEnumType`'); } - final creatingClass = dartEnumType.element3; - if (creatingClass is! EnumElement2) { + final creatingClass = dartEnumType.element; + if (creatingClass is! EnumElement) { reportError('Not an enum: `${creatingClass!.displayName}`'); } @@ -394,9 +394,9 @@ AppliedTypeConverter readEnumConverter( } builder ..addText('<') - ..addTopLevelElement(dartEnumType.element3!) + ..addTopLevelElement(dartEnumType.element!) ..addText('>(') - ..addTopLevelElement(dartEnumType.element3!) + ..addTopLevelElement(dartEnumType.element!) ..addText('.values)'); }); @@ -423,7 +423,7 @@ void _checkParameterType( KnownDriftTypes helper, ) { final type = element.type; - final library = element.library2!; + final library = element.library!; final typesystem = library.typeSystem; void error(String message) { @@ -511,14 +511,14 @@ extension on TypeProvider { case DriftSqlType.int: return intType; case DriftSqlType.bigInt: - return intElement2.library2.getClass2('BigInt')!.instantiate( + return intElement.library.getClass('BigInt')!.instantiate( typeArguments: const [], nullabilitySuffix: NullabilitySuffix.none); case DriftSqlType.string: return stringType; case DriftSqlType.bool: return boolType; case DriftSqlType.dateTime: - return intElement2.library2.getClass2('DateTime')!.instantiate( + return intElement.library.getClass('DateTime')!.instantiate( typeArguments: const [], nullabilitySuffix: NullabilitySuffix.none); case DriftSqlType.blob: return knownTypes.uint8List; diff --git a/drift_dev/lib/src/analysis/resolver/shared/data_class.dart b/drift_dev/lib/src/analysis/resolver/shared/data_class.dart index a98473c36..edbde900a 100644 --- a/drift_dev/lib/src/analysis/resolver/shared/data_class.dart +++ b/drift_dev/lib/src/analysis/resolver/shared/data_class.dart @@ -1,5 +1,5 @@ import 'package:analyzer/dart/constant/value.dart'; -import 'package:analyzer/dart/element/element2.dart'; +import 'package:analyzer/dart/element/element.dart'; import 'package:analyzer/dart/element/type.dart'; import 'package:drift_dev/src/analysis/results/result_sets.dart'; @@ -34,15 +34,15 @@ String dataClassNameForClassName(String tableName) { CustomParentClass? parseCustomParentClass( String? dartTypeName, DartObject dataClassName, - ClassElement2 element, + ClassElement element, LocalElementResolver resolver, ) { final extending = dataClassName.getField('extending'); if (extending != null && !extending.isNull) { final extendingType = extending.toTypeValue(); if (extendingType is InterfaceType) { - final superType = extendingType.allSupertypes.any( - (type) => isFromDrift(type) && type.element3.name3 == 'DataClass'); + final superType = extendingType.allSupertypes + .any((type) => isFromDrift(type) && type.element.name == 'DataClass'); if (!superType) { resolver.reportError( DriftAnalysisError.forDartElement( @@ -64,7 +64,7 @@ CustomParentClass? parseCustomParentClass( } final defaultConstructor = - extendingType.lookUpConstructor2(null, element.library2); + extendingType.lookUpConstructor(null, element.library); var isConst = true; AnnotatedDartCode code; if (defaultConstructor == null) { @@ -86,10 +86,10 @@ CustomParentClass? parseCustomParentClass( final genericType = extendingType.typeArguments[0]; if (genericType.isDartCoreObject || genericType is DynamicType) { code = AnnotatedDartCode([ - DartTopLevelSymbol.topLevelElement(extendingType.element3), + DartTopLevelSymbol.topLevelElement(extendingType.element), const DartLexeme('<'), DartTopLevelSymbol( - dartTypeName ?? dataClassNameForClassName(element.name3!), + dartTypeName ?? dataClassNameForClassName(element.name!), null, ), const DartLexeme('>'), diff --git a/drift_dev/lib/src/analysis/results/dart.dart b/drift_dev/lib/src/analysis/results/dart.dart index ef592942b..f836e54ea 100644 --- a/drift_dev/lib/src/analysis/results/dart.dart +++ b/drift_dev/lib/src/analysis/results/dart.dart @@ -2,7 +2,7 @@ import 'package:analyzer/dart/ast/ast.dart'; import 'package:analyzer/dart/ast/syntactic_entity.dart'; import 'package:analyzer/dart/ast/token.dart'; import 'package:analyzer/dart/ast/visitor.dart'; -import 'package:analyzer/dart/element/element2.dart'; +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/dart/element/type_visitor.dart'; @@ -46,7 +46,7 @@ class AnnotatedDartCode { return builder.build(); } - factory AnnotatedDartCode.topLevelElement(Element2 element) { + factory AnnotatedDartCode.topLevelElement(Element element) { return AnnotatedDartCode([DartTopLevelSymbol.topLevelElement(element)]); } @@ -112,7 +112,7 @@ class AnnotatedDartCodeBuilder { _elements.add(symbol); } - void addTopLevelElement(Element2 element) { + void addTopLevelElement(Element element) { _addPendingText(); _elements.add(DartTopLevelSymbol.topLevelElement(element)); } @@ -129,7 +129,7 @@ class AnnotatedDartCodeBuilder { void addAstNode( AstNode node, { Set exclude = const {}, - Map taggedElements = const {}, + Map taggedElements = const {}, }) { final visitor = _AddFromAst(this, exclude, taggedElements); node.accept(visitor); @@ -299,21 +299,21 @@ final class DartTopLevelSymbol implements DartCodeElement { return DartTopLevelSymbol(name, _driftUri); } - factory DartTopLevelSymbol.topLevelElement(Element2 element, + factory DartTopLevelSymbol.topLevelElement(Element element, [String? elementName]) { - assert(element.library2?.children2.contains(element) == true, - '${element.name3} is not a top-level element'); + assert(element.library?.children.contains(element) == true, + '${element.name} is not a top-level element'); // We're using this to recover the right import URI when using // `package:build`: // https://github.com/dart-lang/build/blob/62cef9fae18dbde3ada7993986cca102270752d0/build_resolvers/lib/src/resolver.dart#L309-L319 - var sourceUri = element.library2!.uri; + var sourceUri = element.library!.uri; if (sourceUri.isScheme('package') || sourceUri.isScheme('asset')) { sourceUri = AssetId.resolve(sourceUri).uri; } return DartTopLevelSymbol( - elementName ?? element.name3 ?? '(???)', sourceUri); + elementName ?? element.name ?? '(???)', sourceUri); } factory DartTopLevelSymbol.fromJson(Map json) => @@ -407,7 +407,7 @@ class _AddFromDartType extends UnifyingTypeVisitor { _builder.addText(', '); } - _builder.addText(arg.name3!); + _builder.addText(arg.name!); final bound = arg.bound; if (bound != null) { _builder.addText(' extends '); @@ -445,7 +445,7 @@ class _AddFromDartType extends UnifyingTypeVisitor { parameter.type.accept(this); if (parameter.isNamed) { - _builder.addText(' ${parameter.name3!}'); + _builder.addText(' ${parameter.name!}'); } i++; } @@ -461,10 +461,10 @@ class _AddFromDartType extends UnifyingTypeVisitor { @override void visitInterfaceType(InterfaceType type) { if (type.alias case final alias?) { - _builder.addTopLevelElement(alias.element2); + _builder.addTopLevelElement(alias.element); _addTypeArguments(alias.typeArguments); } else { - _builder.addTopLevelElement(type.element3); + _builder.addTopLevelElement(type.element); _addTypeArguments(type.typeArguments); } @@ -502,7 +502,7 @@ class _AddFromDartType extends UnifyingTypeVisitor { @override void visitTypeParameterType(TypeParameterType type) { - _builder.addText(type.element3.name3!); + _builder.addText(type.element.name!); _writeSuffix(type.nullabilitySuffix); } @@ -516,12 +516,12 @@ class _AddFromDartType extends UnifyingTypeVisitor { class _AddFromAst extends GeneralizingAstVisitor { final AnnotatedDartCodeBuilder _builder; final Set _excluding; - final Map _taggedElements; + final Map _taggedElements; _AddFromAst(this._builder, this._excluding, this._taggedElements); - void _addTopLevelReference(Element2? element, Token name2) { - if (element == null || (element.isSynthetic && element.library2 == null)) { + void _addTopLevelReference(Element? element, Token name2) { + if (element == null || (element.isSynthetic && element.library == null)) { _builder.addText(name2.lexeme); } else { _builder.addTopLevel( @@ -572,7 +572,7 @@ class _AddFromAst extends GeneralizingAstVisitor { @override void visitExtensionOverride(ExtensionOverride node) { - _addTopLevelReference(node.element2, node.name); // Transform identifier + _addTopLevelReference(node.element, node.name); // Transform identifier node.typeArguments?.accept(this); node.argumentList.accept(this); } @@ -614,14 +614,14 @@ class _AddFromAst extends GeneralizingAstVisitor { } final element = node.methodName.element; - final enclosing = element?.enclosingElement2; - if (enclosing is! ExtensionElement2 || enclosing.name3 == null) { + final enclosing = element?.enclosingElement; + if (enclosing is! ExtensionElement || enclosing.name == null) { return super.visitMethodInvocation(node); } _builder ..addTopLevel( - DartTopLevelSymbol.topLevelElement(enclosing, enclosing.name3!)) + DartTopLevelSymbol.topLevelElement(enclosing, enclosing.name!)) ..addText('('); node.target?.accept(this); _builder @@ -634,7 +634,7 @@ class _AddFromAst extends GeneralizingAstVisitor { @override void visitNamedType(NamedType node) { - _addTopLevelReference(node.element2, node.name2); + _addTopLevelReference(node.element, node.name); if (node.typeArguments case final typeArgs?) { visitTypeArgumentList(typeArgs); } @@ -647,7 +647,7 @@ class _AddFromAst extends GeneralizingAstVisitor { @override void visitPrefixedIdentifier(PrefixedIdentifier node) { final targetOfPrefix = node.prefix.element; - if (targetOfPrefix is PrefixElement2) { + if (targetOfPrefix is PrefixElement) { // Ignore the prefix: We will add it back either way when generating // imports in the generated code later. visitSimpleIdentifier(node.identifier); @@ -659,11 +659,11 @@ class _AddFromAst extends GeneralizingAstVisitor { @override void visitSimpleIdentifier(SimpleIdentifier node) { final target = node.element; - final targetLibrary = target?.library2; + final targetLibrary = target?.library; // Referencing an element from an import, add necessary import prefix. final isTopLevel = - targetLibrary != null && targetLibrary.children2.contains(target); + targetLibrary != null && targetLibrary.children.contains(target); if (isTopLevel) { _builder.addTopLevelElement(target!); diff --git a/drift_dev/lib/src/analysis/results/element.dart b/drift_dev/lib/src/analysis/results/element.dart index 79f5092c1..a5abb0b21 100644 --- a/drift_dev/lib/src/analysis/results/element.dart +++ b/drift_dev/lib/src/analysis/results/element.dart @@ -1,4 +1,4 @@ -import 'package:analyzer/dart/element/element2.dart'; +import 'package:analyzer/dart/element/element.dart'; import 'package:json_annotation/json_annotation.dart'; import 'package:meta/meta.dart'; import 'package:path/path.dart' show url; @@ -56,9 +56,9 @@ class DriftDeclaration { DriftDeclaration(this.sourceUri, this.offset, this.name); - factory DriftDeclaration.dartElement(Element2 element) { - return DriftDeclaration(element.library2!.uri, - element.firstFragment.nameOffset2!, element.name3!); + factory DriftDeclaration.dartElement(Element element) { + return DriftDeclaration( + element.library!.uri, element.firstFragment.nameOffset!, element.name!); } factory DriftDeclaration.driftFile(SyntacticEntity node, Uri uri) { diff --git a/drift_dev/lib/src/analysis/serializer.dart b/drift_dev/lib/src/analysis/serializer.dart index 9273cd3a2..067ba3f3d 100644 --- a/drift_dev/lib/src/analysis/serializer.dart +++ b/drift_dev/lib/src/analysis/serializer.dart @@ -1,4 +1,4 @@ -import 'package:analyzer/dart/element/element2.dart'; +import 'package:analyzer/dart/element/element.dart'; import 'package:analyzer/dart/element/type.dart'; import 'package:collection/collection.dart'; import 'package:drift/drift.dart' show DriftSqlType, UpdateKind; @@ -412,7 +412,7 @@ class ElementDeserializer { ElementDeserializer(this.driver, this._currentlyReading); Future _readDartType(Uri import, int typeId) async { - LibraryElement2? element; + LibraryElement? element; final helpers = driver.cache.typeHelperLibraries; if (helpers.containsKey(import)) { @@ -427,7 +427,7 @@ class ElementDeserializer { } final typedef = - element.exportNamespace.get2('T$typeId') as TypeAliasElement2; + element.exportNamespace.get2('T$typeId') as TypeAliasElement; return typedef.aliasedType; } diff --git a/drift_dev/lib/src/backends/analyzer_context_backend.dart b/drift_dev/lib/src/backends/analyzer_context_backend.dart index cce92ad22..417b4d5bb 100644 --- a/drift_dev/lib/src/backends/analyzer_context_backend.dart +++ b/drift_dev/lib/src/backends/analyzer_context_backend.dart @@ -2,7 +2,7 @@ import 'package:analyzer/dart/analysis/analysis_context.dart'; import 'package:analyzer/dart/analysis/analysis_context_collection.dart'; import 'package:analyzer/dart/analysis/results.dart'; import 'package:analyzer/dart/ast/ast.dart'; -import 'package:analyzer/dart/element/element2.dart'; +import 'package:analyzer/dart/element/element.dart'; import 'package:analyzer/file_system/file_system.dart'; import 'package:analyzer/file_system/overlay_file_system.dart'; import 'package:analyzer/file_system/physical_file_system.dart'; @@ -74,12 +74,12 @@ class AnalysisContextBackend extends DriftBackend { } @override - Future loadElementDeclaration(Element2 element) async { - final library = element.library2; + Future loadElementDeclaration(Element element) async { + final library = element.library; if (library == null) return null; final info = - await context.currentSession.getResolvedLibraryByElement2(library); + await context.currentSession.getResolvedLibraryByElement(library); if (info is ResolvedLibraryResult) { return info.getFragmentDeclaration(element.firstFragment)?.node; } else { @@ -100,10 +100,10 @@ class AnalysisContextBackend extends DriftBackend { bool get canReadDart => true; @override - Future readDart(Uri uri) async { + Future readDart(Uri uri) async { final result = await context.currentSession.getLibraryByUri(uri.toString()); if (result is LibraryElementResult) { - return result.element2; + return result.element; } throw NotALibraryException(uri); @@ -160,7 +160,7 @@ class AnalysisContextBackend extends DriftBackend { } @override - Future resolveTopLevelElement( + Future resolveTopLevelElement( Uri context, String reference, Iterable imports) async { // Create a fake file next to the content final path = _pathOfUri(context)!; @@ -184,7 +184,7 @@ class AnalysisContextBackend extends DriftBackend { await this.context.currentSession.getResolvedLibrary(pathForTemp); if (result is ResolvedLibraryResult) { - return result.element2.firstFragment.scope.lookup(reference).getter2; + return result.element.firstFragment.scope.lookup(reference).getter; } } finally { provider.removeOverlay(path); diff --git a/drift_dev/lib/src/backends/build/backend.dart b/drift_dev/lib/src/backends/build/backend.dart index f726f7a8a..7f2bba082 100644 --- a/drift_dev/lib/src/backends/build/backend.dart +++ b/drift_dev/lib/src/backends/build/backend.dart @@ -1,7 +1,7 @@ import 'dart:convert'; import 'package:analyzer/dart/ast/ast.dart'; -import 'package:analyzer/dart/element/element2.dart'; +import 'package:analyzer/dart/element/element.dart'; import 'package:build/build.dart' as build; import 'package:build/build.dart'; import 'package:drift_dev/src/analysis/driver/state.dart'; @@ -33,7 +33,7 @@ class DriftBuildBackend extends DriftBackend { } @override - Future uriOfDart(Element2 element) async { + Future uriOfDart(Element element) async { final id = await _buildStep.resolver.assetIdForElement(element); return id.uri; } @@ -42,7 +42,7 @@ class DriftBuildBackend extends DriftBackend { bool get canReadDart => true; @override - Future readDart(Uri uri) async { + Future readDart(Uri uri) async { if (uri.scheme == 'dart') { final name = 'dart.${uri.path}'; final library = await _buildStep.resolver.findLibraryByName(name); @@ -62,7 +62,7 @@ class DriftBuildBackend extends DriftBackend { } @override - Future loadElementDeclaration(Element2 element) { + Future loadElementDeclaration(Element element) { return _buildStep.resolver.astNodeFor( element.firstFragment, resolve: true, @@ -96,8 +96,8 @@ class DriftBuildBackend extends DriftBackend { } final library = await _buildStep.resolver.libraryFor(tempDart); - final field = library.firstFragment.topLevelVariables2 - .firstWhere((element) => element.name2 == getter); + final field = library.firstFragment.topLevelVariables + .firstWhere((element) => element.name == getter); final fieldAst = await _buildStep.resolver.astNodeFor( field, resolve: true, @@ -112,14 +112,14 @@ class DriftBuildBackend extends DriftBackend { } @override - Future resolveTopLevelElement( + Future resolveTopLevelElement( Uri context, String reference, Iterable imports) async { final original = AssetId.resolve(context); final tempDart = original.changeExtension('.expr.temp.dart'); if (await _buildStep.canRead(tempDart)) { final library = await _buildStep.resolver.libraryFor(tempDart); - return library.firstFragment.scope.lookup(reference).getter2; + return library.firstFragment.scope.lookup(reference).getter; } else { // If there's no temporary file whose imports we can use, then that means // that there aren't any Dart imports in [context] at all. So we just need @@ -128,7 +128,7 @@ class DriftBuildBackend extends DriftBackend { // already. final libraryWeKnowExists = await _buildStep.resolver .libraryFor(AssetId.resolve(KnownDriftTypes.uri)); - final dartCore = libraryWeKnowExists.typeProvider.objectElement2.library2; + final dartCore = libraryWeKnowExists.typeProvider.objectElement.library; return dartCore.exportNamespace.get2(reference); } @@ -194,7 +194,7 @@ class BuildCacheReader implements AnalysisResultCacheReader { } @override - Future readTypeHelperFor(Uri uri) async { + Future readTypeHelperFor(Uri uri) async { final assetId = AssetId.resolve(uri).addExtension('.types.temp.dart'); if (await _buildStep.canRead(assetId)) { return _buildStep.resolver.libraryFor(assetId, allowSyntaxErrors: true); diff --git a/drift_dev/lib/src/cli/commands/migrate.dart b/drift_dev/lib/src/cli/commands/migrate.dart index f6d94a2a0..3b2691a55 100644 --- a/drift_dev/lib/src/cli/commands/migrate.dart +++ b/drift_dev/lib/src/cli/commands/migrate.dart @@ -6,10 +6,9 @@ import 'package:analyzer/dart/analysis/results.dart'; import 'package:analyzer/dart/ast/ast.dart'; import 'package:analyzer/dart/ast/syntactic_entity.dart'; import 'package:analyzer/dart/ast/visitor.dart'; -import 'package:analyzer/dart/element/element2.dart'; +import 'package:analyzer/dart/element/element.dart'; import 'package:analyzer/dart/element/type.dart'; import 'package:collection/collection.dart'; -import 'package:drift_dev/src/analysis/resolver/dart/helper.dart'; import 'package:drift_dev/src/utils/string_escaper.dart'; import 'package:io/ansi.dart'; import 'package:path/path.dart' as p; @@ -391,7 +390,7 @@ class _Moor2DriftDartRewriter extends GeneralizingAstVisitor { } void _transformIdentifier( - SyntacticEntity identifier, String name, Element2? element) { + SyntacticEntity identifier, String name, Element? element) { String? newIdentifier; if (name == 'FlutterQueryExecutor') { @@ -401,21 +400,20 @@ class _Moor2DriftDartRewriter extends GeneralizingAstVisitor { // It looks like left-hand identifiers of assignments don't have a // static element, infer from parent. if (identifier.parent is AssignmentExpression) { - element = (identifier.parent as AssignmentExpression).writeElement2; + element = (identifier.parent as AssignmentExpression).writeElement; } } if (element == null) return; - for (final annotation in element.metadataIfAnnotatable) { + for (final annotation in element.metadata.annotations) { final value = annotation.computeConstantValue(); if (value == null) return; final type = value.type; if (type is! InterfaceType) continue; - if (type.element3.library2.isDartCore && - type.element3.name3 == 'pragma') { + if (type.element.library.isDartCore && type.element.name == 'pragma') { final name = value.getField('name')!.toStringValue()!; if (name == 'moor2drift') { @@ -438,7 +436,7 @@ class _Moor2DriftDartRewriter extends GeneralizingAstVisitor { @override void visitNamedType(NamedType node) { - _transformIdentifier(node.name2, node.name2.lexeme, node.element2); + _transformIdentifier(node.name, node.name.lexeme, node.element); super.visitNamedType(node); } @@ -465,8 +463,8 @@ class _Moor2DriftDartRewriter extends GeneralizingAstVisitor { if (type is! InterfaceType || // note that even old moor code uses these names since UseMoor/UseDao // are type aliases to the new interfaces. - (type.element3.name3 != 'DriftDatabase' && - type.element3.name3 != 'DriftAccessor')) { + (type.element.name != 'DriftDatabase' && + type.element.name != 'DriftAccessor')) { return; } diff --git a/drift_dev/lib/src/services/schema/sqlite_to_drift.dart b/drift_dev/lib/src/services/schema/sqlite_to_drift.dart index 9b4f2f3dd..28203b0e6 100644 --- a/drift_dev/lib/src/services/schema/sqlite_to_drift.dart +++ b/drift_dev/lib/src/services/schema/sqlite_to_drift.dart @@ -1,4 +1,4 @@ -import 'package:analyzer/dart/element/element2.dart'; +import 'package:analyzer/dart/element/element.dart'; import 'package:drift_dev/src/analysis/options.dart'; import 'package:logging/logging.dart'; import 'package:sqlite3/common.dart'; @@ -103,7 +103,7 @@ class _SingleFileNoAnalyzerBackend extends DriftBackend { throw UnsupportedError('Dart analyzer not available here'); @override - Future loadElementDeclaration(Element2 element) async { + Future loadElementDeclaration(Element element) async { _noAnalyzer(); } @@ -116,7 +116,7 @@ class _SingleFileNoAnalyzerBackend extends DriftBackend { bool get canReadDart => false; @override - Future readDart(Uri uri) async { + Future readDart(Uri uri) async { _noAnalyzer(); } @@ -127,7 +127,7 @@ class _SingleFileNoAnalyzerBackend extends DriftBackend { } @override - Future resolveTopLevelElement( + Future resolveTopLevelElement( Uri context, String reference, Iterable imports) { _noAnalyzer(); } diff --git a/drift_dev/lib/src/utils/type_utils.dart b/drift_dev/lib/src/utils/type_utils.dart index 60a3dcd97..19ea5f25c 100644 --- a/drift_dev/lib/src/utils/type_utils.dart +++ b/drift_dev/lib/src/utils/type_utils.dart @@ -5,7 +5,7 @@ bool isFromDrift(DartType type) { if (type is! InterfaceType) return false; final firstComponent = - p.split(type.element3.library2.firstFragment.source.fullName).firstOrNull; + p.split(type.element.library.firstFragment.source.fullName).firstOrNull; if (firstComponent == null) return false; return firstComponent.contains('drift') || firstComponent.contains('moor'); @@ -29,7 +29,7 @@ bool isExpression(DartType type) { extension TypeUtils on DartType { String? get nameIfInterfaceType { final $this = this; - return $this is InterfaceType ? $this.element3.name3 : null; + return $this is InterfaceType ? $this.element.name : null; } String get userVisibleName => getDisplayString(); diff --git a/drift_dev/lib/src/writer/import_manager.dart b/drift_dev/lib/src/writer/import_manager.dart index fa92a548d..74ccdc197 100644 --- a/drift_dev/lib/src/writer/import_manager.dart +++ b/drift_dev/lib/src/writer/import_manager.dart @@ -1,4 +1,4 @@ -import 'package:analyzer/dart/element/element2.dart'; +import 'package:analyzer/dart/element/element.dart'; import 'package:path/path.dart' show url; import '../utils/string_escaper.dart'; @@ -9,18 +9,18 @@ abstract interface class ImportManager { } class ImportManagerForPartFiles implements ImportManager { - final LibraryElement2 mainLibrary; - final Map> _namedImports = {}; + final LibraryElement mainLibrary; + final Map> _namedImports = {}; ImportManagerForPartFiles(this.mainLibrary) { for (final import - in mainLibrary.fragments.expand((f) => f.libraryImports2)) { - if (import.prefix2 case final prefix?) { + in mainLibrary.fragments.expand((f) => f.libraryImports)) { + if (import.prefix case final prefix?) { // Not using import.namespace here because that contains the prefix // everywhere. We want to look up the prefix from the raw name. - final library = import.importedLibrary2; + final library = import.importedLibrary; if (library != null) { - _namedImports[prefix.element.name3!] = + _namedImports[prefix.element.name!] = library.exportNamespace.definedNames2; } } @@ -48,8 +48,8 @@ class ImportManagerForPartFiles implements ImportManager { /// as many parts use URLs relying on re-exports. For instance, this should /// return true for a wanted URI of `package:drift/drift.dart` when the /// element is actually defined in `package:drift/src/runtime/table.dart`. - static bool _matchingUrl(Uri wanted, Element2 target) { - final targetUri = target.library2?.uri; + static bool _matchingUrl(Uri wanted, Element target) { + final targetUri = target.library?.uri; if (targetUri == null || targetUri.scheme != wanted.scheme) { return false; } diff --git a/drift_dev/pubspec.yaml b/drift_dev/pubspec.yaml index 23f88fef1..88ce2a7c2 100644 --- a/drift_dev/pubspec.yaml +++ b/drift_dev/pubspec.yaml @@ -42,7 +42,7 @@ dependencies: # Dart analysis # Note: When changing this to a lower bound of 8.x, please re-enable # deprecation warnings in analysis_options.yaml - analyzer: '>=7.3.0 <9.0.0' + analyzer: ^8.1.0 source_span: ^1.10.0 package_config: ^2.1.0 pub_semver: ^2.1.4 diff --git a/drift_dev/test/analysis/resolver/discover_test.dart b/drift_dev/test/analysis/resolver/discover_test.dart index b63da7f64..9d752de29 100644 --- a/drift_dev/test/analysis/resolver/discover_test.dart +++ b/drift_dev/test/analysis/resolver/discover_test.dart @@ -267,7 +267,7 @@ class B extends Table { final result = state.discovery as DiscoveredDartLibrary; expect(result.locallyDefinedElements, [ isA() - .having((e) => e.dartElement.name3, 'dartElement.name', 'A') + .having((e) => e.dartElement.name, 'dartElement.name', 'A') ]); }); }); diff --git a/drift_dev/test/analysis/resolver/drift/table_test.dart b/drift_dev/test/analysis/resolver/drift/table_test.dart index 2a05f2d3e..324351663 100644 --- a/drift_dev/test/analysis/resolver/drift/table_test.dart +++ b/drift_dev/test/analysis/resolver/drift/table_test.dart @@ -137,8 +137,8 @@ CREATE TABLE b ( 'expression', contains('EnumIndexConverter'), ) - .having((e) => e.dartType.element3!.name3, 'dartType', - 'FruitsWithGeneric'), + .having( + (e) => e.dartType.element!.name, 'dartType', 'FruitsWithGeneric'), ); final nameColumn = diff --git a/drift_dev/test/analysis/test_utils.dart b/drift_dev/test/analysis/test_utils.dart index 65103f338..1ad2a2035 100644 --- a/drift_dev/test/analysis/test_utils.dart +++ b/drift_dev/test/analysis/test_utils.dart @@ -5,7 +5,7 @@ import 'package:analyzer/dart/analysis/analysis_context.dart'; import 'package:analyzer/dart/analysis/analysis_context_collection.dart'; import 'package:analyzer/dart/analysis/results.dart'; import 'package:analyzer/dart/ast/ast.dart' as dart; -import 'package:analyzer/dart/element/element2.dart'; +import 'package:analyzer/dart/element/element.dart'; import 'package:analyzer/file_system/overlay_file_system.dart'; import 'package:analyzer/file_system/physical_file_system.dart'; import 'package:build/build.dart'; @@ -210,7 +210,7 @@ class TestBackend extends DriftBackend { } @override - Future resolveTopLevelElement( + Future resolveTopLevelElement( Uri context, String reference, Iterable imports) async { final fileContents = StringBuffer(); for (final import in imports) { @@ -232,8 +232,8 @@ class TestBackend extends DriftBackend { await analysisContext.currentSession.getResolvedLibrary(path); if (result is ResolvedLibraryResult) { - final lookup = result.element2.firstFragment.scope.lookup(reference); - return lookup.getter2; + final lookup = result.element.firstFragment.scope.lookup(reference); + return lookup.getter; } } finally { resourceProvider.removeOverlay(path); @@ -246,20 +246,20 @@ class TestBackend extends DriftBackend { bool get canReadDart => true; @override - Future readDart(Uri uri) async { + Future readDart(Uri uri) async { await ensureHasDartAnalyzer(); final result = await _dartContext!.currentSession.getLibraryByUri(uri.toString()); - return (result as LibraryElementResult).element2; + return (result as LibraryElementResult).element; } @override - Future loadElementDeclaration(Element2 element) async { - final library = element.library2; + Future loadElementDeclaration(Element element) async { + final library = element.library; if (library == null) return null; - final info = await library.session.getResolvedLibraryByElement2(library); + final info = await library.session.getResolvedLibraryByElement(library); if (info is ResolvedLibraryResult) { return info.getFragmentDeclaration(element.firstFragment)?.node; } else {