--- a/jdk/src/share/classes/java/beans/MetaData.java Mon May 20 15:26:42 2013 +0400
+++ b/jdk/src/share/classes/java/beans/MetaData.java Mon May 20 19:49:20 2013 +0400
@@ -42,6 +42,7 @@
import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
+import java.lang.reflect.Modifier;
import java.lang.reflect.InvocationTargetException;
import java.security.AccessController;
@@ -56,7 +57,7 @@
import sun.swing.PrintColorUIResource;
-import java.util.Objects;
+import static sun.reflect.misc.ReflectUtil.isPackageAccessible;
/*
* Like the <code>Intropector</code>, the <code>MetaData</code> class
@@ -850,13 +851,15 @@
static class StaticFieldsPersistenceDelegate extends PersistenceDelegate {
protected void installFields(Encoder out, Class<?> cls) {
- Field fields[] = cls.getFields();
- for(int i = 0; i < fields.length; i++) {
- Field field = fields[i];
- // Don't install primitives, their identity will not be preserved
- // by wrapping.
- if (Object.class.isAssignableFrom(field.getType())) {
- out.writeExpression(new Expression(field, "get", new Object[]{null}));
+ if (Modifier.isPublic(cls.getModifiers()) && isPackageAccessible(cls)) {
+ Field fields[] = cls.getFields();
+ for(int i = 0; i < fields.length; i++) {
+ Field field = fields[i];
+ // Don't install primitives, their identity will not be preserved
+ // by wrapping.
+ if (Object.class.isAssignableFrom(field.getType())) {
+ out.writeExpression(new Expression(field, "get", new Object[]{null}));
+ }
}
}
}