Skip to content

Commit 3c02f08

Browse files
committed
[JENKINS-46257] Use ancestor context for RunParameter autocomplete
1 parent 396f78b commit 3c02f08

File tree

2 files changed

+23
-2
lines changed

2 files changed

+23
-2
lines changed

core/src/main/java/hudson/model/RunParameterDefinition.java

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@
3535
import jenkins.model.Jenkins;
3636
import net.sf.json.JSONObject;
3737
import org.jenkinsci.Symbol;
38+
import org.kohsuke.stapler.AncestorInPath;
3839
import org.kohsuke.stapler.DataBoundConstructor;
3940
import org.kohsuke.stapler.QueryParameter;
4041
import org.kohsuke.stapler.Stapler;
@@ -154,8 +155,9 @@ public ParameterDefinition newInstance(StaplerRequest2 req, JSONObject formData)
154155
return req.bindJSON(RunParameterDefinition.class, formData);
155156
}
156157

157-
public AutoCompletionCandidates doAutoCompleteProjectName(@QueryParameter String value) {
158-
return AutoCompletionCandidates.ofJobNames(Job.class, value, null, Jenkins.get());
158+
public AutoCompletionCandidates doAutoCompleteProjectName(
159+
@QueryParameter String value, @AncestorInPath Item self, @AncestorInPath ItemGroup container) {
160+
return AutoCompletionCandidates.ofJobNames(Job.class, value, self, container);
159161
}
160162

161163
}

test/src/test/java/hudson/model/RunParameterDefinitionTest.java

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,9 @@
3232
import hudson.tasks.BuildStepMonitor;
3333
import hudson.tasks.Publisher;
3434
import hudson.util.LogTaskListener;
35+
import java.util.Arrays;
3536
import java.util.Set;
37+
import java.util.TreeSet;
3638
import java.util.logging.Level;
3739
import java.util.logging.Logger;
3840
import org.junit.jupiter.api.BeforeEach;
@@ -95,6 +97,19 @@ void inFolders() throws Exception {
9597
assertEquals("2", env.get("build_NUMBER"));
9698
}
9799

100+
@Issue("JENKINS-46257")
101+
@Test
102+
void autoCompleteProjectNameInFoldersUsesLocalContext() throws Exception {
103+
MockFolder folder = j.createFolder("folder");
104+
FreeStyleProject self = folder.createProject(FreeStyleProject.class, "self");
105+
folder.createProject(FreeStyleProject.class, "sibling");
106+
107+
RunParameterDefinition.DescriptorImpl descriptor = j.jenkins.getDescriptorByType(RunParameterDefinition.DescriptorImpl.class);
108+
AutoCompletionCandidates candidates = descriptor.doAutoCompleteProjectName("si", self, self.getParent());
109+
110+
assertContains(candidates, "sibling");
111+
}
112+
98113
@Test
99114
void testNULLFilter() throws Exception {
100115

@@ -301,4 +316,8 @@ public Descriptor<Publisher> getDescriptor() {
301316
return new Descriptor<>(ResultPublisher.class) {};
302317
}
303318
}
319+
320+
private void assertContains(AutoCompletionCandidates candidates, String... values) {
321+
assertEquals(new TreeSet<>(Arrays.asList(values)), new TreeSet<>(candidates.getValues()));
322+
}
304323
}

0 commit comments

Comments
 (0)