All class modificators allowed now during field handling

Signed-off-by: David Kral <david.k.kral@oracle.com>
diff --git a/src/main/java/org/eclipse/yasson/internal/model/PropertyValuePropagation.java b/src/main/java/org/eclipse/yasson/internal/model/PropertyValuePropagation.java
index ab711d8..77c4ab9 100644
--- a/src/main/java/org/eclipse/yasson/internal/model/PropertyValuePropagation.java
+++ b/src/main/java/org/eclipse/yasson/internal/model/PropertyValuePropagation.java
@@ -13,8 +13,6 @@
 
 package org.eclipse.yasson.internal.model;
 
-import org.eclipse.yasson.internal.JsonbContext;
-
 import javax.json.bind.config.PropertyVisibilityStrategy;
 import java.lang.reflect.AccessibleObject;
 import java.lang.reflect.Field;
@@ -22,7 +20,6 @@
 import java.lang.reflect.Modifier;
 import java.security.AccessController;
 import java.security.PrivilegedAction;
-import java.util.Optional;
 import java.util.function.Function;
 
 /**
@@ -119,15 +116,14 @@
         if (accessible && (
                 !Modifier.isPublic(field.getModifiers())
                         || field.getDeclaringClass().isAnonymousClass()
-                        || isClassPackagePrivate(field.getDeclaringClass()))) {
+                        || isNotPublicAndNonNested(field.getDeclaringClass()))) {
             overrideAccessible(field);
         }
         return accessible;
     }
 
-    private boolean isClassPackagePrivate(Class<?> declaringClass) {
-        int modifiers = declaringClass.getModifiers();
-        return !(Modifier.isPublic(modifiers) || Modifier.isProtected(modifiers) || Modifier.isPrivate(modifiers));
+    private boolean isNotPublicAndNonNested(Class<?> declaringClass) {
+        return !declaringClass.isMemberClass() && !Modifier.isPublic(declaringClass.getModifiers());
     }
 
     private boolean isMethodVisible(Field field, Method method) {
diff --git a/src/test/java/org/eclipse/yasson/defaultmapping/modifiers/ClassModifiersTest.java b/src/test/java/org/eclipse/yasson/defaultmapping/modifiers/ClassModifiersTest.java
new file mode 100644
index 0000000..bf2a7b4
--- /dev/null
+++ b/src/test/java/org/eclipse/yasson/defaultmapping/modifiers/ClassModifiersTest.java
@@ -0,0 +1,150 @@
+/*******************************************************************************
+ * Copyright (c) 2019 Oracle and/or its affiliates. All rights reserved.
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 and Eclipse Distribution License v. 1.0
+ * which accompanies this distribution.
+ * The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html
+ * and the Eclipse Distribution License is available at
+ * http://www.eclipse.org/org/documents/edl-v10.php.
+ *
+ * Contributors:
+ * David Kral
+ ******************************************************************************/
+
+package org.eclipse.yasson.defaultmapping.modifiers;
+
+import javax.json.bind.Jsonb;
+import javax.json.bind.JsonbBuilder;
+import javax.json.bind.JsonbException;
+
+import org.eclipse.yasson.defaultmapping.modifiers.model.ChildOfPackagePrivateParent;
+import org.eclipse.yasson.defaultmapping.modifiers.model.FieldModifiersClass;
+import org.junit.Before;
+import org.junit.Test;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNull;
+import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.fail;
+
+/**
+ * Test access modifiers on classes
+ *
+ * @author David Kral
+ */
+public class ClassModifiersTest {
+
+    private Jsonb jsonb;
+
+    @Before
+    public void before() {
+        jsonb = JsonbBuilder.create();
+    }
+
+    @Test
+    public void testPackagePrivateParent() {
+        ChildOfPackagePrivateParent child = new ChildOfPackagePrivateParent();
+        child.id = 1;
+        child.name = "SomeName";
+        String json = jsonb.toJson(child);
+        assertEquals("{\"id\":1,\"name\":\"SomeName\"}", json);
+        ChildOfPackagePrivateParent result = jsonb.fromJson(json, ChildOfPackagePrivateParent.class);
+        assertEquals(child.id, result.id);
+        assertEquals(child.name, result.name);
+    }
+
+
+    class NestedPackageParent {
+        public int id;
+    }
+
+    public class NestedPackageChild extends NestedPackageParent {
+        public String name;
+    }
+
+    @Test
+    public void testNestedPackagePrivateParent() {
+        NestedPackageChild child = new NestedPackageChild();
+        child.id = 1;
+        child.name = "SomeName";
+        try {
+            jsonb.toJson(child);
+            fail();
+        } catch (JsonbException ex) {
+            if (!(ex.getCause() instanceof IllegalAccessException)) {
+                fail();
+            }
+        }
+    }
+
+    private class NestedPrivateParent {
+        public int id;
+    }
+
+    public class NestedPrivateChild extends NestedPrivateParent {
+        public String name;
+    }
+
+    @Test
+    public void testNestedPrivateParent() {
+        NestedPrivateChild child = new NestedPrivateChild();
+        child.id = 1;
+        child.name = "SomeName";
+        try {
+            jsonb.toJson(child);
+            fail();
+        } catch (JsonbException ex) {
+            if (!(ex.getCause() instanceof IllegalAccessException)) {
+                fail();
+            }
+        }
+    }
+
+
+    static class NestedStaticPackageParent {
+        public int id;
+    }
+
+    public static class NestedStaticPackageChild extends NestedStaticPackageParent {
+        public String name;
+    }
+
+    @Test
+    public void testNestedStaticPackagePrivateParent() {
+        NestedStaticPackageChild child = new NestedStaticPackageChild();
+        child.id = 1;
+        child.name = "SomeName";
+        try {
+            jsonb.toJson(child);
+            fail();
+        } catch (JsonbException ex) {
+            if (!(ex.getCause() instanceof IllegalAccessException)) {
+                fail();
+            }
+        }
+    }
+
+    private static class NestedStaticPrivateParent {
+        public int id;
+    }
+
+    public static class NestedStaticPrivateChild extends NestedStaticPrivateParent {
+        public String name;
+    }
+
+    @Test
+    public void testNestedStaticPrivateParent() {
+        NestedStaticPrivateChild child = new NestedStaticPrivateChild();
+        child.id = 1;
+        child.name = "SomeName";
+        try {
+            jsonb.toJson(child);
+            fail();
+        } catch (JsonbException ex) {
+            if (!(ex.getCause() instanceof IllegalAccessException)) {
+                fail();
+            }
+        }
+    }
+
+}
diff --git a/src/test/java/org/eclipse/yasson/defaultmapping/modifiers/model/ChildOfPackagePrivateParent.java b/src/test/java/org/eclipse/yasson/defaultmapping/modifiers/model/ChildOfPackagePrivateParent.java
new file mode 100644
index 0000000..dd22945
--- /dev/null
+++ b/src/test/java/org/eclipse/yasson/defaultmapping/modifiers/model/ChildOfPackagePrivateParent.java
@@ -0,0 +1,23 @@
+/*******************************************************************************
+ * Copyright (c) 2019 Oracle and/or its affiliates. All rights reserved.
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 and Eclipse Distribution License v. 1.0
+ * which accompanies this distribution.
+ * The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html
+ * and the Eclipse Distribution License is available at
+ * http://www.eclipse.org/org/documents/edl-v10.php.
+ *
+ * Contributors:
+ * David Kral
+ ******************************************************************************/
+
+package org.eclipse.yasson.defaultmapping.modifiers.model;
+
+/**
+ * @author David Kral
+ */
+public class ChildOfPackagePrivateParent extends PackagePrivateParent {
+
+    public String name;
+
+}
diff --git a/src/test/java/org/eclipse/yasson/defaultmapping/modifiers/model/PackagePrivateParent.java b/src/test/java/org/eclipse/yasson/defaultmapping/modifiers/model/PackagePrivateParent.java
new file mode 100644
index 0000000..18d051c
--- /dev/null
+++ b/src/test/java/org/eclipse/yasson/defaultmapping/modifiers/model/PackagePrivateParent.java
@@ -0,0 +1,23 @@
+/*******************************************************************************
+ * Copyright (c) 2019 Oracle and/or its affiliates. All rights reserved.
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 and Eclipse Distribution License v. 1.0
+ * which accompanies this distribution.
+ * The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html
+ * and the Eclipse Distribution License is available at
+ * http://www.eclipse.org/org/documents/edl-v10.php.
+ *
+ * Contributors:
+ * David Kral
+ ******************************************************************************/
+
+package org.eclipse.yasson.defaultmapping.modifiers.model;
+
+/**
+ * @author David Kral
+ */
+class PackagePrivateParent {
+
+    public int id;
+
+}