Skip to content

Commit 577ee37

Browse files
committed
fix(bug): reflect Dart interfaces from superclass as well
fixes angular#4221 Closes angular#4222
1 parent 9dd32d6 commit 577ee37

File tree

2 files changed

+13
-4
lines changed

2 files changed

+13
-4
lines changed

modules/angular2/src/core/reflection/reflection_capabilities.dart

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -272,8 +272,13 @@ class ReflectionCapabilities implements PlatformReflectionCapabilities {
272272
}
273273

274274
List interfaces(type) {
275-
ClassMirror classMirror = reflectType(type);
276-
return classMirror.superinterfaces.map((si) => si.reflectedType).toList();
275+
return _interfacesFromMirror(reflectType(type));
276+
}
277+
278+
List _interfacesFromMirror(classMirror) {
279+
return classMirror.superinterfaces.map((si) => si.reflectedType).toList()
280+
..addAll(classMirror.superclass == null ? []
281+
: _interfacesFromMirror(classMirror.superclass));
277282
}
278283

279284
GetterFn getter(String name) {

modules/angular2/test/core/reflection/reflector_spec.ts

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,11 @@ class TestObj {
5151

5252
class Interface {}
5353

54-
class ClassImplementingInterface implements Interface {}
54+
class Interface2 {}
55+
56+
class SuperClassImplementingInterface implements Interface2 {}
57+
58+
class ClassImplementingInterface extends SuperClassImplementingInterface implements Interface {}
5559

5660
export function main() {
5761
describe('Reflector', () => {
@@ -191,7 +195,7 @@ export function main() {
191195
describe("interfaces", () => {
192196
it("should return an array of interfaces for a type", () => {
193197
var p = reflector.interfaces(ClassImplementingInterface);
194-
expect(p).toEqual([Interface]);
198+
expect(p).toEqual([Interface, Interface2]);
195199
});
196200

197201
it("should return an empty array otherwise", () => {

0 commit comments

Comments
 (0)