From 45dc0994402419ba8309640bdc0e89fee472d702 Mon Sep 17 00:00:00 2001 From: Simon Binder Date: Wed, 10 May 2023 10:13:16 +0200 Subject: [PATCH] Support analyzer 5.12 --- .../src/analysis/resolver/dart/accessor.dart | 2 +- .../analysis/resolver/shared/data_class.dart | 2 +- drift_dev/lib/src/analysis/results/dart.dart | 54 ++++++++++++------- drift_dev/pubspec.yaml | 2 +- 4 files changed, 39 insertions(+), 21 deletions(-) diff --git a/drift_dev/lib/src/analysis/resolver/dart/accessor.dart b/drift_dev/lib/src/analysis/resolver/dart/accessor.dart index e9346d10..ff0f2e63 100644 --- a/drift_dev/lib/src/analysis/resolver/dart/accessor.dart +++ b/drift_dev/lib/src/analysis/resolver/dart/accessor.dart @@ -153,7 +153,7 @@ class DartAccessorResolver final dbImpl = dbType?.typeArguments.single ?? element.library.typeProvider.dynamicType; - if (dbImpl.isDynamic) { + if (dbImpl is DynamicType) { reportError(DriftAnalysisError.forDartElement( element, 'This class must inherit from DatabaseAccessor, where T is an ' diff --git a/drift_dev/lib/src/analysis/resolver/shared/data_class.dart b/drift_dev/lib/src/analysis/resolver/shared/data_class.dart index 4d0847ae..1e0e9d64 100644 --- a/drift_dev/lib/src/analysis/resolver/shared/data_class.dart +++ b/drift_dev/lib/src/analysis/resolver/shared/data_class.dart @@ -63,7 +63,7 @@ AnnotatedDartCode? parseCustomParentClass( final className = extendingType.nameIfInterfaceType; if (extendingType.typeArguments.length == 1) { final genericType = extendingType.typeArguments[0]; - if (genericType.isDartCoreObject || genericType.isDynamic) { + if (genericType.isDartCoreObject || genericType is DynamicType) { return AnnotatedDartCode([ DartTopLevelSymbol.topLevelElement(extendingType.element), '<', diff --git a/drift_dev/lib/src/analysis/results/dart.dart b/drift_dev/lib/src/analysis/results/dart.dart index 420ef0c3..10473da8 100644 --- a/drift_dev/lib/src/analysis/results/dart.dart +++ b/drift_dev/lib/src/analysis/results/dart.dart @@ -4,7 +4,6 @@ import 'package:analyzer/dart/ast/visitor.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'; import 'package:build/build.dart'; import 'package:json_annotation/json_annotation.dart'; @@ -116,8 +115,7 @@ class AnnotatedDartCodeBuilder { } void addDartType(DartType type) { - final visitor = _AddFromDartType(this); - type.accept(visitor); + _AddFromDartType(this).writeType(type); } void addAstNode(AstNode node, {Set exclude = const {}}) { @@ -246,7 +244,9 @@ class DartTopLevelSymbol { /// /// This representation allwos emitting the Dart type with relevant imports /// managed dynamically. -class _AddFromDartType extends TypeVisitor { +// Note: We don't extend TypeVisitor because we're not supposed to and the +// inteface doesn't appear to be stable. +class _AddFromDartType { final AnnotatedDartCodeBuilder _builder; _AddFromDartType(this._builder); @@ -264,7 +264,26 @@ class _AddFromDartType extends TypeVisitor { } } - @override + void writeType(DartType type) { + if (type is DynamicType) { + visitDynamicType(type); + } else if (type is FunctionType) { + visitFunctionType(type); + } else if (type is InterfaceType) { + visitInterfaceType(type); + } else if (type is InvalidType) { + visitInvalidType(type); + } else if (type is NeverType) { + visitNeverType(type); + } else if (type is RecordType) { + visitRecordType(type); + } else if (type is TypeParameterType) { + visitTypeParameterType(type); + } else if (type is VoidType) { + visitVoidType(type); + } + } + void visitRecordType(RecordType type) { _builder.addText('('); var first = true; @@ -275,7 +294,7 @@ class _AddFromDartType extends TypeVisitor { } first = false; - field.type.accept(this); + writeType(field.type); } if (type.namedFields.isNotEmpty) { @@ -287,7 +306,7 @@ class _AddFromDartType extends TypeVisitor { } first = false; - field.type.accept(this); + writeType(field.type); _builder ..addText(' ') ..addText(field.name); @@ -299,15 +318,12 @@ class _AddFromDartType extends TypeVisitor { _writeSuffix(type.nullabilitySuffix); } - @override void visitDynamicType(DynamicType type) { _builder.addText('dynamic'); - _writeSuffix(type.nullabilitySuffix); } - @override void visitFunctionType(FunctionType type) { - type.returnType.accept(this); + writeType(type.returnType); _builder.addText(' Function'); final formals = type.typeFormals; @@ -323,7 +339,7 @@ class _AddFromDartType extends TypeVisitor { final bound = arg.bound; if (bound != null) { _builder.addText(' extends '); - bound.accept(this); + writeType(bound); } i++; } @@ -355,7 +371,7 @@ class _AddFromDartType extends TypeVisitor { _builder.addText(', '); } - parameter.type.accept(this); + writeType(parameter.type); if (parameter.isNamed) { _builder.addText(' ${parameter.name}'); } @@ -370,7 +386,6 @@ class _AddFromDartType extends TypeVisitor { _writeSuffix(type.nullabilitySuffix); } - @override void visitInterfaceType(InterfaceType type) { final alias = type.alias; if (alias != null) { @@ -387,7 +402,7 @@ class _AddFromDartType extends TypeVisitor { _builder.addText(', '); } - arg.accept(this); + writeType(arg); i++; } _builder.addText('>'); @@ -396,19 +411,22 @@ class _AddFromDartType extends TypeVisitor { _writeSuffix(type.nullabilitySuffix); } - @override + void visitInvalidType(InvalidType type) { + _builder + ..addText('dynamic') + ..addText('/* = invalid*/'); + } + void visitNeverType(NeverType type) { _builder.addText('Never'); _writeSuffix(type.nullabilitySuffix); } - @override void visitTypeParameterType(TypeParameterType type) { _builder.addText(type.element.name); _writeSuffix(type.nullabilitySuffix); } - @override void visitVoidType(VoidType type) { _builder.addText('void'); _writeSuffix(type.nullabilitySuffix); diff --git a/drift_dev/pubspec.yaml b/drift_dev/pubspec.yaml index 17bbc942..130255c8 100644 --- a/drift_dev/pubspec.yaml +++ b/drift_dev/pubspec.yaml @@ -30,7 +30,7 @@ dependencies: sqlparser: '^0.29.0' # Dart analysis - analyzer: ^5.2.0 + analyzer: ^5.12.0 analyzer_plugin: ^0.11.0 source_span: ^1.5.5 package_config: ^2.0.0