Skip to content

Commit 20a3bd3

Browse files
committed
Add TypeChecker.typeNamedLiterally.
1 parent 1fc3fb7 commit 20a3bd3

File tree

4 files changed

+94
-1
lines changed

4 files changed

+94
-1
lines changed

source_gen/CHANGELOG.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,8 @@
1+
## 4.1.0
2+
3+
- Add `TypeChecker.typeNamedLiterally`. It's like `TypeChecker.typeNamed`,
4+
but takes a `String` instead of a `Type`.
5+
16
## 4.0.2
27

38
- Bug fix: fix possible null pointer exception in `TypeChecker.typeNamed` on

source_gen/lib/src/type_checker.dart

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,16 @@ abstract class TypeChecker {
4040
bool? inSdk,
4141
}) = _NameTypeChecker;
4242

43+
/// Create a new [TypeChecker] for types with name exactly [name].
44+
///
45+
/// Optionally, also pass [inPackage] to restrict to a specific package by
46+
/// name. Set [inSdk] if it's a `dart` package.
47+
const factory TypeChecker.typeNamedLiterally(
48+
String name, {
49+
String? inPackage,
50+
bool? inSdk,
51+
}) = _LiteralNameTypeChecker;
52+
4353
/// Create a new [TypeChecker] backed by a static [type].
4454
const factory TypeChecker.fromStatic(DartType type) = _LibraryTypeChecker;
4555

@@ -270,6 +280,21 @@ class _NameTypeChecker extends TypeChecker {
270280
String toString() => _inPackage == null ? '$_type' : '$_inPackage#$_type';
271281
}
272282

283+
// [_NameTypeChecker] that ignores the `Type` and uses a `String` name.
284+
class _LiteralNameTypeChecker extends _NameTypeChecker {
285+
@override
286+
final String _typeName;
287+
288+
const _LiteralNameTypeChecker(
289+
this._typeName, {
290+
String? inPackage,
291+
bool? inSdk,
292+
}) : super(Object, inPackage: inPackage, inSdk: inSdk);
293+
294+
@override
295+
String toString() => _inPackage == null ? '$_type' : '$_inPackage#$_typeName';
296+
}
297+
273298
// Checks a runtime type against an Uri and Symbol.
274299
class _UriTypeChecker extends TypeChecker {
275300
final String _url;

source_gen/pubspec.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
name: source_gen
2-
version: 4.0.2
2+
version: 4.1.0
33
description: >-
44
Source code generation builders and utilities for the Dart build system
55
repository: https://github.com/dart-lang/source_gen/tree/master/source_gen

source_gen/test/type_checker_test.dart

Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -390,6 +390,69 @@ void main() {
390390
);
391391
});
392392

393+
group('TypeChecker.typeNamedLiterally without package', () {
394+
commonTests(
395+
checkIterable: () => const TypeChecker.typeNamedLiterally('Iterable'),
396+
checkEnum: () => const TypeChecker.typeNamedLiterally('Enum'),
397+
checkEnumMixin: () => const TypeChecker.typeNamedLiterally('MyEnumMixin'),
398+
checkMap: () => const TypeChecker.typeNamedLiterally('Map'),
399+
checkMapMixin: () => const TypeChecker.typeNamedLiterally('MyMapMixin'),
400+
checkHashMap: () => const TypeChecker.typeNamedLiterally('HashMap'),
401+
checkGenerator: () => const TypeChecker.typeNamedLiterally('Generator'),
402+
checkGeneratorForAnnotation:
403+
() => const TypeChecker.typeNamedLiterally('GeneratorForAnnotation'),
404+
);
405+
});
406+
407+
group('TypeChecker.typeNamedLiterally with package', () {
408+
commonTests(
409+
checkIterable:
410+
() => const TypeChecker.typeNamedLiterally(
411+
'Iterable',
412+
inPackage: 'core',
413+
inSdk: true,
414+
),
415+
checkEnum:
416+
() => const TypeChecker.typeNamedLiterally(
417+
'Enum',
418+
inPackage: 'core',
419+
inSdk: true,
420+
),
421+
checkEnumMixin:
422+
() => const TypeChecker.typeNamedLiterally(
423+
'MyEnumMixin',
424+
inPackage: 'source_gen',
425+
),
426+
checkMap:
427+
() => const TypeChecker.typeNamedLiterally(
428+
'Map',
429+
inPackage: 'core',
430+
inSdk: true,
431+
),
432+
checkMapMixin:
433+
() => const TypeChecker.typeNamedLiterally(
434+
'MyMapMixin',
435+
inPackage: 'source_gen',
436+
),
437+
checkHashMap:
438+
() => const TypeChecker.typeNamedLiterally(
439+
'HashMap',
440+
inPackage: 'collection',
441+
inSdk: true,
442+
),
443+
checkGenerator:
444+
() => const TypeChecker.typeNamedLiterally(
445+
'Generator',
446+
inPackage: 'source_gen',
447+
),
448+
checkGeneratorForAnnotation:
449+
() => const TypeChecker.typeNamedLiterally(
450+
'GeneratorForAnnotation',
451+
inPackage: 'source_gen',
452+
),
453+
);
454+
});
455+
393456
group('TypeChecker.forStatic', () {
394457
commonTests(
395458
checkIterable: () => staticIterableChecker,

0 commit comments

Comments
 (0)