comparison 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
comparison
equal deleted inserted replaced
355:f2c11fe7f3e9 356:91d75e1bac9f
57 57
58 // adapters or implemented interfaces of the original class shall not be obfuscated by filter 58 // adapters or implemented interfaces of the original class shall not be obfuscated by filter
59 public <T> T getAdapter(Class<T> adapterClass) { 59 public <T> T getAdapter(Class<T> adapterClass) {
60 if (adapterClass == Preview.class) { 60 if (adapterClass == Preview.class) {
61 ArrayList<Preview> previewers = new ArrayList<Preview>(filters.length); 61 ArrayList<Preview> previewers = new ArrayList<Preview>(filters.length);
62 Adaptable.Factory<Preview> factory = new Adaptable.Factory<Preview>(Preview.class);
62 for (Filter f : filters) { 63 for (Filter f : filters) {
63 if (f instanceof Preview /*FIXME or getAdapter != null*/) { 64 Preview p = factory.get(f);
64 previewers.add((Preview) f); 65 if (p != null) {
66 previewers.add(p);
65 } 67 }
66 } 68 }
67 if (!previewers.isEmpty()) { 69 if (!previewers.isEmpty()) {
68 @SuppressWarnings("unchecked") 70 @SuppressWarnings("unchecked")
69 T rv = (T) new PreviewSupport(previewers); 71 T rv = (T) new PreviewSupport(previewers);
70 return rv; 72 return rv;
71 } 73 }
72 // fall through to let delegate answer 74 // fall through to let delegate answer
73 } 75 }
74 if (delegate instanceof Adaptable) { 76 return Adaptable.Factory.getAdapter(delegate, adapterClass, null);
75 return ((Adaptable) delegate).getAdapter(adapterClass);
76 }
77 if (adapterClass != null && adapterClass.isInstance(delegate)) {
78 return adapterClass.cast(delegate);
79 }
80 return null;
81 } 77 }
82 78
83 private static class PreviewSupport implements Preview { 79 private static class PreviewSupport implements Preview {
84 private final Preview[] participants; 80 private final Preview[] participants;
85 81