--- old/src/java.desktop/share/classes/java/beans/XMLEncoder.java 2015-08-25 14:50:31.000000000 +0300 +++ new/src/java.desktop/share/classes/java/beans/XMLEncoder.java 2015-08-25 14:50:31.000000000 +0300 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2000, 2015, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -614,10 +614,12 @@ } if (isArgument && target instanceof Field && methodName.equals("get")) { - Field f = (Field)target; - writeln(""); - return; + Field f = (Field) target; + if (Modifier.isStatic(f.getModifiers())) { + writeln(""); + return; + } } Class primitiveType = primitiveTypeFor(value.getClass()); --- /dev/null 2015-08-25 14:50:32.000000000 +0300 +++ new/test/java/beans/XMLEncoder/ReferenceToNonStaticField.java 2015-08-25 14:50:31.000000000 +0300 @@ -0,0 +1,164 @@ +/* + * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +import java.awt.font.TextAttribute; + +/** + * @test + * @bug 8060027 + */ +public final class ReferenceToNonStaticField + extends AbstractTest { + + public static final class TestValue { + + // reference to static field + public TextAttribute font_default = TextAttribute.FONT; + public TextAttribute family_default = TextAttribute.FAMILY; + public TextAttribute family_set1; // will be set to the same as default + public TextAttribute family_set2; // will be set to the same as default + public TextAttribute family_set3; // will be set to the same as default + + // primitive small + public int int_1_default = 1; + public int int_10_default = 10; + public int int_10_set1; // will be set to the same as default + public int int_10_set2; // will be set to the same as default + public int int_10_set3; // will be set to the same as default + + // primitive big + public int int_1000_default = 1000; + public int int_2000_default = 2000; + public int int_2000_set1; // will be set to the same as default + public int int_2000_set2; // will be set to the same as default + public int int_2000_set3; // will be set to the same as default + + // wrappers + public Integer integer_1_default = new Integer(1); + public Integer integer_10_default = new Integer(10); + public Integer integer_10_set1; // will be set to the same as default + public Integer integer_10_set2; // will be set to the same as default + public Integer integer_10_set3; // will be set to the same as default + + public TestValue() { + } + + public TestValue(final Object ignored) { + // set some fields to non-default values, so they will be saved + family_set1 = family_default; + family_set3 = family_default; + family_set2 = family_default; + int_10_set1 = int_10_default; + int_10_set2 = int_10_default; + int_10_set3 = int_10_default; + int_2000_set1 = int_2000_default; + int_2000_set2 = int_2000_default; + int_2000_set3 = int_2000_default; + integer_10_set1 = integer_10_default; + integer_10_set2 = integer_10_default; + integer_10_set3 = integer_10_default; + } + } + + public static void main(final String[] args) { + new ReferenceToNonStaticField().test(true); + } + + protected TestValue getObject() { + return new TestValue(new Object()); + } + + @Override + protected void validate(final TestValue before,final TestValue after) { + super.validate(before, after); + validate(before); + validate(after); + } + + private static void validate(final TestValue object) { + // reference to static field + if (object.font_default != TextAttribute.FONT) { + throw new Error("Wrong font_default: " + object.font_default); + } + if (object.family_default != TextAttribute.FAMILY) { + throw new Error("Wrong family_default: " + object.family_default); + } + if (object.family_set1 != object.family_default) { + throw new Error("Wrong family_set1: " + object.family_set1); + } + if (object.family_set2 != object.family_default) { + throw new Error("Wrong family_set2: " + object.family_set2); + } + if (object.family_set3 != object.family_default) { + throw new Error("Wrong family_set3: " + object.family_set3); + } + // primitive small + if (object.int_1_default != 1) { + throw new Error("Wrong int_1_default: " + object.int_1_default); + } + if (object.int_10_default != 10) { + throw new Error("Wrong int_10_default: " + object.int_10_default); + } + if (object.int_10_set1 != object.int_10_default) { + throw new Error("Wrong int_10_set1: " + object.int_10_set1); + } + if (object.int_10_set2 != object.int_10_default) { + throw new Error("Wrong int_10_set2: " + object.int_10_set2); + } + if (object.int_10_set3 != object.int_10_default) { + throw new Error("Wrong int_10_set3: " + object.int_10_set3); + } + // primitive big + if (object.int_1000_default != 1000) { + throw new Error("Wrong int_1000_default: " + object.int_1000_default); + } + if (object.int_2000_default != 2000) { + throw new Error("Wrong int_2000_default: " + object.int_2000_default); + } + if (object.int_2000_set1 != object.int_2000_default) { + throw new Error("Wrong int_2000_set1: " + object.int_2000_set1); + } + if (object.int_2000_set2 != object.int_2000_default) { + throw new Error("Wrong int_2000_set2: " + object.int_2000_set2); + } + if (object.int_2000_set3 != object.int_2000_default) { + throw new Error("Wrong int_2000_set3: " + object.int_2000_set3); + } + // wrappers + if (!object.integer_1_default.equals(new Integer(1))) { + throw new Error("Wrong integer_1_default: " + object.integer_1_default); + } + if (!object.integer_10_default.equals(new Integer(10))) { + throw new Error("Wrong integer_10_default: " + object.integer_10_default); + } + if (object.integer_10_set1 != object.integer_10_default) { + throw new Error("Wrong integer_10_set1: " + object.integer_10_set1); + } + if (object.integer_10_set2 != object.integer_10_default) { + throw new Error("Wrong integer_10_set2: " + object.integer_10_set2); + } + if (object.integer_10_set3 != object.integer_10_default) { + throw new Error("Wrong integer_10_set3: " + object.integer_10_set3); + } + } +}