diff options
author | Jeff Davidson <jpd@google.com> | 2015-04-06 16:57:27 +0000 |
---|---|---|
committer | Android Git Automerger <android-git-automerger@android.com> | 2015-04-06 16:57:27 +0000 |
commit | eff5d5b33b3ef8b655ce43e9f64578a8c8e4e482 (patch) | |
tree | f8b252def86c4bd71be3454b2542f72b9cd2a416 /java/src/device/main/java/com/google/protobuf/nano/android/ParcelableMessageNanoCreator.java | |
parent | aba240b005645cc557b21cff484928c3024b0fc3 (diff) | |
parent | 1d4b8b9fc9950152a1b235dfc83cf613a3b18ca4 (diff) | |
download | external_protobuf-eff5d5b33b3ef8b655ce43e9f64578a8c8e4e482.zip external_protobuf-eff5d5b33b3ef8b655ce43e9f64578a8c8e4e482.tar.gz external_protobuf-eff5d5b33b3ef8b655ce43e9f64578a8c8e4e482.tar.bz2 |
am 1d4b8b9f: am ff882b40: Merge "Generate a CREATOR for each Parcelable message."
* commit '1d4b8b9fc9950152a1b235dfc83cf613a3b18ca4':
Generate a CREATOR for each Parcelable message.
Diffstat (limited to 'java/src/device/main/java/com/google/protobuf/nano/android/ParcelableMessageNanoCreator.java')
-rw-r--r-- | java/src/device/main/java/com/google/protobuf/nano/android/ParcelableMessageNanoCreator.java | 89 |
1 files changed, 89 insertions, 0 deletions
diff --git a/java/src/device/main/java/com/google/protobuf/nano/android/ParcelableMessageNanoCreator.java b/java/src/device/main/java/com/google/protobuf/nano/android/ParcelableMessageNanoCreator.java new file mode 100644 index 0000000..5a4b70c --- /dev/null +++ b/java/src/device/main/java/com/google/protobuf/nano/android/ParcelableMessageNanoCreator.java @@ -0,0 +1,89 @@ +// Protocol Buffers - Google's data interchange format +// Copyright 2015 Google Inc. All rights reserved. +// http://code.google.com/p/protobuf/ +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +package com.google.protobuf.nano.android; + +import android.os.Parcel; +import android.os.Parcelable; +import android.util.Log; + +import com.google.protobuf.nano.InvalidProtocolBufferNanoException; +import com.google.protobuf.nano.MessageNano; + +import java.lang.reflect.Array; + +public final class ParcelableMessageNanoCreator<T extends MessageNano> + implements Parcelable.Creator<T> { + private static final String TAG = "PMNCreator"; + + private final Class<T> mClazz; + + public ParcelableMessageNanoCreator(Class<T> clazz) { + mClazz = clazz; + } + + @SuppressWarnings("unchecked") + @Override + public T createFromParcel(Parcel in) { + String className = in.readString(); + byte[] data = in.createByteArray(); + + T proto = null; + + try { + Class<?> clazz = Class.forName(className); + Object instance = clazz.newInstance(); + proto = (T) instance; + MessageNano.mergeFrom(proto, data); + } catch (ClassNotFoundException e) { + Log.e(TAG, "Exception trying to create proto from parcel", e); + } catch (IllegalAccessException e) { + Log.e(TAG, "Exception trying to create proto from parcel", e); + } catch (InstantiationException e) { + Log.e(TAG, "Exception trying to create proto from parcel", e); + } catch (InvalidProtocolBufferNanoException e) { + Log.e(TAG, "Exception trying to create proto from parcel", e); + } + + return proto; + } + + @SuppressWarnings("unchecked") + @Override + public T[] newArray(int i) { + return (T[]) Array.newInstance(mClazz, i); + } + + static <T extends MessageNano> void writeToParcel(Class<T> clazz, MessageNano message, + Parcel out) { + out.writeString(clazz.getName()); + out.writeByteArray(MessageNano.toByteArray(message)); + } +} |