3737import java .util .ArrayList ;
3838import java .util .Arrays ;
3939import java .util .HashSet ;
40+ import java .util .LinkedHashMap ;
4041import java .util .List ;
42+ import java .util .Map ;
4143import java .util .Objects ;
4244import java .util .Set ;
4345import jenkins .model .Jenkins ;
@@ -166,7 +168,8 @@ public static class UpstreamCause extends Cause {
166168 */
167169 @ Deprecated
168170 private transient Cause upstreamCause ;
169- private @ NonNull List <Cause > upstreamCauses ;
171+ private transient @ NonNull List <Cause > upstreamCauses ;
172+ private @ NonNull Map <Cause , Integer > causeBag = new LinkedHashMap <>();
170173
171174 /**
172175 * @deprecated since 2009-02-28
@@ -181,7 +184,6 @@ public UpstreamCause(Run<?, ?> up) {
181184 upstreamBuild = up .getNumber ();
182185 upstreamProject = up .getParent ().getFullName ();
183186 upstreamUrl = up .getParent ().getUrl ();
184- upstreamCauses = new ArrayList <>();
185187 Set <String > traversed = new HashSet <>();
186188 for (Cause c : up .getCauses ()) {
187189 if (traversed .size () >= MAX_LEAF ) {
@@ -192,11 +194,11 @@ public UpstreamCause(Run<?, ?> up) {
192194 }
193195 }
194196
195- private UpstreamCause (String upstreamProject , int upstreamBuild , String upstreamUrl , @ NonNull List <Cause > upstreamCauses ) {
197+ private UpstreamCause (String upstreamProject , int upstreamBuild , String upstreamUrl , @ NonNull Map <Cause , Integer > causeBag ) {
196198 this .upstreamProject = upstreamProject ;
197199 this .upstreamBuild = upstreamBuild ;
198200 this .upstreamUrl = upstreamUrl ;
199- this .upstreamCauses = upstreamCauses ;
201+ this .causeBag = causeBag ;
200202 }
201203
202204 @ Override
@@ -342,7 +344,10 @@ public static class ConverterImpl extends XStream2.PassthruConverter<UpstreamCau
342344
343345 @ Override protected void callback (UpstreamCause uc , UnmarshallingContext context ) {
344346 if (uc .upstreamCause != null ) {
345- uc .upstreamCauses .add (uc .upstreamCause );
347+ if (uc .causeBag == null ) {
348+ uc .causeBag = new LinkedHashMap <>();
349+ }
350+ uc .causeBag .put (uc .upstreamCause , uc .causeBag .size ());
346351 uc .upstreamCause = null ;
347352 OldDataMonitor .report (context , "1.288" );
348353 }
0 commit comments