Mercurial > hg4j
diff src/org/tmatesoft/hg/internal/FilterByteChannel.java @ 356:91d75e1bac9f
Consistent approach to deal with adaptable objects. Give adaptable precedence over instanceof to allow conditional response when classes do implement desired interface
author | Artem Tikhomirov <tikhomirov.artem@gmail.com> |
---|---|
date | Tue, 06 Dec 2011 14:25:52 +0100 |
parents | f2c11fe7f3e9 |
children |
line wrap: on
line diff
--- a/src/org/tmatesoft/hg/internal/FilterByteChannel.java Tue Dec 06 12:57:21 2011 +0100 +++ b/src/org/tmatesoft/hg/internal/FilterByteChannel.java Tue Dec 06 14:25:52 2011 +0100 @@ -59,9 +59,11 @@ public <T> T getAdapter(Class<T> adapterClass) { if (adapterClass == Preview.class) { ArrayList<Preview> previewers = new ArrayList<Preview>(filters.length); + Adaptable.Factory<Preview> factory = new Adaptable.Factory<Preview>(Preview.class); for (Filter f : filters) { - if (f instanceof Preview /*FIXME or getAdapter != null*/) { - previewers.add((Preview) f); + Preview p = factory.get(f); + if (p != null) { + previewers.add(p); } } if (!previewers.isEmpty()) { @@ -71,13 +73,7 @@ } // fall through to let delegate answer } - if (delegate instanceof Adaptable) { - return ((Adaptable) delegate).getAdapter(adapterClass); - } - if (adapterClass != null && adapterClass.isInstance(delegate)) { - return adapterClass.cast(delegate); - } - return null; + return Adaptable.Factory.getAdapter(delegate, adapterClass, null); } private static class PreviewSupport implements Preview {