Notice: This Wiki is now read only and edits are no longer possible. Please see: https://gitlab.eclipse.org/eclipsefdn/helpdesk/-/wikis/Wiki-shutdown-plan for the plan.
Hint on retaining backward compatibility
Retaining backward compatibility
Before
You decide to extend a class and create new choosable classes, e.g. more browsers for a SCM-plugin. The old data structure looked like this when you had only one class SCMBrowser:
<browser>
<url>http://yahoo.com/</url>
</browser>
After
Now you decide to add a new NewSCMBrowser, all your SCMBrowsers are extending SCMBrowserBase and your XML suddenly looks like this:
<browser class="hudson.plugins.foo.NewSCMBrowser">
<url>http://yahoo.com/</url>
</browser>
or
<browser class="hudson.plugins.foo.SCMBrowser">
<url>http://yahoo.com/</url>
</browser>
With new jobs, no problem. Old jobs however will probably break. In your SCMBrowserBase class add a method readResolve (see XStream FAQ):
// compatibility with earlier plugins
public Object readResolve() {
if (!this.getClass().equals(SCMBrowserBase.class)) {
return this;
}
// make sure to return the default SCMBrowser only if we no class is given in config.
try {
return new SCMBrowser(url.toExternalForm());
} catch (MalformedURLException e) {
throw new RuntimeException(e);
}