Skip to content

Commit 5918896

Browse files
authored
Migrate to Element2 APIs (kevmoo#87)
1 parent c0b6313 commit 5918896

9 files changed

+52
-53
lines changed

CHANGELOG.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,7 @@
1+
## 1.3.0-dev
2+
3+
- Switch to analyzer element2 model and `build: ^3.0.0-dev`.
4+
15
## 1.2.0
26

37
- Require `build: ^2.5.0`.

example/example_generator.dart

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

@@ -11,41 +11,39 @@ class ExampleGenerator extends GeneratorForAnnotation<ExampleAnnotation> {
1111

1212
@override
1313
Iterable<String> generateForAnnotatedElement(
14-
// ignore: deprecated_member_use
15-
Element element,
14+
Element2 element,
1615
ConstantReader annotation,
1716
BuildStep buildStep,
1817
) sync* {
1918
assert(!annotation.isNull, 'The source annotation should be set!');
2019

21-
if (element.name!.contains('Bad')) {
20+
if (element.name3!.contains('Bad')) {
2221
log.info('This member might be not good.');
2322
}
2423

25-
// ignore: deprecated_member_use
26-
if (element is! ClassElement) {
24+
if (element is! ClassElement2) {
2725
throw InvalidGenerationSourceError(
2826
'Only supports annotated classes.',
2927
todo: 'Remove `TestAnnotation` from the associated element.',
3028
element: element,
3129
);
3230
}
3331

34-
if (requireTestClassPrefix && !element.name.startsWith('TestClass')) {
32+
if (requireTestClassPrefix && !element.name3!.startsWith('TestClass')) {
3533
throw InvalidGenerationSourceError(
3634
'All classes must start with `TestClass`.',
3735
todo: 'Rename the type or remove the `TestAnnotation` from class.',
3836
element: element,
3937
);
4038
}
4139

42-
yield 'const ${element.name}NameLength = ${element.name.length};';
43-
yield 'const ${element.name}NameLowerCase = '
44-
"'${element.name.toLowerCase()}';";
40+
yield 'const ${element.name3!}NameLength = ${element.name3!.length};';
41+
yield 'const ${element.name3!}NameLowerCase = '
42+
"'${element.name3!.toLowerCase()}';";
4543

4644
if (annotation.read('includeUpperCase').literalValue as bool) {
47-
yield 'const ${element.name}NameUpperCase = '
48-
"'${element.name.toUpperCase()}';";
45+
yield 'const ${element.name3!}NameUpperCase = '
46+
"'${element.name3!.toUpperCase()}';";
4947
}
5048
}
5149

lib/src/expectation_element.dart

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

@@ -10,8 +10,8 @@ List<ExpectationElement> genAnnotatedElements(
1010
Set<String> configDefaults,
1111
) {
1212
final allElements = libraryReader.allElements
13-
.where((element) => element.name != null)
14-
.toList(growable: false)..sort((a, b) => a.name!.compareTo(b.name!));
13+
.where((element) => element.name3 != null)
14+
.toList(growable: false)..sort((a, b) => a.name3!.compareTo(b.name3!));
1515

1616
return allElements.expand((element) {
1717
final initialValues = _expectationElements(element).toList();
@@ -60,7 +60,7 @@ List<ExpectationElement> genAnnotatedElements(
6060
}
6161
assert(te.configurations!.isNotEmpty);
6262

63-
return ExpectationElement._(te, element.name!);
63+
return ExpectationElement._(te, element.name3!);
6464
});
6565
}).toList();
6666
}
@@ -71,8 +71,7 @@ const _mappers = {
7171
TypeChecker.fromRuntime(ShouldThrow): _shouldThrow,
7272
};
7373

74-
// ignore: deprecated_member_use
75-
Iterable<TestExpectation> _expectationElements(Element element) sync* {
74+
Iterable<TestExpectation> _expectationElements(Element2 element) sync* {
7675
for (var entry in _mappers.entries) {
7776
for (var annotation in entry.key.annotationsOf(element)) {
7877
yield entry.value(annotation);

lib/src/generate_for_element.dart

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
1-
// ignore_for_file: implementation_imports, deprecated_member_use
1+
// ignore_for_file: implementation_imports
22

33
import 'dart:async';
44

5-
import 'package:analyzer/dart/element/element.dart';
5+
import 'package:analyzer/dart/element/element2.dart';
66
import 'package:analyzer/dart/element/type.dart';
77
import 'package:build/build.dart';
88
import 'package:dart_style/dart_style.dart' as dart_style;
@@ -20,7 +20,7 @@ Future<String> generateForElement<T>(
2020
String name,
2121
) async {
2222
final elements =
23-
libraryReader.allElements.where((e) => e.name == name).toList();
23+
libraryReader.allElements.where((e) => e.name3 == name).toList();
2424

2525
if (elements.isEmpty) {
2626
throw ArgumentError.value(
@@ -30,13 +30,13 @@ Future<String> generateForElement<T>(
3030
);
3131
}
3232

33-
Element element;
33+
Element2 element;
3434

3535
if (elements.length == 1) {
3636
element = elements[0];
3737
} else {
3838
final rootProperties =
39-
elements.whereType<PropertyInducingElement>().toList();
39+
elements.whereType<PropertyInducingElement2>().toList();
4040
if (rootProperties.length == 1) {
4141
element = rootProperties[0];
4242
} else {
@@ -48,18 +48,18 @@ Future<String> generateForElement<T>(
4848

4949
if (annotation == null) {
5050
final annotationFromTestLib =
51-
element.metadata
51+
(element as Annotatable).metadata2.annotations
5252
.map((ea) => ea.computeConstantValue()!)
5353
.where((obj) {
5454
if (obj.type is InterfaceType) {
55-
final uri = (obj.type as InterfaceType).element.source.uri;
55+
final uri = (obj.type as InterfaceType).element3.library2.uri;
5656
return uri.isScheme('package') &&
5757
uri.pathSegments.first == testPackageName;
5858
}
5959

6060
return false;
6161
})
62-
.where((obj) => obj.type!.element!.name == T.toString())
62+
.where((obj) => obj.type!.element3!.name3 == T.toString())
6363
.toList();
6464

6565
String msg;
@@ -70,7 +70,7 @@ Future<String> generateForElement<T>(
7070
NOTE: Could not find an annotation that matched
7171
${generator.typeChecker}.
7272
Using a annotation with the same name from the synthetic library instead
73-
${(annotation.type as InterfaceType).element.source.uri}#${annotation.type!.element!.name}''';
73+
${(annotation.type as InterfaceType).element3.library2.firstFragment.source.uri}#${annotation.type!.element3!.name3}''';
7474
} else {
7575
msg = '''
7676
NOTE: Could not find an annotation that matched

lib/src/init_library_reader.dart

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import 'dart:async';
22
import 'dart:io';
33

4-
import 'package:analyzer/dart/element/element.dart';
4+
import 'package:analyzer/dart/element/element2.dart';
55
import 'package:build/build.dart';
66
import 'package:build_test/build_test.dart';
77
import 'package:path/path.dart' as p;
@@ -88,8 +88,7 @@ class PathAwareLibraryReader extends LibraryReader {
8888
PathAwareLibraryReader({
8989
required this.directory,
9090
required this.fileName,
91-
// ignore: deprecated_member_use
92-
required LibraryElement element,
91+
required LibraryElement2 element,
9392
}) : super(element);
9493

9594
String get path => p.join(directory, fileName);

lib/src/test_annotated_classes.dart

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import 'dart:async';
22
import 'dart:io';
33

4-
import 'package:analyzer/dart/element/element.dart';
4+
import 'package:analyzer/dart/element/element2.dart';
55
import 'package:meta/meta.dart';
66
import 'package:path/path.dart' as p;
77
import 'package:source_gen/source_gen.dart';
@@ -355,9 +355,8 @@ class AnnotatedTest<T> {
355355
assert(exp.element is String);
356356
expectedElementName = exp.element as String;
357357
}
358-
// ignore: deprecated_member_use
359-
elementMatcher = const TypeMatcher<Element>().having(
360-
(e) => e.name,
358+
elementMatcher = const TypeMatcher<Element2>().having(
359+
(e) => e.name3,
361360
'name',
362361
expectedElementName,
363362
);

pubspec.yaml

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
name: source_gen_test
2-
version: 1.2.0
2+
version: 1.3.0-dev
33
description: >-
44
Test support for the source_gen package.
55
Includes helpers to make it easy to validate both success and failure cases.
@@ -10,7 +10,7 @@ environment:
1010

1111
dependencies:
1212
analyzer: ">=6.5.0 <8.0.0"
13-
build: ^2.5.0
13+
build: ^3.0.0-dev
1414
build_test: ^3.2.0
1515
dart_style: '>=2.3.7 <4.0.0'
1616
meta: ^1.15.0
@@ -21,3 +21,10 @@ dependencies:
2121
dev_dependencies:
2222
collection: ^1.19.0
2323
dart_flutter_team_lints: ^3.0.0
24+
25+
dependency_overrides:
26+
source_gen:
27+
git:
28+
url: https://github.com/dart-lang/source_gen
29+
path: source_gen
30+
ref: 6c9702e7152e61b16c8adec3f3011bda738b0e29

test/init_library_reader_test.dart

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -30,11 +30,6 @@ void main() {
3030
'int badTestFunc()',
3131
'int badTestField',
3232
'class TestClass2',
33-
'import source /source_gen_test/lib/annotations.dart',
34-
'import source /__test__/lib/test_annotation.dart',
35-
'import source dart:core',
36-
'part unit package:__test__/test_part.dart',
37-
'part source /__test__/lib/goldens/test_library_file_part_of_current.dart',
3833
]),
3934
);
4035
});

test/test_generator.dart

Lines changed: 10 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import 'package:analyzer/dart/element/element.dart';
1+
import 'package:analyzer/dart/element/element2.dart';
22
import 'package:build/build.dart';
33
import 'package:collection/collection.dart';
44
import 'package:source_gen/source_gen.dart';
@@ -16,23 +16,21 @@ class TestGenerator extends GeneratorForAnnotation<TestAnnotation> {
1616

1717
@override
1818
Iterable<String> generateForAnnotatedElement(
19-
// ignore: deprecated_member_use
20-
Element element,
19+
Element2 element,
2120
ConstantReader annotation,
2221
BuildStep buildStep,
2322
) sync* {
2423
if (alwaysThrowVagueError) {
2524
throw InvalidGenerationSourceError('Uh...');
2625
}
2726

28-
if (element.name!.contains('Bad')) {
27+
if (element.name3!.contains('Bad')) {
2928
log.info('This member might be not good.');
3029
}
3130

32-
// ignore: deprecated_member_use
33-
if (element is ClassElement) {
34-
final unsupportedFunc = element.methods.firstWhereOrNull(
35-
(me) => me.name.contains('unsupported'),
31+
if (element is ClassElement2) {
32+
final unsupportedFunc = element.methods2.firstWhereOrNull(
33+
(me) => me.name3!.contains('unsupported'),
3634
);
3735

3836
if (unsupportedFunc != null) {
@@ -50,17 +48,17 @@ class TestGenerator extends GeneratorForAnnotation<TestAnnotation> {
5048
);
5149
}
5250

53-
if (requireTestClassPrefix && !element.name.startsWith('TestClass')) {
51+
if (requireTestClassPrefix && !element.name3!.startsWith('TestClass')) {
5452
throw InvalidGenerationSourceError(
5553
'All classes must start with `TestClass`.',
5654
todo: 'Rename the type or remove the `TestAnnotation` from class.',
5755
element: element,
5856
);
5957
}
6058

61-
yield 'const ${element.name}NameLength = ${element.name.length};';
62-
yield 'const ${element.name}NameLowerCase = '
63-
"'${element.name.toLowerCase()}';";
59+
yield 'const ${element.name3!}NameLength = ${element.name3!.length};';
60+
yield 'const ${element.name3!}NameLowerCase = '
61+
"'${element.name3!.toLowerCase()}';";
6462
}
6563

6664
@override

0 commit comments

Comments
 (0)