diff --git a/core/src/main/java/hudson/model/Descriptor.java b/core/src/main/java/hudson/model/Descriptor.java index a043d6b2faec973ab6fad24be91b1a8ad328b756..e68517ce744b290b5a9a2fdac09c7dca053a4739 100644 --- a/core/src/main/java/hudson/model/Descriptor.java +++ b/core/src/main/java/hudson/model/Descriptor.java @@ -916,7 +916,8 @@ public abstract class Descriptor> implements Saveable { } if (d == null) { kind = jo.getString("$class"); - d = findByClassName(descriptors, kind); + d = findByDescribableClassName(descriptors, kind); + if (d == null) d = findByClassName(descriptors, kind); } if (d != null) { items.add(d.newInstance(req, jo)); @@ -952,6 +953,17 @@ public abstract class Descriptor> implements Saveable { return null; } + /** + * Finds a descriptor from a collection by the class name of the Describable it describes. + */ + public static @CheckForNull T findByDescribableClassName(Collection list, String className) { + for (T d : list) { + if(d.clazz.getName().equals(className)) + return d; + } + return null; + } + /** * Finds a descriptor from a collection by its class name or ID. * @deprecated choose between {@link #findById(java.util.Collection, String)} or {@link #findByClassName(java.util.Collection, String)} diff --git a/core/src/main/java/hudson/tools/DownloadFromUrlInstaller.java b/core/src/main/java/hudson/tools/DownloadFromUrlInstaller.java index 938325f6681de75c893be2ceb6169f5596773a44..418f7fd1e75f7f150a1ae19946ef5a12f29af148 100644 --- a/core/src/main/java/hudson/tools/DownloadFromUrlInstaller.java +++ b/core/src/main/java/hudson/tools/DownloadFromUrlInstaller.java @@ -122,7 +122,7 @@ public abstract class DownloadFromUrlInstaller extends ToolInstaller { } protected Downloadable createDownloadable() { - return new Downloadable(getId()); + return new Downloadable(getDownloadableId()); } /** @@ -130,7 +130,7 @@ public abstract class DownloadFromUrlInstaller extends ToolInstaller { *

* By default we use the fully-qualified class name of the {@link DownloadFromUrlInstaller} subtype. */ - public String getId() { + public String getDownloadableId() { return clazz.getName().replace('$','.'); } @@ -144,7 +144,7 @@ public abstract class DownloadFromUrlInstaller extends ToolInstaller { * @return never null. */ public List getInstallables() throws IOException { - JSONObject d = Downloadable.get(getId()).getData(); + JSONObject d = Downloadable.get(getDownloadableId()).getData(); if(d==null) return Collections.emptyList(); return Arrays.asList(((InstallableList)JSONObject.toBean(d,InstallableList.class)).list); } diff --git a/core/src/main/resources/lib/form/class-entry.jelly b/core/src/main/resources/lib/form/class-entry.jelly index 371f5137d8ee2c9cb29688ea4f5db8e460b5ad48..89a1076798b4b5f538fdbaa5e40bdfb372af76ea 100644 --- a/core/src/main/resources/lib/form/class-entry.jelly +++ b/core/src/main/resources/lib/form/class-entry.jelly @@ -36,11 +36,15 @@ THE SOFTWARE. - - - - - - + + + + + + + + + +