From 901194ae77358b49016a32e6c97e74a70cbbb261 Mon Sep 17 00:00:00 2001 From: Nicolas De Loof Date: Fri, 6 Feb 2015 17:09:12 +0100 Subject: [PATCH] make $class and kind mutually exclusive Use kind when descriptor.id != descriptor.clazz.name and $clazz otherwise. --- core/src/main/java/hudson/model/Descriptor.java | 14 +++++++++++++- .../hudson/tools/DownloadFromUrlInstaller.java | 6 +++--- .../main/resources/lib/form/class-entry.jelly | 16 ++++++++++------ 3 files changed, 26 insertions(+), 10 deletions(-) diff --git a/core/src/main/java/hudson/model/Descriptor.java b/core/src/main/java/hudson/model/Descriptor.java index a043d6b2fa..e68517ce74 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 938325f668..418f7fd1e7 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 371f5137d8..89a1076798 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. - - - - - - + + + + + + + + + + -- GitLab