From 5f79ec14e53ea16de6b669c8b3b80b03aeb8a2ed Mon Sep 17 00:00:00 2001 From: Tobe O Date: Tue, 21 Aug 2018 10:48:08 -0400 Subject: [PATCH] Create `@GenerateReflector` --- angel_container/CHANGELOG.md | 4 +++ angel_container/lib/angel_container.dart | 36 +++++++++++++++++++++++- angel_container/pubspec.yaml | 2 +- 3 files changed, 40 insertions(+), 2 deletions(-) diff --git a/angel_container/CHANGELOG.md b/angel_container/CHANGELOG.md index 9e776273..08bf944b 100644 --- a/angel_container/CHANGELOG.md +++ b/angel_container/CHANGELOG.md @@ -1,3 +1,7 @@ +# 1.0.0-alpha.8 +* Fixed a bug where `_ReflectedTypeInstance.isAssignableTo` always failed. +* Added `@GenerateReflector` annotation. + # 1.0.0-alpha.7 * Add `EmptyReflector`. * `ReflectedType.newInstance` now returns a `ReflectedInstance`. diff --git a/angel_container/lib/angel_container.dart b/angel_container/lib/angel_container.dart index 1395c3ea..24a3c225 100644 --- a/angel_container/lib/angel_container.dart +++ b/angel_container/lib/angel_container.dart @@ -1,4 +1,38 @@ -export 'src/empty/empty.dart'; +library angel_container; + export 'src/container.dart'; +export 'src/empty/empty.dart'; export 'src/exception.dart'; export 'src/reflector.dart'; + +/// An annotation used by `package:angel_container_generator` to generate reflection metadata for types chosen by the user. +/// +/// When attached to a library, it generates a class that implements the `Reflector` interface. +/// +/// When attached to a class, it can be used to customize the output of the generator. +class GenerateReflector { + /// The list of types that should have reflection metadata generated for them. + final List types; + + /// The list of top-level functions that should have reflection metadata generated for them. + final List functions; + + /// The list of symbols within this class that should have reflection metadata generated for them. + /// + /// If omitted, then all symbols will be included. + final List symbols; + + /// An explicit name for the generated reflector. + /// + /// By default, a class with the library's name in PascalCase is created, + /// with the text "Reflector" appended. + /// + /// Ex. `my_cool_library` becomes `const MyCoolLibraryReflector()`. + final String name; + + const GenerateReflector( + {this.types: const [], + this.functions: const [], + this.symbols: const [], + this.name}); +} diff --git a/angel_container/pubspec.yaml b/angel_container/pubspec.yaml index b86fd23a..a1417fe2 100644 --- a/angel_container/pubspec.yaml +++ b/angel_container/pubspec.yaml @@ -1,5 +1,5 @@ name: angel_container -version: 1.0.0-alpha.7 +version: 1.0.0-alpha.8 author: Tobe O description: "A better IoC container and dependency injector for Angel, ultimately allowing Angel to be used without dart:mirrors." homepage: https://github.com/angel-dart/container.git