TilesContextBeanELResolver extends ELResolver { protected void collectBeanInfo(Map<String, ? extends Object> map, List<FeatureDescriptor> list) { if (map == null || map.isEmpty()) { return; } for (Map.Entry<String, ? extends Object> entry : map.entrySet()) { FeatureDescriptor descriptor = new FeatureDescriptor(); descriptor.setDisplayName(entry.getKey()); descriptor.setExpert(false); descriptor.setHidden(false); descriptor.setName(entry.getKey()); descriptor.setPreferred(true); descriptor.setShortDescription(""); descriptor.setValue("type", String.class); descriptor.setValue("resolvableAtDesignTime", Boolean.FALSE); list.add(descriptor); } }  @Override Class<?> getCommonPropertyType(ELContext context, Object base); @Override Iterator<FeatureDescriptor> getFeatureDescriptors(ELContext context,
            Object base); @Override Class<?> getType(ELContext context, Object base, Object property); @Override Object getValue(ELContext context, Object base, Object property); @Override boolean isReadOnly(ELContext context, Object base, Object property); @Override void setValue(ELContext context, Object base, Object property,
            Object value);  }
@Test public void testCollectBeanInfoEmpty() { resolver.collectBeanInfo(null, null); }