diff --git a/source_gen/CHANGELOG.md b/source_gen/CHANGELOG.md index f187fa4e..d6dd05fb 100644 --- a/source_gen/CHANGELOG.md +++ b/source_gen/CHANGELOG.md @@ -1,3 +1,8 @@ +## 4.0.2-wip + +- Bug fix: fix possible null pointer exception in `TypeChecker.typeNamed` on + invalid code. + ## 4.0.1 - Require `analyzer: '>=8.1.1 <9.0.0'`. diff --git a/source_gen/lib/src/type_checker.dart b/source_gen/lib/src/type_checker.dart index ec349a24..b1d4174d 100644 --- a/source_gen/lib/src/type_checker.dart +++ b/source_gen/lib/src/type_checker.dart @@ -257,7 +257,9 @@ class _NameTypeChecker extends TypeChecker { @override bool isExactly(Element element) { - final uri = element.library!.uri; + final library = element.library; + if (library == null) return false; + final uri = library.uri; return element.name == _typeName && (_inPackage == null || (((uri.scheme == 'dart') == _inSdk) && diff --git a/source_gen/pubspec.yaml b/source_gen/pubspec.yaml index f08f1689..728cf353 100644 --- a/source_gen/pubspec.yaml +++ b/source_gen/pubspec.yaml @@ -1,5 +1,5 @@ name: source_gen -version: 4.0.1 +version: 4.0.2-wip description: >- Source code generation builders and utilities for the Dart build system repository: https://github.com/dart-lang/source_gen/tree/master/source_gen diff --git a/source_gen/test/type_checker_test.dart b/source_gen/test/type_checker_test.dart index b83a0f70..6ef897cf 100644 --- a/source_gen/test/type_checker_test.dart +++ b/source_gen/test/type_checker_test.dart @@ -208,6 +208,14 @@ void main() { ); }); + group('isExactly', () { + test('should not crash with null library', () { + final element = core.typeProvider.dynamicType.element!; + expect(element.library, isNull); + expect(checkMapMixin().isExactly(element), isFalse); + }); + }); + group('isExactlyType', () { test('should not crash with null element', () { final voidType = core.typeProvider.voidType;