Skip to content

Commit 72d3883

Browse files
authored
Merge pull request #802 from ngmr/refactor/improve-fvd-descriptors
refactor/improve fvd descriptors
2 parents 018ac21 + c1dc095 commit 72d3883

29 files changed

Lines changed: 351 additions & 795 deletions

yoko-rmi-impl/src/main/java/org/apache/yoko/rmi/impl/AbstractObjectDescriptor.java

Lines changed: 6 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -19,37 +19,23 @@
1919

2020
import org.omg.CORBA.ORB;
2121
import org.omg.CORBA.TypeCode;
22-
import org.omg.CORBA.portable.InputStream;
23-
import org.omg.CORBA.portable.OutputStream;
22+
import org.omg.CORBA_2_3.portable.InputStream;
23+
import org.omg.CORBA_2_3.portable.OutputStream;
2424

2525
import java.io.PrintWriter;
2626

2727
class AbstractObjectDescriptor extends ValueDescriptor {
28-
protected AbstractObjectDescriptor(Class type, TypeRepository repository) {
29-
super(type, repository);
28+
protected AbstractObjectDescriptor(Class<?> type, TypeRepository repository) {
29+
super(type, repository,
30+
in -> ((InputStream) in).read_abstract_interface(),
31+
(out, value) -> ((OutputStream) out).write_abstract_interface(value));
3032
}
3133

3234
@Override
3335
String genRepId() {
3436
return String.format("IDL:%s:1.0", getType().getName().replace('.', '/'));
3537
}
3638

37-
/** Read an instance of this value from a CDR stream */
38-
@Override
39-
public Object read(InputStream in) {
40-
org.omg.CORBA_2_3.portable.InputStream _in = (org.omg.CORBA_2_3.portable.InputStream) in;
41-
42-
return _in.read_abstract_interface();
43-
}
44-
45-
/** Write an instance of this value to a CDR stream */
46-
@Override
47-
public void write(OutputStream out, Object value) {
48-
org.omg.CORBA_2_3.portable.OutputStream _out = (org.omg.CORBA_2_3.portable.OutputStream) out;
49-
50-
_out.write_abstract_interface(value);
51-
}
52-
5339
@Override
5440
protected TypeCode genTypeCode() {
5541
ORB orb = ORB.init();

yoko-rmi-impl/src/main/java/org/apache/yoko/rmi/impl/AnyDescriptor.java

Lines changed: 1 addition & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -27,26 +27,14 @@
2727

2828
class AnyDescriptor extends TypeDescriptor {
2929
AnyDescriptor(Class<?> type, TypeRepository rep) {
30-
super(type, rep);
30+
super(type, rep, javax.rmi.CORBA.Util::readAny, javax.rmi.CORBA.Util::writeAny);
3131
}
3232

3333
@Override
3434
protected String genRepId() {
3535
return String.format("IDL:%s:1.0", getType().getName().replace('.', '/'));
3636
}
3737

38-
/** Read an instance of this value from a CDR stream */
39-
@Override
40-
public Object read(InputStream in) {
41-
return javax.rmi.CORBA.Util.readAny(in);
42-
}
43-
44-
/** Write an instance of this value to a CDR stream */
45-
@Override
46-
public void write(OutputStream out, Object val) {
47-
javax.rmi.CORBA.Util.writeAny(out, val);
48-
}
49-
5038
@Override
5139
protected TypeCode genTypeCode() {
5240
ORB orb = ORB.init();

yoko-rmi-impl/src/main/java/org/apache/yoko/rmi/impl/ArrayDescriptor.java

Lines changed: 16 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -47,8 +47,18 @@ abstract class ArrayDescriptor<ARR extends Serializable> extends ValueDescriptor
4747
final Class basicType;
4848
private final int order;
4949

50+
private static <ARR extends Serializable> WriteFn createWriter(Class<? extends ARR> type, TypeRepository rep) {
51+
return (out, value) -> {
52+
org.omg.CORBA_2_3.portable.OutputStream _out = (org.omg.CORBA_2_3.portable.OutputStream) out;
53+
String repositoryID = rep.getDescriptor(type).getRepositoryID();
54+
_out.write_value((Serializable)value, repositoryID);
55+
};
56+
}
57+
5058
protected ArrayDescriptor(Class<? extends ARR> type, Class elemType, TypeRepository rep) {
51-
super(type, rep);
59+
super(type, rep,
60+
in -> ((org.omg.CORBA_2_3.portable.InputStream) in).read_value(type),
61+
createWriter(type, rep));
5262
logger.fine(() -> "Creating an array descriptor for type " + type.getName() + " holding elements of " + elemType.getName());
5363
this.elementType = elemType;
5464

@@ -100,12 +110,12 @@ final String genIDLName() {
100110
StringBuffer sb = new StringBuffer("org_omg_boxedRMI_");
101111

102112
TypeDescriptor desc = repo.getDescriptor(basicType);
103-
104-
// The logic that looks for the last "_" fails when this is a
105-
// long_long primitive type. The primitive types have a "" package
106-
// name, so check those first. If it's not one of the primitives,
113+
114+
// The logic that looks for the last "_" fails when this is a
115+
// long_long primitive type. The primitive types have a "" package
116+
// name, so check those first. If it's not one of the primitives,
107117
// then we can safely split using the last index position.
108-
String pkgName = desc.getPackageName();
118+
String pkgName = desc.getPackageName();
109119
if (pkgName.length() == 0) {
110120
sb.append("seq");
111121
sb.append(order);
@@ -173,29 +183,6 @@ static ArrayDescriptor get(final Class type, TypeRepository rep) {
173183
}
174184
}
175185

176-
/**
177-
* Read an instance of this value from a CDR stream. Overridden to provide a
178-
* specific type
179-
*/
180-
@Override
181-
public Object read(InputStream in) {
182-
org.omg.CORBA_2_3.portable.InputStream _in = (org.omg.CORBA_2_3.portable.InputStream) in;
183-
logger.fine(() -> "Reading an array value with repository id " + getRepositoryID() + " java class is " + getType());
184-
185-
// if we have a resolved class, read using that, otherwise fall back on the
186-
// repository id.
187-
Class<?> type = getType();
188-
return ((null == type) ? _in.read_value(getRepositoryID()) : _in.read_value(type));
189-
}
190-
191-
/** Write an instance of this value to a CDR stream */
192-
@Override
193-
public void write(OutputStream out, Object value) {
194-
org.omg.CORBA_2_3.portable.OutputStream _out = (org.omg.CORBA_2_3.portable.OutputStream) out;
195-
196-
_out.write_value((Serializable)value, getRepositoryID());
197-
}
198-
199186
@Override
200187
protected List<ValueMember> genValueMembers() {
201188
final TypeDescriptor elemDesc = repo.getDescriptor(elementType);

yoko-rmi-impl/src/main/java/org/apache/yoko/rmi/impl/BooleanDescriptor.java

Lines changed: 0 additions & 34 deletions
This file was deleted.

yoko-rmi-impl/src/main/java/org/apache/yoko/rmi/impl/ByteDescriptor.java

Lines changed: 0 additions & 33 deletions
This file was deleted.

yoko-rmi-impl/src/main/java/org/apache/yoko/rmi/impl/CharDescriptor.java

Lines changed: 0 additions & 34 deletions
This file was deleted.

yoko-rmi-impl/src/main/java/org/apache/yoko/rmi/impl/DoubleDescriptor.java

Lines changed: 0 additions & 33 deletions
This file was deleted.

yoko-rmi-impl/src/main/java/org/apache/yoko/rmi/impl/EnumSubclassDescriptor.java

Lines changed: 22 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -20,10 +20,12 @@
2020
import java.io.IOException;
2121
import java.io.ObjectStreamField;
2222
import java.io.Serializable;
23+
import java.io.UncheckedIOException;
2324
import java.util.Map;
2425

26+
import static org.apache.yoko.util.Arrays.emptyArray;
27+
2528
class EnumSubclassDescriptor extends UncustomizableValueDescriptor {
26-
private static final ObjectStreamField[] SERIAL_PERSISTENT_FIELDS = {};
2729

2830
EnumSubclassDescriptor(Class<?> type, TypeRepository repository) {
2931
super(type, repository);
@@ -44,10 +46,23 @@ final long genSerialVersionUid() {
4446
protected final boolean isEnum() { return true; }
4547

4648
@Override
47-
@SuppressWarnings({"unchecked", "rawtypes"})
48-
protected Serializable readValue(ObjectReader reader, Serializable val) throws IOException {
49-
Map<String,Object> fields = getSuperDescriptor().readFields(reader);
50-
return Enum.valueOf((Class)getType(), (String)fields.get("name"));
49+
ValueReader genValueReader() {
50+
return genValueReader(this.getSuperDescriptor(), this.getType());
51+
}
52+
53+
static ValueReader genValueReader(ValueDescriptor superDesc, Class<?> type) {
54+
return (reader, ignored) -> readValue(superDesc, type, reader);
55+
}
56+
57+
private static Serializable readValue(ValueDescriptor superDesc, Class<?> type, ObjectReader reader) {
58+
try {
59+
Map<String, Object> fields = superDesc.readFields(reader);
60+
@SuppressWarnings({"unchecked", "rawtypes"})
61+
Serializable result = Enum.valueOf((Class)type, (String) fields.get("name"));
62+
return result;
63+
} catch (IOException e) {
64+
throw new UncheckedIOException(e);
65+
}
5166
}
5267

5368
@Override
@@ -65,6 +80,6 @@ public final boolean isChunked() {
6580
@Override
6681
ObjectStreamField[] findSerialPersistentFields() {
6782
// Enum subclasses have no fields of their own - they delegate to the parent enum
68-
return SERIAL_PERSISTENT_FIELDS;
83+
return emptyArray(ObjectStreamField.class);
6984
}
70-
}
85+
}

yoko-rmi-impl/src/main/java/org/apache/yoko/rmi/impl/FVDEnumDescriptor.java

Lines changed: 0 additions & 59 deletions
This file was deleted.

0 commit comments

Comments
 (0)