Mercurial > hg4j
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 |