[jbosstools-issues] [JBoss JIRA] (JBIDE-21668) Fix collection setters in ResourcesUIModel
Viacheslav Kabanovich (JIRA)
issues at jboss.org
Mon Feb 8 20:45:00 EST 2016
[ https://issues.jboss.org/browse/JBIDE-21668?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Viacheslav Kabanovich updated JBIDE-21668:
------------------------------------------
Description:
Created as follow up to JBIDE-21590.
Collections setters in ResourcesUIModel, for instance
{code}
public void setBuildConfigs(Collection<IResourceUIModel> buildConfigs) {
firePropertyChange(PROP_BUILD_CONFIGS, resources.get(ResourceKind.BUILD_CONFIG), resources.put(ResourceKind.BUILD_CONFIG, new ArrayList<>(buildConfigs)));
}
{code}
fire incorrect newValue object, because java.util.Map.put(key, value) returns old object associated with the key, not the one just set.
At this moment, this does not create any bugs, because these setters are still not used, all changes go through ResourcesUIModel.add, ResourcesUIModel.remove, ResourcesUIModel.update that have correct notification. But bugs may appear as soon as collection setters are used, so that they better be fixed, for instance this way :
{code}
public void setBuildConfigs(Collection<IResourceUIModel> buildConfigs) {
setResourcesForKind(buildConfigs, ResourceKind.BUILD_CONFIG);
}
private void setResourcesForKind(Collection<IResourceUIModel> list, String kind) {
List<IResourceUIModel> oldList = resources.get(kind);
List<IResourceUIModel> newList = new ArrayList<IResourceUIModel>(list);
resources.put(kind, newList);
firePropertyChange(getProperty(kind), oldList, newList);
}
{code}
and with use of private setResourcesForKind all other setters will remain one-liners.
was:
Collections setters in ResourcesUIModel, for instance
{code}
public void setBuildConfigs(Collection<IResourceUIModel> buildConfigs) {
firePropertyChange(PROP_BUILD_CONFIGS, resources.get(ResourceKind.BUILD_CONFIG), resources.put(ResourceKind.BUILD_CONFIG, new ArrayList<>(buildConfigs)));
}
{code}
fire incorrect newValue object, because java.util.Map.put(key, value) returns old object associated with the key, not the one just set.
At this moment, this does not create any bugs, because these setters are still not used, all changes go through ResourcesUIModel.add, ResourcesUIModel.remove, ResourcesUIModel.update that have correct notification. But bugs may appear as soon as collection setters are used, so that they better be fixed, for instance this way :
{code}
public void setBuildConfigs(Collection<IResourceUIModel> buildConfigs) {
setResourcesForKind(buildConfigs, ResourceKind.BUILD_CONFIG);
}
private void setResourcesForKind(Collection<IResourceUIModel> list, String kind) {
List<IResourceUIModel> oldList = resources.get(kind);
List<IResourceUIModel> newList = new ArrayList<IResourceUIModel>(list);
resources.put(kind, newList);
firePropertyChange(getProperty(kind), oldList, newList);
}
{code}
and with use of private setResourcesForKind all other setters will remain one-liners.
> Fix collection setters in ResourcesUIModel
> ------------------------------------------
>
> Key: JBIDE-21668
> URL: https://issues.jboss.org/browse/JBIDE-21668
> Project: Tools (JBoss Tools)
> Issue Type: Enhancement
> Components: openshift
> Affects Versions: 4.4.0.Alpha1
> Reporter: Viacheslav Kabanovich
> Assignee: Jeff Cantrill
> Fix For: 4.4.0.Alpha1
>
>
> Created as follow up to JBIDE-21590.
> Collections setters in ResourcesUIModel, for instance
> {code}
> public void setBuildConfigs(Collection<IResourceUIModel> buildConfigs) {
> firePropertyChange(PROP_BUILD_CONFIGS, resources.get(ResourceKind.BUILD_CONFIG), resources.put(ResourceKind.BUILD_CONFIG, new ArrayList<>(buildConfigs)));
> }
> {code}
> fire incorrect newValue object, because java.util.Map.put(key, value) returns old object associated with the key, not the one just set.
> At this moment, this does not create any bugs, because these setters are still not used, all changes go through ResourcesUIModel.add, ResourcesUIModel.remove, ResourcesUIModel.update that have correct notification. But bugs may appear as soon as collection setters are used, so that they better be fixed, for instance this way :
> {code}
> public void setBuildConfigs(Collection<IResourceUIModel> buildConfigs) {
> setResourcesForKind(buildConfigs, ResourceKind.BUILD_CONFIG);
> }
> private void setResourcesForKind(Collection<IResourceUIModel> list, String kind) {
> List<IResourceUIModel> oldList = resources.get(kind);
> List<IResourceUIModel> newList = new ArrayList<IResourceUIModel>(list);
> resources.put(kind, newList);
> firePropertyChange(getProperty(kind), oldList, newList);
> }
> {code}
> and with use of private setResourcesForKind all other setters will remain one-liners.
--
This message was sent by Atlassian JIRA
(v6.4.11#64026)
More information about the jbosstools-issues
mailing list