Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
  /* Copyright (c) 2008, Nathan Sweet
   * All rights reserved.
   * 
   * 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 Esoteric Software 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 HOLDER 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.esotericsoftware.kryo.serializers;
 
 import static com.esotericsoftware.minlog.Log.TRACE;
 import static com.esotericsoftware.minlog.Log.trace;
 
Defer generation of serializers until it is really required at run-time. By default, use reflection-based approach.

Author(s):
Nathan Sweet <misc@n4te.com>
Roman Levenstein <romixlev@gmail.com>
 
 class ObjectField extends CachedField {
 	public Class[] generics;
 	final Class type;
 	final Kryo kryo;
 
 	ObjectField (FieldSerializer fieldSerializer) {
 		this. = fieldSerializer;
 		this. = fieldSerializer.kryo;
 		this. = fieldSerializer.type;
 	}
 
 		return .get(object);
 	}
 
 	public void setField (Object objectObject valuethrows IllegalArgumentExceptionIllegalAccessException {
 		.set(objectvalue);
 	}
 
 	 public void write (Output outputObject object) {
 		try {
 			// if(typeVar2concreteClass != null) {
 			// // Push a new scope for generics
 			// kryo.pushGenericsScope(type, new Generics(typeVar2concreteClass));
 			// }
 
 			if ()
 				trace("kryo""Write field: " + this + " (" + object.getClass().getName() + ")" + " pos=" + output.position());
 
 			Object value = getField(object);
 
 			Serializer serializer = this.;
 			if ( == null) {
 				// The concrete type of the field is unknown, write the class first.
 				if (value == null) {
 					.writeClass(outputnull);
 					return;
 				}
 				Registration registration = .writeClass(outputvalue.getClass());
 				if (serializer == nullserializer = registration.getSerializer();
 				// if (generics != null)
 				serializer.setGenerics();
 				.writeObject(outputvalueserializer);
 			} else {
 				// The concrete type of the field is known, always use the same serializer.
 				if (serializer == nullthis. = serializer = .getSerializer();
 				// if (generics != null)
 				serializer.setGenerics();
 				if () {
 					.writeObjectOrNull(outputvalueserializer);
 				} else {
 					if (value == null) {
 						throw new KryoException("Field value is null but canBeNull is false: " + this + " (" + object.getClass().getName() + ")");
 					}
 					.writeObject(outputvalueserializer);
 				}
 			}
 		} catch (IllegalAccessException ex) {
 			throw new KryoException("Error accessing field: " + this + " (" + object.getClass().getName() + ")"ex);
 		} catch (KryoException ex) {
 			ex.addTrace(this + " (" + object.getClass().getName() + ")");
 			throw ex;
catch (RuntimeException runtimeEx) {
			KryoException ex = new KryoException(runtimeEx);
			ex.addTrace(this + " (" + object.getClass().getName() + ")");
			throw ex;
finally {
			// if(typeVar2concreteClass != null)
			// kryo.popGenericsScope();
		}
	}
	public void read (Input inputObject object) {
		try {
			if (trace("kryo""Read field: " + this + " (" + .getName() + ")" + " pos=" + input.position());
			Object value;
			Class concreteType = ;
			Serializer serializer = this.;
			if (concreteType == null) {
				Registration registration = .readClass(input);
				if (registration == null)
					value = null;
				else {
					if (serializer == nullserializer = registration.getSerializer();
					// if (generics != null)
					serializer.setGenerics();
					value = .readObject(inputregistration.getType(), serializer);
				}
else {
				if (serializer == nullthis. = serializer = .getSerializer();
				// if (generics != null)
				serializer.setGenerics();
					value = .readObjectOrNull(inputconcreteTypeserializer);
				else
					value = .readObject(inputconcreteTypeserializer);
			}
			setField(objectvalue);
catch (IllegalAccessException ex) {
			throw new KryoException("Error accessing field: " + this + " (" + .getName() + ")"ex);
catch (KryoException ex) {
			ex.addTrace(this + " (" + .getName() + ")");
			throw ex;
catch (RuntimeException runtimeEx) {
			KryoException ex = new KryoException(runtimeEx);
			ex.addTrace(this + " (" + .getName() + ")");
			throw ex;
finally {
			// if(typeVar2concreteClass != null)
			// kryo.popGenericsScope();
		}
	}
	public void copy (Object originalObject copy) {
		try {
			if ( != -1) {
				access.set(copy.copy(access.get(original)));
else
				setField(copy.copy(getField(original)));
catch (IllegalAccessException ex) {
			throw new KryoException("Error accessing field: " + this + " (" + .getName() + ")"ex);
catch (KryoException ex) {
			ex.addTrace(this + " (" + .getName() + ")");
			throw ex;
catch (RuntimeException runtimeEx) {
			KryoException ex = new KryoException(runtimeEx);
			ex.addTrace(this + " (" + .getName() + ")");
			throw ex;
		}
	}
	final static class ObjectIntField extends ObjectField {
		public ObjectIntField (FieldSerializer fieldSerializer) {
			super(fieldSerializer);
		}
			return .getInt(object);
		}
		public void write (Output outputObject object) {
			try {
					output.writeInt(.getInt(object), false);
				else
					output.writeInt(.getInt(object));
catch (Exception e) {
				ex.addTrace(this + " (" + .getName() + ")");
				throw ex;
			}
		}
		public void read (Input inputObject object) {
			try {
					.setInt(objectinput.readInt(false));
				else
					.setInt(objectinput.readInt());
catch (Exception e) {
				ex.addTrace(this + " (" + .getName() + ")");
				throw ex;
			}
		}
		public void copy (Object originalObject copy) {
			try {
				.setInt(copy.getInt(original));
catch (Exception e) {
				ex.addTrace(this + " (" + .getName() + ")");
				throw ex;
			}
		}
	}
	final static class ObjectFloatField extends ObjectField {
		public ObjectFloatField (FieldSerializer fieldSerializer) {
			super(fieldSerializer);
		}
			return .getFloat(object);
		}
		public void write (Output outputObject object) {
			try {
				output.writeFloat(.getFloat(object));
catch (Exception e) {
				ex.addTrace(this + " (" + .getName() + ")");
				throw ex;
			}
		}
		public void read (Input inputObject object) {
			try {
				.setFloat(objectinput.readFloat());
catch (Exception e) {
				ex.addTrace(this + " (" + .getName() + ")");
				throw ex;
			}
		}
		public void copy (Object originalObject copy) {
			try {
				.setFloat(copy.getFloat(original));
catch (Exception e) {
				ex.addTrace(this + " (" + .getName() + ")");
				throw ex;
			}
		}
	}
	final static class ObjectShortField extends ObjectField {
		public ObjectShortField (FieldSerializer fieldSerializer) {
			super(fieldSerializer);
		}
			return .getShort(object);
		}
		public void write (Output outputObject object) {
			try {
				output.writeShort(.getShort(object));
catch (Exception e) {
				ex.addTrace(this + " (" + .getName() + ")");
				throw ex;
			}
		}
		public void read (Input inputObject object) {
			try {
				.setShort(objectinput.readShort());
catch (Exception e) {
				ex.addTrace(this + " (" + .getName() + ")");
				throw ex;
			}
		}
		public void copy (Object originalObject copy) {
			try {
				.setShort(copy.getShort(original));
catch (Exception e) {
				ex.addTrace(this + " (" + .getName() + ")");
				throw ex;
			}
		}
	}
	final static class ObjectByteField extends ObjectField {
		public ObjectByteField (FieldSerializer fieldSerializer) {
			super(fieldSerializer);
		}
			return .getByte(object);
		}
		public void write (Output outputObject object) {
			try {
				output.writeByte(.getByte(object));
catch (Exception e) {
				ex.addTrace(this + " (" + .getName() + ")");
				throw ex;
			}
		}
		public void read (Input inputObject object) {
			try {
				.setByte(objectinput.readByte());
catch (Exception e) {
				ex.addTrace(this + " (" + .getName() + ")");
				throw ex;
			}
		}
		public void copy (Object originalObject copy) {
			try {
				.setByte(copy.getByte(original));
catch (Exception e) {
				ex.addTrace(this + " (" + .getName() + ")");
				throw ex;
			}
		}
	}
	final static class ObjectBooleanField extends ObjectField {
		public ObjectBooleanField (FieldSerializer fieldSerializer) {
			super(fieldSerializer);
		}
			return .getBoolean(object);
		}
		public void write (Output outputObject object) {
			try {
				output.writeBoolean(.getBoolean(object));
catch (Exception e) {
				ex.addTrace(this + " (" + .getName() + ")");
				throw ex;
			}
		}
		public void read (Input inputObject object) {
			try {
				.setBoolean(objectinput.readBoolean());
catch (Exception e) {
				ex.addTrace(this + " (" + .getName() + ")");
				throw ex;
			}
		}
		public void copy (Object originalObject copy) {
			try {
				.setBoolean(copy.getBoolean(original));
catch (Exception e) {
				ex.addTrace(this + " (" + .getName() + ")");
				throw ex;
			}
		}
	}
	final static class ObjectCharField extends ObjectField {
		public ObjectCharField (FieldSerializer fieldSerializer) {
			super(fieldSerializer);
		}
			return .getChar(object);
		}
		public void write (Output outputObject object) {
			try {
				output.writeChar(.getChar(object));
catch (Exception e) {
				ex.addTrace(this + " (" + .getName() + ")");
				throw ex;
			}
		}
		public void read (Input inputObject object) {
			try {
				.setChar(objectinput.readChar());
catch (Exception e) {
				ex.addTrace(this + " (" + .getName() + ")");
				throw ex;
			}
		}
		public void copy (Object originalObject copy) {
			try {
				.setChar(copy.getChar(original));
catch (Exception e) {
				ex.addTrace(this + " (" + .getName() + ")");
				throw ex;
			}
		}
	}
	final static class ObjectLongField extends ObjectField {
		public ObjectLongField (FieldSerializer fieldSerializer) {
			super(fieldSerializer);
		}
			return .getLong(object);
		}
		public void write (Output outputObject object) {
			try {
					output.writeLong(.getLong(object), false);
				else
					output.writeLong(.getLong(object));
catch (Exception e) {
				ex.addTrace(this + " (" + .getName() + ")");
				throw ex;
			}
		}
		public void read (Input inputObject object) {
			try {
					.setLong(objectinput.readLong(false));
				else
					.setLong(objectinput.readLong());
catch (Exception e) {
				ex.addTrace(this + " (" + .getName() + ")");
				throw ex;
			}
		}
		public void copy (Object originalObject copy) {
			try {
				.setLong(copy.getLong(original));
catch (Exception e) {
				ex.addTrace(this + " (" + .getName() + ")");
				throw ex;
			}
		}
	}
	final static class ObjectDoubleField extends ObjectField {
		public ObjectDoubleField (FieldSerializer fieldSerializer) {
			super(fieldSerializer);
		}
			return .getDouble(object);
		}
		public void write (Output outputObject object) {
			try {
				output.writeDouble(.getDouble(object));
catch (Exception e) {
				ex.addTrace(this + " (" + .getName() + ")");
				throw ex;
			}
		}
		public void read (Input inputObject object) {
			try {
				.setDouble(objectinput.readDouble());
catch (Exception e) {
				ex.addTrace(this + " (" + .getName() + ")");
				throw ex;
			}
		}
		public void copy (Object originalObject copy) {
			try {
				.setDouble(copy.getDouble(original));
catch (Exception e) {
				ex.addTrace(this + " (" + .getName() + ")");
				throw ex;
			}
		}
	}
New to GrepCode? Check out our FAQ X