Source:
<code>public static <T extends Entity> CatalogEntitySummary catalogEntitySummary(BrooklynRestResourceUtils b, CatalogItem<T,EntitySpec<? extends T>> item) { Set<EntityConfigSummary> config = Sets.newLinkedHashSet(); Set<SensorSummary> sensors = Sets.newTreeSet(SummaryComparators.nameComparator()); Set<EffectorSummary> effectors = Sets.newTreeSet(SummaryComparators.nameComparator()); try { @SuppressWarnings({ "unchecked", "rawtypes" }) EntitySpec<?> spec = (EntitySpec<?>) b.getCatalog().createSpec((CatalogItem) item); EntityDynamicType typeMap = BrooklynTypes.getDefinedEntityType(spec.getType()); EntityType type = typeMap.getSnapshot(); for (SpecParameter<?> input: spec.getParameters()) config.add(EntityTransformer.entityConfigSummary(input)); for (Sensor<?> x: type.getSensors()) sensors.add(SensorTransformer.sensorSummaryForCatalog(x)); for (Effector<?> x: type.getEffectors()) effectors.add(EffectorTransformer.effectorSummaryForCatalog(x)); } catch (Exception e) { Exceptions.propagateIfFatal(e); if (item.getCatalogItemType()==CatalogItemType.ENTITY) { log.warn("Unable to create spec for "+item+": "+e, e); } if (log.isTraceEnabled()) { log.trace("Unable to create spec for "+item+": "+e, e); } } return new CatalogEntitySummary(item.getSymbolicName(), item.getVersion(), item.getDisplayName(), item.getJavaType(), item.getPlanYaml(), item.getDescription(), tidyIconLink(b, item, item.getIconUrl()), <START> item.tags().getTags(), config, sensors, effectors, <END> item.isDeprecated(), makeLinks(item)); }</code><technical_language>tags generated time catalog item is created. In time dependent catalog items change, leading changes in interfaces implemented this catalog item. Is this acceptable? generate fly here</technical_language>

Target:
public static <T extends Entity> CatalogEntitySummary catalogEntitySummary(BrooklynRestResourceUtils b, CatalogItem<T,EntitySpec<? extends T>> item) { Set<EntityConfigSummary> config = Sets.newLinkedHashSet(); Set<SensorSummary> sensors = Sets.newTreeSet(SummaryComparators.nameComparator()); Set<EffectorSummary> effectors = Sets.newTreeSet(SummaryComparators.nameComparator()); EntitySpec<?> spec = null; try { spec = (EntitySpec<?>) b.getCatalog().createSpec((CatalogItem) item); EntityDynamicType typeMap = BrooklynTypes.getDefinedEntityType(spec.getType()); EntityType type = typeMap.getSnapshot(); for (SpecParameter<?> input: spec.getParameters()) config.add(EntityTransformer.entityConfigSummary(input)); for (Sensor<?> x: type.getSensors()) sensors.add(SensorTransformer.sensorSummaryForCatalog(x)); for (Effector<?> x: type.getEffectors()) effectors.add(EffectorTransformer.effectorSummaryForCatalog(x)); } catch (Exception e) { Exceptions.propagateIfFatal(e); if (item.getCatalogItemType()==CatalogItemType.ENTITY) { log.warn("Unable to create spec for "+item+": "+e, e); } if (log.isTraceEnabled()) { log.trace("Unable to create spec for "+item+": "+e, e); } } return new CatalogEntitySummary(item.getSymbolicName(), item.getVersion(), item.getDisplayName(), item.getJavaType(), item.getPlanYaml(), item.getDescription(), tidyIconLink(b, item, item.getIconUrl()), makeTags(spec, item), config, sensors, effectors, item.isDeprecated(), makeLinks(item)); }