From 7768e923cc12f467ad7e5e32577bdd1a10a4d581 Mon Sep 17 00:00:00 2001 From: Robert Varga Date: Thu, 21 Mar 2019 09:12:13 +0100 Subject: [PATCH] Make QName use externalizable proxy pattern This patch disconnects QName serialization layout from its class hierarchy, allowing the two evolve separately. Change-Id: I1be13e02ed4eec537cb86f86e009ba058687f153 Signed-off-by: Robert Varga --- .../yangtools/yang/common/QName.java | 4 ++ .../yangtools/yang/common/QNv1.java | 48 +++++++++++++++++++ 2 files changed, 52 insertions(+) create mode 100644 yang/yang-common/src/main/java/org/opendaylight/yangtools/yang/common/QNv1.java diff --git a/yang/yang-common/src/main/java/org/opendaylight/yangtools/yang/common/QName.java b/yang/yang-common/src/main/java/org/opendaylight/yangtools/yang/common/QName.java index 08efa84115..2f6c2bf6c4 100644 --- a/yang/yang-common/src/main/java/org/opendaylight/yangtools/yang/common/QName.java +++ b/yang/yang-common/src/main/java/org/opendaylight/yangtools/yang/common/QName.java @@ -400,4 +400,8 @@ public final class QName implements Immutable, Serializable, Comparable, module.writeTo(out); out.writeUTF(localName); } + + Object writeReplace() { + return new QNv1(this); + } } diff --git a/yang/yang-common/src/main/java/org/opendaylight/yangtools/yang/common/QNv1.java b/yang/yang-common/src/main/java/org/opendaylight/yangtools/yang/common/QNv1.java new file mode 100644 index 0000000000..674087f396 --- /dev/null +++ b/yang/yang-common/src/main/java/org/opendaylight/yangtools/yang/common/QNv1.java @@ -0,0 +1,48 @@ +/* + * Copyright (c) 2019 PANTHEON.tech, s.r.o. and others. All rights reserved. + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License v1.0 which accompanies this distribution, + * and is available at http://www.eclipse.org/legal/epl-v10.html + */ +package org.opendaylight.yangtools.yang.common; + +import static com.google.common.base.Verify.verifyNotNull; +import static java.util.Objects.requireNonNull; + +import java.io.Externalizable; +import java.io.IOException; +import java.io.ObjectInput; +import java.io.ObjectOutput; + +/** + * Externalizable proxy for {@link QName}. + */ +final class QNv1 implements Externalizable { + private static final long serialVersionUID = 1L; + + private QName qname; + + @SuppressWarnings("checkstyle:redundantModifier") + public QNv1() { + // For Externalizable + } + + QNv1(final QName qname) { + this.qname = requireNonNull(qname); + } + + @Override + public void writeExternal(final ObjectOutput out) throws IOException { + qname.writeTo(out); + } + + @Override + public void readExternal(final ObjectInput in) throws IOException { + qname = QName.readFrom(in); + } + + Object readResolve() { + return verifyNotNull(qname); + } +} -- 2.36.6