3232import org .slf4j .LoggerFactory ;
3333
3434import java .io .IOException ;
35+ import java .lang .reflect .Constructor ;
36+ import java .lang .reflect .InvocationTargetException ;
3537import java .util .Collection ;
38+ import java .util .HashSet ;
3639import java .util .List ;
40+ import java .util .Set ;
3741
3842import static com .cloudbees .jenkins .GitHubWebHook .getJenkinsInstance ;
3943import static com .google .common .base .Predicates .instanceOf ;
@@ -257,8 +261,9 @@ public int cancelQueuedBuildByPrNumber(final int id) {
257261 }
258262
259263 private QueueTaskFuture <?> startJob (GitHubPRCause cause ) {
260- List <ParameterValue > values = getDefaultParametersValues (job );
261- values .addAll (asList (
264+ ParametersAction parametersAction ;
265+ List <ParameterValue > parameters = getDefaultParametersValues (job );
266+ final List <ParameterValue > pluginParameters = asList (
262267 TRIGGER_SENDER_AUTHOR .param (cause .getTriggerSenderName ()),
263268 TRIGGER_SENDER_EMAIL .param (cause .getTriggerSenderEmail ()),
264269 COMMIT_AUTHOR_NAME .param (cause .getCommitAuthorName ()),
@@ -275,7 +280,21 @@ private QueueTaskFuture<?> startJob(GitHubPRCause cause) {
275280 CAUSE_SKIP .param (cause .isSkip ()),
276281 NUMBER .param (String .valueOf (cause .getNumber ())),
277282 STATE .param (String .valueOf (cause .getState ()))
278- ));
283+ );
284+ parameters .addAll (pluginParameters );
285+
286+ try {
287+ Constructor <ParametersAction > constructor = ParametersAction .class .getConstructor (List .class , Collection .class );
288+ Set <String > names = new HashSet <>();
289+ for (ParameterValue param : pluginParameters ) {
290+ names .add (param .getName ());
291+ }
292+ parametersAction = constructor .newInstance (parameters , names );
293+ } catch (NoSuchMethodException | IllegalAccessException | InstantiationException
294+ | InvocationTargetException ex ) {
295+ parametersAction = new ParametersAction (parameters );
296+ }
297+
279298 GitHubPRBadgeAction gitHubPRBadgeAction = new GitHubPRBadgeAction (cause );
280299
281300 ParameterizedJobMixIn parameterizedJobMixIn = asParameterizedJobMixIn (job );
@@ -290,8 +309,12 @@ private QueueTaskFuture<?> startJob(GitHubPRCause cause) {
290309 LOGGER .error ("Couldn't extract quiet period, falling back to {}" , quietPeriod , e );
291310 }
292311
293- return parameterizedJobMixIn .scheduleBuild2 (quietPeriod , new CauseAction (cause ), new ParametersAction (values ),
294- gitHubPRBadgeAction );
312+ return parameterizedJobMixIn .scheduleBuild2 (
313+ quietPeriod ,
314+ new CauseAction (cause ),
315+ parametersAction ,
316+ gitHubPRBadgeAction
317+ );
295318 }
296319
297320 protected static class CausesFromAction implements Function <Action , Iterable <Cause >> {
0 commit comments