From 49c6511fd12de71b649f41380fdb783a7f5f1802 Mon Sep 17 00:00:00 2001 From: Andrzej Kapolka Date: Tue, 4 Jan 2011 22:46:22 +0000 Subject: [PATCH] Because getInterfaces only returns the interfaces implemented by the class (not by its superclasses), we need to rise through its superclasses as well in order to find the provider interface. git-svn-id: svn+ssh://src.earth.threerings.net/narya/trunk@6411 542714f4-19e9-0310-aa3c-eee0fc999fb1 --- .../presents/server/InvocationManager.java | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/src/main/java/com/threerings/presents/server/InvocationManager.java b/src/main/java/com/threerings/presents/server/InvocationManager.java index 33fc7daad..94e490420 100644 --- a/src/main/java/com/threerings/presents/server/InvocationManager.java +++ b/src/main/java/com/threerings/presents/server/InvocationManager.java @@ -132,11 +132,14 @@ public class InvocationManager // with legacy non-interface based providers) Class pclass = provider.getClass(); String pname = mclass.getSimpleName().replaceAll("Marshaller", "Provider"); - for (Class iclass : provider.getClass().getInterfaces()) { - if (InvocationProvider.class.isAssignableFrom(iclass) && - iclass.getSimpleName().equals(pname)) { - pclass = iclass; - break; + OUTER: + for (Class sclass = pclass; sclass != null; sclass = sclass.getSuperclass()) { + for (Class iclass : sclass.getInterfaces()) { + if (InvocationProvider.class.isAssignableFrom(iclass) && + iclass.getSimpleName().equals(pname)) { + pclass = iclass; + break OUTER; + } } }