Skip to content

Commit c8287f9

Browse files
committed
Migrate to element2
1 parent 8ce72e7 commit c8287f9

32 files changed

+371
-348
lines changed

drift_dev/analysis_options.yaml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,3 +5,7 @@ analyzer:
55
strict-casts: true
66
exclude:
77
- "**/*.g.dart"
8+
9+
linter:
10+
rules:
11+
analyzer_use_new_elements: true

drift_dev/lib/src/analysis/backend.dart

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import 'package:analyzer/dart/ast/ast.dart';
2-
import 'package:analyzer/dart/element/element.dart';
2+
import 'package:analyzer/dart/element/element2.dart';
33
import 'package:logging/logging.dart';
44

55
/// The backend used by drift's analysis implementation to read files and access
@@ -15,8 +15,8 @@ abstract class DriftBackend {
1515
/// Reads a file as string.
1616
Future<String> readAsString(Uri uri);
1717

18-
Future<Uri> uriOfDart(Element element) async {
19-
return element.source!.uri;
18+
Future<Uri> uriOfDart(Element2 element) async {
19+
return element.library2!.uri;
2020
}
2121

2222
bool get canReadDart;
@@ -26,15 +26,15 @@ abstract class DriftBackend {
2626
/// This should also be able to resolve SDK libraries.
2727
/// If no Dart library can be found under that uri, throws a
2828
/// [NotALibraryException].
29-
Future<LibraryElement> readDart(Uri uri);
29+
Future<LibraryElement2> readDart(Uri uri);
3030

3131
/// Loads the resolved AST node defining the given [element].
3232
///
3333
/// Depending on how the analyzer is accessed, this may throw an exception if
3434
/// the resolved AST is not available.
3535
/// When the [element] does not have a syntactic representation in the AST,
3636
/// null is returned.
37-
Future<AstNode?> loadElementDeclaration(Element element);
37+
Future<AstNode?> loadElementDeclaration(Element2 element);
3838

3939
/// Resolves a Dart expression from a string.
4040
///
@@ -48,7 +48,7 @@ abstract class DriftBackend {
4848
Uri context, String dartExpression, Iterable<String> imports);
4949

5050
/// Resolves the Dart element named [reference] in the [imports] of [context].
51-
Future<Element?> resolveTopLevelElement(
51+
Future<Element2?> resolveTopLevelElement(
5252
Uri context, String reference, Iterable<Uri> imports);
5353
}
5454

drift_dev/lib/src/analysis/driver/cache.dart

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import 'package:analyzer/dart/element/element.dart';
1+
import 'package:analyzer/dart/element/element2.dart';
22

33
import '../results/element.dart';
44
import 'state.dart';
@@ -11,7 +11,7 @@ class DriftAnalysisCache {
1111
final Map<Uri, FileState> knownFiles = {};
1212
final Map<DriftElementId, DriftElementKind> discoveredElements = {};
1313

14-
final Map<Uri, LibraryElement?> typeHelperLibraries = {};
14+
final Map<Uri, LibraryElement2?> typeHelperLibraries = {};
1515

1616
FileState stateForUri(Uri uri) {
1717
return knownFiles[uri] ?? notifyFileChanged(uri);

drift_dev/lib/src/analysis/driver/driver.dart

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import 'dart:convert';
22

3-
import 'package:analyzer/dart/element/element.dart';
3+
import 'package:analyzer/dart/element/element2.dart';
44
import 'package:sqlparser/sqlparser.dart';
55

66
import '../backend.dart';
@@ -377,7 +377,7 @@ abstract class AnalysisResultCacheReader {
377377

378378
Future<CachedDiscoveryResults?> readDiscovery(Uri uri);
379379

380-
Future<LibraryElement?> readTypeHelperFor(Uri uri);
380+
Future<LibraryElement2?> readTypeHelperFor(Uri uri);
381381

382382
Future<String?> readElementCacheFor(Uri uri);
383383
}

drift_dev/lib/src/analysis/driver/error.dart

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import 'package:analyzer/dart/ast/syntactic_entity.dart' as dart;
2-
import 'package:analyzer/dart/element/element.dart' as dart;
2+
import 'package:analyzer/dart/element/element2.dart' as dart;
33
import 'package:source_gen/source_gen.dart';
44
import 'package:source_span/source_span.dart';
55
import 'package:sqlparser/sqlparser.dart' as sql;
@@ -11,15 +11,15 @@ class DriftAnalysisError {
1111
DriftAnalysisError(this.span, this.message);
1212

1313
factory DriftAnalysisError.forDartElement(
14-
dart.Element element, String message) {
14+
dart.Element2 element, String message) {
1515
return DriftAnalysisError(
1616
spanForElement(element),
1717
message,
1818
);
1919
}
2020

2121
factory DriftAnalysisError.inDartAst(
22-
dart.Element element, dart.SyntacticEntity entity, String message) {
22+
dart.Element2 element, dart.SyntacticEntity entity, String message) {
2323
return DriftAnalysisError(dartAstSpan(element, entity), message);
2424
}
2525

@@ -51,7 +51,7 @@ class DriftAnalysisError {
5151
}
5252

5353
static FileSpan dartAstSpan(
54-
dart.Element element, dart.SyntacticEntity entity) {
54+
dart.Element2 element, dart.SyntacticEntity entity) {
5555
final span = spanForElement(element) as FileSpan;
5656
return span.file.span(entity.offset, entity.end);
5757
}

drift_dev/lib/src/analysis/driver/state.dart

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import 'package:analyzer/dart/element/element.dart';
1+
import 'package:analyzer/dart/element/element2.dart';
22
import 'package:meta/meta.dart';
33
import 'package:path/path.dart' show url;
44
import 'package:sqlparser/sqlparser.dart' hide AnalysisError;
@@ -168,7 +168,7 @@ class DriftFileImport {
168168
}
169169

170170
class DiscoveredDartLibrary extends DiscoveredFileState {
171-
final LibraryElement library;
171+
final LibraryElement2 library;
172172

173173
@override
174174
final List<DriftImport> importDependencies;

drift_dev/lib/src/analysis/resolver/dart/accessor.dart

Lines changed: 12 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,7 @@ class DartAccessorResolver
5858
}
5959

6060
final table = await resolveDartReferenceOrReportError<DriftTable>(
61-
dartType.element,
61+
dartType.element3,
6262
(msg) => DriftAnalysisError.forDartElement(element, msg));
6363
if (table != null) {
6464
tables.add(table);
@@ -81,7 +81,7 @@ class DartAccessorResolver
8181
}
8282

8383
final view = await resolveDartReferenceOrReportError<DriftView>(
84-
dartType.element,
84+
dartType.element3,
8585
(msg) => DriftAnalysisError.forDartElement(element, msg));
8686
if (view != null) {
8787
views.add(view);
@@ -139,7 +139,7 @@ class DartAccessorResolver
139139
}
140140

141141
final dao = await resolveDartReferenceOrReportError<DatabaseAccessor>(
142-
type.element,
142+
type.element3,
143143
(msg) => DriftAnalysisError.forDartElement(element, msg));
144144
if (dao != null) accessors.add(dao);
145145
}
@@ -158,12 +158,12 @@ class DartAccessorResolver
158158
);
159159
} else {
160160
final dbType = element.allSupertypes
161-
.firstWhereOrNull((i) => i.element.name == 'DatabaseAccessor');
161+
.firstWhereOrNull((i) => i.element3.name3 == 'DatabaseAccessor');
162162

163163
// inherits from DatabaseAccessor<T>, we want to know which T
164164

165165
final dbImpl = dbType?.typeArguments.single ??
166-
element.library.typeProvider.dynamicType;
166+
element.library2.typeProvider.dynamicType;
167167
if (dbImpl is DynamicType) {
168168
reportError(DriftAnalysisError.forDartElement(
169169
element,
@@ -186,15 +186,16 @@ class DartAccessorResolver
186186
}
187187

188188
Future<int?> _readSchemaVersion() async {
189-
final element =
190-
discovered.dartElement.thisType.getGetter('schemaVersion')?.variable2;
189+
final element = discovered.dartElement.thisType
190+
.lookUpGetter3('schemaVersion', discovered.dartElement.library2)
191+
?.variable3;
191192
if (element == null) return null;
192193

193194
try {
194195
if (element.isSynthetic) {
195196
// Getter, read from `=>` body if possible.
196197
final expr = returnExpressionOfMethod(await resolver.driver.backend
197-
.loadElementDeclaration(element.getter!) as MethodDeclaration);
198+
.loadElementDeclaration(element.getter2!) as MethodDeclaration);
198199
if (expr is IntegerLiteral) {
199200
return expr.value;
200201
}
@@ -213,15 +214,15 @@ class DartAccessorResolver
213214
}
214215

215216
bool _hasConstructorWithDatabaseConnection() {
216-
final constructor = discovered.dartElement.unnamedConstructor;
217+
final constructor = discovered.dartElement.unnamedConstructor2;
217218
if (constructor == null) {
218219
return false;
219220
}
220-
if (constructor.parameters.length != 1) {
221+
if (constructor.formalParameters.length != 1) {
221222
return false;
222223
}
223224

224-
final [param] = constructor.parameters;
225+
final [param] = constructor.formalParameters;
225226
if (param.isNamed) {
226227
return false;
227228
}

drift_dev/lib/src/analysis/resolver/dart/column.dart

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import 'package:analyzer/dart/ast/ast.dart';
2-
import 'package:analyzer/dart/element/element.dart';
2+
import 'package:analyzer/dart/element/element2.dart';
33
import 'package:analyzer/dart/element/type.dart';
44
import 'package:collection/collection.dart';
55
import 'package:drift/drift.dart' show DriftSqlType;
@@ -97,12 +97,12 @@ class ColumnParser {
9797
/// migrations), there might not be a `creationTime` in scope for the check
9898
/// constraint. So, we annotate these references in [AnnotatedDartCode] and
9999
/// use that information when generating code to transform the code.
100-
final Map<Element, String> _columnsInSameTable;
100+
final Map<Element2, String> _columnsInSameTable;
101101

102102
ColumnParser(this._resolver, this._columnsInSameTable);
103103

104104
Future<PendingColumnInformation?> parse(
105-
ColumnDeclaration columnDeclaration, Element element) async {
105+
ColumnDeclaration columnDeclaration, Element2 element) async {
106106
final expr = columnDeclaration.expression;
107107

108108
if (expr is! FunctionExpressionInvocation) {
@@ -174,8 +174,8 @@ class ColumnParser {
174174
break;
175175
}
176176

177-
final staticElement = first.staticElement;
178-
if (staticElement is! ClassElement) {
177+
final staticElement = first.element;
178+
if (staticElement is! ClassElement2) {
179179
_resolver.reportError(DriftAnalysisError.inDartAst(
180180
element,
181181
first,
@@ -384,7 +384,7 @@ class ColumnParser {
384384
final expression = remainingExpr.argumentList.arguments.single;
385385

386386
final custom = readCustomType(
387-
element.library!,
387+
element.library2!,
388388
expression,
389389
helper,
390390
(message) => _resolver.reportError(
@@ -404,7 +404,7 @@ class ColumnParser {
404404
AppliedTypeConverter? converter;
405405
if (mappedAs != null) {
406406
converter = readTypeConverter(
407-
element.library!,
407+
element.library2!,
408408
mappedAs,
409409
columnType,
410410
nullable,
@@ -498,7 +498,7 @@ class ColumnParser {
498498
sqlType: columnType,
499499
nullable: nullable,
500500
nameInSql: sqlName,
501-
nameInDart: element.name!,
501+
nameInDart: element.name3!,
502502
declaration: DriftDeclaration.dartElement(element),
503503
typeConverter: converter,
504504
clientDefaultCode: clientDefaultExpression,
@@ -528,31 +528,31 @@ class ColumnParser {
528528
}[name]!;
529529
}
530530

531-
String? _readJsonKey(Element getter) {
532-
final annotations = getter.metadata;
531+
String? _readJsonKey(Element2 getter) {
532+
final annotations = getter.metadataIfAnnotatable;
533533
final object = annotations.firstWhereOrNull((e) {
534534
final value = e.computeConstantValue();
535535
final valueType = value?.type;
536536

537537
return valueType is InterfaceType &&
538538
isFromDrift(valueType) &&
539-
valueType.element.name == 'JsonKey';
539+
valueType.element3.name3 == 'JsonKey';
540540
});
541541

542542
if (object == null) return null;
543543

544544
return object.computeConstantValue()!.getField('key')!.toStringValue();
545545
}
546546

547-
String? _readReferenceName(Element getter) {
548-
final annotations = getter.metadata;
547+
String? _readReferenceName(Element2 getter) {
548+
final annotations = getter.metadataIfAnnotatable;
549549
final object = annotations.firstWhereOrNull((e) {
550550
final value = e.computeConstantValue();
551551
final valueType = value?.type;
552552

553553
return valueType is InterfaceType &&
554554
isFromDrift(valueType) &&
555-
valueType.element.name == 'ReferenceName';
555+
valueType.element3.name3 == 'ReferenceName';
556556
});
557557

558558
if (object == null) return null;

0 commit comments

Comments
 (0)