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; |
}); |