# HG changeset patch # User coffeys # Date 1351715512 0 # Node ID e28f1929a4aa244fc3b9d5d31ad1bc03c20965df # Parent 104afef69da60ab398c2caffe7dcdd08c96c0bb2 8002068: Build broken: corba code changes unable to use new JDK 7 classes Reviewed-by: alanb, ahgross diff -r 104afef69da6 -r e28f1929a4aa src/share/classes/com/sun/corba/se/impl/io/ObjectStreamClass.java --- a/src/share/classes/com/sun/corba/se/impl/io/ObjectStreamClass.java Tue Feb 05 11:08:12 2013 +0000 +++ b/src/share/classes/com/sun/corba/se/impl/io/ObjectStreamClass.java Wed Oct 31 20:31:52 2012 +0000 @@ -56,6 +56,8 @@ import java.util.Arrays; import java.util.Comparator; +import java.util.concurrent.ConcurrentHashMap; +import java.util.concurrent.ConcurrentMap; import com.sun.corba.se.impl.util.RepositoryId; @@ -381,11 +383,23 @@ */ } - private static final class PersistentFieldsValue - extends ClassValue { + private static final class PersistentFieldsValue { + private final ConcurrentMap map = new ConcurrentHashMap(); + private static final Object NULL_VALUE = + (PersistentFieldsValue.class.getName() + ".NULL_VALUE"); + PersistentFieldsValue() { } - protected ObjectStreamField[] computeValue(Class type) { + ObjectStreamField[] get(Class type) { + Object value = map.get(type); + if (value == null) { + value = computeValue(type); + map.putIfAbsent(type, value); + } + return ((value == NULL_VALUE) ? null : (ObjectStreamField[])value); + } + + private static Object computeValue(Class type) { try { Field pf = type.getDeclaredField("serialPersistentFields"); int mods = pf.getModifiers(); @@ -396,14 +410,15 @@ (java.io.ObjectStreamField[])pf.get(type); return translateFields(fields); } - } catch (NoSuchFieldException | IllegalAccessException | - IllegalArgumentException | ClassCastException e) { - } - return null; + } catch (NoSuchFieldException e1) { + } catch (IllegalAccessException e2) { + } catch (IllegalArgumentException e3) { + } catch (ClassCastException e4) { } + return NULL_VALUE; } private static ObjectStreamField[] translateFields( - java.io.ObjectStreamField[] fields) { + java.io.ObjectStreamField[] fields) { ObjectStreamField[] translation = new ObjectStreamField[fields.length]; for (int i = 0; i < fields.length; i++) { @@ -449,7 +464,7 @@ * If it is declared, use the declared serialPersistentFields. * Otherwise, extract the fields from the class itself. */ - fields = persistentFieldsValue.get(cl); + fields = persistentFieldsValue.get(cl); if (fields == null) { /* Get all of the declared fields for this @@ -646,7 +661,6 @@ superclass = null; } - /* * Set the class this version descriptor matches. * The base class name and serializable hash must match.