Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
PojavLauncherTeam
GitHub Repository: PojavLauncherTeam/openjdk-multiarch-jdk8u
Path: blob/aarch64-shenandoah-jdk8u272-b10/jdk/test/java/io/Serializable/evolution/AddedField/WriteAddedField.java
38889 views
1
/*
2
* Copyright (c) 1997, 1999, Oracle and/or its affiliates. All rights reserved.
3
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4
*
5
* This code is free software; you can redistribute it and/or modify it
6
* under the terms of the GNU General Public License version 2 only, as
7
* published by the Free Software Foundation.
8
*
9
* This code is distributed in the hope that it will be useful, but WITHOUT
10
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
12
* version 2 for more details (a copy is included in the LICENSE file that
13
* accompanied this code).
14
*
15
* You should have received a copy of the GNU General Public License version
16
* 2 along with this work; if not, write to the Free Software Foundation,
17
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
18
*
19
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
20
* or visit www.oracle.com if you need additional information or have any
21
* questions.
22
*/
23
24
/* @test
25
* @bug 4088176
26
* @summary Deserialize an evolved class with a new field, field type is new.
27
*
28
* @clean A B C NewExternField NewFieldClass ReadAddedField WriteAddedField
29
* @compile WriteAddedField.java
30
* @run main WriteAddedField
31
* @clean A B C NewExternField NewFieldClass ReadAddedField WriteAddedField
32
* @compile ReadAddedField.java
33
* @run main ReadAddedField
34
35
36
*/
37
import java.io.*;
38
39
class NewFieldClass implements Serializable {
40
int k;
41
42
NewFieldClass(int value) {
43
k = value;
44
}
45
};
46
47
class IncompatibleFieldClass implements Serializable {
48
private static long serialVersionUID = 3L;
49
int x = 5;
50
};
51
52
class NewExternFieldClass implements Externalizable {
53
byte l;
54
55
public NewExternFieldClass(int value) {
56
l = (byte)value;
57
}
58
59
public void readExternal(ObjectInput s)
60
throws IOException, ClassNotFoundException
61
{
62
l = s.readByte();
63
}
64
65
public void writeExternal(ObjectOutput s) throws IOException
66
{
67
s.writeByte(l);
68
}
69
}
70
71
class A implements Serializable {
72
// Version 1.1 of class A. Added superclass NewSerializableSuper.
73
private static final long serialVersionUID = 1L;
74
NewFieldClass foo;
75
NewFieldClass fooarray[];
76
IncompatibleFieldClass boo;
77
IncompatibleFieldClass booarray[];
78
/* Excluded due to Bug 4089540
79
NewExternFieldClass abc;
80
NewExternFieldClass farray[];
81
*/
82
int bar;
83
A() {
84
foo = new NewFieldClass(23);
85
fooarray = new NewFieldClass[24];
86
for (int i = 0; i < fooarray.length; i++)
87
fooarray[i] = new NewFieldClass(i);
88
boo = new IncompatibleFieldClass();
89
booarray = new IncompatibleFieldClass[24];
90
for (int i = 0; i < booarray.length; i++)
91
booarray[i] = new IncompatibleFieldClass();
92
bar = 4;
93
/* Excluded due to Bug 4089540
94
abc = new NewExternFieldClass(66);
95
farray = new NewExternFieldClass[10];
96
for (int k = 0; k < farray.length; k++)
97
farray[k] = new NewExternFieldClass(k);
98
*/
99
}
100
}
101
102
/** Test serial persistent fields w/o using Alternate API.
103
*/
104
class B implements Serializable {
105
private static final long serialVersionUID = 2L;
106
NewFieldClass foo;
107
NewFieldClass[] array;
108
IncompatibleFieldClass boo;
109
IncompatibleFieldClass booarray[];
110
transient NewExternFieldClass abc;
111
transient NewExternFieldClass farray[];
112
int bar;
113
114
B() {
115
foo = new NewFieldClass(12);
116
array = new NewFieldClass[12];
117
for (int i = 0; i < array.length; i++)
118
array[i] = new NewFieldClass(i);
119
bar = 4;
120
abc = new NewExternFieldClass(66);
121
farray = new NewExternFieldClass[10];
122
for (int k = 0; k < farray.length; k++)
123
farray[k] = new NewExternFieldClass(k);
124
}
125
}
126
127
/** Test serial persistent fields using Alternate API.
128
* Also make sure that optional data to non-existent classes can be skipped.
129
*/
130
class C implements Serializable {
131
private static final long serialVersionUID = 3L;
132
NewFieldClass foo;
133
NewFieldClass[] array;
134
int bar;
135
transient NewExternFieldClass abc;
136
transient NewExternFieldClass farray[];
137
138
C() {
139
foo = new NewFieldClass(12);
140
array = new NewFieldClass[12];
141
for (int i = 0; i < array.length; i++)
142
array[i] = new NewFieldClass(i);
143
bar = 4;
144
abc = new NewExternFieldClass(3);
145
farray = new NewExternFieldClass[10];
146
for (int k = 0; k < farray.length; k++)
147
farray[k] = new NewExternFieldClass(k);
148
}
149
150
private void readObject(ObjectInputStream s)
151
throws IOException, ClassNotFoundException
152
{
153
s.defaultReadObject();
154
/* Excluded due to Bug 4089540
155
abc = (NewExternFieldClass)fields.get("abc", null);
156
farray = (NewExternFieldClass[])fields.get("farray", null);
157
*/
158
159
/* read optional data */
160
NewFieldClass tmpfoo = (NewFieldClass)s.readObject();
161
NewFieldClass[] tmparray= (NewFieldClass[])s.readObject();
162
int tmpbar = s.readInt();
163
/* Excluded due to Bug 4089540
164
NewExternFieldClass tmpabc = (NewExternFieldClass)s.readObject();
165
NewExternFieldClass[] tmpfarray = (NewExternFieldClass[])s.readObject();
166
*/
167
}
168
169
private void writeObject(ObjectOutputStream s)
170
throws IOException
171
{
172
s.defaultWriteObject();
173
174
/* write optional data */
175
s.writeObject(foo);
176
s.writeObject(array);
177
s.writeInt(bar);
178
179
/* Excluded due to Bug 4089540
180
s.writeObject(abc);
181
s.writeObject(farray);
182
*/
183
}
184
}
185
186
187
public class WriteAddedField {
188
public static void main(String args[]) throws IOException {
189
A a = new A();
190
B b = new B();
191
C c = new C();
192
File f = new File("tmp.ser");
193
ObjectOutput out =
194
new ObjectOutputStream(new FileOutputStream(f));
195
out.writeObject(a);
196
out.writeObject(b);
197
out.writeObject(c);
198
a = new A();
199
b = new B();
200
c = new C();
201
out.writeObject(a);
202
out.writeObject(b);
203
out.writeObject(c);
204
out.close();
205
}
206
}
207
208