Migrate off of analyzer 7.x APIs

This commit is contained in:
Simon Binder
2025-09-29 23:55:57 +02:00
parent e8a5c79411
commit 57eb749ae4
33 changed files with 312 additions and 323 deletions
+2
View File
@@ -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
-4
View File
@@ -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
+6 -6
View File
@@ -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<String> readAsString(Uri uri);
Future<Uri> uriOfDart(Element2 element) async {
return element.library2!.uri;
Future<Uri> 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<LibraryElement2> readDart(Uri uri);
Future<LibraryElement> 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<AstNode?> loadElementDeclaration(Element2 element);
Future<AstNode?> loadElementDeclaration(Element element);
/// Resolves a Dart expression from a string.
///
@@ -48,7 +48,7 @@ abstract class DriftBackend {
Uri context, String dartExpression, Iterable<String> imports);
/// Resolves the Dart element named [reference] in the [imports] of [context].
Future<Element2?> resolveTopLevelElement(
Future<Element?> resolveTopLevelElement(
Uri context, String reference, Iterable<Uri> imports);
}
+2 -2
View File
@@ -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<Uri, FileState> knownFiles = {};
final Map<DriftElementId, DriftElementKind> discoveredElements = {};
final Map<Uri, LibraryElement2?> typeHelperLibraries = {};
final Map<Uri, LibraryElement?> typeHelperLibraries = {};
FileState stateForUri(Uri uri) {
return knownFiles[uri] ?? notifyFileChanged(uri);
@@ -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<CachedDiscoveryResults?> readDiscovery(Uri uri);
Future<LibraryElement2?> readTypeHelperFor(Uri uri);
Future<LibraryElement?> readTypeHelperFor(Uri uri);
Future<String?> readElementCacheFor(Uri uri);
}
+4 -4
View File
@@ -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);
}
+2 -2
View File
@@ -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<DriftImport> importDependencies;
@@ -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<DriftTable>(
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<DriftView>(
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<DatabaseAccessor>(
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<T>, 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<int?> _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;
}
@@ -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<Element2, String> _columnsInSameTable;
final Map<Element, String> _columnsInSameTable;
ColumnParser(this._resolver, this._columnsInSameTable);
@@ -111,7 +111,7 @@ class ColumnParser {
}
Future<PendingColumnInformation?> 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;
@@ -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<ElementAnnotation> 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<DataClassInformation> resolve(
LocalElementResolver resolver,
List<DriftColumn> 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(
@@ -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<DiscoveredDartTable> {
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 <Set<DriftColumn>>[])
@@ -141,12 +141,12 @@ class DartTableResolver extends LocalElementResolver<DiscoveredDartTable> {
}
Future<Set<DriftColumn>?> _readPrimaryKey(
ClassElement2 element,
ClassElement element,
List<DriftColumn> 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<DiscoveredDartTable> {
}
Future<List<Set<DriftColumn>>?> _readUniqueKeys(
ClassElement2 element,
ClassElement element,
List<DriftColumn> 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<DiscoveredDartTable> {
return parsedUniqueKeys;
}
Future<bool?> _booleanGetter(ClassElement2 element, String name) async {
final getter = element.lookUpGetter2(
Future<bool?> _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<DiscoveredDartTable> {
return null;
}
Future<bool?> _overrideWithoutRowId(ClassElement2 element) async {
Future<bool?> _overrideWithoutRowId(ClassElement element) async {
return await _booleanGetter(element, 'withoutRowId');
}
Future<bool?> _isStrict(ClassElement2 element) async {
Future<bool?> _isStrict(ClassElement element) async {
return await _booleanGetter(element, 'isStrict');
}
Future<Iterable<PendingColumnInformation>> _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<bool> isLateFinalColumn(FieldElement2 e) async {
final isLateFinalField = e.isLate && e.isFinal && e.getter2 != null;
Future<bool> 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<DiscoveredDartTable> {
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<DiscoveredDartTable> {
final Set<String> 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 = <Element2, String>{
for (final entry in fields) entry.getter2 ?? entry: entry.name3!
final all = <Element, String>{
for (final entry in fields) entry.getter ?? entry: entry.name!
};
final results = <PendingColumnInformation>[];
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<DiscoveredDartTable> {
} 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<DiscoveredDartTable> {
Future<PendingColumnInformation?> _parseColumn(
ColumnDeclaration declaration,
Element2 element,
Map<Element2, String> allColumns,
Element element,
Map<Element, String> allColumns,
) async {
return ColumnParser(this, allColumns).parse(declaration, element);
}
@@ -389,11 +389,11 @@ class DartTableResolver extends LocalElementResolver<DiscoveredDartTable> {
Future<List<String>> _readCustomConstraints(
Set<DriftElement> references,
List<DriftColumn> 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) {
@@ -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<DiscoveredDartView> {
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<DiscoveredDartView> {
Future<List<TableReferenceInDartView>> _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<TableReferenceInDartView>()
@@ -52,23 +52,23 @@ class DartViewResolver extends LocalElementResolver<DiscoveredDartView> {
}
Future<TableReferenceInDartView?> _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<DriftTable>(
type.element3, (msg) {
type.element, (msg) {
return DriftAnalysisError.inDartAst(
field, node.returnType ?? node.name, msg);
});
@@ -86,7 +86,7 @@ class DartViewResolver extends LocalElementResolver<DiscoveredDartView> {
Future<_ParsedDartViewSelect> _parseSelectStructure(
List<TableReferenceInDartView> references,
) async {
MethodElement2? as;
MethodElement? as;
_ParsedDartViewSelect error(String message) {
reportError(DriftAnalysisError.forDartElement(
@@ -106,8 +106,8 @@ class DartViewResolver extends LocalElementResolver<DiscoveredDartView> {
);
}
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<DiscoveredDartView> {
));
} 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<DiscoveredDartView> {
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
@@ -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<void> {
final DiscoverStep _discoverStep;
final LibraryElement2 _library;
final LibraryElement _library;
final List<DriftImport> imports = [];
@@ -185,8 +185,8 @@ class _FindDartElements extends RecursiveElementVisitor2<void> {
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<void> find() async {
@@ -194,7 +194,7 @@ class _FindDartElements extends RecursiveElementVisitor2<void> {
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<void> {
!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<ExecutableElement2>()
.followedBy(element.getters2)
final declaresAbstractMethod = element.methods
.cast<ExecutableElement>()
.followedBy(element.getters)
.any((e) => e.isAbstract);
if (!declaresAbstractMethod) {
_pendingWork.add(Future.sync(() async {
@@ -246,7 +246,7 @@ class _FindDartElements extends RecursiveElementVisitor2<void> {
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<void> {
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<void> {
}
@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<void> {
}
}
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<void> {
/// named `tracked_user`.
/// The default behavior can be overridden by declaring a getter named
/// `tableName` returning a direct string literal.
Future<String> _sqlNameOfTable(ClassElement2 table) async {
Future<String> _sqlNameOfTable(ClassElement table) async {
final defaultName = _defaultNameForTableOrView(table);
final tableNameGetter = table.lookUpGetter2(
final tableNameGetter = table.lookUpGetter(
name: 'tableName',
library: _library,
);
@@ -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<T extends DiscoveredElement>
linter.sqlParserErrors.forEach(reportLint);
}
Future<Element2?> _findInDart(String identifier) async {
Future<Element?> _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<T extends DiscoveredElement>
'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<T extends DiscoveredElement>
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,
@@ -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<void, void> {
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<void, void> {
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<void, void> {
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,
));
@@ -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<CreateIndexStatement>;
typedef DiscoveredDriftTrigger = DiscoveredDriftElement<CreateTriggerStatement>;
typedef DiscoveredDriftStatement = DiscoveredDriftElement<DeclaredStatement>;
abstract class DiscoveredDartElement<DE extends Element2>
abstract class DiscoveredDartElement<DE extends Element>
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<ClassElement2> {
class DiscoveredDartTable extends DiscoveredDartElement<ClassElement> {
@override
DriftElementKind get kind => DriftElementKind.table;
@@ -49,7 +49,7 @@ class DiscoveredDartTable extends DiscoveredDartElement<ClassElement2> {
);
}
class DiscoveredDartView extends DiscoveredDartElement<ClassElement2> {
class DiscoveredDartView extends DiscoveredDartElement<ClassElement> {
/// The [DriftView] annotation on this class, if there is any.
DartObject? viewAnnotation;
@@ -59,7 +59,7 @@ class DiscoveredDartView extends DiscoveredDartElement<ClassElement2> {
DiscoveredDartView(super.ownId, super.dartElement, this.viewAnnotation);
}
class DiscoveredDartIndex extends DiscoveredDartElement<ClassElement2> {
class DiscoveredDartIndex extends DiscoveredDartElement<ClassElement> {
final DriftElementId onTable;
ElementAnnotation annotation;
@@ -74,7 +74,7 @@ class DiscoveredDartIndex extends DiscoveredDartElement<ClassElement2> {
super.ownId, super.dartElement, this.onTable, this.annotation);
}
class DiscoveredBaseAccessor extends DiscoveredDartElement<ClassElement2> {
class DiscoveredBaseAccessor extends DiscoveredDartElement<ClassElement> {
final bool isDatabase;
final DartObject annotation;
@@ -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;
@@ -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<ResolveReferencedElementResult> 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<T extends DiscoveredElement> {
}
Future<E?> resolveDartReferenceOrReportError<E extends DriftElement>(
Element2 reference,
Element reference,
DriftAnalysisError Function(String msg) createError,
) async {
final result =
@@ -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 = <FormalParameterElement, DriftColumn>{};
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 = <String, String>{};
final missingGetters = <String>[];
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<DriftColumn> 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;
@@ -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('>'),
+25 -25
View File
@@ -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<AstNode> exclude = const {},
Map<Element2, String> taggedElements = const {},
Map<Element, String> 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<void> {
_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<void> {
parameter.type.accept(this);
if (parameter.isNamed) {
_builder.addText(' ${parameter.name3!}');
_builder.addText(' ${parameter.name!}');
}
i++;
}
@@ -461,10 +461,10 @@ class _AddFromDartType extends UnifyingTypeVisitor<void> {
@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<void> {
@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<void> {
class _AddFromAst extends GeneralizingAstVisitor<void> {
final AnnotatedDartCodeBuilder _builder;
final Set<AstNode> _excluding;
final Map<Element2, String> _taggedElements;
final Map<Element, String> _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<void> {
@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<void> {
}
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<void> {
@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<void> {
@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<void> {
@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!);
@@ -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) {
+3 -3
View File
@@ -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<DartType> _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;
}
@@ -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<AstNode?> loadElementDeclaration(Element2 element) async {
final library = element.library2;
Future<AstNode?> 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<LibraryElement2> readDart(Uri uri) async {
Future<LibraryElement> 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<Element2?> resolveTopLevelElement(
Future<Element?> resolveTopLevelElement(
Uri context, String reference, Iterable<Uri> 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);
+10 -10
View File
@@ -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<Uri> uriOfDart(Element2 element) async {
Future<Uri> 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<LibraryElement2> readDart(Uri uri) async {
Future<LibraryElement> 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<AstNode?> loadElementDeclaration(Element2 element) {
Future<AstNode?> 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<Element2?> resolveTopLevelElement(
Future<Element?> resolveTopLevelElement(
Uri context, String reference, Iterable<Uri> 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<LibraryElement2?> readTypeHelperFor(Uri uri) async {
Future<LibraryElement?> 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);
+8 -10
View File
@@ -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> {
}
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<void> {
// 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<void> {
@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<void> {
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;
}
@@ -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<Never> loadElementDeclaration(Element2 element) async {
Future<Never> loadElementDeclaration(Element element) async {
_noAnalyzer();
}
@@ -116,7 +116,7 @@ class _SingleFileNoAnalyzerBackend extends DriftBackend {
bool get canReadDart => false;
@override
Future<LibraryElement2> readDart(Uri uri) async {
Future<LibraryElement> readDart(Uri uri) async {
_noAnalyzer();
}
@@ -127,7 +127,7 @@ class _SingleFileNoAnalyzerBackend extends DriftBackend {
}
@override
Future<Element2?> resolveTopLevelElement(
Future<Element?> resolveTopLevelElement(
Uri context, String reference, Iterable<Uri> imports) {
_noAnalyzer();
}
+2 -2
View File
@@ -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();
+9 -9
View File
@@ -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<String, Map<String, Element2>> _namedImports = {};
final LibraryElement mainLibrary;
final Map<String, Map<String, Element>> _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;
}
+1 -1
View File
@@ -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
@@ -267,7 +267,7 @@ class B extends Table {
final result = state.discovery as DiscoveredDartLibrary;
expect(result.locallyDefinedElements, [
isA<DiscoveredDartTable>()
.having((e) => e.dartElement.name3, 'dartElement.name', 'A')
.having((e) => e.dartElement.name, 'dartElement.name', 'A')
]);
});
});
@@ -137,8 +137,8 @@ CREATE TABLE b (
'expression',
contains('EnumIndexConverter<FruitsWithGeneric>'),
)
.having((e) => e.dartType.element3!.name3, 'dartType',
'FruitsWithGeneric'),
.having(
(e) => e.dartType.element!.name, 'dartType', 'FruitsWithGeneric'),
);
final nameColumn =
+9 -9
View File
@@ -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<Element2?> resolveTopLevelElement(
Future<Element?> resolveTopLevelElement(
Uri context, String reference, Iterable<Uri> 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<LibraryElement2> readDart(Uri uri) async {
Future<LibraryElement> 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<dart.AstNode?> loadElementDeclaration(Element2 element) async {
final library = element.library2;
Future<dart.AstNode?> 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 {