|
15 | 15 | package org.eclipse.mat.parser.model;
|
16 | 16 |
|
17 | 17 | import java.io.IOException;
|
| 18 | +import java.io.ObjectInputStream; |
| 19 | +import java.io.ObjectOutputStream; |
18 | 20 | import java.io.Serializable;
|
19 | 21 | import java.util.ArrayList;
|
20 | 22 | import java.util.Arrays;
|
| 23 | +import java.util.Collection; |
21 | 24 | import java.util.Collections;
|
22 | 25 | import java.util.LinkedHashSet;
|
23 | 26 | import java.util.LinkedList;
|
@@ -69,7 +72,7 @@ public class ClassImpl extends AbstractObjectImpl implements IClass, Comparable<
|
69 | 72 | protected volatile long totalSize;
|
70 | 73 | protected boolean isArrayType;
|
71 | 74 |
|
72 |
| - private Set<IClass> subClasses; |
| 75 | + private Collection<IClass> subClasses; |
73 | 76 |
|
74 | 77 | private Serializable cacheEntry;
|
75 | 78 |
|
@@ -507,4 +510,31 @@ public void setSnapshot(ISnapshot dump)
|
507 | 510 | }
|
508 | 511 | }
|
509 | 512 |
|
| 513 | + private void writeObject(ObjectOutputStream out) throws IOException { |
| 514 | + // TODO intent is to remove this code at some point and simply use Set |
| 515 | + // For backwards compatibility serialize as List - https://github.com/eclipse-mat/mat/issues/89 |
| 516 | + final Collection<IClass> originalSubclasses = subClasses; |
| 517 | + try |
| 518 | + { |
| 519 | + if (originalSubclasses != null) |
| 520 | + { |
| 521 | + subClasses = new ArrayList<>(originalSubclasses); |
| 522 | + } |
| 523 | + out.defaultWriteObject(); |
| 524 | + } |
| 525 | + finally |
| 526 | + { |
| 527 | + subClasses = originalSubclasses; |
| 528 | + } |
| 529 | + } |
| 530 | + |
| 531 | + private void readObject(ObjectInputStream in) throws IOException, ClassNotFoundException { |
| 532 | + // For backwards compatibility serialize as List - https://github.com/eclipse-mat/mat/issues/89 |
| 533 | + in.defaultReadObject(); |
| 534 | + if (subClasses instanceof List) |
| 535 | + { |
| 536 | + subClasses = new LinkedHashSet<>(subClasses); |
| 537 | + } |
| 538 | + } |
| 539 | + |
510 | 540 | }
|
0 commit comments