mirror of
https://github.com/immich-app/drift.git
synced 2026-09-30 13:22:57 +08:00
Migrate off of analyzer 7.x APIs
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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('>'),
|
||||
|
||||
@@ -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) {
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
|
||||
@@ -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();
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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 =
|
||||
|
||||
@@ -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 {
|
||||
|
||||
Reference in New Issue
Block a user