Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(777)

Unified Diff: reflectable/lib/src/reflectable_mirror_based.dart

Issue 1391543003: Creates `reflectors`, as a meta-meta feature that enables dynamic selection of a "mirror system". (Closed) Base URL: https://github.com/dart-lang/reflectable.git@master
Patch Set: Review response. Created 5 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « reflectable/lib/src/encoding_constants.dart ('k') | reflectable/lib/src/reflectable_transformer_based.dart » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: reflectable/lib/src/reflectable_mirror_based.dart
diff --git a/reflectable/lib/src/reflectable_mirror_based.dart b/reflectable/lib/src/reflectable_mirror_based.dart
index 846409dba590a24f34bce93758aeac7680e11182..b8764de6a9a409b9c442f5e8c252f32ad75f70c4 100644
--- a/reflectable/lib/src/reflectable_mirror_based.dart
+++ b/reflectable/lib/src/reflectable_mirror_based.dart
@@ -19,6 +19,37 @@ import '../reflectable.dart';
bool get isTransformed => false;
+/// Returns the set of reflectors in the current program.
+Set<Reflectable> get reflectors {
+ Set<Reflectable> result = new Set<Reflectable>();
+ for (dm.LibraryMirror library in dm.currentMirrorSystem().libraries.values) {
+ for (dm.LibraryDependencyMirror dependency in library.libraryDependencies) {
+ if (dependency.isImport &&
+ dependency.targetLibrary.qualifiedName == reflectableLibrarySymbol) {
+ for (dm.InstanceMirror metadatumMirror in dependency.metadata) {
+ Object metadatum = metadatumMirror.reflectee;
+ if (metadatum is GlobalQuantifyCapability) {
+ result.add(metadatum.reflector);
+ }
+ if (metadatum is GlobalQuantifyMetaCapability) {
+ result.add(metadatum.reflector);
+ }
+ }
+ }
+ }
+ }
+ for (dm.LibraryMirror library in dm.currentMirrorSystem().libraries.values) {
+ for (dm.DeclarationMirror declaration in library.declarations.values) {
+ for (dm.InstanceMirror metadatum in declaration.metadata) {
+ if (metadatum.reflectee is Reflectable) {
+ result.add(metadatum.reflectee);
+ }
+ }
+ }
+ }
+ return result;
+}
+
/// The name of the reflectable library.
const Symbol reflectableLibrarySymbol = #reflectable.reflectable;
@@ -369,7 +400,7 @@ class _LibraryMirrorImpl extends _DeclarationMirrorImpl
Iterable<Symbol> relevantKeys = decls.keys.where((k) {
List<dm.InstanceMirror> metadata = decls[k].metadata;
for (var item in metadata) {
- if (item.hasReflectee && item.reflectee is ReflectableImpl) return true;
+ if (item.hasReflectee && item.reflectee == _reflectable) return true;
}
return false;
});
« no previous file with comments | « reflectable/lib/src/encoding_constants.dart ('k') | reflectable/lib/src/reflectable_transformer_based.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698