1 /*
2 * Copyright (c) 2000, 2014, Oracle and/or its affiliates. All rights reserved.
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4 *
5 * This code is free software; you can redistribute it and/or modify it
6 * under the terms of the GNU General Public License version 2 only, as
7 * published by the Free Software Foundation. Oracle designates this
8 * particular file as subject to the "Classpath" exception as provided
9 * by Oracle in the LICENSE file that accompanied this code.
10 *
11 * This code is distributed in the hope that it will be useful, but WITHOUT
12 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
13 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
14 * version 2 for more details (a copy is included in the LICENSE file that
15 * accompanied this code).
16 *
17 * You should have received a copy of the GNU General Public License version
18 * 2 along with this work; if not, write to the Free Software Foundation,
19 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
20 *
21 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
22 * or visit www.oracle.com if you need additional information or have any
739 args = new Object[]{ch, onKeyRelease};
740 }
741 }
742 if (args == null) {
743 throw new IllegalStateException("Unsupported KeyStroke: " + key);
744 }
745 Class<?> type = key.getClass();
746 String name = type.getName();
747 // get short name of the class
748 int index = name.lastIndexOf('.') + 1;
749 if (index > 0) {
750 name = name.substring(index);
751 }
752 return new Expression( key, type, "get" + name, args );
753 }
754 }
755
756 static class StaticFieldsPersistenceDelegate extends PersistenceDelegate {
757 protected void installFields(Encoder out, Class<?> cls) {
758 if (Modifier.isPublic(cls.getModifiers()) && isPackageAccessible(cls)) {
759 Field fields[] = cls.getFields();
760 for(int i = 0; i < fields.length; i++) {
761 Field field = fields[i];
762 // Don't install primitives, their identity will not be preserved
763 // by wrapping.
764 if (Object.class.isAssignableFrom(field.getType())) {
765 out.writeExpression(new Expression(field, "get", new Object[]{null}));
766 }
767 }
768 }
769 }
770
771 protected Expression instantiate(Object oldInstance, Encoder out) {
772 throw new RuntimeException("Unrecognized instance: " + oldInstance);
773 }
774
775 public void writeObject(Object oldInstance, Encoder out) {
776 if (out.getAttribute(this) == null) {
777 out.setAttribute(this, Boolean.TRUE);
778 installFields(out, oldInstance.getClass());
779 }
|
1 /*
2 * Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved.
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4 *
5 * This code is free software; you can redistribute it and/or modify it
6 * under the terms of the GNU General Public License version 2 only, as
7 * published by the Free Software Foundation. Oracle designates this
8 * particular file as subject to the "Classpath" exception as provided
9 * by Oracle in the LICENSE file that accompanied this code.
10 *
11 * This code is distributed in the hope that it will be useful, but WITHOUT
12 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
13 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
14 * version 2 for more details (a copy is included in the LICENSE file that
15 * accompanied this code).
16 *
17 * You should have received a copy of the GNU General Public License version
18 * 2 along with this work; if not, write to the Free Software Foundation,
19 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
20 *
21 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
22 * or visit www.oracle.com if you need additional information or have any
739 args = new Object[]{ch, onKeyRelease};
740 }
741 }
742 if (args == null) {
743 throw new IllegalStateException("Unsupported KeyStroke: " + key);
744 }
745 Class<?> type = key.getClass();
746 String name = type.getName();
747 // get short name of the class
748 int index = name.lastIndexOf('.') + 1;
749 if (index > 0) {
750 name = name.substring(index);
751 }
752 return new Expression( key, type, "get" + name, args );
753 }
754 }
755
756 static class StaticFieldsPersistenceDelegate extends PersistenceDelegate {
757 protected void installFields(Encoder out, Class<?> cls) {
758 if (Modifier.isPublic(cls.getModifiers()) && isPackageAccessible(cls)) {
759 Field[] fields = cls.getFields();
760 for(int i = 0; i < fields.length; i++) {
761 Field field = fields[i];
762 // Don't install primitives, their identity will not be preserved
763 // by wrapping.
764 if (Object.class.isAssignableFrom(field.getType())) {
765 out.writeExpression(new Expression(field, "get", new Object[]{null}));
766 }
767 }
768 }
769 }
770
771 protected Expression instantiate(Object oldInstance, Encoder out) {
772 throw new RuntimeException("Unrecognized instance: " + oldInstance);
773 }
774
775 public void writeObject(Object oldInstance, Encoder out) {
776 if (out.getAttribute(this) == null) {
777 out.setAttribute(this, Boolean.TRUE);
778 installFields(out, oldInstance.getClass());
779 }
|