public Object getAdapter0(Object source, String property) { if ((source == null) || (property == null)) { throw new IllegalArgumentException(); } loadProvidersIfNecessary(); property = property.intern(); BeanAdapterProvider provider = getProvider(source, property); if (provider != null) { List<VendedAdapter> adapters = vendedAdapters.get(source); if (adapters != null) { for (int i = adapters.size() - 1; i >= 0; i--) { VendedAdapter vendedAdapter = adapters.get(i); Object adapter = vendedAdapter.getAdapter(); if (adapter == null) { vendedAdapters.remove(i); } else if ((vendedAdapter.getProvider() == provider) && (vendedAdapter.getProperty() == property)) { return adapter; } } } else { adapters = new ArrayList<VendedAdapter>(1); vendedAdapters.put(source, adapters); } Object adapter = provider.createAdapter(source, property); adapters.add(new VendedAdapter(property, provider, adapter)); return adapter; } return null; }